
공용 주소 범위에 있고(첫 번째 인터페이스는 NAT를 통해 이루어졌지만) 서로 다른 IP 주소를 가진 두 개의 네트워크 인터페이스가 있는 시스템이 있고 둘 다 서로 다른 게이트웨이를 가지고 있습니다. (긴 이야기, 단지 테스트용)
문제는 이제 두 번째 인터페이스에서 주소를 ping하려고 하면 기본 경로가 첫 번째 인터페이스를 통해 지정되고 결코 올바르게 도착하지 않는다는 것입니다.
응답이 항상 들어오는 것과 동일한 네트워크 인터페이스를 통해 나가는 것을 보장할 수 있습니까(그리고 동일한 소스 IP를 가짐)? 그렇다면 어떻게 해야 할까요?
답변1
당신은 질문을 오해했습니다. 모든 패킷이 응답은 아니며 모든 패킷이 "들어온 동일한 네트워크 인터페이스"와 같이 다른 패킷과 일치할 수 있는 것은 아닙니다. 당신이 하는 일은 소스 IP 주소를 기반으로 패킷의 게이트웨이를 선택하는 것입니다.
이를 소스 기반 라우팅 또는 정책 라우팅이라고 합니다. 당신은 그것을 사용할 수 있습니다간단한 iptables
규칙하지만 가장 좋은 방법은 각 공개 소스 주소에 대해 하나씩 두 개의 라우팅 테이블을 설정하는 것입니다.
먼저 두 개의 테이블을 만듭니다(<NAME1> 및 <NAME2>를 IP1, DEV1 등과 같은 두 공급자에 대한 적절한 이름으로 바꿉니다).
echo 200 <NAME1> >> /etc/iproute2/rt_tables
echo 201 <NAME2> >> /etc/iproute2/rt_tables
각 라우팅 테이블에 게이트웨이를 추가합니다(필요한 경우).
ip route add <NET1> dev <DEV1> src <SRC1> table <NAME1>
ip route add <NET2> dev <DEV2> src <SRC2> table <NAME2>
그런 다음 기본 경로는 다음과 같습니다.
ip route add default via <IP1> table <NAME1>
ip route add default via <IP2> table <NAME2>
그런 다음 소스 주소를 기반으로 라우팅 테이블에 대한 규칙을 선택합니다.
ip rule add from <IP1> table <NAME1>
ip rule add from <IP2> table <NAME2>
바라보다여러 업링크/공급업체에 대한 라우팅자세한 내용은.
답변2
David Schwartz의 답변은 매우 훌륭하지만 추가 테이블을 사용하고 다른 테이블의 기본 경로를 사용하면 라우팅 규칙을 약간 단순화할 수 있습니다. 두 개의 NAT 게이트웨이 뒤에 서버가 있고 최근에 여러 가상 머신 간에 이 시나리오를 재현하는 프로세스를 진행했습니다. 내 /etc/network/interfaces
모습은 다음과 같습니다.
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.13.13
netmask 255.255.255.0
up ip route add table optus default via 192.168.13.10
up ip rule add from 192.168.13.213 table optus
up ip route add default via 192.168.13.11
auto eth0:0
iface eth0:0 inet static
address 192.168.13.213
netmask 255.255.255.0
(이것은 Optus와 iiNet이라는 두 ISP에 대한 설정이므로 테이블 이름은 "optus"입니다.)
/etc/iproute2/rt_tables
여기에 테이블을 생성하는 행만 추가하면 됩니다. 두 개의 IP 주소가 있습니다. 192.168.13.13의 트래픽은 192.168.13.11을 통해 나가고, 192.168.13.213의 트래픽은 192.168.13.10을 통해 나갑니다. 두 게이트웨이 모두 포트 전달을 적절하게 구성하고(192.168.13.11은 콘텐츠를 192.168.13.13으로 전달하고, 192.168.13.10은 콘텐츠를 192.168.13.213으로 전달) 나머지는 자체적으로 처리해야 합니다.
공인 IP를 직접 사용하기 때문에 상황에 따라 약간의 조정이 필요할 수 있지만, 이 정도는 여전히 작동합니다. 게다가 /etc/network/interfaces
2년 후 시스템을 재부팅해야 할 때 어떻게 설정되었는지 기억하려고 하는 것보다 거기에서 이러한 작업을 수행한 다음 git에서 파일을 관리하는 것이 훨씬 쉽습니다 !
답변3
이중 네트워크 예
eth1
이 예에서는 연결된 장치 에 바인딩된 서비스에 대한 10.130.0.2
넷마스크 255.255.255.255
및 게이트웨이를 제공하는 방법을 보여줍니다 .10.130.0.1
ping -I eth1 8.8.8.8
기술적으로 우리는:
- 더 큰 측정항목으로 추가 게이트웨이 추가
- 테이블 100 추가/사용 및 설정
- eth1을 통해 eth1에서 트래픽을 라우팅하는 규칙을 추가합니다.
ip addr add 10.130.0.2/32 broadcast 10.130.0.2 dev eth1
ip link set eth1 up
ip route add 10.130.0.1 src 10.130.0.2 dev eth1
ip route add 10.130.0.1 src 10.130.0.2 dev eth1 table 100
ip route add default via 10.130.0.1 dev eth1 metric 10
ip route add default via 10.130.0.1 dev eth1 table 100
ip rule add from 10.130.0.2/32 table 100
ip rule add to 10.130.0.2/32 table 100
curl --interface eth1 ifconfig.co
curl --interface eth0 ifconfig.co
ping -I eth1 8.8.8.8