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-Н.Ф. кода, в том числе , как отключить все или некоторые из функциональных возможностей (т.е. не проходящее мост трафика IPTables).


Функциональность не работает на 4.4.0-22-generic (Ubuntu 16.04), даже после того, как я сделал echo "1" > /sys/devices/virtual/net/br0/bridge/nf_call_arptables. Есть идеи?
Арье Склярук

Отвечаю сам себе: # Загрузить br_netfilter modprobe br_netfilter # Добавить в правило цепочки BROUTING для пересылки всех пакетов ipv4 в iptables ebtables -t cerete -A BROUTING -p ipv4 -i br0 -j DROP
Арье Склярук


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.