跳到主要内容

3. VPN-IPv6 路由分发 (VPN-IPv6 Route Distribution)

3.1. PE 之间通过 BGP 分发路由​

如 [BGP/MPLS-VPN] 所述, 如果某个 VPN 的两个站点连接到位于同一自治系统的 PE, 这些 PE 可以通过它们之间的 (IPv4) 内部边界网关协议 (iBGP) 连接互相分发 VPN 路由. 或者, 每个 PE 可以与路由反射器建立 iBGP 连接. 类似地, 对于 IPv6 VPN 路由分发, PE 可以使用它们之间的 iBGP 连接, 或使用到路由反射器的 iBGP 连接. 对于 IPv6 VPN, iBGP 连接可以基于 IPv4 或 IPv6.

PE 路由器通过 MP-BGP [BGP-MP] 交换 IPv6 VPN 中 IPv6 前缀的可达性信息, 并据此将自己宣告为 BGP 下一跳 (BGP Next Hop).

可达性信息的编码以及 BGP 下一跳地址的规则在以下各节中规定.

3.2. VPN IPv6 NLRI 编码​

在分发 IPv6 VPN 路由时, 通告方 PE 路由器 MUST (必须) 为这些路由分配并分发 MPLS 标签. 本质上, PE 路由器分发的不是普通的 IPv6 VPN 路由, 而是带标签的 IPv6 VPN 路由 [MPLS-BGP]. 当通告方 PE 收到一个携带该被通告标签的数据包时, PE 会将该标签从 MPLS 栈中弹出, 并相应地处理数据包 (即, 依据标签直接转发, 或在相应的 IPv6-VPN 上下文中执行查找).

BGP 多协议扩展 [BGP-MP] 用于在 MP_REACH 网络层可达性信息 (NLRI) 中通告 IPv6 VPN 路由. 地址族标识符 (AFI) 和后续地址族标识符 (SAFI) 字段 MUST (必须) 设置如下:

  • AFI: 2; 用于 IPv6

  • SAFI: 128; 用于带 MPLS 标签的 VPN-IPv6

NLRI 字段本身的编码如 [MPLS-BGP] 所规定. 在本扩展的上下文中, 前缀属于 VPN-IPv6 地址族, 因此由 8 字节的路由区分器, 后跟上文第 2 节所述的 IPv6 前缀组成.

3.2.1. BGP 下一跳编码​

BGP 下一跳的编码取决于 BGP 发言者的策略: 是要求通过 IPv6 隧道 ("请求 IPv6 传输的 BGP 发言者") 将 IPv6 VPN 流量传送到该 BGP 下一跳, 还是要求通过 IPv4 隧道 ("请求 IPv4 传输的 BGP 发言者") 传送.

该策略 (要求通过 IPv4 隧道还是 IPv6 隧道传输) 的定义属于网络运营商的责任, 超出本文档范围. 请注意, 该策略可能要求通过 IPv4 (对应地, IPv6) 隧道传输, 而与此同时 BGP 发言者通过 IPv6 (对应地, IPv4) 交换 IPv6 VPN 可达性信息. 然而, 在这种情况下, 有若干运维方面的影响值得考虑. 特别是, 一个影响 IPv4 (对应地, IPv6) 隧道数据路径而未影响 IPv6 (对应地, IPv4) 数据路径的未被发现的故障, 可能不会被 BGP 察觉, 进而可能导致流量黑洞.

对该策略的控制超出本文档范围, 可以基于用户配置实现.

3.2.1.1. 请求 IPv6 传输的 BGP 发言者​

当 IPv6 VPN 流量要通过 IPv6 隧道 (例如 IPv6 MPLS LSP, IPsec 保护的 IPv6 隧道) 传送到 BGP 发言者时, 该 BGP 发言者 SHALL (应当) 通告一个包含 VPN-IPv6 地址的下一跳网络地址字段:

  • 其 8 字节 RD 设置为零, 且

  • 其 16 字节 IPv6 地址设置为该通告方 BGP 发言者的全局 IPv6 地址.

其后可能跟随另一个 VPN-IPv6 地址:

  • 其 8 字节 RD 设置为零, 且

  • 其 16 字节 IPv6 地址设置为该通告方 BGP 发言者的链路本地 IPv6 地址.

在 MP_REACH_NLRI 属性中, 下一跳网络地址字段的长度值应当设置为 24 (当仅存在全局地址时), 或者设置为 48 (当下一跳字段中还包含链路本地地址时).

如果 BGP 发言者仅使用其链路本地 IPv6 地址 (例如, 当 IPv6 CE 与 IPv6 PE 建立对等, 且 CE 没有任何 IPv6 全局地址, 并且 eBGP 对等通过链路本地地址实现时), 通告方 BGP 发言者使用 "未指定地址" ([V6ADDR]) 来表示下一跳网络地址字段中全局 IPv6 地址的缺失.

当且仅当通告方 BGP 发言者与所通告路由的对等方共享一个公共子网时 [BGP-IPv6], 才会在下一跳字段中包含链路本地地址.

在所有其他情况下, BGP 发言者在其下一跳网络地址字段中向其对等方通告的, 仅是下一跳的全局 IPv6 地址.

因此, 向内部对等方通告路由的 BGP 发言者, 可以通过删除下一跳的链路本地 IPv6 地址来修改下一跳的网络地址字段.

一个需要将全局 IPv6 地址和链路本地 IPv6 地址都包含在 BGP 下一跳地址字段中的示例场景是: IPv6 VPN 服务建立在多自治系统 (AS) 骨干网上, 且在不同 AS 的自治系统边界路由器 (ASBR) 之间 (这些 ASBR 共享一个公共 IPv6 子网) 重新分发带标签的 VPN-IPv6 路由; 在这种情况下, ASBR 应当同时通告全局 IPv6 地址和链路本地 IPv6 地址.

3.2.1.2. 请求 IPv4 传输的 BGP 发言者​

当 IPv6 VPN 流量要通过 IPv4 隧道 (例如 IPv4 MPLS LSP, IPsec 保护的 IPv4 隧道) 传送到 BGP 发言者时, 该 BGP 发言者 SHALL (应当) 向其对等方通告一个包含 VPN-IPv6 地址的下一跳网络地址字段:

  • 其 8 字节 RD 设置为零, 且

  • 其 16 字节 IPv6 地址被编码为一个 IPv4 映射的 IPv6 地址 [V6ADDR], 其中含有该通告方 BGP 发言者的 IPv4 地址. 该 IPv4 地址必须可被其他 BGP 发言者路由.

3.3. 路由目标​

路由目标的使用在 [BGP/MPLS-VPN] 中规定, 并适用于 IPv6 VPN. 扩展团体属性的编码在 [BGP-EXTCOM] 中定义.

3.4. BGP 能力协商​

为使两个 PE 能够交换带标签的 IPv6 VPN NLRI, 它们 MUST (必须) 使用 BGP 能力协商, 以确保双方都能正确处理此类 NLRI. 其做法如 [BGP-MP] 和 [BGP-CAP] 所规定, 即使用能力代码 1 (多协议 BGP), 并采用上文第 3.2 节规定的 AFI 和 SAFI 值.