SNAT não funciona para manter o IP real do cliente, MASQUERADE funciona

SNAT não funciona para manter o IP real do cliente, MASQUERADE funciona

Tenho 3 hosts: AAA, BBB, CCC.

  1. HospedarAAAé umServiço OpenVPNr com IP172.17.10.1e máscara 255.255.255.0.
  2. HospedarBBBpossui 2 interfaces tun: • umaServidor OpenVPNcom IP172.16.10.1e máscara 255.255.255.0 • umCliente OpenVPNcom IP172.17.10.50(conectado ao servidor OpenVPN AAA)
  3. HospedarCCCé um cliente OpenVPN com IP172.16.10.50(conectado ao servidor OpenVPN BBB).Possui roteamento para 172.17.10.0/24 via 172.16.10.1.

insira a descrição da imagem aqui

Meu objetivo é que o host CCC execute ping com êxito no host AAA e no host AAA para ver o tráfego do IP original do host CCC (172.16.10.50).

Eu configurei iptables -A FORWARD... -J ACCEPTo host BBB.

No host BBB eu configureiPÓS-TROUregra. Por exemplo, com MASQUERADE o ping é bem sucedido, mas o problema é que desta forma o host AAA vê o src IP 172.17.10.50 (o ip do host BBB): iptables -t nat -D POSTROUTING -s 172.16.10.50 -d 172.17.10.1 -o tun17 -j MASQUERADE

Mudo MASQUERADE para SNAT, mas o ping falha: iptables -t nat -A POSTROUTING -s 172.16.10.50 -d 172.17.10.1 -o tun17 -j SNAT --to-source 172.16.10.50

O problema é que com o tcpdump vejo que o tráfego não sai do host BBB e não há tráfego para o host AAA:

root@BBB:# tcpdump -ni tun17
listening on tun17, link-type RAW (Raw IP), capture size 262144 bytes
12:16:45.777464 IP 172.16.10.50 > 172.17.10.1: ICMP echo request, id 30730, seq 1149, length 64
12:16:46.801548 IP 172.16.10.50 > 172.17.10.1: ICMP echo request, id 30730, seq 1150, length 64

Tentei alterar o SNAT para IP de origem 172.17.10.55(um endereço IP da rede 172.17.10.0/24), mas novamente o ping falha e novamente o tráfego não sai do host BBB:

iptables -t nat -A POSTROUTING -s 172.16.10.50 -d 172.17.10.1 -o tun17 -j SNAT --to-source 172.17.10.55

12:16:47.825419 IP 172.17.10.55 > 172.17.10.1: ICMP echo request, id 30730, seq 1151, length 64
12:16:48.849460 IP 172.17.10.55 > 172.17.10.1: ICMP echo request, id 30730, seq 1152, length 64

Por que não consigo usar SNAT com --to-source 172.16.10.50 ou mesmo com --to-source 172.17.10.55(qual endereço IP é da mesma rede 172.17.10.0/24) para executar ping em 172.17.10.1 do host CCC?

O tráfego parece estar no host BBB e não sai do seu tun17. Vejo que o tráfego vai de HOST CCC para HOST BBB, o tráfego é encaminhado de tun16 para tun17, mas não pode ser enviado para host AAA com SNAT.

O ping só funciona se o endereço IP de origem do pacote for 172.17.10.50. Se eu alterar o IP de origem para 172.17.10.55, por exemplo, o ping falhará.

Acho que o problema não é firewall, nem roteamento, suspeito de alguma restrição do OpenVPN, mas não tenho certeza. Os dois servidores OpenVPN estão no --topology subnetmodo com máscaras de rede /24.

Responder1

Você tem que adicionarrotano ccd para manipular a tabela de roteamento interna do openvpn.

Caso contrário, o openvpn não sabe para onde encaminhar os pacotes. No log do openvpn você deve ter uma linha como "MULTI: endereço de origem incorreto do cliente [ENDEREÇO ​​IP], pacote descartado"

Leia mais aqui:

https://community.openvpn.net/openvpn/wiki/RoutedLans

informação relacionada