iptables NAT 不保留远程 IP

iptables NAT 不保留远程 IP

我有以下 iptables 规则,将端口 2222 上的传入 ssh 流量转发到同一主机上的 vmware“vmnet”网络中运行的虚拟机。

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

在虚拟机的auth.log中,远程登录的传入IP地址始终是转发数据包的主机的IP。 如何保存远程 IP 信息?

*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

答案1

你的最后一条 iptables 规则,

 -A POSTROUTING -j MASQUERADE

伪装所有离开主机的数据包,包括发往虚拟机的数据包:这就是为什么您在客户机上看到所有数据包都来自主机的原因。您应该将伪装限制在离开主机前往互联网的数据包上,例如

 -A POSTROUTING -o eth0 -j MASQUERADE

如果您将 eth0 称为连接到 Internet 的接口。

编辑:

如果问题是我还需要什么为了使 IP 转发正常工作,一个充分的答案是:

  sudo iptables -t nat -A PREROUTING -p tcp --dport 2222 -j DNAT --to-destination 192.168.2.22:22

相关内容