当我想从外界访问 NAT 后面的设备时,我会去路由器并设置端口转发。
现在我的问题是,为什么它能在不配置路由器的情况下工作?例如,无需配置/访问路由器,就可以进行端口转发,方法是:Control Panel -> View Network Connections
进入后我就可以看到我的路由器:
如果我right click -> properties -> settings -> select services tab -> Add
那么我能够配置端口转发如下:
(我的网络内托管网站的计算机的 IP 为 192.168.0.5)
我知道路由器的基本工作原理,但我不明白如何在没有辅助服务器(tcp/udp 打孔)或 vpn 的情况下做到这一点。当我设置此选项以启用端口转发时,我的计算机正在做什么?
这也可以在 Linux 上完成,请观看此视频(https://youtu.be/bjsu5sFbMos) 展示了如何操作。
答案1
关键是 UPNPhttps://en.wikipedia.org/wiki/Universal_Plug_and_Play
路由器必须支持 UPNP,并且必须启用 UPNP 服务。如果禁用,问题中的流程将无法进行。
配置是通过 UPNP 命令而不是路由器的 Web 界面完成的。但在这两种情况下,路由器都会得到配置,只是方法不同。
现在我的问题是,为什么没有配置路由器它也能工作?
在这种情况下,操作系统会配置您的路由器。
当我设置此选项以启用端口转发时,我的计算机正在做什么?
操作系统向路由器发送 UPNP 消息。这些是网络数据包,如果你对此感兴趣,可以找到官方的 UPNP 协议描述。
您可以将其想象为有 2 个端口转发数据库。一个由路由器 Web 界面管理(端口转发、虚拟服务器,命名不同),另一个由路由器的客户端管理。但两者都存储在路由器上,并适用于路由器规则。
答案2
我想我必须了解更多有关 UPnP 的信息。执行以下步骤将更改路由器上的以下配置:
我按照 Linux 的方式做了(https://youtu.be/bjsu5sFbMos),并且我运行命令后:
$ upnpc -d 192.168.0.150 80: 80 TCP
在我的 Linux 机器上,该条目就从我的路由器上消失了。