使用iptables更改传入数据包的IP地址

我有一个局域网内的服务器(S1),一个路由器在我的控制之外。 在服务器上安装openvpn,我可以用sshlogin。 局域网上有另一台服务器(S2),我想把S2上的端口转发到端口S1。

如果我做

sudo iptables -t nat -A PREROUTING -p tcp -m tcp -d S1 --dport 8001 -j DNAT --to-destination S2:80 

然后尝试从我的电脑连接S1:8001我有S1的LAN接口:

 IP **my_vpn_ip**.48174 > S2.80: Flags [S], seq 4243753453, win 14600, options [mss 1368,sackOK,TS val 89266048 ecr 0,nop,wscale 7], length 0 

显然这是行不通的,因为S2没有路由到我的电脑,也不能发送回复。 是否有可能欺骗源S1上的数据包回来,然后做NAT?

在S2上改变路由是不可能的,因为它是一个function非常有限的IP摄像机。

在你连接的主机上设置SNAT / Masquerading。 这样你的源地址就被修改成了来自NAT的代理。

像这样简单的规则可能会做你想要的。

 iptables -t nat -A POSTROUTING --destination S2 -j MASQ