IP 주소를 다른 주소로 라우팅하고 src 주소를 유지 하시겠습니까? Server로 라우팅되었으며 Linux 서버는 두 주소에서 모두

다음을 고려하십시오.

WAN IP1: aaa.aaa.aaa.aaa/23
WAN IP2: bbb.bbb.bbb.bbb/25
LAN Subnet: 10.3.0.0/24

두 WAN 주소 모두 Linux Server로 라우팅되었으며 Linux 서버는 두 주소에서 모두 연결할 수 있습니다. LAN 인터페이스 (10.3.0.2)의 다른 호스트로 bbb.bbb.bbb.bbb를 라우팅하고 싶습니다.

INTERNET -- Linux Server
            (aaa.aaa.aaa.aaa/23, bbb.bbb.bbb.bbb/25 ens3)
            (10.3.0.1/24 tap0) -------- Router
                                        (10.3.0.2/24 tap0)
                 INTERNET -- ISP NAT -- (xxx.xxx.xxx.xxx/xx eth0)
                                        (172.16.1.0/24 br-lan)

이제 bbb.bbb.bbb.bbb를 tap0을 통해 10.3.0.2의 라우터로 라우팅하려고합니다 (bbb.bbb.bbb.bbb는 ens3의 주소였습니다). 따라서 내 라우터에는 공용 IP 주소가 있습니다. 이것이 내가 한 일입니다.

ip addr del bbb.bbb.bbb.bbb/25 dev ens3 # remove from ens3
ip route add bbb.bbb.bbb.bbb dev tap0   # route it to tap0

그래프는 다음과 같습니다.

INTERNET -- Linux Server
            (aaa.aaa.aaa.aaa/23 ens3)
            (10.3.0.1/24 tap0) -------- Router
                                        (10.3.0.2/24, bbb.bbb.bbb.bbb tap0)
                 INTERNET -- ISP NAT -- (xxx.xxx.xxx.xxx/xx eth0)
                                        (172.16.1.0/24 br-lan)

그리고 Linux 서버의 라우팅 테이블 :

% ip -4 route
default via aaa.aaa.aaa.1 dev ens3 onlink
10.3.0.0/24 via 10.3.0.1 dev tap0
10.3.0.1 dev ens3  scope link
aaa.aaa.aaa.0/23 dev ens3  proto kernel  scope link  src aaa.aaa.aaa.aaa
bbb.bbb.bbb.bbb dev tap0  scope link
169.254.0.0/16 dev ens3  scope link

그리고 라우터에서 address를 추가 bbb.bbb.bbb.bbb했으며 이제 bbb.bbb.bbb.bbbLinux 서버 에서 ping 을 할 수 있습니다.

그러나 bbb.bbb.bbb.bbb다른 호스트 에서는 핑 을 할 수 없습니다 . 그래서 나는 시도했다 :

iptables -t nat -A POSTROUTING -j MASQUERADE

그 규칙 bbb.bbb.bbb.bbb으로 인터넷 에서 핑 을 할 수있었습니다 . 추적 경로를 수행하면 bbb.bbb.bbb.bbb가 aaa.aaa.aaa.aaa 뒤에 있다는 것을 알 수 있습니다.

...
10. ???
11. aaa.aaa.aaa.aaa                   0.0%    16   45.3  43.6  43.1  45.5   0.8
12. bbb.bbb.bbb.bbb                   0.0%    16   53.7  54.8  51.2  79.4   7.1

그러나 터널 끝점 (10.3.0.2)에서 실제 소스 IP를 원합니다. 이제 Linux 서버가 SNAT를 수행하기 때문에 라우터에서 모든 트래픽 10.3.0.1을 얻습니다. 어떻게해야합니까?



답변

이렇게하지 준 명령, … 때문에, 약간 혼란 질문 나는 일단 tap0을 통해 10.3.0.2에 내 라우터 위에 경로 bbb.bbb.bbb.bbb을 원하는 . 내가 당신을 올바르게 이해한다면, 인터넷에 연결하기 위해 라우터가 Linux 서버를 통과하기를 원합니다. 경우 이 맞다,이, 당신의 첫 번째 그림의 구성에서 시작, 그것을 얻는 방법이다 당신의 다음 명령을 무시.

  1. Linux 서버에서 IPv4 전달을 사용으로 설정 한 후 다음을 발행하십시오.

      iptables -t -nat -A POSTROUTING -o eth0 -j MASQUERADE
      ip route add 172.16.0.0/24 via 10.3.0.2 dev tap0
    
  2. 라우터에서 IPv4 전달이 기본적으로 활성화되어 있다고 가정합니다 .

    ip route del default
    ip route add default via 10.3.0.1 dev tap0
    iptables -A INPUT -s 10.8.3.0.1 -j ACCEPT
    

이것의 장점은 Linux 서버에서 단일 레벨의 NAT를 수행 한 다음 라우팅이 모든 것을 처리한다는 것입니다. LAN 클라이언트가 이름으로 Linux 서버를 찾도록하려면 (LS라고 함) 다음 행을 추가하십시오.

10.3.0.2    LS

라우터의 / etc / hosts 파일에 : 이렇게 작은 필요를 위해 DNS 서버를 설정할 필요가 없습니다.

그러나, 이것은 …에 해당 하지 않습니다 . 따라서 공개 IP 주소는 Linux 서버에 속하기 때문에 라우터에 공개 IP 주소가 있습니다 . 누군가 aaa.aaa.aaa.aaa 에 연락하려고 하면 Linux 서버가 응답해야합니다. 당신이 제공 할 수있는 유일한 예외는 포트 전달을 통한 것 입니다. 즉 , 주어진 포트의 모든 통신이 라우터로 전송되지만 모든 포트의 모든 통신을 라우터로 전송할 수는 없습니다 ( 실제로 내 라우터를 의미합니다 … 공개 IP 주소를 갖습니다 ). 물론 Linux 서버가 2 개의 IP 주소를 소유하지 않는 한이 경우 라우터 용으로 예약하고 다른 하나는 Linux 서버용으로 예약 할 수 있습니다.


답변

그냥 알아 냈습니다-너무 간단하고 왜 이전에 그것을 알지 못했는지 모르겠습니다.

라우터에서 내 기본 게이트웨이이기 때문에 NOT 터널 서버 – 라우터는 eth0를의 게이트웨이를 통해 tun0에서 오는 응답 패킷을 시도하고 있습니다. SNAT를 사용하면 소스 주소가 10.3.0.1이됩니다. 라우터는 어디로 다시 보낼 것인지 알고 있으므로 MASQUERADE와 함께 작동합니다.

따라서 라우터에서 새 라우팅 테이블을 만들고 기본 게이트웨이를 tun0으로 설정하십시오. 그런 다음 bbb.bbb.bbb.bbb해당 테이블에서 소스 IP를 조회하십시오.