Iptables - ланцюг мосту і вперед


14

У мене встановлення Ethernet міст, br0який містить два інтерфейси eth0іtap0

brctl addbr br0
brctl addif eth0
brctl addif tap0
ifconfig eth0 0.0.0.0 promisc up
ifconfig tap0 0.0.0.0 promisc up
ifconfig br0 10.0.1.1 netmask 255.255.255.0 broadcast 10.0.1.255 

Моя FORWARDполітика ланцюга за замовчуванням такаDROP

iptables -P FORWARD DROP

Коли я не додаю наступне правило, трафік не проходить через міст.

iptables -A FORWARD -p all -i br0 -j ACCEPT

Наскільки я розумію iptables, відповідальний лише за IP-шар.

ebtables повинен відповідати за фільтрацію трафіку на мосту Ethernet.

То чому я повинен додати правило ACCEPT у ланцюжку FORWARD iptable?

Відповіді:


12

Через код br-nf, який доступний як патч до Linux 2.4 і використовується в linux 2.6:

Код br-nf змушує мостові IP-кадри / пакети проходити через ланцюги iptables. Ebtables фільтрує на шарі Ethernet, тоді як iptables фільтрує лише IP-пакети.

Оскільки трафік, який ви працюєте, є ip, iptablesправила все ще застосовуються через br-nf, який передає мостові пакети до iptables.

Це чудовий ресурс, який можна прочитати про взаємодію, і цей детально описує функціональність коду br-nf , включаючи, як відключити всі або деякі функції (тобто не передавати мостовий трафік iptables).


Функціонал не працює на 4.4.0-22-generic (ubuntu 16.04), навіть після того, як я це зробив echo "1" > /sys/devices/virtual/net/br0/bridge/nf_call_arptables. Будь-які ідеї?
Arie Skliarouk

Відповідаючи на себе: # Завантажте br_netfilter modprobe br_netfilter # Додати до ланцюгового правила BROUTING, щоб переслати всі ipv4 пакети на iptables ebtables -t broute -A BROUTING -p ipv4 -i br0 -j DROP
Arie Skliarouk


1

Якщо у вас немає необхідності використовувати iptables з мостом у вашій системі, ви можете назавжди відключити його, скориставшись одним із наведених нижче:

  1. Додавання правила iptables:

iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT

  1. Або редагування /etc/sysctl.conf:

net.bridge.bridge-nf-call-ip6tables = 0 net.bridge.bridge-nf-call-iptables = 0 net.bridge.bridge-nf-call-arptables = 0


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.