Почему мой брандмауэр (iptables) вмешивается в мой мост (brctl)?

11

Я установил мост, br0«привязанный» к двум интерфейсам:

  • eth0мой физический интерфейс подключен к реальной локальной сети,
  • vnet0виртуальный интерфейс KVM (подключен к виртуальной машине Windows).

И у меня есть это единственное правило брандмауэра в прямой цепочке:

iptables -A FORWARD -j REJECT

Теперь работает только один пинг - от виртуальной машины до хоста.

br0Интерфейс принадлежит IP - адрес моего хоста. eth0и vnet0не "владеть" никаким IP с точки зрения хоста. Виртуальная машина Windows имеет статическую IP-конфигурацию.

Если изменить мое iptablesправило ACCEPT(или даже использовать более строгие ограничения iptables -A FORWARD -o br0 -j ACCEPT), все работает нормально! (то есть я могу пропинговать любой компьютер локальной сети с виртуальной машины, и наоборот).

Все параметры ядра переадресации IP отключены (как net.ipv4.ip_forward = 0).

Итак, как брандмауэр netfilter может заблокировать то, что даже не включено?

Кроме того, трафик VM - LAN должен только подразумевать eth0и vnet0. Тем не менее, это похоже на то, что разрешить FORWARD трафик с -o br0«работами» (хотя я не очень тщательно проверял)

Totor
источник
Взгляните на мой A для этого U & L Q: Настройки при использовании моста
slm
1
Каков результатsysctl -a | grep bridge-nf
Стефан Шазелас
@ StéphaneChazelas net.bridge.bridge-nf-call-arptables = 1 net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-filter-vlan-tagged = 0 net.bridge.bridge-nf-filter-pppoe-tagged = 0
Тотор

Ответы:

10

Комментарий от Stéphane Chazelas дает намек на ответ.

В соответствии с часто задаваемыми вопросами Bridge-nf bridge-nf позволяет iptables, ip6tables или arptables видеть мостовой трафик.

Начиная с версии ядра 2.6.1, существует пять записей sysctl для контроля поведения bridge-nf:

  • bridge-nf-call-arptables - передать мостовой ARP-трафик в цепочку FORWARD arptables.
  • bridge-nf-call-iptables - передавать мостовой трафик IPv4 в цепочки iptables.
  • bridge-nf-call-ip6tables - передавать мостовой трафик IPv6 в цепочки ip6tables.
  • bridge-nf-filter-vlan-tagged - передать соединенный с метками vlan-трафик ARP / IP в arptables / iptables.
  • net.bridge.bridge-nf-filter-pppoe-tagged - передать связанный с pppoe-тегами трафик IP / IPv6 в таблицы {ip, ip6}

Вы можете отключить блокировку брандмауэра netfilter с помощью:

# sysctl -w net.bridge.bridge-nf-call-iptables=0
# sysctl -w net.bridge.bridge-nf-call-ip6tables=0
Матиас Вайднер
источник
4
Начиная с Linux 3.18, функциональность, в которой iptables обрабатывает пакеты с моста, может быть отключена без загрузки br_netfilterмодуля. Отсутствие загрузки модуля также означает, что /proc/sys/net/bridge/запись отсутствует .
Лекенштейн
А начиная с ядра Linux 5.3 эта функция становится для каждого пространства имен вместо глобальной.
AB