Multipath-Routing zum lokalen LAN. Warum kann ich keine Standardroute hinzufügen? Warum kann ich die statische Route nachträglich entfernen?

Multipath-Routing zum lokalen LAN. Warum kann ich keine Standardroute hinzufügen? Warum kann ich die statische Route nachträglich entfernen?

Ich habe einen Host mit zwei Netzwerkkarten, die jeweils mit separaten Switches im selben LAN verbunden sind ( 10.0.0.0/16). Die Switches sind jeweils mit dem lokalen Gateway verbunden. Alle Hosts auf einem Switch befinden sich im Subnetz 10.0.0.8/29und alle Hosts auf dem anderen Switch befinden sich im Subnetz 10.0.0.16/29.

Mein Ziel ist, dass der Datenverkehr, der diesen Host verlässt, den für das Ziel am besten geeigneten Switch verwendet, wenn es sich in einem der beiden /29Subnetze befindet. Wenn es sich irgendwo anders im LAN befindet, kann es jeden beliebigen Pfad nehmen. Ich möchte auch, dass der Datenverkehr, wenn einer der Switches ausfällt, weiterhin ohne Unterbrechung zu beiden Adressen auf dem Host fließt.

$ ip -4 addr show enp5s0
16: enp5s0: <NO-CARRIER,BROADCAST,MULTICAST,MASTER,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    inet 10.0.0.9/29 scope global enp5s0
$ ip -4 addr show enp6s0
17: enp6s0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    inet 10.0.0.17/29 scope global enp6s0
$ ip route add 10.0.0.0/16 \
    nexthop dev enp5s0 \
    nexthop dev enp6s0

$ ip route
10.0.0.0/16 
    nexthop dev enp5s0 weight 1 linkdown 
    nexthop dev enp6s0 weight 1 
10.0.0.8/29 dev enp5s0 proto kernel scope link src 10.0.0.9 linkdown 
10.0.0.16/29 dev enp6s0 proto kernel scope link src 10.0.0.17 

Ich habe den Host mit den oben genannten Routen und Adressen eingerichtet und die Kommunikation mit dem Gateway 10.0.0.1 funktioniert einwandfrei. Beim Versuch, die Standardroute hinzuzufügen, tritt jedoch ein Problem auf.

$ sudo ip route add default nexthop via 10.0.0.1  
Error: Nexthop has invalid gateway.

Ich dachte, wenn ich Gateway-Adressen auf der Multipath-Route zu weglasse 10.0.0.0/16, würde Linux erkennen, dass es sich um ein direkt verbundenes LAN handelt. Ich kann über eine der Schnittstellen eine explizite Route zum Gateway hinzufügen, aber nicht über beide. Nachdem ich eine explizite Route hinzugefügt habe, kann ich die Standardroute hinzufügen, da Linux weiß, dass es sich um ein direkt verbundenes Subnetz handelt.

$ sudo ip route add 10.0.0.1/32 dev enp6s0
$ sudo ip route add 10.0.0.1/32 dev enp5s0
RTNETLINK answers: File exists
$ sudo ip route add default via 10.0.0.1
$ ip route
default via 10.0.0.1 dev enp6s0 
10.0.0.0/16 
    nexthop dev enp5s0 weight 1 linkdown 
    nexthop dev enp6s0 weight 1 
10.0.0.1 dev enp6s0 scope link 
10.0.0.8/29 dev enp5s0 proto kernel scope link src 10.0.0.9 linkdown 
10.0.0.16/29 dev enp6s0 proto kernel scope link src 10.0.0.17 

Ärgerlicherweise kann ichlöschendie explizite Route an dieser Stelle und alles funktioniert weiterhin – auch wenn ich das Gateway aus dem ARP-Cache leere!

$ sudo ip route del 10.0.0.1
$ sudo ip neigh flush 10.0.0.1
$ ip route
default via 10.0.0.1 dev enp6s0 
10.0.0.0/16 
    nexthop dev enp5s0 weight 1 linkdown 
    nexthop dev enp6s0 weight 1 
10.0.0.8/29 dev enp5s0 proto kernel scope link src 10.0.0.9 linkdown 
10.0.0.16/29 dev enp6s0 proto kernel scope link src 10.0.0.17 
$ ping -n -c 1 10.0.0.1 | grep icmp_seq
64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=0.492 ms

Antwort1

Die Lösung besteht darin, dass Sie Linux durch Hinzufügen mitteilen müssen, dass die Multipath-Route Teil des lokalen Netzwerks ist, scope linkund dass Sie für die Route auch eine Multipath-Route verwenden müssen default.

$ ip route add 10.0.0.0/16 scope link \
    nexthop dev enp5s0 \
    nexthop dev enp6s0

$ ip route add default \
    nexthop via 10.0.0.1 dev enp5s0 \
    nexthop via 10.0.0.1 dev enp6s0

$ ip route
default
    nexthop via 10.0.0.1 dev enp5s0 weight 1 linkdown
    nexthop via 10.0.0.1 dev enp6s0 weight 1
10.0.0.0/16 scope link 
    nexthop dev enp5s0 weight 1 linkdown
    nexthop dev enp6s0 weight 1 
10.0.0.8/29 dev enp5s0 proto kernel scope link src 10.0.0.9 linkdown
10.0.0.16/29 dev enp6s0 proto kernel scope link src 10.0.0.17 

verwandte Informationen