Einrichten einer Multicast-Route über einen mittleren Hop

Einrichten einer Multicast-Route über einen mittleren Hop

Ich habe einen Host mit zwei Docker-Containern (mit NET_ADMINFunktion):

  • backendmit einer Schnittstelle eth0( 172.16.7.3)
  • openvpn-servermit den Schnittstellen eth0( 172.16.7.2) und tun0( 10.8.0.1), die einen OpenVPN-Server ausführen (tun-Modus)

Auf einem anderen Rechner befindet sich ein OpenVPN-Client openvpn-clientmit Schnittstelle tun0( 10.8.0.2). Das VPN funktioniert.

Zusätzliche Routeneinrichtung:

  • backendhat Routen 10.8.0.0/24 via 172.16.7.2und 224.0.0.0/4 via eth0.
  • openvpn-serverhat Routen 10.8.0.0/24 dev tun0und 224.0.0.0/4 dev tun0.

backendkann erfolgreich pingen openvpn-client(weitergeleitet durch openvpn-server): ping 10.8.0.2funktioniert einwandfrei.

Beobachtungen:

Wenn ich „ ping -t3 239.1.2.3on“ 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.3auf ausführe backend, werden diese außerdem über diesen Host beendet eth0und über wieder aufgerufen openvpn-server. Ich kann sie unter using eth0sehen .openvpn-servertcpdump -i eth0 net 224.0.0.0/4

Problem:

Ich möchte in der Lage sein, ping -t3 239.1.2.3auf auszuführen backendund die Pings an weiterzuleiten openvpn-client, als ob 10.8.0.2ein Ping gesendet worden wäre. (Das endgültige Ziel besteht darin, UDP-Pakete von per Multicast backendan 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?


pimdIch habe auch versucht , auf zwei beliebigen Paaren der drei Hosts und auch auf allen drei einzurichten . Als Ergebnis konnte ich einen iperfBenchmark durchführen (wie vorgeschlagenHier) zwischen backendund openvpn-server, sowie zwischen openvpn-serverund openvpn-client, aber nicht zwischen backendund 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 listAusgabe), wollte die Frage jedoch nicht unnötig überladen.

Antwort1

Das Problem bestand darin, dass ich nicht sichergestellt hatte, dass openvpn-clientder Multicast-Gruppe beitritt, sodass der Router in der Mitte ( openvpn-server) nicht wusste, dass er Multicast-Verkehr dorthin senden sollte.

Folgendes Setup reicht aus:

  • backendRichten Sie auf die Route ein . 224.0.0.0/4 via 172.16.7.2Dadurch wird sichergestellt, dass der Datenverkehr für den Multicast-IP-Bereich an gesendet wird openvpn-server(Sie können auch einen engeren Bereich angeben).
  • Installieren und starten Sie pimdaufopenvpn-server
  • Stellen Sie sicher, dass es openvpn-clientankündigt, der Multicast-Gruppe beitreten zu wollen.Dazu wird ein IGMP-Daemon wie scmroutebenötigt. Dieser funktioniert in nur zwei Schritten:

    1. smcroute -d-- starte den Daemon
    2. smcroute -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 pimdoder smcrouteDaemons starten, bevor OpenVPN konfiguriert ist tun0, funktioniert nichts. Am besten starten Sie sie mit route-updem Hook von OpenVPN.

verwandte Informationen