实验案例:Cisco IOL XE 17.18.2 的 SRv6 能力验证(4 路由器 + 2 主机,uSID BE / L3VPN / uDT46)
用 4 台 IOL XE 路由器搭一条 IS-IS level-2 链,把 SRv6 的四层能力分开验证:locator 与 uN 转发(基础 BE)、BGP L3VPN 的动态 uDT4/uDT6、静态 uDT46,以及多 SID 的 SRv6 OAM。6 台设备、5 条链路、7 条 traffic filter,全套验收脚本 58 项、加故障注入 63 项。
实测环境:EVE-NG + eve-iac agent 0.9.1;Cisco IOS-XE 17.18.2(IOL,l3-iol-xe-17-18-02.bin);VPCS 1.3 (0.8.1)。


附件:srv6-be-xe.zip
完整预配与 IaC 文件见 §10.1 附件包;第 5 节只列核心行,不要直接拿片段去粘贴。
0. 实测结果
| 项 |
实测结果 |
| 镜像能力 |
SRv6 / PFP / MVPN / TILFA 均为 Yes;uN、uA、uDT4、uDT6、uDT46、H.ENCAP.RED;locator 只支持 usid-f3216 |
| Underlay |
IS-IS level-2 IPv6;PE1/P1/P2/PE2 邻接 Up;4 条 /48locator 全网可达 |
| 基础 BE |
CE1/CE2 对 4 个 locator 全部可达,TTL 64/63/62/61逐跳递减 |
| L3VPN |
BGP VPNv4/VPNv6 邻居 Established,PfxRcd 1;srv6 out-sid指向对端 locator |
| 数据面 |
VRF CUST 双向 IPv4 / IPv6 ping 均 5/5;uDT4/uDT6 计数同步增长 |
| uDT46 |
静态 SID 同时收 IPv4 与 IPv6 内层,各 5/5;unresolved为空 |
| SRv6 OAM |
多 SID 40::,30::,20::ping 5/5;P1/P2 的 uN 计数各 +5 |
| 验收脚本 |
常规58/58;加 --fault 63/63 |
| 过滤器 |
7 条全部通过 libpcap 编译并部署;面板命中见 §7.7 |
1. 这个实验解决什么
SRv6 的文档很容易让人把三件事混成一件:
- locator 通告了——IS-IS 里有 Locator TLV;
- SID 能 ping 通——报文目的地址就是 SID,中间路由器按 uN 转发;
- 封装真的发生了——头端把用户报文塞进外层 IPv6,ip6[6]=41。
第 2 条成立不代表第 3 条成立。基础 BE 里 CE 发出的就是普通 IPv6 报文,DA 直接是 locator SID,全程没有 H.Encaps。如果只看到 “ping 通” 就宣布 SRv6 验证完成,实际上连封装头都没产生过。
这个实验把变量拆开,逐层加码:
- 第一层:4 台路由器只跑 IS-IS + locator,CE ping 每个 locator,验证 uN 与逐跳转发;
- 第二层:PE1/PE2 加 vrf definition + BGP VPNv4/VPNv6,让镜像自己分配 uDT4/uDT6,验证 H.Encaps.RED 与 L3VPN 数据面;
- 第三层:手配静态 uDT46,用同一个 SID 接 IPv4 和 IPv6 两种内层,验证端点行为与 decap-and-lookup;
- 第四层:用 ping srv6 ... via segment-list 压入多个 SID,验证逐 SID 处理与 SRH 的出现条件。
适用读者:想在 EVE 里确认某个 IOL 镜像到底支不支持 SRv6、支持到哪一层的网络工程师;或者准备用 IOL 做 SRv6 实验,先要知道哪些姿势在这个镜像上根本走不通的人。
2. 镜像与规格
| 节点 |
角色 |
EVE 模板 |
镜像 |
vCPU / RAM |
网口 |
| CE1 |
主机 |
vpcs |
EVE 自带 |
— |
eth0 |
| PE1 |
SRv6 边缘 |
iol |
l3-iol-xe-17-18-02.bin |
1 / 1024 MB |
e0/0、e0/1 |
| P1 |
中转 |
iol |
同上 |
1 / 1024 MB |
e0/0、e0/1 |
| P2 |
中转 |
iol |
同上 |
1 / 1024 MB |
e0/0、e0/1 |
| PE2 |
SRv6 边缘 |
iol |
同上 |
1 / 1024 MB |
e0/0、e0/1 |
| CE2 |
主机 |
vpcs |
EVE 自带 |
— |
eth0 |
镜像版本:
Cisco IOS Software [IOSXE], Linux Software (X86_64BI_LINUX-ADVENTERPRISEK9-M), Version 17.18.2, RELEASE SOFTWARE (fc3)
Compiled Fri 19-Dec-25 03:28 by mcpre
注意事项:
- 必须用 L3 路由器镜像 l3-iol-xe-17-18-02.bin。l2-* 是三层交换机镜像,定位不同;本实验的 SRv6 结论只对 l3-* 负责。
- IOL 的 attributes.ethernet 填 1 就是 4 个口(e0/0–e0/3),不是 1 个口。ram、nvram 都是 1024。
- 节点名必须纯 ASCII。中文节点名在 EVE 往返时会丢字,eve-iac 部署会报 invalid_native_format 并静默删库。
3. 拓扑与地址
拓扑是一条链:CE1 — PE1 — P1 — P2 — PE2 — CE2。PE 做 SRv6 边缘,P 只做 uN 转发。
| # |
A 端 |
B 端 |
网络 |
地址 |
| 1 |
CE1 eth0 |
PE1 e0/0 |
2001:db8:aa::/64 |
CE1 ::2,PE1 ::1 |
| 2 |
PE1 e0/1 |
P1 e0/0 |
2001:db8:12::/64 |
PE1 ::1,P1 ::2 |
| 3 |
P1 e0/1 |
P2 e0/0 |
2001:db8:23::/64 |
P1 ::1,P2 ::2 |
| 4 |
P2 e0/1 |
PE2 e0/0 |
2001:db8:34::/64 |
P2 ::1,PE2 ::2 |
| 5 |
PE2 e0/1 |
CE2 eth0 |
2001:db8:bb::/64 |
PE2 ::1,CE2 ::2 |
环回、locator 与 IS-IS:
| 设备 |
Loopback0 |
Locator(format usid-f3216) |
NET |
| PE1 |
2001:db8:100::1/128 |
2001:db8:10::/48 |
49.0001.0000.0000.0001.00 |
| P1 |
2001:db8:100::2/128 |
2001:db8:20::/48 |
49.0001.0000.0000.0002.00 |
| P2 |
2001:db8:100::3/128 |
2001:db8:30::/48 |
49.0001.0000.0000.0003.00 |
| PE2 |
2001:db8:100::4/128 |
2001:db8:40::/48 |
49.0001.0000.0000.0004.00 |
VRF CUST 与 BGP:
| 设备 |
RD |
RT(import/export) |
Lo100(IPv4) |
Lo101(IPv6) |
BGP AS |
| PE1 |
65000:1 |
65000:100 |
192.168.100.1/32 |
2001:db8:c100::1/128 |
65000 |
| PE2 |
65000:2 |
65000:100 |
192.168.100.2/32 |
2001:db8:c100::2/128 |
65000 |
每个三层以太口还配了一个不用的 IPv4 /30(10.255.x.x)。它不是装饰,原因见 §8.4。
4. 关键设计
- 只跑 IS-IS level-2,不跑 OSPF:SRv6 locator 要在 IGP 里通告,IS-IS 的 Locator TLV 在 IOL XE 上最直接。单区域、level-2-only,邻居关系是确定的线性结构,排查时不需要考虑区域边界。
- **locator 用 /48 + usid-f3216**:这个镜像只支持 uSID 压缩格式,没有非压缩 format;/48 = block 32 + ID 16,动态 SID 从 E000 起、静态 uDT46 用 E100;四个 locator 是 10::、20::、30::、40::。
- 基础 BE 故意“不封装”:CE ping locator SID 时,报文 DA 就是 SID,PE 只做 uN 转发。这一阶段的 filter 5/6/7(proto-41、SRH、v4-in-v6)必须全灭,这是负对照,不是失败。
- L3VPN 用 alloc-mode per-vrf:VPNv4 / VPNv6 各自分配 SID,镜像会生成分开的 uDT4 和 uDT6,而不是一个 uDT46。要验证 uDT46 必须另配静态 SID。
- **静态 uDT46 固定 E100**:动态 SID 的编号重启后会互换,只有静态 SID 的编号稳定。验收脚本按 Behavior 找 SID,不写死 E000/E001。
- 多 SID 路径用 OAM 而不是 SR-TE:这个镜像的 SR-TE segment-list 只有 mpls 入口,配不出 SRv6 TE policy;但 ping srv6 ... via segment-list 可以手工压多个 SID,足够验证数据面。
- 7 条 filter 分三层语义:IS-IS 看 underlay,ICMPv6/ND 看主机侧,三条 SRv6 filter 看封装。单 SID 与多 SID 的 SRH 差异正好由 filter 6 区分。
5. 核心配置(完整预配见附件)
完整、逐字的 6 份配置文件与 IaC 文件都在附件包里(下载与校验见 §10.1)。本节只摘每台设备的核心行,用来说明“这台机器为什么能参与 SRv6”;不要直接拿这些片段去粘贴,复现请用附件里的 configs/default/n_X.cfg。
5.1 PE1:locator 与 IS-IS 绑定
segment-routing srv6
locators
locator MAIN
prefix 2001:db8:10::/48
format usid-f3216
!
router isis UNDERLAY
is-type level-2-only
address-family ipv6 unicast
segment-routing srv6
locator MAIN
level-2
绑定必须分层写,少一层 locator 就不会通告。
5.2 PE1:BGP VPNv4 / VPNv6
router bgp 65000
bgp router-id 1.1.1.1
neighbor 2001:DB8:100::4 remote-as 65000
neighbor 2001:DB8:100::4 update-source Loopback0
address-family vpnv4
segment-routing srv6
locator MAIN
alloc-mode per-vrf
neighbor 2001:DB8:100::4 activate
neighbor 2001:DB8:100::4 send-community extended
neighbor 2001:DB8:100::4 encap srv6
address-family vpnv6 是同一套配置,只把 AF 换成 vpnv6。两边的 VRF 都用 redistribute connected 把环回送进 VPN 表。
5.3 PE1:VRF CUST 与静态 uDT46
vrf definition CUST
rd 65000:1
address-family ipv4
route-target export 65000:100
route-target import 65000:100
address-family ipv6
route-target export 65000:100
route-target import 65000:100
segment-routing srv6
explicit-sids
sid 2001:DB8:10:E100:: behavior end-dt46
forwarding
path 1
decap-and-lookup vrf-name CUST
命令行输入时写 decap-and-lookup vrf CUST,running-config 会存成 vrf-name CUST。漏掉 VRF 时 SID 不装表,show segment-routing srv6 sid unresolved 会显示 uDT46 ... no vrf。
5.4 P1 / P2:只有 locator 与接口地址
segment-routing srv6
locators
locator MAIN
prefix 2001:db8:20::/48
format usid-f3216
!
router isis UNDERLAY
is-type level-2-only
address-family ipv6 unicast
segment-routing srv6
locator MAIN
level-2
P1 用 20::/48、P2 用 30::/48,其余同构;P 上不需要 BGP、VRF 或封装配置。
5.5 三层接口的写法(以 PE1 e0/0 为例)
interface Ethernet0/0
ip address 10.255.1.1 255.255.255.252
ipv6 address 2001:db8:aa::1/64
ipv6 router isis UNDERLAY
isis circuit-type level-2-only
no shutdown
那个 ip address 是 dummy,只为让 no shutdown 在启动配置里落地。
5.6 CE1 / CE2(VPCS,完整两行)
set pcname CE1
ip 2001:db8:aa::2/64 2001:db8:aa::1
CE2 同理:set pcname CE2 + ip 2001:db8:bb::2/64 2001:db8:bb::1。VPCS 不是 Cisco CLI,不要给 ip 行加 set。
6. 复现步骤
6.1 手工 EVE(不需要 eve-iac)
- 新建 lab,按第 3 节加 4 台 iol(镜像 l3-iol-xe-17-18-02.bin,ethernet: 1,RAM 1024)和 2 台 vpcs。
- 连 5 条链路,注意接口名:IOL 是 e0/0、e0/1,VPCS 只有 eth0。
- 启动全部节点,逐台打开控制台,把附件里 configs/default/n_1.cfg … n_6.cfg 的内容粘贴进去,IOL 上再 write memory。
- 关闭分页,否则长输出会卡在 --More--:enable 后执行 terminal length 0。
- 按第 7 节逐项验收。
6.2 IaC 一键复现(eve-iac)
srv6-be-xe/
├── .eve-iac.yml
├── topology.yml
└── configs/
└── default/
├── n_1.cfg … n_6.cfg
.eve-iac.yml:
version: 1
topology: topology.yml
eve:
lab: /IaC/srv6-be-xe.unl
MCP 调用顺序:
eve_iac_status # 确认工程被发现,mode=create
eve_iac_validate # 拓扑 + BPF 表达式编译
eve_iac_plan # 首次应为 create
eve_iac_deploy replace=true # 建 lab
eve_iac_start # 启动全部节点
改启动配置后,0.9.1 的 reconcile 只上传、不激活,必须 stop → wipe → start(wipe 是破坏性操作,需明确授权);只 stop → start 不会重读改过的配置。
7. 验收判据
7.1 Underlay
show isis neighbors
期望:PE1、PE2 各 1 个 Up;P1、P2 各 2 个 Up(线性拓扑)。
show ipv6 route 2001:DB8:10::/48
show ipv6 route 2001:DB8:20::/48
show ipv6 route 2001:DB8:30::/48
show ipv6 route 2001:DB8:40::/48
期望:四个 locator 都是 IS-IS 学到的路由。show isis database verbose 里能看到 Locator TLV。
7.2 SID 表
show segment-routing srv6 sid
PE1 实测输出(列宽已压缩):
SID Locator Behavior Context Owner
2001:DB8:10:: MAIN uN (PSP/USD) SID-MGR
2001:DB8:10:E000:: MAIN uDT4 CUST router bgp
2001:DB8:10:E001:: MAIN uDT6 CUST router bgp
2001:DB8:10:E002:: MAIN uA (PSP/USD) Et0/1 FE80::... router isis UNDERLAY
2001:DB8:10:E100:: MAIN uDT46 CUST SID-MGR
判据不是 SID 编号,而是 Behavior 列:必须同时看到 uN、uDT4、uDT6、uA、uDT46。动态 SID 的 E000/E001 在重启后可能互换,uA 也可能占 E002;只有静态 uDT46 固定 E100。
7.3 基础 BE:locator 可达与 TTL
在 CE1 上:
ping 2001:db8:10:: -c 3
ping 2001:db8:20:: -c 3
ping 2001:db8:30:: -c 3
ping 2001:db8:40:: -c 3
期望:全部 3/3;TTL 依次为 64、63、62、61。CE2 反向测四个 locator,期望同样是 64/63/62/61。
再看每台路由器的 uN 计数:
show segment-routing srv6 sid detail
期望:四个 locator 的 uN (PSP/USD) 计数随 ping 增长。这一阶段 uDT4/uDT6/uDT46 计数保持不变,filter 5/6/7 也不亮——因为没有封装。
7.4 L3VPN:控制面与数据面
show bgp vpnv4 unicast all summary
show bgp vpnv6 unicast all summary
期望:PE1 的邻居 2001:DB8:100::4、PE2 的邻居 2001:DB8:100::1 都是 Established,State/PfxRcd 为 1。
show bgp vpnv4 unicast all 192.168.100.2/32
期望能看到对端分配的 SID:
srv6 out-sid: 2001:DB8:40:E000::
数据面:
ping vrf CUST 192.168.100.2 source 192.168.100.1 repeat 5
ping vrf CUST ipv6 2001:db8:c100::2 source 2001:db8:c100::1 repeat 5
两个方向都测(PE2 反向时目的与 source 互换),期望各 5/5。之后 show segment-routing srv6 sid detail 里 uDT4/uDT6 的包数增长——请求在对端 PE 解封装,回程在本端 PE 解封装,各 5 包。
7.5 静态 uDT46:一个 SID 收两种内层
ping srv6 vrf CUST 192.168.100.2 via segment-list 2001:DB8:40:E100:: source 192.168.100.1 repeat 5
ping srv6 vrf CUST 2001:db8:c100::2 via segment-list 2001:DB8:40:E100:: source 2001:db8:c100::1 repeat 5
期望:两条都是 5/5。反向(PE2 → PE1)把目的与 source 换成 PE1 的环回、SID 换成 2001:DB8:10:E100::,同样 5/5。同一条 uDT46 计数增长两次(IPv4 内层与 IPv6 内层各一轮)。
show segment-routing srv6 sid unresolved
期望:为空。若出现 uDT46 ... no vrf,说明 decap-and-lookup 漏了 VRF。
7.6 SRv6 OAM:多 SID 路径
在 PE1 上:
ping srv6 2001:db8:100::4 via segment-list 2001:db8:40::,2001:db8:30::,2001:db8:20::
SID 列表是逗号分隔、bottom SID first。期望 5/5,且 P1/P2 的 uN 计数各增长 5——证明报文确实逐 SID 经过了 20:: 和 30::。
多 SID 的 traceroute srv6 在本镜像上不可靠:实测两次都给出 7 跳的怪路径(PE2 之后回折 P2/P1 再回 PE2),且工具调用容易超时。路径验证用 ping srv6 + 各跳 uN 计数,不要用 traceroute。
7.7 Traffic filters 与面板判读
7 条过滤器(timeout 全部 500 ms):
| # |
标题 |
表达式 |
颜色 |
看什么 |
| 1 |
IS-IS |
ether[14] = 0xfe and ether[15] = 0xfe |
#8e24aa |
underlay 常亮 |
| 2 |
ICMPv6-Request |
icmp6 and ip6[40] = 128 |
#1e88e5 |
主机 ping 请求 |
| 3 |
ICMPv6-Reply |
icmp6 and ip6[40] = 129 |
#fdd835 |
主机 ping 应答 |
| 4 |
ND-NS-NA |
icmp6 and (ip6[40] = 135 or ip6[40] = 136) |
#6d4c41 |
邻居发现 |
| 5 |
SRv6-Encap-v6 |
ip6 and ip6[6] = 41 |
#00acc1 |
IPv6 内层封装 |
| 6 |
SRv6-SRH |
ip6 and ip6[6] = 43 and ip6[42] = 4 |
#fb8c00 |
SRH(Routing Type 4) |
| 7 |
SRv6-Encap-v4 |
ip6 and ip6[6] = 4 |
#d81b60 |
IPv4 内层封装 |
预期命中:
- 基础 BE 阶段:filter_1 常亮,2/3/4 随 ping 闪;5/6/7 全灭——没有封装。
- L3VPN / uDT46 阶段:单 SID 的 H.Encaps.RED 把 uSID carrier 压进 DA,不带 SRH。IPv4 内层亮 filter_7,IPv6 内层亮 filter_5,filter_6 保持熄灭。
- 多 SID OAM 阶段:filter_6 出现,且每次 5 包 ping 恰好命中 5 次。
本次截图时的面板累计值(未重置):IS-IS 821、ICMPv6-Request 98、ICMPv6-Reply 99、ND-NS-NA 38、SRv6-Encap-v6 96、SRv6-Encap-v4 106、SRv6-SRH 5。
命中次数只能在 EVE 的 Traffic Filters 面板里看,MCP 没有读命中数的通道。500 ms 窗口下零星报文可能漏抓,发 5–10 次 ping 再观察。截图时可临时把 timeout 调到 2000(会清零计数,截完改回)。
7.8 反证:停机测试
真正的反证不是“ping 通”,而是“该断的时候确实断了”:
- 停 PE2;
- 在 PE1 上等 show ipv6 route 2001:DB8:40::/48 变成 % Route not found(IS-IS 撤销,最长等 180 秒);
- 在 CE1 上 ping 2001:db8:40:: -c 3,期望 0/3;
- 起回 PE2,等路由恢复,再 ping,期望 3/3。
注意 VPCS 的 IPv6 输出陷阱:ICMP 错误行也带 icmp6_seq=,行首是 *。只数不以 * 开头的行,否则会把“No route to destination”数成回包。
8. 踩坑清单(按“会骗到你”的程度排序)
8.1 “SID 能 ping 通”不等于“SRv6 封装发生了” ★最坑
基础 BE 里 CE 发的是普通 IPv6,DA 就是 locator SID。uN 转发成立、ping 全通,但 proto-41 / SRH / v4-in-v6 三条 filter 一条都不会亮。这不是过滤器坏了,是本来就没有封装。 要看到封装,必须加 VRF + BGP L3VPN 或静态 uDT。
8.2 decap-and-lookup 必须带 vrf
帮助里写的是 decap-and-lookup vrf-name VRF name,实际输入要写 decap-and-lookup vrf CUST;只写 VRF 名会报 Invalid input。漏掉 VRF 时命令能进去,但 show segment-routing srv6 sid unresolved 显示 uDT46 ... no vrf,SID 不装表,ping 直接失败。
8.3 IS-IS 的 locator 绑定必须分层
只写 router isis UNDERLAY → segment-routing srv6 不会通告 locator,必须继续进 address-family ipv6 unicast → segment-routing srv6 → locator MAIN → level-2。写成单行或少一层,show isis database verbose 里就没有 Locator TLV。
8.4 IPv6-only 接口的 no shutdown 会被静默丢弃
启动配置里接口只有 IPv6 地址时,IOL XE 会静默丢掉 no shutdown,接口开机后仍是 admin down。加一个不用的 dummy IPv4 /30 就能解决,IS-IS 仍然只跑 IPv6 AF。这个坑在“手工粘贴时明明有 no shutdown、重启后接口却 down”时最容易骗人。
8.5 动态 SID 编号重启后会互换
E000/E001 在 uDT4 和 uDT6 之间互换,uA 邻接 SID 也可能占 E002。判定按 Behavior + Context 找,不要写死编号;只有静态 uDT46 固定 E100。写验收脚本时尤其要注意。
8.6 show segment-routing srv6 locator detail 不存在
查计数器要用 show segment-routing srv6 sid detail,而且它会分页——先 terminal length 0。另外 show segment-routing srv6 sid 在部分路由器上要 enable 后才能执行。
8.7 VPCS 的 IPv6 ping 错误行伪装成回包
*2001:db8:aa::1 icmp6_seq=1 ttl=64 time=0.643 ms (ICMP type:1, code:0, No route to destination)
行首 * 是错误标记,但 icmp6_seq= 照样在。只统计 /^(?!\*)\S+\s+icmp6_seq=\d+/ 的行。
8.8 ping srv6 的参数顺序与 via
repeat/source/size 放在 SID 列表之后;ping srv6 vrf CUST <dest> 不带 via 会报 Incomplete / No SRv6 SID。SID 列表是 bottom SID first。
8.9 SR-TE 配不出 SRv6 TE policy
segment-routing traffic-eng 的 CLI 在,但 segment-list name X 下 index 1 ? 只有 mpls,没有 SRv6 SID 入口。要压多 SID 路径只能用 OAM 的 ping srv6 ... via segment-list。
8.10 改启动配置后 stop → start 不重读
IOL 的 disk 里还是旧配置。reconcile 只负责上传 configset,真正的激活路径是 stop → wipe → start(wipe 是破坏性操作,需明确授权);只 stop → start 看到的是旧配置。
8.11 控制台输出偶发空读
console_exec 偶尔整条返回空,或把最后一行塞进 prompt 字段。判据要用“读到的内容是否满足预期”,不满足就退避重读;必要时回读 console_history(多 SID ping 被截断过一次,历史里是 5/5)。
9. 已知限制
- 线性拓扑、单区域:IS-IS 只有一条路径,TI-LFA 的快速收敛没有功能验证(CLI 存在,fast-reroute ti-lfa level-2 可配)。
- 没有 SRv6 TE policy:本镜像的 segment-list 不支持 SRv6 SID,只有 OAM 的手工多 SID 路径。
- 只做了单 VRF:没有跨 VRF 泄漏、没有 EVPN 与 SRv6 的结合。
- uSID only:locator 只支持 format usid-f3216,非压缩 SID 不在本实验范围。
- uDT46 是静态的:BGP per-VRF 只生成 uDT4/uDT6,uDT46 靠 explicit-sids 手工配。
- 多 SID traceroute 不可靠:路径验证用 ping + 各跳计数。
- 过滤器是观测工具,不是 ACL:timeout 500 ms,零星报文可能漏抓;命中数只能在 EVE GUI 看。
- 版本敏感:结论基于 IOS XE 17.18.2 IOL。换版本先核对 capabilities-parameters 与 SID 表格式。
10. 附录
10.1 A. 附件包(完整预配 + IaC)
完整配置与 IaC 文件打包为 **srv6-be-xe.zip**(约 196 KB,SHA-256 4d9238f6b4d057d2eb039d9faf4374b849010bf1618799e6ec31e01375559e96)。下载方式(发布时替换):