我的计算机正在运行 VPN,但我有一个 SSH 隧道将端口上的流量转发8000
到其路由器(Ubiquiti Edgemax),通过该路由器我可以路由流量以绕过 VPN。
我在这台机器的两个端口上运行着一项服务,9001
并且9002
需要能够接收来自互联网的传入连接。我已经设置了到路由器的类似 SSH 隧道。
当我从互联网上扫描路由器的 IP 时,它显示这些端口已关闭。当我查找文章时,人们担心转发端口(例如,转发到我的客户端计算机),而我实际上是朝另一个方向走。我想我需要打开9001
路由器9002
本身的防火墙。
如何在 Ubiquiti Edgemax 上打开这两个端口的防火墙?
答案1
首先,端口之所以开放是因为有一个进程正在监听它,并且客户端和服务之间存在网络通道。
因此,除非您谈论的是路由器本身托管的服务,否则它无法“打开端口”。路由器可以阻止本来会打开的端口(在大多数家庭用例中,这是它的工作),但它除了允许路径上的流量之外什么也不能做。
还要注意,将端口转发到没有进程的 IP 也不会导致端口打开。使端口“打开”的原因是有一个服务正在监听该端口。否则,端口是被 NAT 还是被内部主机本身关闭都无关紧要;无论哪种方式,端口都是关闭的,只是从不同的角度而言。
其次,人们所说的端口转发,技术上称为基因转移酶。您所描述的是 DNAT 场景(与 SNAT 场景相反,在 SNAT 场景中,您从 LAN 进行出站连接;除了状态 NAT 的自动机制之外,SNAT 在家庭网络中并不常见)。
因此,要使您的服务接受来自互联网的传入连接,您需要具备三个元素:一个进程、一个端口和一个路径。
- 为每个端口创建一个转发规则,接受来自 WAN 的流量,并转发到 9001 和 9002 上的内部主机。EdgeOS 有一个相当不错的界面来创建转发规则。
- 在防火墙中允许从 Internet 传入该端口的流量。在 EdgeOS 术语中,在 WAN 接口上放置一个规则集,其方向为“IN”,并设置一条规则以接受发往该端口的新状态和已建立状态的流量。
- 验证服务是否正在监听 0.0.0.0 或其他合适的网络接口(127.0.0.1 不起作用)。您可以使用
netstat -ntlup
(linux)或netstat -abno | findstr LISTENING
(以管理员身份使用 powershell)检查您的服务绑定到哪个接口,并查看本地 IP 地址。如果是 0.0.0.0 或您 LAN 上的 IP,它应该可以工作。