Ich habe einen Host mit zwei Docker-Containern (mit NET_ADMIN
Funktion):
backend
mit einer Schnittstelleeth0
(172.16.7.3
)openvpn-server
mit den Schnittstelleneth0
(172.16.7.2
) undtun0
(10.8.0.1
), die einen OpenVPN-Server ausführen (tun-Modus)
Auf einem anderen Rechner befindet sich ein OpenVPN-Client openvpn-client
mit Schnittstelle tun0
( 10.8.0.2
). Das VPN funktioniert.
Zusätzliche Routeneinrichtung:
backend
hat Routen10.8.0.0/24 via 172.16.7.2
und224.0.0.0/4 via eth0
.openvpn-server
hat Routen10.8.0.0/24 dev tun0
und224.0.0.0/4 dev tun0
.
backend
kann erfolgreich pingen openvpn-client
(weitergeleitet durch openvpn-server
): ping 10.8.0.2
funktioniert einwandfrei.
Beobachtungen:
Wenn ich „ ping -t3 239.1.2.3
on“ ausführe openvpn-server
, gehen diese durch den VPN-Tunnel und ich kann die ICMP-Pakete sehen, die auf openvpn-client
(mit tcpdump -i tun0 net 224.0.0.0/4
„on openvpn-client
“) ankommen.
Wenn ich ping -t3 239.1.2.3
auf ausführe backend
, werden diese außerdem über diesen Host beendet eth0
und über wieder aufgerufen openvpn-server
. Ich kann sie unter using eth0
sehen .openvpn-server
tcpdump -i eth0 net 224.0.0.0/4
Problem:
Ich möchte in der Lage sein, ping -t3 239.1.2.3
auf auszuführen backend
und die Pings an weiterzuleiten openvpn-client
, als ob 10.8.0.2
ein Ping gesendet worden wäre. (Das endgültige Ziel besteht darin, UDP-Pakete von per Multicast backend
an alle VPN-Clients zu senden.)
Mein Versuch:
smcroute -d -n -j eth0 239.1.2.3 -a eth0 172.16.7.3 239.1.2.3 tun0
Ich dachte, dies würde die Multicast-Route einrichten, aber tatsächlich passiert nichts. Ich kann auf openvpn-server
's keine ausgehenden ICMP-Pakete sehen tun0
. -- Was ist falsch?
pimd
Ich habe auch versucht , auf zwei beliebigen Paaren der drei Hosts und auch auf allen drei einzurichten . Als Ergebnis konnte ich einen iperf
Benchmark durchführen (wie vorgeschlagenHier) zwischen backend
und openvpn-server
, sowie zwischen openvpn-server
und openvpn-client
, aber nicht zwischen backend
und openvpn-client
. Es sieht so aus, als ob die Weiterleitung/das Routing über den Hop in der Mitte irgendwie nicht funktioniert. (Ich hatte den TTL auf 5 eingestellt, das sollte also nicht das Problem sein.)
Ich bin gerne bereit, bei Bedarf weitere Einzelheiten anzugeben (z. B. zur ip route list
Ausgabe), wollte die Frage jedoch nicht unnötig überladen.
Antwort1
Das Problem bestand darin, dass ich nicht sichergestellt hatte, dass openvpn-client
der Multicast-Gruppe beitritt, sodass der Router in der Mitte ( openvpn-server
) nicht wusste, dass er Multicast-Verkehr dorthin senden sollte.
Folgendes Setup reicht aus:
backend
Richten Sie auf die Route ein .224.0.0.0/4 via 172.16.7.2
Dadurch wird sichergestellt, dass der Datenverkehr für den Multicast-IP-Bereich an gesendet wirdopenvpn-server
(Sie können auch einen engeren Bereich angeben).- Installieren und starten Sie
pimd
aufopenvpn-server
Stellen Sie sicher, dass es
openvpn-client
ankündigt, der Multicast-Gruppe beitreten zu wollen.Dazu wird ein IGMP-Daemon wiescmroute
benötigt. Dieser funktioniert in nur zwei Schritten:smcroute -d
-- starte den Daemonsmcroute -j tun0 239.1.2.3
-- der Gruppe beitreten
Beachten Sie, dass es nicht möglich ist, beides in einem Befehl auszuführen (
smcroute -d -j tun0 ...
).
Auf diese Weise funktioniert alles wie erwartet.
Notiz:Wenn Sie die pimd
oder smcroute
Daemons starten, bevor OpenVPN konfiguriert ist tun0
, funktioniert nichts. Am besten starten Sie sie mit route-up
dem Hook von OpenVPN.