![DSL 路由器上的端口转发不起作用](https://linux22.com/image/1323615/DSL%20%E8%B7%AF%E7%94%B1%E5%99%A8%E4%B8%8A%E7%9A%84%E7%AB%AF%E5%8F%A3%E8%BD%AC%E5%8F%91%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
我使用 BSNL 宽带连接,并提供了可充当许多无线设备的默认网关的 DSL 路由器。我的服务器就是这样的设备之一。我租用了一个静态 IP。这样,到该 IP 的所有流量都会定向到路由器。
但要将请求从路由器转发到我的服务器(使用 wifi 连接),需要端口转发(从这里)。 可以通过转到 部分VIRTUAL SERVER
部分来完成 BSNL DSL 路由器的端口转发NAT
。 在那里,我已将端口 8080(我的 JBOSS 使用端口 8080)上的所有请求转发到具有内部 IP 地址的服务器192.168.1.7
。
我能够从服务器连接到互联网(192.168.1.7
),通过 wifi 连接到路由器的所有设备都可以相互 ping 通。 但端口 8080 上的流量并未定向到服务器。
这可能是什么原因造成的?
笔记
当我的请求 url 是 时,我可以访问服务器http://192.168.1.7:8080/myapp
。但是当我的 url 是 时http://118.XXX.XXX.XXX:8080/myapp
,我无法访问它。118.xxx.xxx.xxx 是路由器的公共 IP。
答案1
它无法在局域网内工作。它只能在互联网的其余部分工作。原因如下:
您尝试从 LAN 机器访问您的公共 IP 地址。
机器看到该地址在局域网之外,就将数据包发送给路由器。
路由器将目的地 NAT 到 LAN 机器,但源地址未被修改(仍然是发起请求的 LAN 机器)。
您的服务器接收请求并向连接源(仍然是 LAN 机器)发送响应。
LAN 计算机收到服务器的响应,但它期待路由器的响应(因为它已连接到公共 IP 地址,它必须得到响应从公网 IP 地址,而不是服务器的 LAN 地址)。由于回复的源地址错误,因此不被接受。糟糕。
端口转发(重写目标地址)只能从外部到内部起作用,不能从内部到内部起作用。为此,您需要发夹式 NAT,它除了重写源地址外,还重写目标地址。
答案2
许多路由器不允许从本地网络转发到其 WAN 端口的连接返回 LAN(NAT 环回或发夹)。这样,WAN IP 就无法从内部访问,您必须使用不同的地址来联系路由器或端口已转发到的机器,在您的例子中是 192.168.1.7。您可以从外部测试端口转发。对于 Web 服务器,最简单的方法可能是使用代理,例如http://hidemyass.com。
如果您想通过域名访问服务器,您将遇到同样的问题。 DNS 服务器会将您引导至公共 IP 地址。 通过编辑本地计算机上的 hosts 文件,您可以让它们指向服务器的本地 IP,并且您可以在任何地方使用相同的地址。
答案3
- 检查您是否可以直接访问 8080(使用您的 192.168 IP)
- 然后在你的路由器上,将 8080 转发到你的 jboss 服务器 8080,有时路由器本身可能正在监听 8080,在这种情况下,更改你的端口号
答案4
2)
可能是因为您的路由器不支持 NAT 查找。在 LAN 中,您将无法使用外部 IP 访问内部计算机,但外部 IP 在世界其他地方可以使用。
如果你想通过外部 IP 测试网站,那么你可以使用代理。我喜欢 Anonymouse,但你可以在 proxy.org 上从数千个代理中进行选择。
请参阅路由器上的 NAT 环回是否存在安全问题? 以了解关于NAT 查找是否安全。