##短版本
Before September 2012 After September 2012
Precedence Prefix Precedence Prefix
---------- ------------- ---------- -------------
50 ::1/128 IPv6 loopback 50 ::1/128 IPv6 loopback
40 ::/0 Native IPv6 40 ::/0 Native IPv6
40 fc00::/7 ULAs 35 ::ffff:0:0/96 IPv4
40 fec0::/10 site-local 30 2002::/16 6to4
40 3ffe::/16 6bone 5 2001::/32 Teredo
30 2002::/16 6to4 3 fc00::/7 ULAs
20 ::/96 IPv4compat 1 fec0::/10 site-local
10 ::ffff:0:0/96 IPv4 1 3ffe::/16 6bone
5 2001::/32 Teredo 1 ::/96 IPv4compat
##长版本
RFC6724 定义了地址的首选方式的变化。有了这个变化,IPv6不再是几乎所有情况下的首选地址:(
这个问题,在2012年6月被问到,2012年9月被RFC “修正”_。根据您的 Windows 版本,您可能在开箱即有这个新策略(Windows 8.1),或者可能已经通过更新交付(Windows 8、Windows 7、Windows Vista)。
我们在这里是因为我们想使用IPv6;我们希望撤销这一改变。
如何把它放回原处
如果你为一台主机获得多个IP地址,你的机器必须决定使用哪个地址。一个例子的排名可能是。
- IPv6环回
- 本地IPv6
- 唯一本地地址(ULA),例如fdxx::
- 站点本地地址,例如fec0
- IPv4地址,例如fec0
- IPv4地址。fec0
- 6bone
- 6to4
- IPv4compat
- IPv4
- Teredo,例如 2001
在你的 Windows 机器上,这个排名叫做 prefix policy。
前缀策略
你可以通过运行来查看你的计算机的前缀策略:
>netsh int ipv6 show prefixpolicies
在旧时代(最初由 RFC 3484 定义),前缀策略是:
Precedence Prefix
---------- -------------
50 ::1/128 IPv6 loopback
40 ::/0 Native IPv6
40 fc00::/7 ULAs
40 fec0::/10 site-local
40 3ffe::/16 6bone
30 2002::/16 6to4
20 ::/96 IPv4compat
10 ::ffff:0:0/96 IPv4
5 2001::/32 Teredo
所以你可以看到它几乎总是_使用IPv6 (yay!):
1.IPv6 loopback
2.
2. 本地IPv6, ULA, site-local, 6one
3. 6to4
4. IPv4compat
5. IPv4
6. Teredo
如果你费尽心思部署IPv6:就是成功了。
新的前缀策略
2012年, RFC6724 定义了一个新的优先顺序。现在的前缀策略几乎确保你永远不会使用IPv6:
Precedence Prefix
---------- -------------
50 ::1/128
40 ::/0 Native IPv6
35 ::ffff:0:0/96 IPv4
30 2002::/16
5 2001::/32
3 fc00::/7 ULAs
1 fec0::/10 site-local
1 3ffe::/16
1 ::/96
你会看到,你将永远**不能使用你的Unique Local Addresses,或站点本地地址;它永远是坏的:
1.IPv6 loopback
2. 本地IPv6
3. IPv4
4. 6to4
5. 6to4
5. Teredo
6. ULAs
7. site-local
8. 6bone
9. IPv6compat
如何解决?
我们要做的是修复IPv6,让ULA比IPv4更受欢迎。至少我们希望将 ULA (fc00::/7
)的使用推到 IPv4 的上面:
Precedence Prefix
---------- -------------
50 ::1/128
40 ::/0 Native IPv6
37 fc00::/7 ULAs <---------- from 3 up to 37
35 ::ffff:0:0/96 IPv4
30 2002::/16
5 2001::/32
1 fec0::/10 site-local
1 3ffe::/16
1 ::/96
通过以下方式实现。
>netsh interface ipv6 set prefixpolicy prefix=fc00::/7 precedence=37 label=13 store=active
这只能让它保持活动状态直到下次重启。要使更改成为永久性的。
>netsh interface ipv6 set prefixpolicy fc00::/7 37 13
如果我:
-费尽心思为我的/48生成一个ULA全局前缀
-为我的/64选择一个子网ID
-在企业的每台机器上部署ULA
-更新DNS服务器以返回IPv6 ULA地址,而不是IPv4地址
至少计算机可以做的是有礼貌地使用这个地址。
Bonus Chatter
fc00::/7
范围分为两部分:
fd00::/8
- 本地生成的GlobalID前缀
fc00::/8
- ?
从来没有人真正决定过fc
是好用的,所以只是放在那里。
fd
的地址定义为:?
fd
[40-bit random GlobalID]
[16-bit subnet]
[64-bits for host assignment]
a4d7f6dd66
所以如果你生成fda4:d7f5:dd66::
作为你的cryptoghpcallly随机的40位GlobalID,那你就有了/48:
fda4:d7f5:dd66:face::
/48
face
/64 (在fda4:d7f5:dd66:face::825
子网中)
fdee:e004:2208::/48
作为主机IP地址
SixXS维护了一个公共数据库的唯一本地地址GlobalID前缀,以减少碰撞的机会, 例如: 例如:
fdd4:43c8:ba34::/48
。苹果公司 - Leopard OSX
fdac:afbd:fea1::/48
: TekSavvy - Danny Murray
0x6&: IBM Rational Build Forge - Chris Fuller
但由于使用速度放缓,以及当初的价值可疑,SixXS在2018年停止了这项服务。
奖励阅读