서로 다른 인터페이스를 통해 동일한 네트워크에 대한 두 개의 경로

서로 다른 인터페이스를 통해 동일한 네트워크에 대한 두 개의 경로

다음과 같이 정의된 교량의 경우

auto br0
iface br0 inet dhcp
        bridge-ifaces enp0s8
        bridge-ports enp0s8
        up ifconfig enp0s8 up

iface enp0s8 inet manual

운영 체제는 인터페이스에 2개의 경로를 설정합니다 up.

192.168.1.0/24 dev enp0s8  proto kernel  scope link  src 192.168.1.134
192.168.1.0/24 dev br0  proto kernel  scope link  src 192.168.1.134

그러나 누군가가 다음을 사용하여 동일한 작업을 수동으로 수행하려고 하면:

ip route add 192.168.1.0/24 dev br0 proto kernel src 192.168.1.134
ip route add 192.168.1.0/24 dev enp0s8 proto kernel src 192.168.1.134

그런 다음 두 번째 명령이 실패하고 표시됩니다 RTNETLINK answers: File exists.

질문:

커널이 부정 행위를 하고 있는 걸까요, 아니면 명령 ip route add에 일부 키가 누락된 걸까요?

이 구성이 적합한지 여부가 아니라 "커널이 이를 수행하는 방법"에 관한 것입니다.

답변1

당신은 그것을 확인해야합니다공식 문서이는 (첫 번째 예 이후) 다음을 의미합니다.

auto eth0 및 iface eth0 inet Manual이 파일에 없음을 알 수 있습니다. 이는 br0이 할당된 구성요소를 호출하기 때문입니다.

브리지에 연결된 이더넷 어댑터는 단순히 브리지의 IP 주소를 공유하기 때문에 구성할 필요가 없습니다.

경로를 수동으로 추가할 수 없는 이유는 init 스크립트에서 단계를 재현하지 않기 때문입니다. IP를 설정하면 enp0s8시스템에서 경로를 추가할 수 있습니다. 이는 잘못된 것이며 라우팅을 더욱 복잡하게 만듭니다(특히 고급 라우팅, 전달 또는 NAT를 수행하는 경우).

시스템의 init 스크립트를 재현하려면 관련 경로를 모두 제거하고 이미 존재하는 경우 브리지를 제거한 후:

brctl addbr br0
ifconfig enp0s8 192.168.1.0/24
ifconfig br0 192.168.1.0/24

그러면 ip route두 개의 경로가 출력됩니다. enp0s8브리지에 추가하면 더 이상 작동하지 않습니다. 분명히 잘못된 구성으로 인해 약간 비정상적인 결과가 나타납니다.

관련 정보