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

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

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

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

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

iptables -A FORWARD -j REJECT

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

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

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

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

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

Более того, трафик VM - LAN должен подразумевать только eth0и vnet0. Тем не менее, похоже, что разрешение ПРЯМОГО трафика с -o br0"работает" (хотя я не очень внимательно проверял).

решение1

TheкомментарийСтефан Шазеля дает подсказку к ответу.

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

Начиная с версии ядра 2.6.1, их пятьзаписи sysctlдля поведенческого контроля моста-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- передавать трафик ARP/IP с тегами VLAN через мост в arptables/iptables.
  • net.bridge.bridge-nf-filter-pppoe-tagged- передавать трафик IP/IPv6 с тегом PPPoE в таблицы {ip,ip6}

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

# sysctl -w net.bridge.bridge-nf-call-iptables=0
# sysctl -w net.bridge.bridge-nf-call-ip6tables=0

Связанный контент