Я встановив міст, br0
"прикріплений" до двох інтерфейсів:
eth0
, мій фізичний інтерфейс, підключений до реальної локальної мережі,vnet0
, віртуальний інтерфейс KVM (підключений до Windows VM).
І я маю це єдине правило брандмауера у прямому ланцюзі:
iptables -A FORWARD -j REJECT
Тепер єдиний ping, який працює, - від VM до хоста.
br0
Інтерфейс належить IP - адреса мого хоста. eth0
і vnet0
не "володіти" жодним IP-адресою з точки зору хоста. Windows VM має статичну конфігурацію IP.
Якщо змінити моє iptables
правило на ACCEPT
(або навіть використовувати більш обмежувальне iptables -A FORWARD -o br0 -j ACCEPT
), все працює нормально! (тобто я можу пінг будь-якої локальної машини з VM, і навпаки).
Усі параметри ядра переадресації IP відключені (як net.ipv4.ip_forward = 0
).
Отже, як може брандмауер Netfilter блокувати щось, що навіть не ввімкнено?
Крім того, трафік VM - LAN повинен передбачати лише eth0
та vnet0
. І все-таки виглядає так, щоб дозволити рух -o br0
" Вперед " з "роботами" (я не перевіряв дуже уважно).
sysctl -a | grep bridge-nf
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