在我的家庭网络内的不同设备上访问 [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
,因此NAT64
和NAT46
涉及电路/路径中的某个部分,并且以这种方式whatismyip.com
获取NAT
ed 地址。但是,我对这些技术的有限理解是,在这种特殊的奇怪情况下,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'
。