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

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

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

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

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

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

Наблюдения:

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

Кроме того, когда я бегу ping -t3 239.1.2.3 на backend, те выходят через eth0 и войдите в openvpn-serverс 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с tun0. -- В чем дело?


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

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

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

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

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

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

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

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

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