
在我们负责运营的一套跨境业务系统中,节点部署在香港、广州和东京三个区域,本应形成低延迟、区域自治的链路结构。但现实中,跨境流量总是绕经新加坡或美国,路径不稳定、时延大跳,甚至偶发包丢,严重影响大陆用户访问体验。我调取过 BGP Trace,明明我们的香港节点离深圳只有几十公里,却动辄绕行上千公里,这在低时延敏感型业务中无法接受。
这也是我下定决心引入 Segment Routing over IPv6(SRv6)的原因。SRv6 不是简单的 IPv6 替代方案,它允许我们精准定义流量路径,把“路由权”从传统运营商手中取回。在香港节点部署 SRv6,配合大陆边缘设备的支持,我们成功将部分关键业务流量从“公共绕路”拉回到“私有直通”,端到端 RTT 从原来的 90ms 降至 20ms 以下。以下是整个部署与调优的技术细节。
一、方案目标与环境约束
目标设定
- 明确控制跨境路径,绕过 BGP 不可控因素
- 在香港节点实现 SRv6 Segment Endpoint 功能,支持多段式转发
- 不依赖公网 BGP 回源,构建自主路径控制能力
- 全过程支持可编程策略路由,便于动态调优
网络环境
- 香港主节点采用 A5数据自营 BGP 多线高防服务器,支持 SR-IOV 与 VxLAN
- 广州与东京侧为自建机房或云主机,通过 GRE/IPsec 互通
- 全链路已支持 IPv6 协议传输(重要前置条件)
二、SRv6 架构原理简述
传统 IP 路由的转发依赖“最短路径”,由运营商 BGP 决定。但 SRv6 允许我们在每个 IPv6 数据包中嵌入一个 Segment List,即一组“Segment Identifier”(SID),每个 SID 是一个功能性地址,表示“到哪里”或“做什么”。
SID 类型常用分类:
| SID 类型 | 功能 |
|---|---|
| End | 表示目的地 |
| End.X | 指定出口接口(跨AS转发) |
| End.DT4/DT6 | 指向本地 IPv4/IPv6 路由栈 |
| End.B6.Insert | 向报文中插入 Segment 列表 |
| End.AD/End.DX | 应用于 SRv6 VPN 和服务链场景 |
我们主要用 End.X 和 End.B6.Insert 两类,实现 SRv6 中间段注入及定向路由。
三、香港服务器配置 SRv6 节点
1. 系统内核与 Forwarding 设置
我在香港服务器上选择了 Ubuntu 22.04 + 6.x 内核版本,因为 SRv6 功能从 Linux 5.10 才开始成熟。
sysctl -w net.ipv6.conf.all.forwarding=1
sysctl -w net.ipv6.conf.all.seg6_enabled=1
sysctl -w net.ipv6.conf.eth0.seg6_enabled=1
验证是否开启:
cat /proc/sys/net/ipv6/conf/all/seg6_enabled
2. 定义 SRv6 SID 与 Segment 表
ip -6 route add 2401:db00:1::/64 encap seg6 mode encap segs \
2401:db00:100::1,2401:db00:200::1 dev eth0
这里定义了一个 SRv6 路径,从香港节点发出的流量,必须按顺序经过广州节点(SID1)、东京节点(SID2)。
3. 添加 Segment Locator 与政策转发
我使用了 iproute2 工具的高级封装功能来配置本地策略路由:
ip -6 rule add from 2401:db00:feed::/64 table 100
ip -6 route add default encap seg6 mode encap segs \
2401:db00:100::1,2401:db00:200::1 dev eth0 table 100
这样做的目的是让来自某个特定源段的流量,默认走 SRv6 多段式路径,避免落入运营商默认 BGP 路径。
四、对接大陆节点与 IPv6 GRE 隧道
由于大陆节点暂不支持 SRv6 硬件卸载,我采用 IPv6 over GRE + Segment 路由结合方式:
大陆节点创建 IPv6 GRE 接口:
ip -6 tunnel add gre1 mode ip6gre remote 2401:db00:1::1 local 2401:db00:cn::1
ip link set gre1 up
ip -6 route add 2401:db00:hk::/64 dev gre1
然后,通过香港 SRv6 插入报文控制 Segment 路径,最终“隧穿”回大陆。
五、实测效果与问题调优
我分别对比了传统 BGP、手动 GRE、SRv6 三种模式下的访问延迟:
| 模式 | 深圳→香港 RTT | 异常跳变率 | 稳定性评分(10分) |
|---|---|---|---|
| 公网 BGP | 92ms | 40% | 5 |
| GRE 手动路径 | 34ms | 20% | 7 |
| SRv6 精准路由 | 18ms | <1% | 9.5 |
遇到的问题:
- 部分中间转发节点不识别 SRH:需明确路径仅限自控链路
- IPv6 运营商路由劫持问题:通过 IPv6 TUN 封装规避
- Segment 列表太长导致 MTU 超限:需开启 MSS Clamping 或调小 Payload
六、SRv6 是否能彻底解决“跨境绕路”?
答案是在自控链路范围内,几乎可以做到彻底规避。传统公网跨境绕路问题核心是:
- BGP 路由由运营商控制,不透明
- ASN 跳数多,路径不可预测
- 无法嵌入中间节点意图
而 SRv6 通过将路径控制“嵌入”数据包本身,实现了完全的路径编排和策略转发。在香港节点作为出境跳板、配合大陆 GRE 或 IPv6 隧道接入的前提下,我们可以有效建立一套“自建高速公路”,绕开“运营商公共道路”的绕行逻辑。
虽然无法改变公网整体结构,但对于我们这类对链路稳定性和时延极为敏感的跨境业务,SRv6 是目前我验证过最具实效的路径控制方案之一。未来我也计划进一步接入 SRv6 VPN(L3VPN over SRv6)和服务链路追踪机制,实现更细粒度的流控和运维观测。











