GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So senden Sie Multicast-Pakete über eine bestimmte Schnittstelle in Linux

Ich bin nicht ganz davon überzeugt, dass meine Lösung richtig ist, aber ich kann zumindest etwas mehr Licht ins Dunkel bringen.

Hintergrund

Linux hat tatsächlich mehrere Routing-Tabellen, und sie werden nacheinander in einer bestimmten Prioritätsreihenfolge durchsucht, bis eine Tabelle mit einer passenden Route gefunden wird. Sie können optional einige der Routing-Tabellen basierend auf der Quelladresse oder dem Protokoll durchsuchen; siehe ip-rule(8) Manpage.

Das Problem ist die "lokale" Routing-Tabelle, die die höchstmögliche Priorität 0 hat. Die "lokale" Tabelle wird automatisch vom Kernel gefüllt und enthält "offensichtliche" Schnittstellen- und Broadcast-Routen. Für IPv6 unter Linux umfasst dies anscheinend den gesamten Multicast-Block.

Das Problem

Ich werde die iproute2 verwenden statt des traditionelleren route , weil es mir alles zeigen wird, was ich wissen muss.

Auf meiner Linux-Box:

$ ip -6 route show table local
local ::1 via :: dev lo  proto none  metric 0 
local fe80::213:a9ff:fe91:5bcb via :: dev lo  proto none  metric 0 
local fe80::250:b6ff:fe44:37d1 via :: dev lo  proto none  metric 0 
ff00::/8 dev eth0  metric 256 
ff00::/8 dev eth1  metric 256

$ ip -6 route show table main
fe80::/64 dev eth0  proto kernel  metric 256 
fe80::/64 dev eth1  proto kernel  metric 256 
ff15::/16 dev eth1  metric 1024
ff00::/8 dev eth1  metric 1024 

$ ip -6 rule show
0:      from all lookup local 
32766:  from all lookup main 

...Und meine Multicast-Pakete für ff15::1 (5==site-local,>link-local) landen auf eth0, weil die "lokale" Routing-Tabelle zuerst passt und die "Haupt"-Tabelle überschreibt, obwohl die "Haupt"-Tabelle hat eine spezifischere Route. Dieses überschreibende Verhalten ist im größeren Schema des Policy-Routing korrekt, aber die Entscheidung, ff00::/8 automatisch zur lokalen Tabelle hinzuzufügen, ist für mich fragwürdig.

Meine Lösung

Ich habe nicht genug Erfahrung, um zu wissen, ob das eine gute Idee ist, aber:

# ip -6 route add ff15::/16 dev eth1 table local

und jetzt werden meine ff15::1-Pakete durch eth1 geleitet.

Dies stimmt in gewisser Weise mit der Semantik der lokalen Tabelle überein, da sie direkt durch ein Gerät geleitet wird. Es fühlt sich nicht ganz richtig an (in Anbetracht der automatischen Verwaltung und "Sie sollten sich diese Tabelle nicht ansehen müssen"), aber es ist die beste Lösung, die ich gefunden habe.


Linux
  1. Wie sende ich E-Mails über einen externen SMTP-Server mit dem Befehl mailx in Linux?

  2. So zeigen Sie die Routing-Tabelle in Linux an

  3. Tabelle über die Befehlszeile in Linux abschneiden

  4. Linux:Wie sende ich eine Nachricht an einen lokalen Benutzer, der bei X11 angemeldet ist?

  5. So richten Sie zwei Standardrouten unter Linux ein

So senden Sie verschlüsselte E-Mails unter Linux

So überwachen Sie eine Linux-Maschine über Nagios

Funktionsweise des Ping-Programms unter Linux

So führen Sie SSH zum Server über Linux

So senden Sie Prozesse unter Linux an den Hintergrund

So zeigen Sie Linux-Festplattenpartitionen an (Partitionstabelle)