4

Мне нужно пометить пакеты, которые идут на указанный Mac-адрес.

Мне нужно это использовать в Shaper с tc .

--mac-destination не существует в iptables .

Также я попытался использовать ebtables:

ebtables -t nat -A POSTROUTING -d 9c:4e:36:aa:bb:cc -j mark --set-mark 0x2003 --mark-target ACCEPT

но это ничего не помечает (по крайней мере, ebtables -t nat -L --Lc показывает мне 0 счетчиков)

Пожалуйста помоги! Спасибо вам большое!

2 ответа2

2

Хитрость заключается в том, чтобы объединить iptables --mac-source с CONNMARK:

  • Сначала используйте --mac-source для сопоставления пакетов, поступающих с интересующего вас MAC-адреса. Это неправильное направление, так как вы заинтересованы в пакетах, идущих на этот mac-адрес, но теперь вы можете
  • используйте CONNMARK чтобы отметить все соединение, то есть оба направления (!) а также
  • установить метку от метки соединения с помощью --restore-mark


# lan interface
if_lan=eth0

# create 'mark_mac' table for marking connections:
iptables -t mangle -N mark_mac
iptables -t mangle -A mark_mac -j MARK --set-mark 1234
iptables -t mangle -A mark_mac -j CONNMARK --save-mark

# mark connections involving mac address:
iptables -t mangle -A PREROUTING -i $if_lan -m state --state NEW -m mac --mac-source 9c:4e:36:aa:bb:cc -j mark_mac

# mark packets going to mac:
iptables -t mangle -A POSTROUTING -o $if_lan -m state --state ESTABLISHED,RELATED -j CONNMARK --restore-mark


Первоначально я думал, что это будет работать только для TCP-соединений, происходящих из локальной сети , но, учитывая определение --state NEW он должен работать в обоих направлениях как для TCP, так и для UDP (!).

См. Также Маршрутизация политик в Linux на основе MAC-адреса отправителя, которая послужила вдохновением для этого ответа.

-1

iptables работает на уровне OSI 3, поэтому он ничего не знает о MAC-адресах.

Фактически, у него есть модуль mac, который, однако, содержит только дополнительный фильтр --mac-source: это потому, что входящие пакеты Ethernet действительно несут MAC-адрес своего источника. Однако такой MAC-адрес не существует для пакетов, поступающих через Wi-Fi, и он не имеет отношения к исходящим пакетам. Ссылка выше гласит:

Обратите внимание, что это имеет смысл только для пакетов, поступающих с устройства Ethernet и входящих в цепочки PREROUTING, FORWARD или INPUT.

Что касается ebtables , прежде всего он может использоваться только с кадрами Ethernet, потому что кадры wifi пропускают один MAC-адрес. Во-вторых, MAC-адреса источника, как я уже говорил выше, не существуют в IP-пакетах.

Если бы вы хотели контролировать пакеты ARP, вы бы быстро узнали, что есть инструкция

arp-mac-dst [!] адрес [/ маска]

Спецификация (R)ARP MAC-адреса назначения

но, опять же, это becausethe протокола ARP действительно использует MAC - адрес, в отличии от протокола IP.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .