ksv*_*svi 5 networking troubleshooting nat port-forwarding
快速总结:转发的端口在外部世界有效,但从使用外部 IP 的内部网络连接被拒绝。
这是一个简化的情况,以使解释更容易:
我有一台在端口 12345 上运行服务的计算机。该计算机具有内部 IP 192.168.1.100,并直接连接到具有内部 IP 192.168.1.1 和外部(公共、静态)IP 1.2.3.4 的调制解调器/路由器。(路由器是TP-LINK TD-w8960N)我在端口12345设置了端口转发(虚拟服务器),转到192.168.1.100的12345端口。
如果我从同一台计算机运行 telnet 192.168.1.100 12345 一切正常。但运行 telnet 1.2.3.4 12345 表示连接被拒绝。如果我在另一台计算机上执行此操作(在同一内部网络上,连接到路由器),则会发生同样的情况。这看起来端口转发不起作用。然而...
如果我在我的外部 IP 和服务端口上运行在线端口检查服务,它会显示该端口已打开,我可以看到远程服务器正在连接并立即关闭连接。使用另一台通过移动连接连接到互联网的计算机,我还可以使用 telnet 1.2.3.4 12345 并且获得有效的连接。
因此,端口转发似乎有效,但使用内部网络的外部 IP 却无效。我不知道是什么原因造成的,因为另一个与此非常相似的设置(不同的路由器)适合我。我可以通过内部和外部 IP 从网络内部访问服务器上运行的服务。
注意:我知道我可以使用网络内部的内部 IP 来访问此服务。但如果我的笔记本电脑必须能够从内部和外部执行此操作,那么在软件配置中不断在 1.2.3.4 和 192.168.1.100 之间切换会很烦人。
路由器输出:
> iptables -t nat -L -n
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 224.0.0.0/3
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:25 to:192.168.1.101
DNAT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:25 to:192.168.1.101
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:110 to:192.168.1.101
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:12345 to:192.168.1.102
DNAT udp -- 0.0.0.0/0 192.168.1.1 udp dpt:53 to:217.118.96.203
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 192.168.1.0/24 0.0.0.0/0
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Run Code Online (Sandbox Code Playgroud)
据我所知你不能这样做。
尝试跟踪连接,内部网络上的任何主机选择 192.168.1.1 作为 1.2.3.4 的下一跳,那么路由器应该处理此连接,但我认为它无法从内部转发连接到内部。
你必须查看你对路由器的控制级别,如果它是 Linux 服务器,你可以使用 iptables,但这样的设备不提供对网络配置的控制级别。