我的设置是Computer A
通过 LAN 电缆直接连接到路由器,而计算机 B 通过 wifi 连接。
Computer A
这是s命令的输出ip addr
:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp8s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 70:85:c2:cc:c2:4d brd ff:ff:ff:ff:ff:ff
inet 192.168.0.130/24 brd 192.168.0.255 scope global dynamic noprefixroute enp8s0
valid_lft 568337sec preferred_lft 568337sec
inet6 2a02:8109:9cc0:3090:a99a:ec1e:b598:facd/128 scope global dynamic noprefixroute
valid_lft 568305sec preferred_lft 568305sec
inet6 2a02:8109:9cc0:3090:7b53:da6c:4e19:580c/64 scope global dynamic noprefixroute
valid_lft 86399sec preferred_lft 43199sec
inet6 fe80::3c15:8b76:5ba7:4f87/64 scope link noprefixroute
valid_lft forever preferred_lft forever
使用该ip route get
命令,在我看来,我从计算机发送的所有包都已src
设置为2a02:8109:9cc0:3090:a99a:ec1e:b598:facd
(/128 地址)。我有多个问题来理解这个输出。
- 为什么选择这个地址作为src?
- 为什么我
scope global
首先有两个地址? - 为什么其中一个 IPv6 地址说网络部分是
/128
(尽管网络部分是/64
,但路由器显然只修复了第一位64
。) - 最后,为什么我无法连接到
scope local
计算机 B 的最后一个地址,即使它们位于同一网络上? (如果两者都通过 LAN 连接到同一交换机,或者两者都通过 wifi 连接,会起作用吗?)
答案1
- 参见例如地址选择维基百科上的描述:
RFC 6724 中发布的偏好选择算法选择最合适的地址用于与特定目的地的通信。 [...] 默认配置优先考虑 IPv6 使用,并在尽可能小的范围内选择目标地址,以便在其他同样合适的情况下,链路本地通信优先于全局路由路径。
由于/128
的范围比 更小/64
,因此对于任何外部 IPv6 地址,始终/128
会选择您的意愿。
您的系统存在配置错误。只有您才能发现。
因为接口
/128
通过 SLAAC 或 DHCPv6 获取地址。如果您调试 (2),您还将看到谁分配了该地址。您将需要此链路上的链路本地目标地址(可能唯一的选择是路由器上的地址)。