Encaminhamento de uma porta específica

1

Tentei encaminhar um ip: port específico para um ip: port específico em uma máquina Linux. Eu usei o iptables com o seguinte comando:

iptables -t nat -A OUTPUT -p tcp -d 10.0.2.5 --dport 80 -j DNAT --to-destination 69.31.21.42:80

10.0.2.5 é um endereço arbitrário que eu escolhi para ver se o comando funciona e 69.31.21.42 é um endereço de um site público. Verifiquei então que o encaminhamento funcionava: corri nmap -p 80 10.0.2.5e obtive um resultado positivo. Muito bom até agora. No entanto, tentei correr nmap -p 81 10.0.2.5e também obtive um resultado positivo. Não era o que eu esperava, pois queria que a porta 80 fosse encaminhada. Eu corri iptables -t nat -Le notei que, de fato, todo o host 10.0.2.5 é mapeado para 69.31.21.42:80:

Chain OUTPUT (policy ACCEPT)
target     prot opt source     destination
DNAT       tcp  --  anywhere   ip-10-0-2-5.ec2.internal  tcp dpt:http to:69.31.21.42:80

O que está faltando no meu comando iptables? Por que não está --dportfuncionando?

Shirile
fonte
Em primeiro lugar, você diz que " todo o host 10.0.2.15 é mapeado para 69.31.21.42:80 ", mas você oferece suporte a essa iptablessaída com um nome de host ip-10-0-2-5.ec2.internal, o que provavelmente não é 10.0.2.15 . Em segundo lugar, estamos perdendo resultados importantes, como restrições de porta; tente usar iptables -L -n -v, não apenas iptables -Le atualize essa regra acima.
21915 MadHatter
Editado para substituir 10.0.2.15 por 10.0.2.5, que parece ser a intenção.
Andrew Schulman
Isso não deveria acontecer. Tentei replicar seu problema com as instruções exatas, mas com diferentes endereços IP e recebi o erro "Não há rota para hospedar". Porque escolhi um endereço IP na minha rede local que não está em uso. É possível que você esteja usando um endereço IP de um servidor que exista e tenha um serviço em execução no TCP / 81?
Alexander Janssen
@MadHatter - Executei o iptables -L -n -v e a saída nem contém 10.0.2.5 ... No entanto, não uso uma máquina diferente e a saída do iptables -t nat -L é: DNAT tcp - em qualquer lugar ip-10-0-2-15.ec2.internal tcp dpt: 2553 para: 10.0.0.4: 2554 Isso parece ok, certo? Talvez o problema tenha sido específico da máquina?
Shirile 14/06/2015
@AlexanderJanssen - o endereço IP que estou usando definitivamente não é de um servidor que já esteja em execução. Verifiquei se o mesmo comando nmap falha antes de executar o comando iptables e obtém êxito mais tarde.
Shirile 14/06/2015

Respostas:

1

Você precisa usar a POSTROUTINGcadeia para fazer o que você quer fazer.

iptables -t nat -A POSTROUTING -p tcp -d 10.0.2.5 --dport 80 -j SNAT --to 69.31.21.42:80

homem iptables

and POSTROUTING (for altering packets as they  are  about  to  go
                  out)
c4f4t0r
fonte
-2

Antes de tudo, saiba que não é possível encaminhar TCP IP: Port para outro IP: Port. Isso só é possível com o UDP e há um script Perl separado para isso.

Sim, você pode encaminhar um IP diretamente para outra máquina, não para uma porta específica.

Asad Moeen
fonte
Desculpe, Asad; você está dizendo que não pode tráfego DNAT TCP destinado a uma porta, a outra porta no mesmo servidor ou em outro servidor? Porque se você é, isso é simplesmente errado.
MadHatter