하나의 어댑터로 여러 이더넷 라우터에 연결

하나의 어댑터로 여러 이더넷 라우터에 연결

가능한 중복:
두 개의 서로 다른 인터넷 연결을 연결하는 방법

나는 단 하나의 이더넷 어댑터와 그 부작용을 통해 여러 라우터에 연결하는 최선의 접근 방식을 찾고 있습니다.
나는 하나의 이더넷 포트가 있고 스위치에 연결된 하나의 Linux PC를 가지고 있습니다. 이 스위치는 서로 다른 네트워크(예: 192.168.1.1, 192.168.2.1, 192.168.3.1)를 사용하는 여러 라우터에 연결되어 있습니다. 그런 다음 소켓을 특정 "장치"에 바인딩할 수 있기를 원하므로 관련 라우터를 사용하겠습니다. 그 연결.
나는 이것이 각 라우터에 대한 가상 eth 인터페이스를 생성하고 각각에 대해 적절한 ip/subnet/gw를 설정함으로써 달성될 수 있다고 믿습니다.
질문은 이렇습니다. 그게 맞나요? , 어떻게 해야 하나요? , 이상한 부작용을 의심해야 할까요?
* 모든 라우터의 총 네트워크 속도는 10M도 넘지 않습니다.

답변1

여기에는 가상 인터페이스가 필요하지 않습니다. 원하는 것은 동일한 장치의 여러 IP 주소와 사용할 라우팅 테이블을 선택하는 정책 라우팅이 있는 좋은 라우팅 테이블입니다. 이제 구성 부분입니다. 귀하의 IP 주소를 /32로 구성하여 온링크 경로를 직접 생성해 보겠습니다.

ip addr flush dev eth0
ip addr add 192.168.1.yourhost/32 dev eth0
ip addr add 192.168.2.yourhost/32 dev eth0
ip addr add 192.168.3.yourhost/32 dev eth0

이제 라우팅 테이블입니다. 첫 번째 라우팅 테이블은 LAN으로 이동하는 패킷과 일치합니다.

ip route add 192.168.1.0/24 dev eth0 src 192.168.1.yourhost table 2
ip route add 192.168.2.0/24 dev eth0 src 192.168.1.yourhost table 2
ip route add 192.168.3.0/24 dev eth0 src 192.168.1.yourhost table 2

table 2사용할 라우팅 테이블을 지정합니다. 2는 임의의 숫자입니다. /etc/iproute2/rt_tables를 편집하여 숫자를 이름에 매핑할 수 있습니다. 해당 파일에 추가해 보겠습니다 . 2 lan이제 간단히 table lan.

이제 기본적으로 해당 라우팅 테이블을 사용해 보겠습니다.

ip rule add table lan

이제 의 출력을 보면 ip rule다음과 같은 내용이 표시됩니다.

0:      from all lookup local 
99:     from all lookup lan
32766:  from all lookup main 
32767:  from all lookup default

local는 커널이 IP 주소가 자신의 IP 주소인지 확인할 수 있도록 사용되는 예약된 테이블이고, lan는 우리 테이블이며, main여러분이 알고 있는 일반적인 라우팅 테이블이고, default우리가 라우팅할 수 없는 패킷에 대한 특수 테이블입니다. 기본적으로 커널은 처음부터 시작하여 이러한 규칙을 시도하고 해당 테이블에서 경로를 찾을 수 없으면 다음 규칙으로 이동합니다.

그래서 우리는 테이블 이전에 시도되는 LAN에 대한 경로를 배치하는 또 다른 라우팅 테이블을 추가했습니다 main. 이제 main에 기본 경로를 추가해 보겠습니다. 소켓을 IP 주소에 바인딩하지 않으면 이 기본 경로만 사용하게 됩니다. 192.168.1.1을 선택해 보겠습니다.

ip route add default via 192.168.1.1 src 192.168.1.yourhost

이제 소켓을 192.168.2.yourhost에 바인딩하면 해당 기본 경로가 아닌 다른 경로를 사용하고 싶을 것입니다. 이 기본 경로를 다른 라우팅 테이블에 추가해 보겠습니다.

ip route add default via 192.168.2.1 src 192.168.2.yourhost dev eth0 table 3
# and while we are at it, let's do this for 192.168.3.1 as well
ip route add default via 192.168.3.1 src 192.168.3.yourhost dev eth0 table 4

이제 이러한 라우팅 테이블을 사용하고 싶지만 소켓이 다른 IP 주소에 바인딩된 경우에만 가능합니다.

ip rule add from 192.168.2.yourhost iif lo table 3
ip rule add from 192.168.3.yourhost iif lo table 4

from 192.168.2.yourhost패킷의 IP 소스 주소가 192.168.2.yourhost인 경우에만 커널이 테이블을 시도하도록 합니다. 트래픽이 로컬에서 생성되었음을 의미하는 iif특별한 예외를 제외하고 패킷이 수신된 인터페이스(트래픽을 전달할 때 유용함)를 지정할 수 있습니다 .iif lo

ip route get이제 라우팅 테이블을 테스트하는 명령을 시도하거나 사용하여 작동하는지 확인할 수 있습니다 .

$ ip route get 192.168.2.5
192.168.2.5 dev eth0  src 192.168.2.yourhost 
    cache
$ ip route get 64.34.119.12
64.34.119.12 via 192.168.1.1 dev eth0 src 192.168.1.yourhost 
    cache
$ ip route get 64.34.119.12 from 192.168.2.yourhost
64.34.119.12 via 192.168.2.1 dev eth0 src 192.168.2.yourhost 
    cache

관련 정보