我在家里的电脑上托管一个 Express 服务器,主要用于开发,但也是为了与我的朋友一起玩。
几天前,我的 ISP 将我使用了约 3 年的静态 IPv4 地址更改为动态 IPv6 地址。
v6 并没有提议改变 IP 格式,但还不止于此。如果路由器的防火墙和本地计算机的防火墙允许,则连接到本地网络的每个设备都可以从外部访问。在 v6 中,端口转发和 NAT 不再存在。这就是我的理解。
考虑到这一点,我对路由器进行了配置,使其允许任何源 IP、任何目标 IP、任何源端口、TCP 上的目标端口 80 和 443。
我还在 Windows 防火墙中添加了一条规则,以允许端口 80 和 443 上的入站数据。
网络服务器运行良好仅有的来自本地网络,因为遗憾的是我无法从外部访问它。
我尝试了几件事:
- 完全禁用 Windows 防火墙
- 在我的 Raspberry Pi 上尝试一切;我已经为 v4 和 v6 配置了 UFW 规则,我甚至禁用了它以确保它不会阻止数据包。
- 用过的这看看 80 和 443 是否开放,它们是
- 将 MTU 大小从 1500 更改为 1492
端口已打开但仍然收到地址无法访问的错误,这确实让我很烦恼。这是怎么回事?
当我使用 v4 时,我可以轻松完成此操作。我想我错过了一些有关 v6 工作原理的知识。
答案1
IPv6 地址非常“静态”,因为它们通常由第一部分的网络部分、中间部分(通常不会改变)和最后一部分(您的 mac 地址)组成。
第一步是检查你的路由器,它是否有防火墙(IPv6)并且是否过滤入站数据包
话虽如此,你不会说得太详细。你试过吗?netstat
我在 Linux 上通常添加-ntl
(-n 表示不解析 IP,-t 表示仅 tcp,-l 表示仅监听)我相信 Windows 上会有等效项。你的 Web 服务器是在监听 IPv6 还是仅监听 IPv4?通常0.0.0.0:80
会指示它仅是 IPv4,其中:::80
将是 IPv6 或双栈。
如果您浏览到http://[::1]:80
(IPv6 环回),您表明它在本地网络上运行,但您并未声明您使用了 IPv6 ip 地址,会发生什么情况。
答案2
IPv6 和 IPv4 不兼容,而且由于我只有 IPv6,所以任何拥有 IPv4 的人都无法访问我的网站。
当一些在线服务告诉我我的网站正在运行(请求显示在日志中)而其他服务却说没有运行的时候,我明白了;因为有些支持 v6,有些则不支持。
此外,错误是 DNS_PROBE_FINISHED_NXDOMAIN。如果我更注意它,我会注意到它无法检索有效的 IP,因为唯一的 DNS 记录是 AAAA,而具有 IPv4 的客户端没有可检索的 A 记录。
最后,我将购买一个具有 IPv4 和 IPv6 的非常便宜的 VPS,并将其用作反向代理将 IPv4 数据包转换为 IPv6。