Назад | Перейти на главную страницу

Топология сети Docker Linux с использованием таблиц маршрутизации и arp

Я работаю с сетью докер-контейнеров. Таблица маршрутизации C1 ниже, это шлюз по умолчанию 172.17.0.1 это докер-бридж. Его интерфейс eth1 подключен к eth2 в C2, и он направляет все назначения с префиксом 192.1 на eth2 в C2.

Dest          Gateway       Genmask          Iface
default       172.17.0.1     0.0.0.0          eth0
192.1.0.0     0.0.0.0        255.255.0.0      eth1

Таблица маршрутизации C2 приведена ниже. Он подключен к C3 между eth3 на C2 и eth4 на C3.

Dest          Gateway       Genmask          Iface
192.1.2.0     192.1.2.1     255.255.254.0     eth3

Я могу пинговать C2 из C1, используя ping 192.1.1.2, однако я не могу пинговать C3 из C1, используя ping 192.1.2.2. Когда я пытаюсь проверить связь с C3, C1 отправляет ARP-запрос, ищущий Mac-адрес C3, который получает только C2, и терпит неудачу. Я могу успешно выполнить эхо-запрос на C3, если я вручную обновлю таблицу ARP C1 и дам ей Mac-адрес eth2 в C2 для 192.1.2.2.

Я полагаю, что я мог бы также выполнить эту работу, изменив таблицу маршрутов C1, чтобы она находилась в другой подсети, чем C3, и использовала C2 в качестве шлюза по умолчанию. Таким образом, он хочет, чтобы MAC-адрес C2 проверял связь с C3.

Dest          Gateway       Genmask          Iface
default       192.1.1.2      0.0.0.0          eth1
192.1.2.0     0.0.0.0        255.255.254.0    eth1

Однако меня заставили поверить, что можно будет отправить эхо-запрос C3 из C1, изменив только таблицу маршрутов C2. Это возможно?

Вы можете добиться этого с помощью proxy-arp функциональность. Когда proxy-arp включен на C2, он будет отвечать на запросы ARP собственным MAC-адресом в ответе ARP. Это то, что вам нужно.

Чтобы включить proxy arp на eth0 интерфейс C2, вам нужно запустить

sysctl -w net.ipv4.conf.eth2.proxy_arp=1

Для включения на всех интерфейсах выполните:

sysctl -w net.ipv4.conf.all.proxy_arp=1

Чтобы сделать это изменение постоянным, вы должны отредактировать файл настроек sysctl.