1.1.1.1 - public IP of VPS
10.1.0.1 - internal IP of OpenVPN server running on VPS
192.168.1.0/24 - local subnet on the VPN client's side
192.168.1.101 - local server running on port TCP 1234
VPN/VPS的主要用途:
- 作为浏览特定网站的门户
- 作为连接到服务器 192.168.1.101 的客户端的代理
当前 iptables 设置:
-A PREROUTING -d 1.1.1.1 -p tcp -m tcp --dport 1234 -j DNAT --to-destination 192.168.1.101:1234
-A POSTROUTING -d 192.168.1.101 -p tcp -m tcp --dport 1234 -j SNAT --to-source 10.1.0.1
-A POSTROUTING -o eth0 -j SNAT --to-source 1.1.1.1
前两行将 TCP 1234 端口转发到所需目的地,并且有效。唯一的问题是,在目标服务器上我看不到已连接客户端的真实 IP。所有客户端都具有相同的 IP:10.1.0.1。我尝试将第二行更改为:
-A POSTROUTING -d 192.168.1.101 -p tcp -m tcp --dport 1234 -j SNAT --to-source 1.1.1.1
但客户端根本就无法连接。最后一行是用来让我上网的。
问题:我应该如何正确设置规则,以便可以看到连接客户端的真实 IP?
答案1
好的,看来您正在尝试通过 VPN 设置端口转发,即 1.1.1.1:1234 -> 192.168.1.101:1234。您的 openvpn 配置似乎也不错。
正如评论中所述,在第二条规则中,您使用 修改了源 IP -j SNAT --to-source 10.1.0.1
。要实现端口转发,请将您的 iptables 规则替换为:
-A PREROUTING -t nat -i eth0 -d 1.1.1.1 -p tcp --dport 1234 -j DNAT --to-destination 192.168.1.101:1234
-A FORWARD -p tcp -d 192.168.1.101 --dport 1234 -j ACCEPT
- 第一条规则告诉 iptable 将所有传入的 tcp 连接发送到接口 eth0 上的端口 1234,并将目标设置为 1.1.1.1,朝向内部机器 192.168.1.101 的端口 1234。
- 第二条规则允许将数据包转发到192.168.1.101的1234端口