다음과 같이 정의된 교량의 경우
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
브리지에 추가하면 더 이상 작동하지 않습니다. 분명히 잘못된 구성으로 인해 약간 비정상적인 결과가 나타납니다.