Настройка многоадресного маршрута через промежуточный переход

Настройка многоадресного маршрута через промежуточный переход

У меня есть хост с двумя контейнерами Docker (с NET_ADMINвозможностью):

  • backendс интерфейсом eth0( 172.16.7.3)
  • openvpn-serverс интерфейсами eth0( 172.16.7.2) и tun0( 10.8.0.1), работающим на сервере OpenVPN (режим tun)

На другой машине есть клиент OpenVPN openvpn-clientс интерфейсом tun0( 10.8.0.2). VPN работает.

Дополнительная настройка маршрута:

  • backendимеет маршруты 10.8.0.0/24 via 172.16.7.2и 224.0.0.0/4 via eth0.
  • openvpn-serverимеет маршруты 10.8.0.0/24 dev tun0и 224.0.0.0/4 dev tun0.

backendможет успешно выполнить ping openvpn-client(маршрутизация через openvpn-server): ping 10.8.0.2работает как часы.

Наблюдения:

Когда я запускаю ping -t3 239.1.2.3на openvpn-server, они проходят через VPN-туннель, и я вижу, как ICMP-пакеты поступают на openvpn-clienttcpdump -i tun0 net 224.0.0.0/4на openvpn-client).

Также, когда я запускаю ping -t3 239.1.2.3на backend, они выходят через этот хост eth0и входят в openvpn-server's eth0. Я могу видеть их при openvpn-serverиспользовании tcpdump -i eth0 net 224.0.0.0/4.

Проблема:

Я хотел бы иметь возможность работать ping -t3 239.1.2.3и backendпересылать пинги на openvpn-client, как если бы 10.8.0.2они были отправлены. (Конечная цель — многоадресная рассылка UDP-пакетов backendвсем VPN-клиентам.)

Моя попытка:

smcroute -d -n -j eth0 239.1.2.3 -a eth0 172.16.7.3 239.1.2.3 tun0

Я думал, что это установит маршрут многоадресной рассылки, но на самом деле это ничего не делает. Я не вижу исходящих пакетов ICMP на openvpn-server's tun0. -- Что не так?


Я также пробовал настраивать pimdна любых двух парах из трех хостов, а также на всех трех из них. В результате я смог сделать бенчмарк iperf(как и предлагалосьздесь) между backendи openvpn-server, а также между openvpn-serverи openvpn-client, но не между backendи openvpn-client. Похоже, что пересылка/маршрутизация через переход в середине каким-то образом не работает. (Я установил TTL на 5, так что это не должно быть проблемой.)

Я с радостью предоставлю более подробную информацию, если это необходимо (например, ip route listвыходные данные), но не хотел бы загромождать вопрос излишне.

решение1

Проблема была в том, что я не убедился, что он openvpn-clientприсоединяется к группе многоадресной рассылки, поэтому маршрутизатор в середине ( openvpn-server) не знал, что он должен отправлять туда многоадресный трафик.

Достаточно следующей настройки:

  • Настройте backendмаршрут 224.0.0.0/4 via 172.16.7.2— это гарантирует, что трафик для диапазона многоадресных IP-адресов будет отправлен на openvpn-server(возможно, вы захотите указать более узкий диапазон)
  • Установить и pimdзапуститьopenvpn-server
  • Убедитесь, что устройство openvpn-clientсообщает о своем желании присоединиться к группе многоадресной рассылки.Для этого scmrouteнеобходим демон IGMP, такой как. Это работает всего в два шага:

    1. smcroute -d-- запустить демон
    2. smcroute -j tun0 239.1.2.3-- присоединиться к группе

    Обратите внимание, что невозможно выполнить обе команды в одной команде ( smcroute -d -j tun0 ...).

Таким образом, все работает так, как и ожидалось.

Примечание:Если вы запустите демоны pimdили smcrouteдо того, как OpenVPN настроит tun0, ничего не будет работать. Лучше всего запускать их с помощью route-upхука OpenVPN.

Связанный контент