源地址选择是在路由已经决定从哪张接口发出之后,从候选地址里挑一个写入包头。截至 2026 年 10 月,RFC 6724 的这套规则只适用于 IPv6 目的地址。VPN 先改路由,从而改出接口。网站最终看到的公网地址,还要看出口有没有再做地址转换。

候选集里先有谁

一个可独立引用的定义句:候选源地址是给定目的地址时可以拿来当源地址的单播地址集合。RFC 6724 建议,这个集合就是即将用于发送的那张接口上的单播地址。

应用或上层若指定了源地址,且该地址在候选集里,网络层必须照用。指定的地址不在候选集里,则当作错误。多播地址和未指定地址不得进入候选集。目的地址是多播或链路本地时,候选地址还必须和出接口在同一条链路上。

因此路由先划定范围。全局目的地从隧道接口发出时,按这项建议,候选地址就是隧道接口上的地址。规则只在这些地址之间排序,不会从物理网卡再借一个进来。若某个实现把其他接口的地址也放进候选集,后面的「出接口」规则才负责把隧道上的地址排到前面。

规则按顺序比较

一个可独立引用的定义句:源地址选择(RFC 6724 第 5 节)用一组按顺序应用的成对比较,从候选集里选出一个 IPv6 源地址。前面的规则分出胜负后,后面的规则不再改写这个结果。

目的地址是 IPv4 时,源地址怎么挑不在这份规范里。许多实现会使用出接口上的 IPv4 地址。那是常见做法,不是下面这组规则。

顺序规则在比什么
1同一地址源地址与目的地址相同则优先
2范围合适在仍然够得到目的地的前提下,优先范围更小的
3避开弃用优先仍为 preferred 的地址,不优先已 deprecated 的
4家乡地址移动 IPv6 里,家乡地址优先于仅作转交的地址
5出接口优先分配在即将用于发送的那张接口上的地址
5.5下一跳通告的前缀优先由选中的下一跳通告过的前缀。实现若不记录这件事,本规则不适用
6标签一致优先与目的地址标签相同的源地址
7临时地址默认优先临时地址,而不是同一接口上的稳定公开地址
8最长公共前缀与目的地址的公共前缀更长者优先。实现可以用别的性能信息代替

规则 5.5 依赖主机记得哪一跳通告了哪段前缀。邻居发现的主机模型并不要求记住这一点,所以很多实现不会用到它。

规则 7 的默认是优先临时地址。实现必须提供办法,让单个应用改成优先公开地址。实现也可以出于兼容,把默认改成优先公开地址,并应当提供管理开关。规则正文把隐私上的理由指向当时的 RFC 4941。临时地址的现行文本是 RFC 8981,它取代了 RFC 4941。选择顺序本身仍写在 RFC 6724 里。本文没有核对某一系统在 2026 年 10 月默认偏向哪一边。

标签和优先级来自同一张表

策略表给前缀两列数。优先级用于目的地址排序:高的排在前面。标签用于源地址和目的地址是否算同一类。默认表是:

前缀优先级标签
::1/128500
::/0401
::ffff:0:0/96354
2002::/16302
2001::/3255
fc00::/7313
::/9613
fec0::/10111
3ffe::/16112

唯一本地地址(fc00::/7)和全局单播都落在 ::/0 能匹配的范围里,但更长的前缀给出标签 13,和全局单播的标签 1 不同。规则 6 因此可以让全局源地址优先于唯一本地源地址,前提是两条都还留在候选集里。候选集里若只有隧道上的那一个唯一本地地址,标签对不上也不会凭空造出另一个源地址。

IPv4 地址要查这张表时,先写成 IPv4 映射地址。这一步用于目的地址排序,不把 IPv4 的源地址选择纳入第 5 节。

隧道改的是出接口

Happy Eyeballs 用的是目的地址选择:先决定先连哪一个目的地址。源地址是选定目的地之后的另一步。目的地址选择的规则 7 允许实现把经封装过渡机制到达的目的地排后,例子包括 6rd、ISATAP 和配置的隧道,并允许把虚拟接口的偏好放得比原生接口低。某一系统会不会因此让原生 IPv6 压过 VPN 接口,本文没有测量。

内层和外层是两次选择,目的地址不同:

这一跳目的地址源地址通常从哪来对端看到什么
本机到 VPN 服务器的外层服务器的公网地址通往该地址的物理接口服务器看到宽带或蜂窝分配的地址
隧道里的内层网站的地址出接口为隧道时,隧道上的地址还要经过出口的处理
分割隧道下的直连网站的地址物理接口上的地址网站直接看到这个地址

出口若做源地址转换,网站记录到的是转换之后的地址,常常是多个用户共用的那一个,见 共享出口 IP。内层源地址停在隧道内部。分割隧道下,目的地不走隧道,候选地址来自物理接口。那里若同时有临时地址和稳定地址,规则 7 的默认会偏向临时地址。这和 IPv6 泄漏 说的是相邻的两步:泄漏是包没有进隧道;源地址选择决定没进隧道时包头上写哪一个地址。

隧道上若只有一个分配来的地址,规则 7 没有第二个地址可比。那个地址通常也不是无状态自动配置生成的临时地址。

一个可独立引用的结论句:隧道图标亮着,只说明默认路由可能改了出接口。它不表示网站看见的就是隧道接口上的那个地址。

本文不提供修改策略表或为应用绑定源地址的步骤。

现象对照

现象更可能先看什么
网站看到节点公网地址,本机隧道地址是私有的出口做了源地址转换
只有一部分目的走隧道,直连的连接带着宽带的 IPv6出接口不是隧道,候选地址在物理接口上
同一接口上新连接常用临时地址规则 7 的默认偏向临时地址;实现可以反过来
先连上了 IPv6,源地址却要另看目的地址排序和源地址选择是前后两步
某个程序固定从指定地址发出该地址若在候选集里,规范要求照用,不再跑其余规则

核对清单

  1. 先看出接口:建议中的候选集就是这张接口上的单播地址;
  2. IPv6 才用这组规则:IPv4 目的地址的源地址不在 RFC 6724 第 5 节;
  3. 顺序靠前的规则先定胜负:临时地址只在前面打成平局时才起作用;
  4. 外层和内层各选一次:到 VPN 服务器的源地址,和到网站的内层源地址不是同一个选择;
  5. 网站看到的还可能被转换过:转换后的公网地址不再是规则选出的那个内层地址。