두 개의 인터페이스, 두 개의 주소, 두 개의 게이트웨이?


15

다른 IP 주소를 가진 두 개의 네트워크 인터페이스가있는 시스템이 있는데 둘 다 공용 주소 범위 (첫 번째 경우 NAT를 통해)에 있고 게이트웨이가 다른 시스템입니다. (긴 이야기, 테스트 목적입니다)

문제는 지금 두 번째 인터페이스에서 주소를 핑하려고하면 기본 경로가 첫 번째 인터페이스를 통해 가리키고 제대로 도착하지 않는다는 것입니다.

응답이 항상 동일한 네트워크 인터페이스 (및 동일한 소스 IP)를 통해 응답하는지 확인할 수 있습니까? 그렇다면 어떻게?


1
아마도이 약간의 변형 : unix.stackexchange.com/questions/4420/...
숀 J. 고프

답변:


17

문제를 오해하고 있습니다. 모든 패킷이 응답 인 것은 아니며 모든 패킷이 다른 패킷과 일치 할 수있는 것은 아니며 "같은 네트워크 인터페이스"가 의미가 있습니다. 소스 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>

자세한 내용 은 여러 업 링크 / 제공자 라우팅을 참조 하십시오.


'모든 패킷이 응답은 아니며 모든 패킷이 다른 패킷과 일치 할 수는 없습니다. '이것을 더 설명 할 수 있습니까? 모든 패킷이 응답은 아니며 모든 패킷이 다른 "소스"패킷과 일치 할 수있는 것은 아닙니다. 이러한 패킷을 고려에서 제외하면 문제가 발생하지 않으므로 걱정하지 않아도됩니다. 왜 남은 패킷을 "동일한 네트워크 인터페이스"로 라우팅 할 수 없습니까?
앤드류 Savinykh

@AndrewSavinykh 그것은 모든 문제를 해결하지 못할 것입니다. 특히 아웃 바운드 패킷 (예 : 아웃 바운드 핑 요청)이 소스 IP 주소에 대해 잘못된 인터페이스를 벗어나 게이트웨이에 의해 삭제 될 때마다 아웃 바운드 패킷이 중단됩니다. 내가 설명했듯이 문제는 실제로 패킷이 소스 IP 주소에 해당하는 게이트웨이로 나가는 지 확인하는 것입니다.
David Schwartz

데이비드, 나는 OP와 같은 것을 달성하고 싶지만 나는 할 수 없습니다. 여기에 질문을 게시했습니다 : serverfault.com/questions/992624/… , 살펴볼 수 있다면 좋을 것입니다
Housemd

6

David Schwartz의 답변은 훌륭하지만 추가 테이블이 하나 있고 기본 경로를 사용하여 라우팅 규칙을 약간 단순화 할 수 있습니다. 두 개의 NAT 게이트웨이 뒤에있는 서버가 있으며 최근에는 여러 VM간에 해당 시나리오를 다시 만드는 과정을 거쳤습니다. 내 /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

(이것은 두 ISP가 Optus와 iiNet 인 설정을위한 것이므로 테이블 이름은 '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/interfaces2 년 후 시스템을 다시 부팅해야 할 때 설정 한 방법을 기억하는 대신 이러한 작업을 수행 한 다음 해당 파일을 git-manage하는 것이 훨씬 쉽습니다 .


1

듀얼 네트워크 예

이 예는 넷 마스크를 사용 하여 추가 기능 eth1과 게이트웨이 를 바인딩하는 서비스에 게이트웨이 를 제공하는 방법을 보여줍니다.10.130.0.2255.255.255.25510.130.0.1ping -I eth1 8.8.8.8

기술적으로 우리는 :

  • 더 큰 메트릭으로 다른 게이트웨이 추가
  • 테이블 100 추가 / 사용 및 설정
  • 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.