我可以使用 IPv4 地址访问我的网站,但不能使用 IPv6 地址访问。为什么?

我可以使用 IPv4 地址访问我的网站,但不能使用 IPv6 地址访问。为什么?

我打开防火墙上的 80 端口,并进行正确的端口转发,将我的个人网络服务器暴露给外界。然后我访问 whatismyipaddress.com,获取我的外部 IP 地址,在 Internet Explorer 中进行测试。在 IE 地址文本框中使用 whatismyipaddress.com 给我的 IP 地址(似乎是 IPv6)会导致 IE 使用该地址进行 Bing 搜索。我在 Firefox 中尝试了该地址,并关闭了地址栏搜索,Firefox 给了我“该地址无效”。我花了很多时间确保我的防火墙和端口转发设置正确,事实也确实如此。无论我怎么尝试,我都无法使用该地址访问我的网络服务器。然后我访问 canyouseeme.org,它报告我的 IP 地址为 IPv4 地址。我很惊讶。我以为 IPv4 不再在互联网上使用。我在浏览器中尝试了该地址,立即访问了我的网站。

为什么我的 IPv6 地址(如 whatismyipaddress.com 所示)在两种浏览器中都无法使用,而 IPv4 在两种浏览器中都可以使用?我以为 IPv4 在互联网上已经过时了。

答案1

您的外部 IPv6 IP(类似于XXXX:XXXX:XXXX::)不起作用的原因在于 IPv6 的工作方式。

就拿这个地址为例:2607:5600:52c:1::。这个地址是全局可路由的,事实上,这个地址属于我。


现在我们有一个 IPv6 地址,并且我们想要连接到,比如说...端口1000

我们通常看到的 URI 是这样的:<protocol>://<host>[:<port>]/[<path>][#<hash>]这意味着对于 IPv6 站点,我们期望使用http://2607:5600:52c:1::/foo#bar。这才是有趣的地方。

我们总是可以这样做2607:5600:52c:1::1000,但实际上,这将被透明地转换为2607:5600:052c:0000:0000:0000:1000一个问题,因为这意味着没有端口。这就是RFC3986开始发挥作用。您需要第 3.2.2 节:主机

由 Internet 协议文字地址(版本 6 [RFC3513] 或更高版本)标识的主机通过将 IP 文字括在方括号(“[”和“]”)中来区分。这是 URI 语法中唯一允许使用方括号字符的地方。为了应对未来尚未定义的 IP 文字地址格式,实现可以使用可选版本标志来明确指示这种格式,而不是依赖启发式确定。


好的。您已经告诉我原因了,那么我该如何解决呢?

很简单。根据 RFC3986,您需要使用以下表示法:[IPv6-ADDRESS]这意味着在我们的示例中,您需要使用以下表示法:http://[2607:5600:52c:1::]这将起作用。这也意味着我们可以使用以下方式连接到端口 1000[2607:5600:52c:1::]:1000

相关内容