O NAT-reescreve o IP de origem em pacotes?

3

Estou tentando configurar o encaminhamento de porta para que um IP específico (por exemplo, 1.2.3.4/32) possa executar o SSH por meio de um bastião (por exemplo, 5.5.5.5:2222) em um servidor de aplicativos (10.3.3.3:22). O bastião e o servidor de aplicativos estão sendo executados em uma VPC na Amazon com apenas o bastião exposto à Internet.

Estou usando a seguinte regra no bastião (deixei de fora o IP de origem até que ele funcione):

iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 2222 -j DNAT --to 10.3.3.3:22

mas quando tento me conectar, não obtenho resposta.

A execução do tcpdump no bastião mostra que o tráfego está passando, então presumo que estou atingindo os grupos de segurança VPC do servidor de aplicativos e não chegando até a porta 22 nele. Acho que isso está acontecendo porque, embora o bastião tenha permissão para acessar a porta 22 no servidor de aplicativos, o IP 1.2.3.4 não funciona.

Então, minha pergunta é: O NAT-ing como eu o configurei automaticamente muda o IP de origem dos pacotes para que eles pareçam vir do bastião, ou eles conterão o IP de origem original, neste caso 1.2 .3.4?

Se os pacotes contêm 1.2.3.4 como o IP de origem depois de encaminhá-los, como posso alterar o endereço de origem para ser o bastião?

Atualizar

Eu acredito que, especificamente para o SSH, eu poderia configurar o tunelamento SSH, mas também preciso de uma solução semelhante para permitir o acesso à porta 443 em vários servidores de aplicativos diferentes.

Eu já tentei adicionar o SNAT também com:

iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 10.2.2.2

mas ainda não funciona (10.2.2.2 é o IP interno do bastião).

    
por Drew J 14.08.2013 / 13:12

3 respostas

4

So, my question is: Does NAT-ing the way I've set it up automatically change the source IP of packets so they appear to come from the bastion, or will they contain the original source IP, in this case 1.2.3.4?

Não, o DNAT não altera o IP de origem, apenas o destino . DNAT - Tradução de endereço de rede de destino

How would I know if IP forwarding was enabled on the bastion?

O seguinte comando deve retornar 1

# cat /proc/sys/net/ipv4/ip_forward

And how can I make iptables perform SNAT (if that's in fact what I want - I want all traffic inside the VPC to appear to come from the bastion, and for the bastion to then redirect it back out appropriately)?

# iptables -t nat -I POSTROUTING -p tcp -s 1.2.3.4 -d 5.5.5.5 --dport 2222 -j DNAT --to-destination 10.3.3.3:22
    
por 14.08.2013 / 13:33
3

Você configurou DNAT , ou "destino NAT", o que significa que o seu gateway está reescrevendo o endereço destino das conexões que correspondem a essa regra. O endereço de origem permanece o mesmo, pois você deve saber se está executando tcpdump na interface de saída do seu host bastion ou no servidor do seu aplicativo.

Isso significa que o servidor de aplicativos está tentando devolver os pacotes ao endereço do host de origem, 1.2.3.4 em seu exemplo. Se isso vai ou não funcionar, depende de como seus hosts estão conectados.

Uma solução simples seria substituir sua regra do iptables por um simples proxy tcp (por exemplo, haproxy , pen , saldo , etc). Faça com que o proxy escute na porta 2222 em seu host bastião e encaminhe as conexões para a porta 22 no servidor de aplicativos e ele simplesmente funcionará, porque da perspectiva das conexões do servidor de aplicativos se originam no host bastião.

    
por 14.08.2013 / 13:38
0

This is just a quick fix/short term solution

Então, que tal um túnel SSH?

ssh -L 2222:10.3.3.3:22 [email protected] -N &
#then
ssh username@localhost -p 2222

SSH sobre SSH: D

Apenas um pensamento.

Atualização: não viu isso: - /: "Atualizar Eu acho que especificamente para o SSH eu poderia configurar o tunelamento SSH, mas também preciso de uma solução semelhante para permitir o acesso à porta 443 em vários servidores de aplicativos diferentes. "

    
por 14.08.2013 / 15:47

Tags