我目前拥有一台 Buffalo N300 无线路由器。我还有一台小型 G3 Lombard 笔记本电脑通过以太网线连接到它。
使用我之前的路由器时,端口转发非常简单,而且运行完美。然而,使用这个路由器时,端口转发同样简单,但它绝对拒绝转发端口。
如果我禁用防火墙,则不会成功。如果我为 IP 创建静态租约并将其分配给笔记本电脑的 MAC 地址并尝试,则不会成功。如果我这样做并为笔记本电脑的静态租约的 IP 地址设置 DMZ,则同样不会成功。
笔记本电脑的 iptables 设置为允许任何客户端发出的所有请求。所以这不是问题;它与之前的路由器配合得很好。
令人担忧的是,它会在端口 8080 上转发自己的远程 Web 界面,没有任何问题。使用我之前的路由器,我可以转发端口:21、22、80 和 9091,完全没有问题。这个路由器似乎完全忽略了我在端口转发方面提出的任何要求。
如果有人能帮助我弄清楚为什么会发生这种情况,我将不胜感激。
编辑:此外,该路由器还配备了适用于其型号(版本 17135)的最新版 DD-WRT。
答案1
您正在自己的网络内部进行测试。您必须从网络外部测试端口转发。
端口转发只会重写目标地址。如果您从内部进行测试,回复数据包将直接到达目的地,路由器将没有机会重写回复数据包的源地址。
它适用于路由器转发其自己的端口,因为回复不必返回通过路由器进行 NAT,因为它已经在路由器上了。
如果您希望此功能在您自己的网络内部运行,则需要使用环回 NAT(有时称为发夹 NAT),这是一种可以重写源地址和目标地址的双重 NAT。这可确保回复数据包通过路由器返回,并且也可以重写。
事情的经过如下:
1) 内部机器向您的公网 IP 地址发送一个数据包。源地址是内部机器的地址。由于机器没有到公网 IP 地址的路由,因此它会沿着其默认路由将其发送到路由器。
2) 路由器收到数据包后发现它符合端口转发规则。它将目标地址重写为服务器的内部地址,并将数据包转发到服务器。数据包仍具有内部机器的源地址。
3) 服务器对数据包做出回复。由于数据包包含内部机器的源地址,因此回复包含内部机器的目的地。回复的源是服务器的内部地址。由于目的地是本地的,因此数据包不会转发到路由器,而是直接转发到本地机器。
4) 发起方机器收到回复。但回复的源地址是服务器的内部地址,而不是机器发送原始数据包的地址(您的公共 IP 地址)。因此发起方机器丢弃回复。