IP 주소를 다른 주소로 라우팅하고 src 주소를 유지 하시겠습니까?


-1

다음을 고려하십시오.

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을 얻습니다. 어떻게해야합니까?


bbb.bbb.bbb.bbb를 ping해야하는 호스트의 라우팅 테이블은 어떤 모양입니까? bbb.bbb.bbb.bbb로 향하는 트래픽을 어디로 보냅니 까? 그리고 bbb.bbb.bbb.bbb는 실제 소스 IP에 대한 트래픽을 어디로 보냅니 까?
David Schwartz

답변:


2

이렇게하지 준 명령, ... 때문에, 약간 혼란 질문 나는 일단 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 서버용으로 예약 할 수 있습니다.


예, Linux 서버에는 두 개의 IP 주소가 있습니다. aaa.aaa.aaa.aaa 및 bbb.bbb.bbb.bbb는 모두 공용 IPv4 주소이며 둘 다 Linux 서버로 라우팅됩니다.
Morichika Maho

내가 자신을 올바르게 표현하지 못한 것 같습니다. 제 영어 실력이 좋지 않습니다. 혼란스럽지 않게 질문을 편집했습니다. 내가하고 싶은 것은 리눅스 서버의 IP 주소 중 하나를 라우터로 "주는"것이므로 인터넷에서 액세스 할 수있다. 라우터가 클라이언트의 실제 소스 IP를 볼 수 있기를 원하므로 Linux 서버에서 NAT를 수행하는 것이 해결책이 아니라 Linux 서버가 해당 IP 주소를 라우터로 직접 라우팅하기를 원합니다.
Morichika Maho

@MorichikaMaho 좋아, 이것은 분명하다. 내가 이해하지 못하는 것은 장치 에서 공개적이고 라우팅 가능한 IP 주소를 얻는 방법 입니다. 명확하게 설명해 주시겠습니까?
MariusMatutiae

하는 라우팅 eth0에 리눅스 서버에, 나는 그것을 라우팅 일단 tap0 사용하여 Linux 서버에 ip route add bbb.bbb.bbb.bbb dev tap0.
Morichika Maho

@MorichikaMaho 그럼 바로 잡자. 리눅스 서버는 다른 공용 IP를 가진 두 개의 이더넷 인터페이스 ( eth0ens3 )를 가지고 있는가? 이 경우에 (당신이 그것을 부르는)을 재 라우팅하여 일단 tap0하는 것은 완전히 잘못된 것입니다, 당신은이 경로를 삭제해야합니다. 두 개의 공용 IP 주소가 동일한 게이트웨이를 공유합니까? 이건 매우 중요합니다.
MariusMatutiae

0

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

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

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


그것보다 분명히 더 복잡합니다. 사실, 적어도 당신이 내 게시물에 대한 귀하의 의견에 설명 된 방식으로는 할 수 없다고 믿지 않습니다.
MariusMatutiae

@MariusMatutiae 흠 ... 나도 확실하게 말할 수 없습니다. 169.254.0.0/16블록 과 관련이있을 수 있습니다 . ens3및 에서 프록시 ARP를 활성화했습니다 tap0. 로가는 트래픽이 때 bbb.bbb.bbb.bbb부터가 ens3, 내가 볼 169.254.169.254-있는 사람을 부탁 bbb.bbb.bbb.bbbens3, 그리고 내 라우터 tap0답변 그것.
Morichika Maho

탭 인터페이스에는 IP 주소가 필요하지 않으며 대신 브리지되어야하며 브리지는 IP 주소를 가져옵니다.
MariusMatutiae

@MariusMatutiae 예-ARP가 라우터의 위치를 ​​찾도록 할 수 있으므로 IP가 필요하지 않습니다. 프록시 ARP는 여기에서 신부와 같은 일을 할 것이므로 다리를 사용하지 않았습니다.
Maho
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.