Encaminha um endereço IP para outro endereço & keep src?

-1

Considere o seguinte:

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

Ambos os endereços da WAN foram roteados para o Linux Server e o servidor Linux pode ser acessado em ambos os endereços. Eu quero encaminhar bbb.bbb.bbb.bbb para outro host na interface LAN (10.3.0.2).

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)

Agora eu quero direcionar bbb.bbb.bbb.bbb para o meu roteador em 10.3.0.2 via tap0 (bbb.bbb.bbb.bbb era um endereço em ens3). Então meu roteador terá um endereço IP público. Isso é o que eu fiz:

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

O gráfico será como:

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)

E a tabela de roteamento no servidor 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

E no meu roteador, adicionei o endereço bbb.bbb.bbb.bbb e agora posso executar o ping de bbb.bbb.bbb.bbb no servidor Linux.

No entanto, não consigo pingar bbb.bbb.bbb.bbb em outros hosts. Então eu tentei:

iptables -t nat -A POSTROUTING -j MASQUERADE

Com essa regra, consegui pingar bbb.bbb.bbb.bbb na internet. E se eu fizer um traceroute, posso ver que o bbb.bbb.bbb.bbb está por trás do aaa.aaa.aaa.aaa, por exemplo:

... 
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

No entanto, eu quero o IP de origem real no ponto de extremidade do túnel (10.3.0.2) - agora estou recebendo todo o tráfego 10.3.0.1 no meu roteador porque o servidor Linux faz SNAT. Como devo fazer isso?

    
por Morichika Maho 02.03.2017 / 22:03

2 respostas

2

Esta é uma pergunta um pouco confusa, porque os comandos que você deu não fazem isso, ... Eu quero rotear o bbb.bbb.bbb.bbb para o meu roteador em 10.3.0.2 via tap0 . Se eu entendi bem, você quer que o roteador passe pelo servidor Linux para acessar a Internet. Se estiver correto, então é como obtê-lo, começando da configuração em sua primeira figura, isto é, negligenciando seus comandos a seguir.

  1. No servidor Linux, ative o encaminhamento IPv4 e, em seguida, emita:

      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. No roteador, onde presumo o encaminhamento IPv4 está habilitado por padrão:

    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
    

A vantagem disso é que ele faz um único nível de NAT, no servidor Linux, e o roteamento cuida de tudo. Se você quiser que os clientes da rede local encontrem o servidor Linux pelo nome (digamos, ele é chamado LS), adicione a seguinte linha:

10.3.0.2    LS

para o arquivo / etc / hosts do roteador: não há necessidade de configurar um servidor DNS para uma necessidade tão pequena.

No entanto, isso não equivale a ... Então, meu roteador terá um endereço IP público , porque o endereço IP público pertence ao servidor Linux. Se alguém tentar entrar em contato com aaa.aaa.aaa.aaa , será o servidor Linux que terá que responder. A única exceção que você pode fornecer é através do encaminhamento de porta , o que significa que as comunicações all em uma determinada porta serão transferidas para o roteador, mas você não pode transferir todas as comunicações em todas as portas para o roteador (o que realmente significa ... Então, meu roteador terá um endereço IP público ). A menos, é claro, que o seu servidor Linux possua 2 endereços IP , caso em que você poderia reservar um para o roteador e o outro para o servidor Linux.

    
por 03.03.2017 / 11:59
0

Apenas descobri - É tão simples e não sei por que não percebi isso antes.

Como meu gateway padrão no roteador é NÃO , o servidor de encapsulamento - o roteador está tentando responder o pacote vindo do tun0 através do gateway da eth0. Fazendo SNAT, tornar o endereço fonte 10.3.0.1 - O roteador sabe onde enviá-lo de volta, e é por isso que ele está trabalhando com o MASQUERADE.

Portanto, no roteador, crie uma nova tabela de roteamento e defina seu 'gateway padrão como tun0. Em seguida, faça com que o IP de origem bbb.bbb.bbb.bbb procure nessa tabela.

    
por 04.03.2017 / 04:24