我在家里的服务器上托管了一些网站/服务,比如 Jenkins。我希望它们可以通过公共域名从互联网和内联网访问。为此,我注册了一个指向我的(动态)公共 ipv4 的 noip 域名。路由器已配置端口转发,以将端口 NAT 到我的服务器上。
一切都运行正常,直到上周末我更换了网络提供商并因此更换了路由器。
现在我无法使用正在解析为我的公共 IP 的公共域名从内联网连接到我的站点。
我测试过的内容:
- 从内网 ping 公网域名,解析出正确的公网 ip -> 无 DNS 问题
- 使用公共域名(或 IP)和正确的端口即可从互联网访问网站
- 使用公有域名(或 IP)和正确端口时,无法从内网访问网站。在这种情况下,浏览器会显示网络连接超时错误(ERR_CONNECTION_TIMED_OUT)
- 使用内部 IP 和正确的端口(如目标端口转发规则中所指定)可以从内联网访问站点
需要更改路由器上的哪些网络配置才能从内联网正确路由?
这是我在这里的帖子的重复:https://networkengineering.stackexchange.com/posts/59290
答案1
这主要是基于此类最常见问题的猜测答案。但要完全确定,您需要实际调查服务器看到的内容(Wireshark/tcpdump 是很好的工具)。
同一子网内的 DNAT(端口转发)非常成问题,因为从服务器到客户端的返回路径通常会绕过路由器,并且没有机会取消该返回流量的 NAT。
为了解决这个问题,一些(但不是全部)路由器有一个“NAT 环回”或“NAT 发夹”选项。据我所知,此选项还会为所有连接执行 SNAT,重写客户IP 地址并让服务器认为所有连接都来自路由器本身。
如果没有环回/发夹,您的客户端可以访问服务器,但无法识别从服务器到达的回复(因为 IP 地址不再匹配),所以永远无法建立连接。
如果您的路由器没有此选项,但具有手动高级 NAT 配置,您可以自己构建类似的 NAT 规则 - 告诉路由器“伪装”来自 LAN 并返回同一 LAN 的所有连接。
(当然,这仍然具有向服务器隐藏客户端 IP 地址的缺点。)
然而,在我看来,最好的选择(未经亲自测试,但我没有理由相信它不起作用)是将服务器放在不同的子网与其他设备隔离。只要服务器返回到客户端的流量经过网关,就应该可以避免这个问题——即使没有 VLAN 分离,并且两个子网位于同一个以太网上。
上述操作也可能通过更改子网掩码或向服务器添加自定义路由来实现。