为什么我的公共 IPv6 地址与 Linux 中列出的不同

为什么我的公共 IPv6 地址与 Linux 中列出的不同

在我的家庭网络内的不同设备上访问 [whatismyip.com][1] 可获得预期结果,即每台设备上的 IPv4 地址相同但 IPv6 地址不同。但是,查看ip addr我的 Linux 机器上的结果后,whatismyip 列出的公共 IPv6 地址与 的全局地址不匹配ip a。因此我查看了路由器的网页,其中列出了另一个不同的 IPv6 地址,该地址也不匹配。根据我对 IPv6 的理解,我的 IPv6 全局地址应该是用于连接互联网的地址,因为 NAT 是不必要的。如果是这样,那么为什么我的公共 IPv6 地址与我看到的任何地址都不同?

ip a输出:

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 noprefixroute 
       valid_lft forever preferred_lft forever
2: wlp170s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether bc:09:1b:f3:db:80 brd ff:ff:ff:ff:ff:ff
    inet 192.168.5.190/24 brd 192.168.5.255 scope global dynamic noprefixroute wlp170s0
       valid_lft 596378sec preferred_lft 596378sec
    inet6 2600:380:a024:3474:547e:15a3:8b35:cc6f/64 scope global dynamic noprefixroute 
       valid_lft 4294960775sec preferred_lft 4294960775sec
    inet6 fe80::7eb0:86b7:1494:689e/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

据我了解,我应该寻找以 2600 开头的 inet6 地址,因为另一个是链路本地的。

答案1

由于前缀(根据输出为前 64 位ip a)保持不变,我猜测 NAT 参与了其中……某处。我只是不确定在哪里或为什么。

具体来说,我认为 SNAT 用于在主机的“内部”IPv6 地址和路径上某处的不同“外部”IPv6 地址之间进行转换。例如,主机上的MASQUERADE条目ip6tables,或路由器上或 ISP 基础设施内某处的 SNAT 设置。

我不确定为什么要部署这个——IPv6 的全部意义在于消除对任何类型的 NAT 之类的东西的需求,无论是 SNAT 还是 DNAT——但它好像有一些支持这一概念在 FortiOS 等商业产品中具体来说,它提到了 IPv6 的“中央 SNAT”,并且似乎显示出与您所看到的类似的 IPv6 SNAT 行为(相同的高 64 位/前缀,但低 64 位的内容不同):

(FG-traffic) # diagnose sniffer packet any icmp6 4
interfaces=[any]
filters=[icmp6]
3.602891 wan2 in 2000:10:1:100::41 -> 2000:172:16:200::55: icmp6: echo request seq 0
3.602942 wan1 out 2000:172:16:200::199 -> 2000:172:16:200::55: icmp6: echo request seq 0
3.603236 wan1 in 2000:172:16:200::55 -> 2000:172:16:200::199: icmp6: echo reply seq 0
3.603249 wan2 out 2000:172:16:200::55 -> 2000:10:1:100::41: icmp6: echo reply seq 0
4.602559 wan2 in 2000:10:1:100::41 -> 2000:172:16:200::55: icmp6: echo request seq 1
4.602575 wan1 out 2000:172:16:200::199 -> 2000:172:16:200::55: icmp6: echo request seq 1
4.602956 wan1 in 2000:172:16:200::55 -> 2000:172:16:200::199: icmp6: echo reply seq 1
4.602964 wan2 out 2000:172:16:200::55 -> 2000:10:1:100::41: icmp6: echo reply seq 1
^C
8 packets received by filter
0 packets dropped by kernel

当然,我可能误解了嗅探器流量片段。也许它不是显示 IPv6 SNAT 行为。

我唯一的另一个猜测是,您的主机和 之间没有 IPv6 专用路径whatismyip.com,因此NAT64NAT46涉及电路/路径中的某个部分,并且以这种方式whatismyip.com获取NATed 地址。但是,我对这些技术的有限理解是,在这种特殊的奇怪情况下,whatismyip.com将从单独的网络获得完全不同的前缀。例如,

IPv6-host-A->NAT64 -> IPv4-host-A->NAT46 -> IPv6-host-A'->IPv6-host-B

在这种情况下,IPv6-host-A具有与 完全不同的 IPv6 地址IPv6-host-A',并且IPv6-host-B仅看到主要地址IPv6-host-A'

相关内容