hbugs001 发表于 2026-11-1 12:16:52

实验案例:Cisco IOL XE 17.18.2 的 SRv6 能力验证

<h1>实验案例:Cisco IOL XE 17.18.2 的 SRv6 能力验证(4 路由器 + 2 主机,uSID BE / L3VPN / uDT46)</h1>
<blockquote>
<p>用 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 项。</p>
<p>实测环境:EVE-NG + eve-iac agent 0.9.1;Cisco IOS-XE 17.18.2(IOL,<code>l3-iol-xe-17-18-02.bin</code>);VPCS 1.3 (0.8.1)。</p>
</blockquote>
<p><img src="data/attachment/forum/202611/01/121313kss5tgs1t5wsg16k.png" alt="topology.png" title="topology.png" /></p>
<p><img src="data/attachment/forum/202611/01/121558a9p1rakzk8kq9pye.png" alt="image.png" title="image.png" /></p>
<p><a href="forum.php?mod=attachment&amp;aid=3634" title="attachment"><img src="/source/plugin/zhanmishu_markdown/template/editor/images/upload.svg" alt="upload" /> 附件:srv6-be-xe.zip</a></p>
<blockquote>
<p>完整预配与 IaC 文件见 §10.1 附件包;第 5 节只列核心行,<strong>不要直接拿片段去粘贴</strong>。</p>
</blockquote>
<h2>0. 实测结果</h2>
<table>
<thead>
<tr>
<th>项</th>
<th>实测结果</th>
</tr>
</thead>
<tbody>
<tr>
<td>镜像能力</td>
<td>SRv6 / PFP / MVPN / TILFA 均为 Yes;uN、uA、uDT4、uDT6、uDT46、H.ENCAP.RED;locator 只支持 <code>usid-f3216</code></td>
</tr>
<tr>
<td>Underlay</td>
<td>IS-IS level-2 IPv6;PE1/P1/P2/PE2 邻接 <code>Up</code>;4 条 <code>/48</code>locator 全网可达</td>
</tr>
<tr>
<td>基础 BE</td>
<td>CE1/CE2 对 4 个 locator 全部可达,TTL <code>64/63/62/61</code>逐跳递减</td>
</tr>
<tr>
<td>L3VPN</td>
<td>BGP VPNv4/VPNv6 邻居 <code>Established</code>,<code>PfxRcd 1</code>;<code>srv6 out-sid</code>指向对端 locator</td>
</tr>
<tr>
<td>数据面</td>
<td>VRF CUST 双向 IPv4 / IPv6 ping 均 5/5;uDT4/uDT6 计数同步增长</td>
</tr>
<tr>
<td>uDT46</td>
<td>静态 SID 同时收 IPv4 与 IPv6 内层,各 5/5;<code>unresolved</code>为空</td>
</tr>
<tr>
<td>SRv6 OAM</td>
<td>多 SID <code>40::,30::,20::</code>ping 5/5;P1/P2 的 uN 计数各 +5</td>
</tr>
<tr>
<td>验收脚本</td>
<td>常规<strong>58/58</strong>;加 <code>--fault</code> <strong>63/63</strong></td>
</tr>
<tr>
<td>过滤器</td>
<td>7 条全部通过 libpcap 编译并部署;面板命中见 §7.7</td>
</tr>
</tbody>
</table>
<h2>1. 这个实验解决什么</h2>
<p>SRv6 的文档很容易让人把三件事混成一件:</p>
<ol>
<li>locator 通告了——IS-IS 里有 Locator TLV;</li>
<li>SID 能 ping 通——报文目的地址就是 SID,中间路由器按 uN 转发;</li>
<li>封装真的发生了——头端把用户报文塞进外层 IPv6,ip6=41。</li>
</ol>
<p>第 2 条成立不代表第 3 条成立。基础 BE 里 CE 发出的就是普通 IPv6 报文,DA 直接是 locator SID,全程<strong>没有 H.Encaps</strong>。如果只看到 “ping 通” 就宣布 SRv6 验证完成,实际上连封装头都没产生过。</p>
<p>这个实验把变量拆开,逐层加码:</p>
<ul>
<li>第一层:4 台路由器只跑 IS-IS + locator,CE ping 每个 locator,验证 uN 与逐跳转发;</li>
<li>第二层:PE1/PE2 加 vrf definition + BGP VPNv4/VPNv6,让镜像自己分配 uDT4/uDT6,验证 H.Encaps.RED 与 L3VPN 数据面;</li>
<li>第三层:手配静态 uDT46,用同一个 SID 接 IPv4 和 IPv6 两种内层,验证端点行为与 decap-and-lookup;</li>
<li>第四层:用 ping srv6 ... via segment-list 压入多个 SID,验证逐 SID 处理与 SRH 的出现条件。</li>
</ul>
<p>适用读者:想在 EVE 里确认某个 IOL 镜像到底支不支持 SRv6、支持到哪一层的网络工程师;或者准备用 IOL 做 SRv6 实验,先要知道哪些姿势在这个镜像上根本走不通的人。</p>
<h2>2. 镜像与规格</h2>
<table>
<thead>
<tr>
<th>节点</th>
<th>角色</th>
<th>EVE 模板</th>
<th>镜像</th>
<th>vCPU / RAM</th>
<th>网口</th>
</tr>
</thead>
<tbody>
<tr>
<td>CE1</td>
<td>主机</td>
<td><code>vpcs</code></td>
<td>EVE 自带</td>
<td>—</td>
<td><code>eth0</code></td>
</tr>
<tr>
<td>PE1</td>
<td>SRv6 边缘</td>
<td><code>iol</code></td>
<td><code>l3-iol-xe-17-18-02.bin</code></td>
<td>1 / 1024 MB</td>
<td><code>e0/0</code>、<code>e0/1</code></td>
</tr>
<tr>
<td>P1</td>
<td>中转</td>
<td><code>iol</code></td>
<td>同上</td>
<td>1 / 1024 MB</td>
<td><code>e0/0</code>、<code>e0/1</code></td>
</tr>
<tr>
<td>P2</td>
<td>中转</td>
<td><code>iol</code></td>
<td>同上</td>
<td>1 / 1024 MB</td>
<td><code>e0/0</code>、<code>e0/1</code></td>
</tr>
<tr>
<td>PE2</td>
<td>SRv6 边缘</td>
<td><code>iol</code></td>
<td>同上</td>
<td>1 / 1024 MB</td>
<td><code>e0/0</code>、<code>e0/1</code></td>
</tr>
<tr>
<td>CE2</td>
<td>主机</td>
<td><code>vpcs</code></td>
<td>EVE 自带</td>
<td>—</td>
<td><code>eth0</code></td>
</tr>
</tbody>
</table>
<p>镜像版本:</p>
<pre><code class="language-text">Cisco IOS Software , Linux Software (X86_64BI_LINUX-ADVENTERPRISEK9-M), Version 17.18.2, RELEASE SOFTWARE (fc3)
Compiled Fri 19-Dec-25 03:28 by mcpre
</code></pre>
<p>注意事项:</p>
<ul>
<li>必须用 L3 路由器镜像 l3-iol-xe-17-18-02.bin。l2-* 是三层交换机镜像,定位不同;本实验的 SRv6 结论只对 l3-* 负责。</li>
<li>IOL 的 attributes.ethernet 填 1 就是 4 个口(e0/0–e0/3),不是 1 个口。ram、nvram 都是 1024。</li>
<li>节点名必须纯 ASCII。中文节点名在 EVE 往返时会丢字,eve-iac 部署会报 invalid_native_format 并静默删库。</li>
</ul>
<h2>3. 拓扑与地址</h2>
<p>拓扑是一条链:<code>CE1 — PE1 — P1 — P2 — PE2 — CE2</code>。PE 做 SRv6 边缘,P 只做 uN 转发。</p>
<table>
<thead>
<tr>
<th>#</th>
<th>A 端</th>
<th>B 端</th>
<th>网络</th>
<th>地址</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>CE1 <code>eth0</code></td>
<td>PE1 <code>e0/0</code></td>
<td><code>2001:db8:aa::/64</code></td>
<td>CE1 <code>::2</code>,PE1 <code>::1</code></td>
</tr>
<tr>
<td>2</td>
<td>PE1 <code>e0/1</code></td>
<td>P1 <code>e0/0</code></td>
<td><code>2001:db8:12::/64</code></td>
<td>PE1 <code>::1</code>,P1 <code>::2</code></td>
</tr>
<tr>
<td>3</td>
<td>P1 <code>e0/1</code></td>
<td>P2 <code>e0/0</code></td>
<td><code>2001:db8:23::/64</code></td>
<td>P1 <code>::1</code>,P2 <code>::2</code></td>
</tr>
<tr>
<td>4</td>
<td>P2 <code>e0/1</code></td>
<td>PE2 <code>e0/0</code></td>
<td><code>2001:db8:34::/64</code></td>
<td>P2 <code>::1</code>,PE2 <code>::2</code></td>
</tr>
<tr>
<td>5</td>
<td>PE2 <code>e0/1</code></td>
<td>CE2 <code>eth0</code></td>
<td><code>2001:db8:bb::/64</code></td>
<td>PE2 <code>::1</code>,CE2 <code>::2</code></td>
</tr>
</tbody>
</table>
<p>环回、locator 与 IS-IS:</p>
<table>
<thead>
<tr>
<th>设备</th>
<th>Loopback0</th>
<th>Locator(<code>format usid-f3216</code>)</th>
<th>NET</th>
</tr>
</thead>
<tbody>
<tr>
<td>PE1</td>
<td><code>2001:db8:100::1/128</code></td>
<td><code>2001:db8:10::/48</code></td>
<td><code>49.0001.0000.0000.0001.00</code></td>
</tr>
<tr>
<td>P1</td>
<td><code>2001:db8:100::2/128</code></td>
<td><code>2001:db8:20::/48</code></td>
<td><code>49.0001.0000.0000.0002.00</code></td>
</tr>
<tr>
<td>P2</td>
<td><code>2001:db8:100::3/128</code></td>
<td><code>2001:db8:30::/48</code></td>
<td><code>49.0001.0000.0000.0003.00</code></td>
</tr>
<tr>
<td>PE2</td>
<td><code>2001:db8:100::4/128</code></td>
<td><code>2001:db8:40::/48</code></td>
<td><code>49.0001.0000.0000.0004.00</code></td>
</tr>
</tbody>
</table>
<p>VRF CUST 与 BGP:</p>
<table>
<thead>
<tr>
<th>设备</th>
<th>RD</th>
<th>RT(import/export)</th>
<th>Lo100(IPv4)</th>
<th>Lo101(IPv6)</th>
<th>BGP AS</th>
</tr>
</thead>
<tbody>
<tr>
<td>PE1</td>
<td><code>65000:1</code></td>
<td><code>65000:100</code></td>
<td><code>192.168.100.1/32</code></td>
<td><code>2001:db8:c100::1/128</code></td>
<td>65000</td>
</tr>
<tr>
<td>PE2</td>
<td><code>65000:2</code></td>
<td><code>65000:100</code></td>
<td><code>192.168.100.2/32</code></td>
<td><code>2001:db8:c100::2/128</code></td>
<td>65000</td>
</tr>
</tbody>
</table>
<p>每个三层以太口还配了一个不用的 IPv4 <code>/30</code>(<code>10.255.x.x</code>)。它不是装饰,原因见 §8.4。</p>
<h2>4. 关键设计</h2>
<ul>
<li>只跑 IS-IS level-2,不跑 OSPF:SRv6 locator 要在 IGP 里通告,IS-IS 的 Locator TLV 在 IOL XE 上最直接。单区域、level-2-only,邻居关系是确定的线性结构,排查时不需要考虑区域边界。</li>
<li>**locator 用 /48 + usid-f3216**:这个镜像只支持 uSID 压缩格式,没有非压缩 format;/48 = block 32 + ID 16,动态 SID 从 E000 起、静态 uDT46 用 E100;四个 locator 是 10::、20::、30::、40::。</li>
<li>基础 BE 故意“不封装”:CE ping locator SID 时,报文 DA 就是 SID,PE 只做 uN 转发。这一阶段的 filter 5/6/7(proto-41、SRH、v4-in-v6)必须全灭,这是负对照,不是失败。</li>
<li>L3VPN 用 alloc-mode per-vrf:VPNv4 / VPNv6 各自分配 SID,镜像会生成分开的 uDT4 和 uDT6,而不是一个 uDT46。要验证 uDT46 必须另配静态 SID。</li>
<li>**静态 uDT46 固定 E100**:动态 SID 的编号重启后会互换,只有静态 SID 的编号稳定。验收脚本按 Behavior 找 SID,不写死 E000/E001。</li>
<li>多 SID 路径用 OAM 而不是 SR-TE:这个镜像的 SR-TE segment-list 只有 mpls 入口,配不出 SRv6 TE policy;但 ping srv6 ... via segment-list 可以手工压多个 SID,足够验证数据面。</li>
<li>7 条 filter 分三层语义:IS-IS 看 underlay,ICMPv6/ND 看主机侧,三条 SRv6 filter 看封装。单 SID 与多 SID 的 SRH 差异正好由 filter 6 区分。</li>
</ul>
<h2>5. 核心配置(完整预配见附件)</h2>
<p>完整、逐字的 6 份配置文件与 IaC 文件都在附件包里(下载与校验见 §10.1)。本节只摘每台设备的<strong>核心行</strong>,用来说明“这台机器为什么能参与 SRv6”;<strong>不要直接拿这些片段去粘贴</strong>,复现请用附件里的 <code>configs/default/n_X.cfg</code>。</p>
<h3>5.1 PE1:locator 与 IS-IS 绑定</h3>
<pre><code class="language-text">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
</code></pre>
<p>绑定<strong>必须分层写</strong>,少一层 locator 就不会通告。</p>
<h3>5.2 PE1:BGP VPNv4 / VPNv6</h3>
<pre><code class="language-text">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
</code></pre>
<p><code>address-family vpnv6</code> 是同一套配置,只把 AF 换成 <code>vpnv6</code>。两边的 VRF 都用 <code>redistribute connected</code> 把环回送进 VPN 表。</p>
<h3>5.3 PE1:VRF CUST 与静态 uDT46</h3>
<pre><code class="language-text">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
</code></pre>
<p>命令行输入时写 <code>decap-and-lookup vrf CUST</code>,running-config 会存成 <code>vrf-name CUST</code>。漏掉 VRF 时 SID 不装表,<code>show segment-routing srv6 sid unresolved</code> 会显示 <code>uDT46 ... no vrf</code>。</p>
<h3>5.4 P1 / P2:只有 locator 与接口地址</h3>
<pre><code class="language-text">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
</code></pre>
<p>P1 用 <code>20::/48</code>、P2 用 <code>30::/48</code>,其余同构;P 上不需要 BGP、VRF 或封装配置。</p>
<h3>5.5 三层接口的写法(以 PE1 <code>e0/0</code> 为例)</h3>
<pre><code class="language-text">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
</code></pre>
<p>那个 <code>ip address</code> 是 dummy,只为让 <code>no shutdown</code> 在启动配置里落地。</p>
<h3>5.6 CE1 / CE2(VPCS,完整两行)</h3>
<pre><code class="language-text">set pcname CE1
ip 2001:db8:aa::2/64 2001:db8:aa::1
</code></pre>
<p>CE2 同理:<code>set pcname CE2</code> + <code>ip 2001:db8:bb::2/64 2001:db8:bb::1</code>。VPCS 不是 Cisco CLI,不要给 <code>ip</code> 行加 <code>set</code>。</p>
<h2>6. 复现步骤</h2>
<h3>6.1 手工 EVE(不需要 eve-iac)</h3>
<ol>
<li>新建 lab,按第 3 节加 4 台 iol(镜像 l3-iol-xe-17-18-02.bin,ethernet: 1,RAM 1024)和 2 台 vpcs。</li>
<li>连 5 条链路,注意接口名:IOL 是 e0/0、e0/1,VPCS 只有 eth0。</li>
<li>启动全部节点,逐台打开控制台,把附件里 configs/default/n_1.cfg … n_6.cfg 的内容粘贴进去,IOL 上再 write memory。</li>
<li>关闭分页,否则长输出会卡在 --More--:enable 后执行 terminal length 0。</li>
<li>按第 7 节逐项验收。</li>
</ol>
<h3>6.2 IaC 一键复现(eve-iac)</h3>
<pre><code class="language-text">srv6-be-xe/
├── .eve-iac.yml
├── topology.yml
└── configs/
    └── default/
      ├── n_1.cfg … n_6.cfg
</code></pre>
<p><code>.eve-iac.yml</code>:</p>
<pre><code class="language-yaml">version: 1
topology: topology.yml

eve:
lab: /IaC/srv6-be-xe.unl
</code></pre>
<p>MCP 调用顺序:</p>
<pre><code class="language-text">eve_iac_status                         # 确认工程被发现,mode=create
eve_iac_validate                     # 拓扑 + BPF 表达式编译
eve_iac_plan                           # 首次应为 create
eve_iac_deploy replace=true            # 建 lab
eve_iac_start                        # 启动全部节点
</code></pre>
<p><strong>改启动配置后</strong>,0.9.1 的 <code>reconcile</code> 只上传、不激活,必须 <code>stop → wipe → start</code>(wipe 是破坏性操作,需明确授权);只 <code>stop → start</code> 不会重读改过的配置。</p>
<h2>7. 验收判据</h2>
<h3>7.1 Underlay</h3>
<pre><code class="language-text">show isis neighbors
</code></pre>
<p>期望:PE1、PE2 各 1 个 <code>Up</code>;P1、P2 各 2 个 <code>Up</code>(线性拓扑)。</p>
<pre><code class="language-text">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
</code></pre>
<p>期望:四个 locator 都是 IS-IS 学到的路由。<code>show isis database verbose</code> 里能看到 Locator TLV。</p>
<h3>7.2 SID 表</h3>
<pre><code class="language-text">show segment-routing srv6 sid
</code></pre>
<p>PE1 实测输出(列宽已压缩):</p>
<pre><code class="language-text">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
</code></pre>
<p>判据不是 SID 编号,而是 <strong>Behavior 列</strong>:必须同时看到 <code>uN</code>、<code>uDT4</code>、<code>uDT6</code>、<code>uA</code>、<code>uDT46</code>。动态 SID 的 <code>E000</code>/<code>E001</code> 在重启后可能互换,<code>uA</code> 也可能占 <code>E002</code>;只有静态 uDT46 固定 <code>E100</code>。</p>
<h3>7.3 基础 BE:locator 可达与 TTL</h3>
<p>在 CE1 上:</p>
<pre><code class="language-text">ping 2001:db8:10:: -c 3
ping 2001:db8:20:: -c 3
ping 2001:db8:30:: -c 3
ping 2001:db8:40:: -c 3
</code></pre>
<p>期望:全部 3/3;TTL 依次为 <code>64</code>、<code>63</code>、<code>62</code>、<code>61</code>。CE2 反向测四个 locator,期望同样是 <code>64/63/62/61</code>。</p>
<p>再看每台路由器的 uN 计数:</p>
<pre><code class="language-text">show segment-routing srv6 sid detail
</code></pre>
<p>期望:四个 locator 的 <code>uN (PSP/USD)</code> 计数随 ping 增长。这一阶段 <strong>uDT4/uDT6/uDT46 计数保持不变</strong>,filter 5/6/7 也不亮——因为没有封装。</p>
<h3>7.4 L3VPN:控制面与数据面</h3>
<pre><code class="language-text">show bgp vpnv4 unicast all summary
show bgp vpnv6 unicast all summary
</code></pre>
<p>期望:PE1 的邻居 <code>2001:DB8:100::4</code>、PE2 的邻居 <code>2001:DB8:100::1</code> 都是 <code>Established</code>,<code>State/PfxRcd</code> 为 <code>1</code>。</p>
<pre><code class="language-text">show bgp vpnv4 unicast all 192.168.100.2/32
</code></pre>
<p>期望能看到对端分配的 SID:</p>
<pre><code class="language-text">srv6 out-sid: 2001:DB8:40:E000::
</code></pre>
<p>数据面:</p>
<pre><code class="language-text">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
</code></pre>
<p>两个方向都测(PE2 反向时目的与 source 互换),期望各 5/5。之后 <code>show segment-routing srv6 sid detail</code> 里 uDT4/uDT6 的包数增长——请求在对端 PE 解封装,回程在本端 PE 解封装,各 5 包。</p>
<h3>7.5 静态 uDT46:一个 SID 收两种内层</h3>
<pre><code class="language-text">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
</code></pre>
<p>期望:两条都是 5/5。反向(PE2 → PE1)把目的与 source 换成 PE1 的环回、SID 换成 <code>2001:DB8:10:E100::</code>,同样 5/5。同一条 <code>uDT46</code> 计数增长两次(IPv4 内层与 IPv6 内层各一轮)。</p>
<pre><code class="language-text">show segment-routing srv6 sid unresolved
</code></pre>
<p>期望:为空。若出现 <code>uDT46 ... no vrf</code>,说明 <code>decap-and-lookup</code> 漏了 VRF。</p>
<h3>7.6 SRv6 OAM:多 SID 路径</h3>
<p>在 PE1 上:</p>
<pre><code class="language-text">ping srv6 2001:db8:100::4 via segment-list 2001:db8:40::,2001:db8:30::,2001:db8:20::
</code></pre>
<p>SID 列表是<strong>逗号分隔、bottom SID first</strong>。期望 5/5,且 P1/P2 的 <code>uN</code> 计数各增长 5——证明报文确实逐 SID 经过了 <code>20::</code> 和 <code>30::</code>。</p>
<blockquote>
<p>多 SID 的 <code>traceroute srv6</code> 在本镜像上不可靠:实测两次都给出 7 跳的怪路径(PE2 之后回折 P2/P1 再回 PE2),且工具调用容易超时。路径验证用 <code>ping srv6</code> + 各跳 uN 计数,不要用 traceroute。</p>
</blockquote>
<h3>7.7 Traffic filters 与面板判读</h3>
<p>7 条过滤器(<code>timeout</code> 全部 500 ms):</p>
<table>
<thead>
<tr>
<th>#</th>
<th>标题</th>
<th>表达式</th>
<th>颜色</th>
<th>看什么</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>IS-IS</td>
<td><code>ether = 0xfe and ether = 0xfe</code></td>
<td><code>#8e24aa</code></td>
<td>underlay 常亮</td>
</tr>
<tr>
<td>2</td>
<td>ICMPv6-Request</td>
<td><code>icmp6 and ip6 = 128</code></td>
<td><code>#1e88e5</code></td>
<td>主机 ping 请求</td>
</tr>
<tr>
<td>3</td>
<td>ICMPv6-Reply</td>
<td><code>icmp6 and ip6 = 129</code></td>
<td><code>#fdd835</code></td>
<td>主机 ping 应答</td>
</tr>
<tr>
<td>4</td>
<td>ND-NS-NA</td>
<td><code>icmp6 and (ip6 = 135 or ip6 = 136)</code></td>
<td><code>#6d4c41</code></td>
<td>邻居发现</td>
</tr>
<tr>
<td>5</td>
<td>SRv6-Encap-v6</td>
<td><code>ip6 and ip6 = 41</code></td>
<td><code>#00acc1</code></td>
<td>IPv6 内层封装</td>
</tr>
<tr>
<td>6</td>
<td>SRv6-SRH</td>
<td><code>ip6 and ip6 = 43 and ip6 = 4</code></td>
<td><code>#fb8c00</code></td>
<td>SRH(Routing Type 4)</td>
</tr>
<tr>
<td>7</td>
<td>SRv6-Encap-v4</td>
<td><code>ip6 and ip6 = 4</code></td>
<td><code>#d81b60</code></td>
<td>IPv4 内层封装</td>
</tr>
</tbody>
</table>
<p>预期命中:</p>
<ul>
<li>基础 BE 阶段:filter_1 常亮,2/3/4 随 ping 闪;5/6/7 全灭——没有封装。</li>
<li>L3VPN / uDT46 阶段:单 SID 的 H.Encaps.RED 把 uSID carrier 压进 DA,不带 SRH。IPv4 内层亮 filter_7,IPv6 内层亮 filter_5,filter_6 保持熄灭。</li>
<li>多 SID OAM 阶段:filter_6 出现,且每次 5 包 ping 恰好命中 5 次。</li>
</ul>
<p>本次截图时的面板累计值(未重置):IS-IS 821、ICMPv6-Request 98、ICMPv6-Reply 99、ND-NS-NA 38、SRv6-Encap-v6 96、SRv6-Encap-v4 106、SRv6-SRH 5。</p>
<blockquote>
<p>命中次数只能在 EVE 的 Traffic Filters 面板里看,MCP 没有读命中数的通道。500 ms 窗口下零星报文可能漏抓,发 5–10 次 ping 再观察。截图时可临时把 <code>timeout</code> 调到 2000(会清零计数,截完改回)。</p>
</blockquote>
<h3>7.8 反证:停机测试</h3>
<p>真正的反证不是“ping 通”,而是“该断的时候确实断了”:</p>
<ol>
<li>停 PE2;</li>
<li>在 PE1 上等 show ipv6 route 2001:DB8:40::/48 变成 % Route not found(IS-IS 撤销,最长等 180 秒);</li>
<li>在 CE1 上 ping 2001:db8:40:: -c 3,期望 0/3;</li>
<li>起回 PE2,等路由恢复,再 ping,期望 3/3。</li>
</ol>
<p>注意 VPCS 的 IPv6 输出陷阱:ICMP 错误行也带 <code>icmp6_seq=</code>,行首是 <code>*</code>。只数不以 <code>*</code> 开头的行,否则会把“No route to destination”数成回包。</p>
<h2>8. 踩坑清单(按“会骗到你”的程度排序)</h2>
<h3>8.1 “SID 能 ping 通”不等于“SRv6 封装发生了” ★最坑</h3>
<p>基础 BE 里 CE 发的是普通 IPv6,DA 就是 locator SID。uN 转发成立、ping 全通,但 proto-41 / SRH / v4-in-v6 三条 filter 一条都不会亮。<strong>这不是过滤器坏了,是本来就没有封装。</strong> 要看到封装,必须加 VRF + BGP L3VPN 或静态 uDT。</p>
<h3>8.2 <code>decap-and-lookup</code> 必须带 <code>vrf</code></h3>
<p>帮助里写的是 <code>decap-and-lookup vrf-name VRF name</code>,实际输入要写 <code>decap-and-lookup vrf CUST</code>;只写 VRF 名会报 <code>Invalid input</code>。漏掉 VRF 时命令能进去,但 <code>show segment-routing srv6 sid unresolved</code> 显示 <code>uDT46 ... no vrf</code>,SID 不装表,ping 直接失败。</p>
<h3>8.3 IS-IS 的 locator 绑定必须分层</h3>
<p>只写 <code>router isis UNDERLAY</code> → <code>segment-routing srv6</code> 不会通告 locator,必须继续进 <code>address-family ipv6 unicast</code> → <code>segment-routing srv6</code> → <code>locator MAIN</code> → <code>level-2</code>。写成单行或少一层,<code>show isis database verbose</code> 里就没有 Locator TLV。</p>
<h3>8.4 IPv6-only 接口的 <code>no shutdown</code> 会被静默丢弃</h3>
<p>启动配置里接口只有 IPv6 地址时,IOL XE 会静默丢掉 <code>no shutdown</code>,接口开机后仍是 admin down。加一个不用的 dummy IPv4 <code>/30</code> 就能解决,IS-IS 仍然只跑 IPv6 AF。这个坑在“手工粘贴时明明有 <code>no shutdown</code>、重启后接口却 down”时最容易骗人。</p>
<h3>8.5 动态 SID 编号重启后会互换</h3>
<p><code>E000</code>/<code>E001</code> 在 uDT4 和 uDT6 之间互换,<code>uA</code> 邻接 SID 也可能占 <code>E002</code>。<strong>判定按 Behavior + Context 找,不要写死编号</strong>;只有静态 uDT46 固定 <code>E100</code>。写验收脚本时尤其要注意。</p>
<h3>8.6 <code>show segment-routing srv6 locator detail</code> 不存在</h3>
<p>查计数器要用 <code>show segment-routing srv6 sid detail</code>,而且它会分页——先 <code>terminal length 0</code>。另外 <code>show segment-routing srv6 sid</code> 在部分路由器上要 <code>enable</code> 后才能执行。</p>
<h3>8.7 VPCS 的 IPv6 ping 错误行伪装成回包</h3>
<pre><code class="language-text">*2001:db8:aa::1 icmp6_seq=1 ttl=64 time=0.643 ms (ICMP type:1, code:0, No route to destination)
</code></pre>
<p>行首 <code>*</code> 是错误标记,但 <code>icmp6_seq=</code> 照样在。只统计 <code>/^(?!\*)\S+\s+icmp6_seq=\d+/</code> 的行。</p>
<h3>8.8 <code>ping srv6</code> 的参数顺序与 <code>via</code></h3>
<p><code>repeat</code>/<code>source</code>/<code>size</code> 放在 SID 列表<strong>之后</strong>;<code>ping srv6 vrf CUST &lt;dest&gt;</code> 不带 <code>via</code> 会报 Incomplete / No SRv6 SID。SID 列表是 bottom SID first。</p>
<h3>8.9 SR-TE 配不出 SRv6 TE policy</h3>
<p><code>segment-routing traffic-eng</code> 的 CLI 在,但 <code>segment-list name X</code> 下 <code>index 1 ?</code> 只有 <code>mpls</code>,没有 SRv6 SID 入口。要压多 SID 路径只能用 OAM 的 <code>ping srv6 ... via segment-list</code>。</p>
<h3>8.10 改启动配置后 <code>stop → start</code> 不重读</h3>
<p>IOL 的 disk 里还是旧配置。<code>reconcile</code> 只负责上传 configset,真正的激活路径是 <code>stop → wipe → start</code>(wipe 是破坏性操作,需明确授权);只 <code>stop → start</code> 看到的是旧配置。</p>
<h3>8.11 控制台输出偶发空读</h3>
<p><code>console_exec</code> 偶尔整条返回空,或把最后一行塞进 <code>prompt</code> 字段。判据要用“读到的内容是否满足预期”,不满足就退避重读;必要时回读 <code>console_history</code>(多 SID ping 被截断过一次,历史里是 5/5)。</p>
<h2>9. 已知限制</h2>
<ul>
<li>线性拓扑、单区域:IS-IS 只有一条路径,TI-LFA 的快速收敛没有功能验证(CLI 存在,fast-reroute ti-lfa level-2 可配)。</li>
<li>没有 SRv6 TE policy:本镜像的 segment-list 不支持 SRv6 SID,只有 OAM 的手工多 SID 路径。</li>
<li>只做了单 VRF:没有跨 VRF 泄漏、没有 EVPN 与 SRv6 的结合。</li>
<li>uSID only:locator 只支持 format usid-f3216,非压缩 SID 不在本实验范围。</li>
<li>uDT46 是静态的:BGP per-VRF 只生成 uDT4/uDT6,uDT46 靠 explicit-sids 手工配。</li>
<li>多 SID traceroute 不可靠:路径验证用 ping + 各跳计数。</li>
<li>过滤器是观测工具,不是 ACL:timeout 500 ms,零星报文可能漏抓;命中数只能在 EVE GUI 看。</li>
<li>版本敏感:结论基于 IOS XE 17.18.2 IOL。换版本先核对 capabilities-parameters 与 SID 表格式。</li>
</ul>
<h2>10. 附录</h2>
<h3>10.1 A. 附件包(完整预配 + IaC)</h3>
<p>完整配置与 IaC 文件打包为 **<code>srv6-be-xe.zip</code>**(约 196 KB,SHA-256 <code>4d9238f6b4d057d2eb039d9faf4374b849010bf1618799e6ec31e01375559e96</code>)。下载方式(发布时替换):</p>
<blockquote>
<p>

bluesky2000 发表于 2026-11-2 09:36:13

<p>请问是不是不能下载?</p>
页: [1]
查看完整版本: 实验案例:Cisco IOL XE 17.18.2 的 SRv6 能力验证