2개의 이더넷 포트가 있는 멀티홈 호스트와 USB 연결이 가능한 셀룰러 모뎀이 있습니다. 이더넷 인터페이스는 기본 라우팅 테이블에서 일반적인 방식으로 구성되며 인터페이스 중 하나에 하나의 기본 경로만 할당됩니다.
[/]# ip route show table main
default via 192.168.4.1 dev eth0 metric 50
192.168.2.0/24 dev eth1 scope link src 192.168.2.10
192.168.4.0/22 dev eth0 scope link src 192.168.4.73
별도의 "usbcell" 라우팅 테이블에는 셀 인터페이스에 할당된 또 다른 기본 경로가 있습니다.
[/]# ip route show table usbcell
default via 10.26.128.2 dev usbcell src 10.26.128.1
IP 규칙은 0x100 값으로 표시된 모든 패킷에 usbcell 라우팅 테이블을 사용하도록 지시합니다. 이러한 패킷은 애플리케이션 내의 소켓 수준에 표시됩니다. 또한 역방향 경로 필터링으로 인해 USBcell 트래픽이 삭제되는 것을 방지하기 위해 소스 기반 라우팅 규칙을 추가했습니다.
[/]# ip rule
0: from all lookup local
97: from 10.26.128.1 lookup usbcell
100: from all fwmark 0x100 lookup usbcell
32766: from all lookup main
32767: from all lookup default
셀 인터페이스에는 모뎀 하드웨어에서 동적으로 제공하는 IP, 넷마스크 및 게이트웨이가 있습니다. 이 서브넷은 통신사나 당사의 소유가 아니므로 이더넷 포트에 연결된 다른 네트워크와의 충돌을 방지하고 싶습니다. 셀 인터페이스가 별도의 라우팅 테이블에 있으므로 이는 쉽습니다. 그러나 불행하게도 ifup을 통해 셀 인터페이스가 표시될 때마다 해당 인터페이스에 대한 로컬 경로가 기본 테이블에 추가됩니다. 이렇게 하면 태그가 지정된 패킷뿐만 아니라 해당 서브넷으로 향하는 모든 패킷이 셀 인터페이스로 라우팅됩니다. 로컬 경로를 제거하면 예상대로 작동합니다.
usbcell이 시작될 때의 기본 테이블:
[/]# ip route show table main
default via 192.168.4.1 dev eth0 metric 50
10.26.128.0/17 dev usbcell scope link src 10.26.128.1 ## How do I prevent this? ##
192.168.2.0/24 dev eth1 scope link src 192.168.2.10
192.168.4.0/22 dev eth0 scope link src 192.168.4.73
usbcell 인터페이스가 나타날 때 이 로컬 경로가 기본 테이블에 추가되는 것을 방지하는 방법이 있습니까?
10.26.128.0/17 dev usbcell scope link src 10.26.128.1
이 예에서는 서브넷 10.26.128.0/17에 바인딩된 태그가 지정되지 않은 패킷을 기본 테이블 기본 경로(eth0)로 라우팅하려고 합니다.
답변1
일반적으로 새 주소가 연결된 LAN 경로를 자동으로 생성하는 것을 방지하려면 해당 주소를 태그가 지정된 인터페이스에 추가해야 합니다 noprefixroute
(사용하지 않음).IP 경로 25.8 테스트용):
ip address add 10.26.128.1/17 dev usbcell noprefixroute
이렇게 하면 인터페이스에 주소가 추가되지만 인터페이스에 자동 LAN 경로가 생성되지는 않습니다.기본인터페이스를 호출할 때의 테이블입니다.
이는 실제로 나중에 이 명령을 실행하는 것을 방지합니다.
# ip route add table usbcell default via 10.26.128.2 dev usbcell src 10.26.128.1
Error: Nexthop has invalid gateway.
이전에 감지되지 않은 누락된 경로가 있기 때문에(OP 시나리오에서 모든 것이 예상대로 작동했다는 사실에 놀랐습니다) 수동으로 추가해야 합니다. 그렇지 않으면 테이블이 절대 일치하지 않습니다. 그래서 결국:
ip route add table usbcell 10.26.128.2/32 dev usbcell # or 10.26.128.0/17 if you prefer
ip route add table usbcell default via 10.26.128.2 dev usbcell src 10.26.128.1
또는 usbcell 장치가 실행 중인 경우프록시 ARP모든 주소(해당 장치에 일반적임)에 대해 이 방법도 작동합니다(그러나 호스트에 대규모 ARP 테이블이 생성되기 시작합니다).
ip route add table usbcell default dev usbcell src 10.26.128.1
백엔드를 조정할 수 있는 경우 그곳에서 쉽게 변경할 수 있습니다. 예를 들어위 아래라면백엔드는 다음 위치에 있습니다 /etc/network/interfaces
.
iface usbcell inet manual
pre-up ip addr add 10.26.128.1/17 dev usbcell noprefixroute
down ip addr del 10.26.128.1/17 dev usbcell noprefixroute
사용자 정의 경로를 추가할 수도 있습니다.
pre-up ip rule add prio 100 fwmark 0x100 lookup usbcell
pre-up ip rule add prio 97 from 10.26.128.1 lookup usbcell
up ip route add table usbcell 10.26.128.2/32 dev usbcell
up ip route add default via 10.26.128.2 dev usbcell src 10.26.128.1
down ip rule del prio 97
down ip rule del prio 100
이렇게 할 수 없는 경우에도 커널이 자동으로 추가한 경로가 사용되지 않도록 경로를 재정의할 수 있습니다. 측정항목이 있는 경우 다음을 수행하세요.
ip route add 10.26.128.0/17 via 192.168.4.1 dev eth0
그러나 아무 것도 없기 때문에(즉, 가장 높은 우선순위인 측정항목 0) 둘 다 동일한 우선순위를 갖게 되며 이는 정의되지 않습니다. 우선순위가 불확실한 경우를 제외하고는 이 경로를 추가할 수 없습니다.뒤쪽에커널이 다음과 같이 불평하기 때문에 인터페이스가 작동 중입니다.
RTNETLINK answers: File exists
따라서 두 개의 절반 경로를 추가하면(OpenVPN을 사용할 때 두 개의 절반 기본 경로를 추가하는 것과 동일 --redirect-gateway def1
) 이 경로를 재정의할 수 있습니다.
ip route add 10.26.128.0/18 via 192.168.4.1 dev eth0
ip route add 10.26.192.0/18 via 192.168.4.1 dev eth0
함께 그들은 정확히 동일한 범위 10.26.128.0/17과 일치합니다. 10.26.128.0/17보다 더 구체적이므로 항상 우선합니다. 그렇다면 꼭 기억해주세요이더넷 0관리상 폐쇄되면 이러한 경로는 사라지므로 다시 추가해야 합니다. 따라서 설정 구성에 추가해야 합니다.이더넷 0.