Пакеты не пересылаются с помощью linux bridge

371
M. Buil

У меня есть виртуальная машина (VM1) с одним интерфейсом (eth0). У VM1 есть один мост linux (br1), и к нему подключен интерфейс eth0. Через eth0 будут поступать пакеты с двумя разными диапазонами ip (192.168.122.0/24 и 10.10.10.0/24). На самом деле у br1 два ips:

  • 192.168.122.2/24
  • 10.10.10.1/24

Первый ip принадлежит сети mgmt, которая позволяет выходить в интернет через шлюз 192.168.122.1. Второй ip принадлежит виртуальной сети (10.10.10.0/24), где VM1 является шлюзом. Если я хочу получить доступ к Интернету с VM1, маршрут

по умолчанию через 192.168.122.1 dev br1

и это работает правильно.

Поскольку эта виртуальная машина является шлюзом, я создал правило «MASQUERADE» в iptables, чтобы пакеты с исходным IP-адресом 10.10.10.0/24 получали исходный IP-адрес VM1 для доступа в Интернет (192.168.122.2):

-A POSTROUTING -s 10.10.10.0/24 -j MASQUERADE

Однако что-то не работает хорошо. Когда я пытаюсь пропинговать 8.8.8.8 с другой виртуальной машины с IP:

  • 10.10.10.16

Вот что я вижу, когда выполняю tcpdump в br1:

08:56:19.498107 IP 10.10.10.16 > 8.8.8.8: ICMP echo request, id 58113, seq 0, length 64 08:56:19.498265 IP 192.168.122.2 > 8.8.8.8: ICMP echo request, id 58113, seq 0, length 64 08:56:19.509490 IP 8.8.8.8 > 10.10.10.16: ICMP echo reply, id 58113, seq 0, length 64 

И вот что я вижу, когда выполняю tcpdump в eth0:

08:57:19.331692 IP 10.10.10.16 > 8.8.8.8: ICMP echo request, id 58369, seq 0, length 64 08:57:19.331804 IP 192.168.122.2 > 8.8.8.8: ICMP echo request, id 58369, seq 0, length 64 08:57:19.343085 IP 8.8.8.8 > 192.168.122.2: ICMP echo reply, id 58369, seq 0, length 64 

В eth0 я вижу, что 'echo reply' идет к 192.168.122.2, а затем в br1, я вижу, что из-за MASQUERADE ip назначения изменился на 10.10.10.16. Тем не менее, я также должен увидеть этот пакет (источник: 8.8.8.8; пункт назначения 10.10.10.16) в eth0, так как он является интерфейсом для достижения 10.10.10.16, но его там нет. Мне кажется, что br1 не пересылает пакет на интерфейс eth0, почему это происходит?

1 - Обратите внимание, что если я пинг 10.10.10.16 с VM1, это работает:

09:01:54.502894 IP 10.10.10.1 > 10.10.10.16: ICMP echo request, id 26878, seq 1, length 64 09:01:54.503829 IP 10.10.10.16 > 10.10.10.1: ICMP echo reply, id 26878, seq 1, length 64 

2 - MAC-адрес 10.10.10.16 - fa: 16: 3e: 8c: 0d: 68, и я могу видеть его в таблице mac из br1:

 port no mac addr is local? ageing timer 2 52:54:00:33:82:d0 yes 0.00 2 52:54:00:33:82:d0 yes 0.00 2 52:54:00:bd:6b:e5 no 0.00 2 fa:16:3e:8c:0d:68 no 19.47 2 fe:54:00:33:82:d0 no 1.20 
0

0 ответов на вопрос