이에 대한 올바른 방법은 나가는 패킷에 사용하려는 인터페이스에 bind ()하는 것입니다. 그런 다음 ip route
및 ip rule
명령으로 경로를 설정하여 발신 인터페이스를 기반으로 패킷이 라우팅되는 방법을 제어 할 수 있습니다 . 내 예에서는 다음 네트워크를 가정합니다.
- eth0 :
- 주소 : 192.168.0.2/24
- 기본 게이트웨이 : 192.168.0.1
- eth1 :
- 주소 : 192.168.1.2/24
- 기본 게이트웨이 : 192.168.1.1
대체라는 eth0에 대한 트래픽 발신과 main이라고하는 eth1에 대한 하나의 테이블을 생성합니다. 라우팅 테이블 main은 항상 존재하며 route
and ip route
명령에 사용되는 일반 테이블입니다 . 대부분의 사람들은 다른 테이블을 다루지 않습니다. alternate라는 테이블을 만들려면 다음 행을 추가합니다 /etc/iproute2/rt_tables
.
10 alternate
기본 테이블의 기본 우선 순위는 254입니다. 라우팅 테이블이 적용되는 규칙은 ip rule
명령에 의해 제어됩니다 . 기본적으로이 명령은 다음과 같은 기존 규칙 목록을 인쇄합니다.
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
이것은 기본적 local
으로 내 자신의 IP 주소와 같은 로컬 경로에 대해 커널이 유지 관리하는 특수 테이블 인 테이블에서 경로를 찾습니다 . 그런 다음 테이블 기본 및 테이블 기본값을 시도합니다. 테이블 기본값은 일반적으로 비어 있으므로 기본 항목과 일치하지 않으면 호스트에 대한 경로가 없습니다. 먼저, 테이블을 eth0 규칙으로 채우십시오.
sudo ip route add table alternate 192.168.0.0/24 dev eth0
sudo ip route add table alternate 192.168.1.0/24 dev eth1
sudo ip route add table alternate default via 192.168.0.1
일반적으로 alternate
테이블 이 테이블과 유사하게 보이기를 원할 것 main
입니다. 라우팅이 달라야 할 때만 차이점이 있습니다. 문자 그대로 모든 NFS, HTTP 등의 트래픽이 eth1의 네트워크로 향하는 경우에도 eth0의 기본 게이트웨이를 통해 전송되도록하려면 위의 두 번째 행을 포함하지 않을 수 있습니다. 다음 단계는이 대체 라우팅 테이블 사용시기에 대한 규칙을 추가하는 것입니다.
sudo ip rule add from 192.168.0.0/24 pref 10 table alternate
이 규칙에 따르면 192.168.0 네트워크의 주소에서 들어오는 모든 트래픽 alternate
은 일반 main
테이블 대신 라우팅 테이블을 사용 합니다. 마지막 단계는 사용해야하는 모든 클라이언트가 eth0
이를 바인드해야합니다. wget
예를 들어 set을 사용하면 --bind-address=192.168.0.2
NFS의 경우clientaddr=192.168.0.2
마운트 옵션. Perl과 함께 LibWWW를 사용하는 경우 LWP :: UserAgent에서 localaddr 옵션을 설정하여 바인딩 된 로컬 인터페이스를 제어 할 수 있습니다. 클라이언트가있는 경우 바인딩을 제어 할 수 없으며 컴파일 소스는 옵션이 아니며 iptables 규칙을 사용하여 주소를 수정할 수는 있지만 해킹이 많고 작동하지 않을 수 있습니다. nat 테이블 또는 mangle 테이블의 PREROUTING 체인에 SNAT 규칙을 설정해야합니다. 이 작업을 수행하려면 위에 제공된 수정 된 라우팅 테이블이 여전히 필요합니다.
iftop
하고 있으며 각각 올바른 트래픽을 보여줍니다. 정말 고맙습니다.