使用IPv6地址时避免指定接口

时间:2017-08-21 11:07:48

标签: ipv6

当我试图ping我的VirtualBox机器时,我收到以下错误:

$ ping6 fe80::a00:27ff:fe1e:42d9
connect: Invalid argument

当然,我已经使用Google搜索并发现我可以通过在IPv6地址本身附加接口名称来避免这种情况 - 事实上,它可以正常工作:

$ ping6 fe80::a00:27ff:fe1e:42d9%vboxnet0
PING fe80::a00:27ff:fe1e:42d9%vboxnet0(fe80::a00:27ff:fe1e:42d9) 56 data bytes
64 bytes from fe80::a00:27ff:fe1e:42d9: icmp_seq=1 ttl=64 time=0.239 ms
64 bytes from fe80::a00:27ff:fe1e:42d9: icmp_seq=2 ttl=64 time=0.272 ms
64 bytes from fe80::a00:27ff:fe1e:42d9: icmp_seq=3 ttl=64 time=0.283 ms

但是,我对此感到不舒服。我该怎么做才能使它像#6; ping6 fe80 :: a00:27ff:fe1e:42d9'在我的本地网络?

1 个答案:

答案 0 :(得分:3)

使用链接本地IPv6地址,您始终必须指定接口。原因是在每个网络上使用相同的地址块(前缀),并且大多数系统具有多个网络接口(环回,以太网,wifi,虚拟盒网络,一些加密狗等)。因此,系统不能仅基于地址知道该做什么。地址fe80::a00:27ff:fe1e:42d9仅在特定链接(接口)上是唯一的。在不同的链接上,相同的地址可能是完全不同的系统。

由于此链接,本地地址通常对手动使用不是很有用。每次使用时都必须指定接口,而在不同的系统上,接口名称可能不同,因此您无法向某人发送带有该地址的链接。您必须知道您发送给它的人/软件实际上是连接到正确的链接(您不能路由链接本地地址,它们只能在链接本身上使用),以及它的接口名称是什么链接在他们的系统上。

这并不意味着链接本地地址无用。它们对链接上运行的自动进程非常有用。例如,邻居发现(用于查找链路上的其他系统),路由器通告(用于通信默认网关和网络设置),DHCPv6(用于自动主机配置),路由协议(如OSPFv3(用于与邻居通信)),mDNS(本地服务发现) )等等。但它们对手动使用并不是很有用。许多浏览器也没有在URL中正确处理它们。

因此,您真正需要的是具有可以路由的全局范围的“真实”IPv6地址。这样,系统的路由表就知道在哪里使用了哪些地址,并且您不必手动指定接口。有多种方法可以获得可路由的IPv6地址。

如果您有互联网提供商,那么他们通常会为您提供IP地址。对于IPv4,它们通常为您提供一个全球唯一的地址(如果有的话,IPv4地址已用完,许多人必须共享以保持IPv4运行)。对于IPv6,它们通常为您提供/ 48(65536个子网,每个子网包含无限数量的IPv6地址)或/ 56(356个子网)。 IPv6背后的想法是,你总是得到比你需要的更多的东西。

如果您是大型组织或互联网提供商,您可以从您所在地区的互联网注册机构(RIR)申请自己的地址块。我现在暂时跳过这个问题,但如果你想了解更多内容,请随时提出一个后续问题!

最后一个选项,例如,如果您的互联网服务提供商没有为您提供IPv6地址(对它们感到羞耻,但仍有大量提供商生活在石器时代;)并且您不希望连接您的系统到互联网,然后您可以生成自己的私有IPv6地址。正如我所说,你将无法与互联网上的系统进行通信(你需要一个互联网服务提供商来连接你并为你提供地址),但它们非常适合测试和小型网络孤岛。它们被称为ULA(唯一的本地地址),您可以自己生成它们。为了避免不同网络之间的冲突(ULA不是全局可路由的,但您可能想要为您的朋友设置VPN或类似的东西),您的某个系统的MAC地址通常用于生成ULA前缀。尝试例如https://cd34.com/rfc4193/并输入MAC地址。它将为您进行计算,并为您提供一个IPv6地址块。