添加 /64 ipv6 块,只有第一个有效

添加 /64 ipv6 块,只有第一个有效

我有一台 Ubuntu 16.04.2 服务器,带有 /64 块 IPv6。

如果我添加块,如下所示:

ip addr add 2001:41d0:xxx:yyy::/64 dev eth2 

仅第一个有效:

$ curl -g http://[2001:41d0:xxx:yyy::]/
<!DOCTYPE html>...
$ curl -g http://[2001:41d0:xxx:yyy::1]/
curl: (7) Failed to connect to 2001:41d0:xxx:yyy::1 port 80: Connection timed out

如果我逐个添加其他内容,它们就会起作用:

ip addr add 2001:41d0:xxx:yyy::1/128 dev eth2 

我做错了什么?


该块也位于 /etc/network/interfaces 中:

iface eth2 inet6 static
    address 2001:41d0:xxx:yyy::
    netmask 64

答案1

接口地址是一个单一地址,尽管您可以为一个接口分配一堆 IPv6 地址,因此您实际上是将网络2001:41d0:xxx:yyy::中的地址添加2001:41d0:xxx:yyy::/64到接口。

IPv6 实际上允许您使用网络中的每个地址作为主机地址,而不像 IPv4 那样网络地址不能用作主机地址,但是RFC 2373,IP 版本 6 寻址架构将路由器子网任播地址定义为网络的全零地址。

2.6.1 所需的任播地址

Subnet-Router 任播地址是预定义的。其格式如下:

|                         n bits                 |   128-n bits   |
+------------------------------------------------+----------------+
|                   subnet prefix                | 00000000000000 |
+------------------------------------------------+----------------+

任播地址中的“子网前缀”是标识特定链路的前缀。此任播地址在语法上与链路上接口标识符设置为零的单播地址相同。

发送到子网-路由器任播地址的数据包将被传送到子网上的一台路由器。所有路由器都必须支持其有接口的子网的子网-路由器任播地址。

答案2

@Ron_Maupin 给出了正确的答案,但我觉得一个更简单的答案会更有帮助:

/64 并不意味着整个地址块都分配给了接口。它为接口分配了一个地址,并告诉它 LAN 有 /64 地址块。这是几乎总是您需要什么样的以太网接口。

/128 是几乎从不以太网接口所需的地址。这些地址无法从 LAN 访问。

相关内容