我有一个 OpenVPN 服务器,连接了两个客户端。客户端没有公共 IP 地址,因此通过 SSH 访问它们的唯一方法是通过 VPN。
运行服务器的计算机位于公共 IP 地址为 wxyz 的路由器后面。服务器的 LAN 地址为 10.0.0.5。路由器的 LAN 地址是 10.0.0.1,并且将运行服务器 (10.0.0.5) 的计算机作为 DMZ。
客户端 #1 始终获取 VPN 地址 192.168.2.6 并在端口 1802 上运行 ssh 服务
客户端 #2 始终获取 VPN 地址 192.168.2.14 并在端口 1804 上运行 ssh 服务
我想做的是能够从任何地方 ssh 到这些客户端,方法是:
ssh w.x.y.z -p1802
对于第一个客户和
ssh w.x.y.z -p1804
对于第二个客户。
我已经按照以下规则设置了 iptables:
:OUTPUT ACCEPT [6473:428732]
-A PREROUTING -d w.x.y.z -p tcp -m tcp --dport 1802 -j DNAT --to-destination 192.168.2.6
-A PREROUTING -d w.x.y.z -p tcp -m tcp --dport 1804 -j DNAT --to-destination 192.168.2.14
这是我的路由表:
内核IP路由表
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.2.2 * 255.255.255.255 UH 0 0 0 tun0
192.168.2.0 192.168.2.2 255.255.255.0 UG 0 0 0 tun0
10.0.0.0 * 255.255.255.0 U 0 0 0 eth0
169.254.0.0 * 255.255.0.0 U 0 0 0 eth0
default 10.0.0.1 0.0.0.0 UG 0 0 0 eth0
ifconfig 输出:
[root@osrv sysconfig]# /sbin/ifconfig
eth0 Link encap:Ethernet HWaddr 80:51:EA:74:92:A5
inet addr:10.0.0.6 Bcast:10.0.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4554899 errors:0 dropped:0 overruns:0 frame:0
TX packets:4568878 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1083718390 (1.0 GiB) TX bytes:1131399760 (1.0 GiB)
Interrupt:11 Base address:0xa000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:11833 errors:0 dropped:0 overruns:0 frame:0
TX packets:11833 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:5197664 (4.9 MiB) TX bytes:5197664 (4.9 MiB)
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:192.168.2.1 P-t-P:192.168.2.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:985135 errors:0 dropped:0 overruns:0 frame:0
TX packets:947116 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:215916038 (205.9 MiB) TX bytes:429598806 (409.6 MiB)
通过这样的设置,如果我登录到服务器,我可以使用 ssh 到任一客户端
ssh 192.168.2.6 -p 1802
ssh 192.168.2.14 -p1804
两者都工作得很好。
但是,当我尝试从互联网上执行此操作时:
ssh w.x.y.z -p 1802
工作正常但是
ssh w.x.y.z -p 1804
没有回应。
我错过了什么?
答案1
我想我会回答我自己的问题。
我省略了 SNAT 规则。这修复了它:
-A POSTROUTING -d 192.168.2.6 -p tcp -m tcp --dport 1624 -j SNAT --to-source 192.168.2.1
-A POSTROUTING -d 192.168.2.14 -p tcp -m tcp --dport 1626 -j SNAT --到源 192.168.2.1