iptables NAT não preserva o IP remoto

2

Eu tenho as regras iptables abaixo encaminhando o tráfego ssh de entrada na porta 2222 para uma máquina virtual em execução em uma rede vmware "vmnet" no mesmo host.

192.168.1.1   192.168.1.40
+---------+     +------+     +-----------------+ 
| network |---->| host |__   | virtual machine |
+---------+     +------+ \__+-----------------+
              192.168.2.1 \_____192.168.2.22  

No auth.log da máquina virtual, o endereço IP de entrada para logins remotos é sempre o IP do host que encaminhou os pacotes. Como posso preservar as informações do IP remoto?

*filter
:INPUT ACCEPT [593178:45807398]
:FORWARD ACCEPT [881:158378]
:OUTPUT ACCEPT [859348:1232593358]
-A FORWARD -d 192.168.2.22/32 -o vmnet99 -p tcp -m tcp --dport 22 -j ACCEPT
COMMIT

*nat
:PREROUTING ACCEPT [943:138565]
:INPUT ACCEPT [658:122878]
:OUTPUT ACCEPT [3266:229178]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -p tcp -m tcp --dport 2222 -j DNAT --to-destination 192.168.2.22:22
-A POSTROUTING -j MASQUERADE
COMMIT
    
por RaWkStAr 19.12.2013 / 03:58

1 resposta

3

Sua última regra de iptables,

 -A POSTROUTING -j MASQUERADE

está mascarando todos os pacotes que saem do host, incluindo aqueles para a VM: essa é a razão pela qual você vê, no guest, todos os pacotes como provenientes do host. Você deve limitar o mascaramento de pacotes deixando o host para a internet, algo como

 -A POSTROUTING -o eth0 -j MASQUERADE

se você chamar eth0 a interface conectada à Internet.

Editar:

Se a pergunta for o que mais eu preciso para fazer o encaminhamento de IP funcionar, então uma resposta suficiente é:

  sudo iptables -t nat -A PREROUTING -p tcp --dport 2222 -j DNAT --to-destination 192.168.2.22:22
    
por 19.12.2013 / 08:38