我打开防火墙上的 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