나는 다음과 같은 테이블을 가지고 있습니다
$ netstat -r -4 | grep 33.0
192.168.33.0/24 192.168.29.4 UGS ovpns5
동일한 네트워크에 추가 경로를 추가하고 싶습니다.
$ route add -net 192.168.33.0/24 192.168.27.2
add net 192.168.33.0: gateway 192.168.27.2 fib 0: route already in table
왜? 동일한 네트워크에 두 개의 경로가 있을 수 없나요?
나는 그것을 할 수 route change
있고 효과가 있습니다.
답변1
커널은 아웃바운드 패킷에 대한 경로를 찾을 때 답을 찾고 싶어합니다. 일치하는 항목이 여러 개 있으면 어느 것을 선택할지 알 수 없습니다.
이 스레드메일링 리스트에서도 동일한 문제가 다루어졌으며 freebsd-questions
경로 중 하나를 "분할"하여 두 개의 더 구체적인 경로를 생성하여 문제를 해결하는 것이 제안되었습니다.
백업 기본 경로를 추가하는 방법은 "기본"을 2개의 서로 다른 보다 구체적인 서브넷으로 분할하는 것입니다.
# route add 0.0.0.0 PRIMARY_GW -netmask 127.0.0.0 # route add 127.0.0.0 PRIMARY_GW -netmask 127.0.0.0 # route add default SECONDARY_GW
이제 기본값은 "기본값"보다 작은 2개의 서로 다른 서브넷으로 분할되어 기본 경로가 됩니다. PRIMARY_GW에 연결하는 인터페이스가 실패하면 처음 2개의 경로가 삭제되고 백업 "기본" 게이트웨이는 그대로 유지됩니다.
귀하의 경우, 가능한 경우 기존 경로(192.168.29.4를 통해)를 사용하려면 다음과 같이 할 수 있습니다.
route add -net 192.168.33.0/25 192.168.29.4
route add -net 192.168.33.128/25 192.168.29.4
route add -net 192.168.33.0/24 192.168.27.2
커널은 항상 가장 구체적인 경로를 선호하므로 ovpns5
인터페이스를 사용할 수 있을 때마다 192.168.29.4가 게이트웨이로 사용됩니다. 해당 인터페이스가 실패하면 경로가 제거되고 커널은 게이트웨이를 사용하여 시작됩니다 192.168.27.2
.
두 연결 간의 로드 밸런싱을 원할 경우 동일 비용 다중 경로 라우팅(ecmp)을 찾고 있는데 FreeBSD가 이를 지원하는지 모르겠습니다.