使用多个 IPv6 地址中的哪一个作为源地址以及如何决定?

使用多个 IPv6 地址中的哪一个作为源地址以及如何决定?

我的设置是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 地址)。我有多个问题来理解这个输出。

  1. 为什么选择这个地址作为src?
  2. 为什么我scope global首先有两个地址?
  3. 为什么其中一个 IPv6 地址说网络部分是/128(尽管网络部分是/64,但路由器显然只修复了第一位64。)
  4. 最后,为什么我无法连接到scope local计算机 B 的最后一个地址,即使它们位于同一网络上? (如果两者都通过 LAN 连接到同一交换机,或者两者都通过 wifi 连接,会起作用吗?)

答案1

  1. 参见例如地址选择维基百科上的描述:

RFC 6724 中发布的偏好选择算法选择最合适的地址用于与特定目的地的通信。 [...] 默认配置优先考虑 IPv6 使用,并在尽可能小的范围内选择目标地址,以便在其他同样合适的情况下,链路本地通信优先于全局路由路径。

由于/128的范围比 更小/64,因此对于任何外部 IPv6 地址,始终/128会选择您的意愿。

  1. 您的系统存在配置错误。只有您才能发现。

  2. 因为接口/128通过 SLAAC 或 DHCPv6 获取地址。如果您调试 (2),您还将看到谁分配了该地址。

  3. 您将需要此链路上的链路本地目标地址(可能唯一的选择是路由器上的地址)。

相关内容