Как пересылать пакеты с одного сетевого интерфейса через другой интерфейс

См. Рисунок ниже для архитектуры.

Знаю, что подобных вопросов очень много. Однако, прочитав несколько сообщений и попробовав некоторые из них, я все еще не могу настроить их должным образом. Итак, я публикую это как новый вопрос.

Сценарий:

  • У меня три контейнера (c1, c2 и c3)
  • У меня разные интерфейсы, каждый из которых работает в трех контейнерах (eth0 и peervpnXX).
  • c1 имеет интерфейсы: eth0 и peervpn12.
  • c2 имеет интерфейсы: eth0, peervpn12 и peervpn23.
  • c3 имеет интерфейсы: eth0 и peervpn23.

В то время как интерфейсы eth0 находятся в одной подсети, интерфейсы peervpnXX находятся в разных подсетях:

  • peervpn12 - 10.12.0.0/24
  • peervpn23 - 10.23.0.0/24

Обратите внимание, что интерфейсы peervpnXX - это туннельные интерфейсы, работающие поверх eth0

Теперь ip_addresses, назначенные каждому контейнеру, следующие:

  • c1: 172.17.0.2 (eth0) и 10.12.0.2 (peervpn12)
  • c2: 172.17.0.3 (eth0) и 10.12.0.1 (peervpn12) и 10.23.0.1 (peervpn23)
  • c3: 172.17.0.4 (eth0) и 10.23.0.2 (peervpn23)

Я пытаюсь разрешить c1 взаимодействовать с c3 через посредника c2. В принципе, я пытаюсь:

  • маршрутизировать пакеты, предназначенные для 10.23.0.0/24 от c1 к c3 через c2 .
  • маршрутизировать пакеты, предназначенные для 10.12.0.0/24 от c3 к c1 через c2 .

Я создал правило маршрутизации на c1 и c3 для отправки пакетов в подсети 10.23.0.0/24 и 10.12.0.0/24 < / strong> через интерфейсы peervpn12 и peervpn23. Однако мне кажется, что мне не хватает какого-то правила переадресации, которое нужно настроить на c2.

PS: Предположим, что интерфейс 'eth0' заблокирован и используется только как базовый интерфейс для маршрутизации пакетов интерфейса 'peervpnXX'

Мы будем благодарны за любую помощь в выяснении этого вопроса.
Заранее благодарю вас.

Шабир

Полная архитектура, описанная выше


person Shabirmean    schedule 11.09.2017    source источник


Ответы (1)


Удалось найти проблему.

При добавлении маршрута для контейнера в другой подсети я неправильно указал шлюз. шлюз по-прежнему указывает на хост-компьютер, на котором запущен докер (см. Рисунок выше). Поэтому я добавил правильное правило маршрутизации для двух конечных контейнеров - c1 & c3.

c1 - ip route add 10.23.0.0/24 via 10.12.0.1 dev peervpn12
c3 - ip route add 10.12.0.0/24 via 10.23.0.1 dev peervpn23

Тем временем пришлось добавить правильные правила FORWARD в iptables контейнера c2:

 iptables -A FORWARD -s 10.12.0.2 -i peervpn12 -d 10.23.0.2 -o peervpn23 -j ACCEPT
 iptables -A FORWARD -s 10.23.0.2 -i peervpn23 -d 10.12.0.2 -o peervpn12 -j ACCEPT

С такой настройкой я смог добиться ожидаемого потока.

Спасибо, и я не знаю, почему это отклонено.
Может быть, если я знаю причину, я смогу исправить себя в будущем :)

person Shabirmean    schedule 14.09.2017
comment
Если я установил цепочку iptables 'FORWARD на глобальное принятие, нужны ли мне последние два iptables -A FORWARD? - person SAMPro; 31.05.2020