使用 IPv6 访问非 port80 网络服务器

log*_*ain 8 firefox ipv6 ports

在普通的 IPv4 网络中,我可以进入任何浏览器(例如 Firefox)并浏览未托管在端口 80 上的 IPv4 地址上的服务器:

http://192.168.42.6:8080/
Run Code Online (Sandbox Code Playgroud)

这将访问 8080 端口上的服务器192.168.42.6。但是,如果我使用 IPv6 IP 尝试此操作,则不会走运。这会尝试访问 8080 端口fe80::520:ff0f:ece0:1

http://[fe80::520:ff0f:ece0:1]:8080/
Run Code Online (Sandbox Code Playgroud)

Firefox 会自动“修复”这个 URL:

http://[www.fe80::520:ff0f:ece0:1.com]:8080/
Run Code Online (Sandbox Code Playgroud)

这根本无法帮助我访问它。所以要么我做错了什么,要么 IPv6 真的有问题。无法在 Internet 上找到任何可以远程帮助的内容。(是的,有一台服务器运行在有问题的 IPv6 上。)

Arj*_*jan 5

首先:我不是 IPv6 专家。

如果您不能添加 DNS 名称(或想确保使用 IPv6 1),那么为什么不使用实际地址,而不是fe80链接本地地址呢?在装有 OS X 的 Mac 和 Windows XP 家庭版上,这(具有实际的 IPv6 地址2)对我来说很好,在所有浏览器中:

http://[2001:db8::216:cbff:xx:xx]:8080/
Run Code Online (Sandbox Code Playgroud)

(请注意,某些浏览器不会自动http://为 IPv6 地址部分添加前缀。在您的主机文件仅为IPv6 地址添加一个虚拟名称会使生活更轻松。)

对于fe80地址,给您带来问题的可能不仅仅是端口号;使用默认端口 80 时,您可能也无法连接,除非您还指定区域索引。(因此:应该建立连接的传出接口,如有线以太网或无线,在您使用的每台计算机上可能会有所不同。)

在 Windows XP 家庭版上,有线以太网和无线网络(后者处于非活动状态),以下在 Firefox 3.5 和 3.6 中对我来说很好用。这4是我的网络接口索引3

http://[fe80::216:cbff:xx:xx%4]/
http://[fe80::216:cbff:xx:xx%4]:8080/
Run Code Online (Sandbox Code Playgroud)

在 Internet Explorer 8 中,百分比字符必须被百分比编码%25

http://[fe80::216:cbff:xx:xx%254]:8080/
Run Code Online (Sandbox Code Playgroud)

(对我来说,这在没有%4or 的%254情况下不起作用;如果它在其他安装上起作用,那么 Windows 或 IE 可能更喜欢外部连接,并且该安装只有一个网络接口?)

在 Mac 上,以下在 Firefox 中工作正常:

http://[fe80::216:cbff:xx:xx%en0]:8080/
Run Code Online (Sandbox Code Playgroud)

考虑到与 URL 符号4的冲突,使用百分比符号指定区域索引很麻烦。我无法在 Windows XP 上的 Chrome 8 和 9 中运行上述内容,也无法在 Mac 上的 Safari 或 Chrome 中运行。

在 Mac 上,%您可以 (ab) 使用范围索引(第 2 个字,或第 3 和第 4 个字节)来指定网络接口索引,而不是语法。Likefe80:0004在我所有的浏览器中都可以正常工作:

http://[fe80:4::216:cbff:xx:xx]/
http://[fe80:4::216:cbff:xx:xx]:8080/
Run Code Online (Sandbox Code Playgroud)

但是请注意,我怀疑这是否得到官方支持,因为这在我的 Windows XP 上不起作用,并且一些文档声称应始终使用替代方案。喜欢:

ping6 -I en0 fe80::216:cbff:xx:xx  (en0 = wired ethernet on my Mac)
ping6 fe80::216:cbff:xx:xx%en1     (en1 = wireless)
Run Code Online (Sandbox Code Playgroud)

...而不是:

ping6 fe80:4::216:cbff:xx:xx
ping6 fe80:6::216:cbff:xx:xx
Run Code Online (Sandbox Code Playgroud)

最后一点:人们可能会被愚弄使用::::ffff:后跟 IPv4 地址,如RFC 4291 中指定的那样。但是,这实际上并没有使用 IPv6,尽管它在我的 Mac 上给出了响应:

http://[::ffff:192.168.178.25]:8080/
Run Code Online (Sandbox Code Playgroud)

这也可以使用十六进制表示法,有些浏览器会自动重写:

http://[::ffff:c0a8:b219]:8080/
Run Code Online (Sandbox Code Playgroud)

但无论如何:这在我的 Mac 上使用 IPv4 连接。在我的 Mac 上,[::192.168.178.25]不起作用。我无法在 Windows XP 上获得任何形式的工作。


1有些浏览器更喜欢 IPv4 而不是 IPv6。请参阅test-ipv6.com。这也是平台相关的。
2在 IPv6 中,Web 服务器可能会看到您计算机的 MAC 地址216:cbff:xx:xx在这些示例中。我宁愿不在网上发布这个超级饼干。另请参阅如何避免在使用 IPv6 时暴露我的 MAC 地址?
3在 Mac 上:scopeidifconfig. 在 Windows 上:查看Idx的输出中的值netsh interface ipv6 show interface我看到重启后这个数字发生了变化!改用加号字符,但这在我的 Mac 或 Windows XP 上也不起作用。
4似乎这曾经导致了一个从未脱离草案的 RFC。该草案提出