使用 WAN IP 地址连接到本地网络

网络工程 包分析
2022-02-03 04:13:11

我的公司有一个简单的网络,我使用 ISP 的 ADSL 路由器。局域网是192.168.1.0/24路由器的IP是192.168.1.1它还启用了 DHCP,范围从2 to 250.

我有一个配置了静态 IP 地址的数字视频录像机 (DVR),具有以下 LAN 配置:

IP  : 192.168.1.254
MASK: 255.255.255.0
GW  : 192.168.1.1
DNS1: 192.168.1.1
HTTP: 8080
SRVR: 6036

我还需要配置连接端口——在这种情况下,DVR 的 HTTP 端口是8080,服务器端口是6036. 我在路由器上进行了调整,将端口转发到 DVR。

所以我下载了手机APP并将其配置为连接192.168.1.254- 它可以工作。因此,DVR 网络配置是正确的。然后,我配置了 DVRDDNS并重新配置了手机上的 APP ......这就是问题发生的地方:

当我在工作网络之外(即 3G 或在我家)时,它可以工作。它使用DDNS. 但是,如果我在网络中,它就不起作用。

假设我的网络的公共地址是200.30.20.10. 因此,从我的手机向两个端口(8080 和 6036)发送目标地址为 200.30.20.10 的数据包。所以它正在尝试按预期正确连接(因为我可以从我家连接到 DVR,所以我知道 DDNS 和端口转发都是正确的)

我的推理:当我在网络中时,数据包到达我的路由器,只匹配默认路由并从网关出去。但是,现在数据包的源地址和目标地址都等于200.30.20.10......所以网关网络只会丢弃我的数据包?

我认为向我的路由表添加一个静态路由可以解决这个问题,但是由于我的公共 IP 总是在变化,所以这并不是很有效......

到目前为止,我的结论是:您无法使用公共地址连接到您的网络。

(我为什么要解决这个问题:现在的情况,所有手机都需要两种配置:一种在我们在这里时连接到 DVR,另一种在我们不在时连接到 DVR。)

我的问题:到底发生了什么,为什么?

2个回答

你的想法是正确的。您可能要搜索的一个术语是“发夹”。基本上是一个数据包掉头并回到它来自的地方的想法。不同的路由器和防火墙对此进行了不同的配置,因此您必须查找自己的。

我还看到它被称为“NAT 环回”,但我认为发夹是更常见的术语。

编辑:这本质上就是发夹为你做的事情。
假设您已经在手机应用程序上配置了外部 IP。
您的手机(例如 192.168.1.5)向 200.30.20.10 发送数据包。如果您只更改目标 IP (DNAT),那么当数据包到达 DVR 时,它将看起来像:192.168.1.5 -> 192.168.1.254。DVR 将直接回复电话,因为它们位于同一子网中。您的手机将丢弃回复数据包,因为就它而言,它没有向 192.168.1.254 发送任何内容,而是向 200.30.20.10 发送了数据包!因此,在这种情况下,您还必须更改源地址 (SNAT),以便数据包返回防火墙,然后返回您的手机。

所以最后:
PHONE ON THE OUTSIDE
zzzz -> 208.30.20.10
路由器看到这个数据包并将其更改为: zzzz -> 192.168.1.254

内部电话(电话配置相同)
192.168.1.5 -> 200.30.20.10
路由器看到此数据包,需要将其更改为:192.168.1.1 -> 192.168.1.254

最简单的解决方案是不使用 IP 地址,而是使用 DDNS 名称。配置您的路由器(假设它是您的本地 DNS 服务器)以将该名称解析为 DVR 的内部 IP 地址(这称为“拆分 DNS”)。

如果这不可能,请将本地 IP 和 DDNS 名称添加到本地“主机”文件中,这样就根本无法通过 DNS 解析。对于 Windows,它是C:\Windows\System32\drivers\etc\hosts; 对于 Linux,它是/etc/hosts.