로컬 LAN으로의 다중 경로 라우팅. 기본 경로를 추가할 수 없는 이유는 무엇입니까? 나중에 정적 경로를 제거할 수 있는 이유는 무엇입니까?

로컬 LAN으로의 다중 경로 라우팅. 기본 경로를 추가할 수 없는 이유는 무엇입니까? 나중에 정적 경로를 제거할 수 있는 이유는 무엇입니까?

두 개의 NIC가 있는 호스트가 있는데, 각 NIC는 동일한 LAN( 10.0.0.0/16)에 있는 별도의 스위치에 연결되어 있습니다. 스위치는 각각 로컬 게이트웨이에 연결됩니다. 한 스위치의 모든 호스트는 서브넷에 있고 10.0.0.8/29다른 스위치의 모든 호스트는 서브넷에 있습니다 10.0.0.16/29.

내 목표는 이 호스트를 떠나는 트래픽이 두 서브넷 중 하나에 있는 경우 대상에 가장 적합한 스위치를 사용해야 하는 것입니다 /29. LAN의 다른 곳에 있으면 두 경로 중 하나를 사용할 수 있습니다. 또한 스위치 중 하나가 중단되더라도 호스트의 두 주소 모두 중단 없이 트래픽이 계속해서 흐르기를 바랍니다.

$ 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 

위의 경로와 주소로 호스트를 설정했으며 게이트웨이 10.0.0.1과의 통신이 제대로 작동합니다. 그런데 기본 경로를 추가하려고 할 때 문제가 발생합니다.

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

나는 에 대한 다중 경로 경로에서 게이트웨이 주소를 생략함으로써 10.0.0.0/16Linux가 직접 연결된 LAN임을 인식할 것이라고 생각했습니다. 인터페이스 중 하나를 통해 게이트웨이에 명시적인 경로를 추가할 수 있지만 둘 다를 추가할 수는 없습니다. 명시적인 경로를 추가한 후 Linux는 그것이 직접 연결된 서브넷임을 알고 있으므로 기본값을 추가할 수 있습니다.

$ 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 

짜증나게도 할 수 있어삭제이 시점에서 명시적인 경로를 지정하면 모든 것이 계속 작동합니다. ARP 캐시에서 게이트웨이를 플러시하더라도 마찬가지입니다.

$ 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

답변1

해결책은 추가를 통해 다중 경로 경로가 로컬 네트워크의 일부임을 Linux에 알리고 scope link해당 경로에 대해 다중 경로 경로도 사용해야 한다는 것입니다 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 

관련 정보