端口转发无法与双局域网设备配合使用

端口转发无法与双局域网设备配合使用

我家里有一个 NAS,它有双 LAN 电缆连接两个不同的子网。

 - lan1: 192.168.31.185 on subnet 192.168.31.0/24
 - lan2: 192.168.10.42 on subnet 192.168.10.0/24

在此 NAS 服务器上,有一个公开端口 5001 的 Web 服务。我想从我的办公室访问它。

由于 192.168.10.0/24 子网网关路由器可以访问互联网。我在其上设置了 DDNS 和端口转发规则。

 - port-forwarding rule: ddns-domain.com:5001 -> 192.168.10.42:5001

但测试表明它不起作用......调试开始

在同一个 192.168.10.0/24 子网上,有一台地址为 192.168.10.38 的 PC。

  1. 尝试从 PC 和网关路由器访问 192.168.10.42:5001,效果很好

  2. 在PC:5001上设置一个演示Web服务,更改端口转发规则:ddns-domain.com:5001->PC:5001,从我的移动4G网络访问,效果很好

这让我很困惑,因为我以前以为端口转发是一种特殊的反向代理。如果满足以下条件,它应该可以工作:

 - resource provider can be accessed from the proxy
 - proxy can be accessed from its own network address

之前调试过程中确认了这两个都正常。那么我应该检查什么来找出问题所在呢?

答案1

当您使用端口转发时,您需要让会话的返回路径与转发路径相同。

考虑以下网络:

+-----+a        c+-------+e           (       )
|     |----------|router1|----------( INTERNET )
|     |          +-------+         (            )     g+-------+  +------+
| NAS |                           (            )-------|firewal|--|server|
|     |b        d+-------+f       (             )      +-------+  +------+
|     |----------|router2|---------(           )
+-----+          +-------+            (      )

(我喜欢 ascii-arts)

在这幅图中,

a   first NAS interface      192.168.31.185
b   second NAS interface     192.168.10.42
c   router1 internal         192.168.31.1
d   router2 internal         192.168.10.1
e   router1 external         xx.xx.xx.xx
f   router2 external         yy.yy.yy.yy
g   An ip address on Inet    zz.zz.zz.zz

因此,G 尝试访问您的 NAS。您设置

port-forwarding rule: ddns-domain.com:5001 -> 192.168.10.42:5001

因此,G 将尝试创建一个会话 (tcp,zz.zz.zz.zz:12345->yy.yy.yy.yy:5001)。Router2 执行端口转发并将其转换为 (tcp,zz.zz.zz.zz:12345->192.168.10.42)。您的 NAS 会礼貌地回复。对于 NAS,zz.zz.zz.zz 不在路由表中,因此它会将回复发送到默认网关,即 c。Router1 完全不知道 router2 已完成的 NAT,因此它将执行自己的 NAT 并将回复发送为 (tcp,xx.xx.xx.xx:5001->zz.zz.zz.zz:12345)。G 会想:嗯?我从未向 xx.xx.xx.xx 发送过任何东西,并会丢弃数据包。但它仍会等待(tcp,yy.yy.yy.yy::5001->zz.zz.zz.zz:12345)。

所以这就是它不起作用的原因。

解决方案:将 NAS 的默认网关设置为 192.168.10.1。

相关内容