SNAT 和 DNAT 端口转发到链接子网

SNAT 和 DNAT 端口转发到链接子网

我对经典版本有些疑问DNAT/SNAT 端口转发问题,由于涉及多个网络和子网,因此增加了复杂性。我想将端口从我的 VPS 服务器转发到我家庭网络上的系统。VPS 通过 OpenVPN 连接到此网络,并静态路由我的家庭子网,此 VPS 本身通过 OpenVPN 提供这些子网,但这并不那么重要。

我正在尝试将这两个 iptables 规则添加到 VPS 服务器以实现这一点......

# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 2222 -j DNAT --to-destination 192.168.1.4:2222
# iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.4 --dport 2222 -j SNAT --to-source 10.8.0.1

(我尝试了上述几种变化)

但是,我似乎无法通过此端口 SSH 连接到我的 VPS。在某些情况下,我的家庭网络路由器地址相对于 VPS 是,10.8.0.1并且仅在 VPS 服务器接口上打开端口也很重要eth0

我发现这解释了这里的概念,从 VPS 服务器运行......

# ping -c1 192.168.1.4
PING 192.168.1.4 (192.168.1.4) 56(84) bytes of data.
64 bytes from 192.168.1.4: icmp_seq=1 ttl=63 time=5.60 ms

--- 192.168.1.4 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 5.601/5.601/5.601/0.000 ms
# traceroute 192.168.1.4
traceroute to 192.168.1.4 (192.168.1.4), 30 hops max, 60 byte packets
 1  10.8.0.1 (10.8.0.1)  6.644 ms  6.597 ms  7.511 ms
 2  192.168.1.4 (192.168.1.4)  7.473 ms  7.446 ms  7.415 ms

如果您好奇的话,事情就是这样的,因为我的手机通过 OpenVPN 连接到这个 VPS,它不仅可以上网,还可以无缝访问家里的 LAN。我这样做已经有一段时间了,因为它允许我在旅途中轻松访问我的 CCTV 系统和家庭自动化工具。

这显示了我的 VPS 到家庭网络的 OpenVPN 客户端隧道接口 IPv4 配置...

# ip -4 addr show dev tun1
9: tun1: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 500
    inet 10.8.0.3/24 scope global tun1
       valid_lft forever preferred_lft forever

以及 VPS 服务器的 IPv4 路由表...

# ip -4 route
default via 203.57.114.1 dev eth0 onlink 
10.7.0.0/24 dev tun0 proto kernel scope link src 10.7.0.1 
10.8.0.0/24 dev tun1 proto kernel scope link src 10.8.0.3 
192.168.1.0/24 via 10.8.0.1 dev tun1 
192.168.4.0/24 via 10.8.0.1 dev tun1 
192.168.84.0/24 via 10.8.0.1 dev tun1 
673.557.514.0/24 dev eth0 proto kernel scope link src 673.557.514.231

(为了保护我的隐私,我把上面最后一行改成了不可能的 IPv4 地址)

我有点困惑,不知道在这种更复杂的设置中该如何处理这个简单的端口转发。不幸的是,在普通的 NAT 端口转发上搜索只会一遍又一遍地找到相同的内容。

答案1

我已经解决了自己的问题,我通过摸索和寻找找到了答案。在测试过程中,我也未能从 nat 表中正确删除 POSTROUTING 规则。

这就是解决方案...

# iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.4 --dport 2222 -j SNAT --to-source 10.8.0.3

对于我的家庭 LAN 网络,此 VPS 服务器的 IP 地址是10.8.0.3,LAN 上的系统是192.168.1.4,这样才能正常工作。我通常会删除此类问题,但我相信很多人会像我一样在这种情况下被疑惑所困扰,这将对这些人有所帮助。

相关内容