У меня есть хост с двумя контейнерами 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
может успешно пинговать 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
нужно. Это работает только в два этапа:
smcroute -d
- запустить демонsmcroute -j tun0 239.1.2.3
- присоединиться к группеОбратите внимание, что невозможно запустить оба в одной команде (smcroute -d -j tun0 ...
).
Таким образом, все работает как положено.
Примечание: Если вы запустите pimd
или smcroute
демоны до настройки OpenVPN tun0
, ничего не получится. Лучше всего запускать их с помощью OpenVPN. route-up
крючок.