Linux bridge (brctl) отбрасывает пакеты

Я исследовал эту проблему в течение нескольких дней и пока не нашел ответа. Ваша помощь будет по достоинству оценена!

У меня есть несколько виртуальных машин (виртуальных машин), работающих на физическом сервере. Сервер использует Linux-мост (br100) для соединения этих виртуальных машин:

# brctl show
bridge name     bridge id               STP enabled     interfaces
br100           8000.984be15fe7e3       no              eth1.1729
                                                        vnet0
                                                        vnet1

vnet0 и vnet1 являются виртуальными сетевыми картами виртуальных машин.

br100 (физический сервер) назначен на IP 172.16.0.11. Виртуальная машина, подключенная к vnet1, назначена 172.16.0.3, а vnet0 - 172.16.0.5.

Все идет нормально. 172.16.0.3 может без проблем пропинговать 172.16.0.5.

Теперь я пытаюсь настроить 172.16.0.3 в качестве маршрутизатора (сервер openvpn, если это имеет значение) для подсети 10.8.0.0/16.

Вот моя проблема: машины в 10.8.0.0/16 (в данном случае 10.8.0.6) могут пропинговать 172.16.0.3, но не могут пропинговать 172.16.0.5.

(Я думаю) я исключил все очевидные причины: ip_forward включен, iptables сброшен и т. Д. Теперь я сузил причину до: br100 не пересылает пакеты, как должно!

Когда я пингую 172.16.0.5 с 10.8.0.6, пакеты были доставлены в vnet1 (VM 172.16.0.3) на физическом сервере:

# tcpdump -leni vnet1 icmp
tcpdump: WARNING: vnet1: no IPv4 address assigned
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on vnet1, link-type EN10MB (Ethernet), capture size 65535 bytes
07:45:03.858356 02:16:3e:6a:42:57 > 02:16:3e:02:40:82, ethertype IPv4 (0x0800), length 98: 
10.8.0.6 > 172.16.0.5: ICMP echo request, id 63242, seq 1046, length 64
07:45:04.858239 02:16:3e:6a:42:57 > 02:16:3e:02:40:82, ethertype IPv4 (0x0800), length 98:
10.8.0.6 > 172.16.0.5: ICMP echo request, id 63242, seq 1047, length 64
^C
2 packets captured
2 packets received by filter
0 packets dropped by kernel

Но не пересылаются в vnet0 (172.16.0.5):

# tcpdump -leni vnet0 icmp
tcpdump: WARNING: vnet0: no IPv4 address assigned
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on vnet0, link-type EN10MB (Ethernet), capture size 65535 bytes
^C
0 packets captured
0 packets received by filter
0 packets dropped by kernel

Я также следовал советам в этом посте и установил 0 в /proc/sys/net/bridge/bridge-nf-*, но это, похоже, не помогло.

В дополнение к очистке фильтров iptables я также включил TRACE в iptables, который показал, что эти пакеты никогда не попадают в iptables.

Любые другие причины, почему Linux Bridge не будет пересылать пакеты между портами?

1 ответ

Решение

Нашел ответ! Linux ethernet bridge консультируется с ebtables, чтобы решить, какие пакеты переслать, а какие отбросить. Промывка ebtables решила мою проблему.

Другие вопросы по тегам