<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>单向可达 on Zero Day Notes</title>
        <link>https://blog.5772447.xyz/tags/%E5%8D%95%E5%90%91%E5%8F%AF%E8%BE%BE/</link>
        <description>Recent content in 单向可达 on Zero Day Notes</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh</language>
        <lastBuildDate>Sun, 09 Aug 2026 07:05:00 +0800</lastBuildDate><atom:link href="https://blog.5772447.xyz/tags/%E5%8D%95%E5%90%91%E5%8F%AF%E8%BE%BE/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>记一次机房搬迁网络割接后跨机房业务单向可达的排查</title>
            <link>https://blog.5772447.xyz/posts/5453de23/</link>
            <pubDate>Sat, 27 Mar 2021 07:05:00 +0800</pubDate>
            <guid>https://blog.5772447.xyz/posts/5453de23/</guid>
            <description>&lt;h2 id=&#34;问题背景&#34;&gt;&lt;a href=&#34;#%e9%97%ae%e9%a2%98%e8%83%8c%e6%99%af&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;问题背景&#xD;&#xA;&lt;/h2&gt;&lt;p&gt;公司把老园区 IDC（机房 A）里一批业务虚机与存储节点整建制迁到新园区机房 B，割接窗口定在周六凌晨 02:00–05:00。方案表面上很「干净」：业务网段整体搬迁、入口防火墙 DNAT/策略按新地址切换、跨机房链路从原有 MPLS 专线切换到新建的双上联 IPSec + 专线混合出口。搬迁前做过 ping/traceroute 抽样和少量应用冒烟，窗口内业务侧汇报「新机房对外正常、监控基本绿」。&lt;/p&gt;&#xA;&lt;p&gt;真正的问题在周一早高峰才爆出来——&lt;strong&gt;一部分跨机房调用表现为「半通」&lt;/strong&gt;：机房 A 的应用访问机房 B 新地址能建连，反过来 B 访问 A、或 B 回调 A 的回调地址却超时；运维在 B 机跳板机能 &lt;code&gt;ssh&lt;/code&gt; 到 A，A 的同事却感觉「B 回不来」。很多人第一反应是防火墙、安全组或应用端口，结果越查越像「路由和回程没在同一张图上」。&lt;/p&gt;&#xA;&lt;h2 id=&#34;故障现象&#34;&gt;&lt;a href=&#34;#%e6%95%85%e9%9a%9c%e7%8e%b0%e8%b1%a1&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;故障现象&#xD;&#xA;&lt;/h2&gt;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;方向性矛盾&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A→B：HTTP/HTTPS、数据库、消息队列客户端侧大都能建立 TCP，偶发超时。&lt;/li&gt;&#xA;&lt;li&gt;B→A：同端口大量 &lt;code&gt;connect timeout&lt;/code&gt;；部分会话能 SYN 出去，却收不到 SYN-ACK。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;工具表象分裂&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;在 B 上 &lt;code&gt;ping&lt;/code&gt; A 的网关通，&lt;code&gt;ping&lt;/code&gt; A 的业务 VIP 有时通有时不通。&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;traceroute&lt;/code&gt; 在两个方向上路径长度不一致：A→B 走新建专线，B→A 却绕到旧出口或公网边界设备。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;业务侧症状&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;双向回调型接口（支付回调、工单状态推送、AD 同步）失败率飙升。&lt;/li&gt;&#xA;&lt;li&gt;单向拉取型任务（A 定时拉 B 报表）看似正常，掩盖了回程问题。&lt;/li&gt;&#xA;&lt;li&gt;监控对「本机存活」全绿，因为探针都是本机房内部路径，&lt;strong&gt;跨机房回程不在探针路径上&lt;/strong&gt;。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;变更后漂移&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;割接记录写着「静态路由已切换」，但两台核心三层、边界防火墙、业务侧策略路由（PBR）的生效快照并不一致；部分设备仍保留「迁出前」的下一跳。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;排查过程&#34;&gt;&lt;a href=&#34;#%e6%8e%92%e6%9f%a5%e8%bf%87%e7%a8%8b&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;排查过程&#xD;&#xA;&lt;/h2&gt;&lt;h3 id=&#34;1-先定方向不要一上来改防火墙&#34;&gt;&lt;a href=&#34;#1-%e5%85%88%e5%ae%9a%e6%96%b9%e5%90%91%e4%b8%8d%e8%a6%81%e4%b8%80%e4%b8%8a%e6%9d%a5%e6%94%b9%e9%98%b2%e7%81%ab%e5%a2%99&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;1. 先定方向，不要一上来改防火墙&#xD;&#xA;&lt;/h3&gt;&lt;p&gt;先在故障对上做最小对照实验，把「通/不通」钉死为方向问题，而不是端口问题：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&#xA;&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;1&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;2&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;3&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;4&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;5&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;6&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;7&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 在 A 业务机&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl -v --connect-timeout &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt; http://B_VIP:8080/health&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tcptraceroute B_VIP &lt;span style=&#34;color:#ae81ff&#34;&gt;8080&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 在 B 业务机&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl -v --connect-timeout &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt; http://A_VIP:8080/health&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tcptraceroute A_VIP &lt;span style=&#34;color:#ae81ff&#34;&gt;8080&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;结果非常整齐：A→B 三次握手完成；B→A 停在第一次 SYN 之后，抓包在 A 网卡上&lt;strong&gt;根本看不到这个 SYN&lt;/strong&gt;。说明问题不在应用监听，而在 &lt;strong&gt;B→A 的包在中间被送丢/送错路径&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;h3 id=&#34;2-对称抓包暴露非对称路径&#34;&gt;&lt;a href=&#34;#2-%e5%af%b9%e7%a7%b0%e6%8a%93%e5%8c%85%e6%9a%b4%e9%9c%b2%e9%9d%9e%e5%af%b9%e7%a7%b0%e8%b7%af%e5%be%84&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;2. 对称抓包，暴露非对称路径&#xD;&#xA;&lt;/h3&gt;&lt;p&gt;在 A/B 业务机、A/B 机房出口防火墙、跨机房专线两端同时抓同一五元组：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&#xA;&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;src=B_APP dst=A_VIP sport=随机 dport=8080&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;时间线对齐后发现：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;B 业务机发出 SYN，下一跳走对；&lt;/li&gt;&#xA;&lt;li&gt;B 出口防火墙会话表有 created；&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;专线 B 侧有出包，A 侧专线口没有对应入包&lt;/strong&gt;；&lt;/li&gt;&#xA;&lt;li&gt;同时在 A 的&lt;strong&gt;旧上联/备用出口&lt;/strong&gt;上，出现了目的为 A_VIP 的怪异入向流量（且被 antispoof/严格 uRPF 或安全策略丢掉）。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;也就是说：B 以为自己走新专线去 A，但&lt;strong&gt;实际回程/对向某段仍把流量 steers 到旧路径&lt;/strong&gt;，形成经典的&lt;strong&gt;非对称路由（asymmetric routing）&lt;/strong&gt;；中间任一设备做了状态检测或反向路径校验，就会表现为「单向可达」。&lt;/p&gt;&#xA;&lt;h3 id=&#34;3-对照三张表转发表策略路由nat&#34;&gt;&lt;a href=&#34;#3-%e5%af%b9%e7%85%a7%e4%b8%89%e5%bc%a0%e8%a1%a8%e8%bd%ac%e5%8f%91%e8%a1%a8%e7%ad%96%e7%95%a5%e8%b7%af%e7%94%b1nat&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;3. 对照三张表：转发表、策略路由、NAT&#xD;&#xA;&lt;/h3&gt;&lt;p&gt;把割接 checklist 里「已经改完」的对象重新导出对账，而不是只看变更单勾选：&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;检查项&lt;/th&gt;&#xA;          &lt;th&gt;A 核心&lt;/th&gt;&#xA;          &lt;th&gt;B 核心&lt;/th&gt;&#xA;          &lt;th&gt;A 边界 FW&lt;/th&gt;&#xA;          &lt;th&gt;B 边界 FW&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;业务网段路由下一跳&lt;/td&gt;&#xA;          &lt;td&gt;仍指向旧互联&lt;/td&gt;&#xA;          &lt;td&gt;新专线&lt;/td&gt;&#xA;          &lt;td&gt;DNAT 已切&lt;/td&gt;&#xA;          &lt;td&gt;正常&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;回程明细路由&lt;/td&gt;&#xA;          &lt;td&gt;缺失 B 新网段细路由&lt;/td&gt;&#xA;          &lt;td&gt;有&lt;/td&gt;&#xA;          &lt;td&gt;有&lt;/td&gt;&#xA;          &lt;td&gt;有&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;策略路由（PBR）&lt;/td&gt;&#xA;          &lt;td&gt;旧 match 未删&lt;/td&gt;&#xA;          &lt;td&gt;新 policy 生效&lt;/td&gt;&#xA;          &lt;td&gt;—&lt;/td&gt;&#xA;          &lt;td&gt;源网段 match 半生效&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;会话残留&lt;/td&gt;&#xA;          &lt;td&gt;无&lt;/td&gt;&#xA;          &lt;td&gt;有旧 SPI/旧隧道&lt;/td&gt;&#xA;          &lt;td&gt;长连接未清&lt;/td&gt;&#xA;          &lt;td&gt;已清&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;关键发现有三条：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;A 侧核心对「B 新业务网段」缺少更优的明细路由&lt;/strong&gt;，最长匹配落到一条更宽的默认/汇总，下一跳仍是割接前的旧互联地址。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;B 侧有一条基于源地址的策略路由&lt;/strong&gt;：迁移过来的新网段访问「总部/机房 A」应走新专线，但 match ACL 只写了部分子网，&lt;strong&gt;漏写了当晚临时扩容的 /26&lt;/strong&gt;。&lt;/li&gt;&#xA;&lt;li&gt;边界防火墙上，A→B 的新建连正常；B→A 因路径绕行，包以「非预期入接口」到达 A，被 &lt;strong&gt;strict RPF / 接口防欺骗&lt;/strong&gt; 静默丢弃——所以 A 业务机 tcpdump 空白，特别像「没人来连」。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;4-控制面确认不是-ospf-抖动是静态pbr-漂移&#34;&gt;&lt;a href=&#34;#4-%e6%8e%a7%e5%88%b6%e9%9d%a2%e7%a1%ae%e8%ae%a4%e4%b8%8d%e6%98%af-ospf-%e6%8a%96%e5%8a%a8%e6%98%af%e9%9d%99%e6%80%81pbr-%e6%bc%82%e7%a7%bb&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;4. 控制面确认：不是 OSPF 抖动，是静态/PBR 漂移&#xD;&#xA;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;show ip ospf neighbor&lt;/code&gt; / 邻居状态稳定，没有 Flap；问题集中在&lt;strong&gt;割接时手工切的静态与 PBR&lt;/strong&gt;。再查变更窗口的操作记录，发现执行顺序是：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;先切业务 DNS / VIP；&lt;/li&gt;&#xA;&lt;li&gt;再切防火墙 DNAT；&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;最后才改路由，且 A/B 两侧不是同一人、同一时间点提交&lt;/strong&gt;；&lt;/li&gt;&#xA;&lt;li&gt;回退演练只验证了 A→B 主路径，&lt;strong&gt;没有强制做 B→A 与回调路径验收&lt;/strong&gt;。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;于是出现了「业务对外看起来活着，跨机房回程悄悄裂开」的窗口。&lt;/p&gt;&#xA;&lt;h3 id=&#34;5-业务层二次验证&#34;&gt;&lt;a href=&#34;#5-%e4%b8%9a%e5%8a%a1%e5%b1%82%e4%ba%8c%e6%ac%a1%e9%aa%8c%e8%af%81&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;5. 业务层二次验证&#xD;&#xA;&lt;/h3&gt;&lt;p&gt;挑三类代表流量复测：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;纯正向：A 批处理拉 B API → 基本成功；&lt;/li&gt;&#xA;&lt;li&gt;纯反向：B 同步任务写 A → 失败；&lt;/li&gt;&#xA;&lt;li&gt;回调：B 处理完主动 POST A 回调 URL → 失败。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;与网络层结论完全同构，排除「个别应用 bug」干扰。&lt;/p&gt;&#xA;&lt;h2 id=&#34;解决方案&#34;&gt;&lt;a href=&#34;#%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;解决方案&#xD;&#xA;&lt;/h2&gt;&lt;h3 id=&#34;止血分钟级&#34;&gt;&lt;a href=&#34;#%e6%ad%a2%e8%a1%80%e5%88%86%e9%92%9f%e7%ba%a7&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;止血（分钟级）&#xD;&#xA;&lt;/h3&gt;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;在 A 核心补齐 B 新网段明细静态路由&lt;/strong&gt;，下一跳强制指向新专线对端，&lt;code&gt;metric&lt;/code&gt; 优于汇总默认。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;修正 B 侧 PBR 的 match ACL&lt;/strong&gt;，把漏网的 /26 与临时测试网段一次性纳入，确保源网段回总部/ A 时统一走新专线。&lt;/li&gt;&#xA;&lt;li&gt;边界防火墙：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;临时将相关接口 RPF 从 strict 调整为 loose（或对专线口加例外），避免好路径未完全收敛时误杀；&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;clear session&lt;/code&gt; 清掉绕行产生的半开/错向会话。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;业务侧：对回调类任务短暂切到「A 主动拉取」降级模式，减少用户可见失败。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;按此操作约 10 分钟后，B→A 三次握手恢复，回调成功率回到基线。&lt;/p&gt;&#xA;&lt;h3 id=&#34;根治当天窗口收口&#34;&gt;&lt;a href=&#34;#%e6%a0%b9%e6%b2%bb%e5%bd%93%e5%a4%a9%e7%aa%97%e5%8f%a3%e6%94%b6%e5%8f%a3&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;根治（当天窗口收口）&#xD;&#xA;&lt;/h3&gt;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;路由即代码&lt;/strong&gt;：把 A/B 核心静态、PBR、防火墙路线用同一份 inventory（网段、下一跳、接口、优先级）生成，禁止两侧各改各的。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;割接验收改为「双向五元组矩阵」&lt;/strong&gt;，至少覆盖：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A→B 业务端口；&lt;/li&gt;&#xA;&lt;li&gt;B→A 业务端口；&lt;/li&gt;&#xA;&lt;li&gt;回调 URL；&lt;/li&gt;&#xA;&lt;li&gt;管理面（跳板机、监控、备份）；&lt;/li&gt;&#xA;&lt;li&gt;大包（&lt;code&gt;ping -M do -s 1400&lt;/code&gt;）防止隐式 MTU 问题夹带进来。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;严格 RPF 只在收敛完成后加回&lt;/strong&gt;；窗口内对新建互联口使用可观测的 drop 计数告警，而不是静默丢。&lt;/li&gt;&#xA;&lt;li&gt;旧互联地址、旧汇总路由设置明确 &lt;strong&gt;撤线时间与只读标记&lt;/strong&gt;，防止「先留着保底」变成长期黑洞入口。&lt;/li&gt;&#xA;&lt;li&gt;在流量分析/NetFlow 上对「非预期入接口访问本机房 VIP」做基线告警，作为非对称路径的持续探针。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;根因分析&#34;&gt;&lt;a href=&#34;#%e6%a0%b9%e5%9b%a0%e5%88%86%e6%9e%90&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;根因分析&#xD;&#xA;&lt;/h2&gt;&lt;p&gt;根因不是单一命令写错，而是三类问题叠加：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;路径规划只画了去程&lt;/strong&gt;：搬迁方案重点写「业务怎么进新机房」，回程与回调被默认成「对称自愈」，在静态+PBR 环境里不成立。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;两侧变更不同步&lt;/strong&gt;：路由、NAT、DNS、策略路由分属不同执行人，缺少同一时刻的配置快照对账，出现「半切」状态。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;验收探针路径不覆盖故障路径&lt;/strong&gt;：本机房健康检查与 A→B 主路径全绿，&lt;strong&gt;恰好照不到 B→A 与错误入接口丢包&lt;/strong&gt;。再叠加 strict RPF，故障表现从「绕路」升级成「单向黑洞」。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;技术本质是：&lt;strong&gt;跨机房割接中的控制面（静态/PBR）与数据面期望路径不一致，形成非对称路由；状态防火墙/RPF 把不对称放大成业务单向可达。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;预防措施&#34;&gt;&lt;a href=&#34;#%e9%a2%84%e9%98%b2%e6%8e%aa%e6%96%bd&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;预防措施&#xD;&#xA;&lt;/h2&gt;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;搬迁网络设计强制输出三张图&lt;/strong&gt;：去程、回程、管理面；任何网段变更必须三图同时改。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;变更单增加「双向连通矩阵」必填项&lt;/strong&gt;，未测双向不得宣布窗口成功。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;PBR/静态路由变更走生成式配置&lt;/strong&gt;，ACL 网段从 CMDB 自动展开，避免手写漏网段。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;窗口内保留可快速回退的对称路径&lt;/strong&gt;，但回退条目要有 TTL 和自动失效，禁止无限期双路径并存。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;监控补齐路径级探测&lt;/strong&gt;：从 A/B 双侧合成「对向 VIP + 关键端口」拨测，而不是只做本机 process up。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;RPF/防欺骗策略与割接 runbook 绑定&lt;/strong&gt;：割接中 loose、收敛后 strict，并确认 drop 计数进告警。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;演练要包含「回调失败」场景&lt;/strong&gt;：只测浏览器打开首页，测不出这类半通故障。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;总结&#34;&gt;&lt;a href=&#34;#%e6%80%bb%e7%bb%93&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;总结&#xD;&#xA;&lt;/h2&gt;&lt;p&gt;这次机房搬迁表面上「业务在新机房活了」，实质上卡在&lt;strong&gt;回程路由与策略路由未同步&lt;/strong&gt;，再被严格反向路径校验打成单向黑洞。排障关键不是先改应用，而是：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;用双向 curl/tcptraceroute 把问题钉成方向性；&lt;/li&gt;&#xA;&lt;li&gt;多点对称抓包证明非对称路径；&lt;/li&gt;&#xA;&lt;li&gt;对账静态路由、PBR match、NAT 与 RPF；&lt;/li&gt;&#xA;&lt;li&gt;先补明细回程与 ACL，再收紧安全策略。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;对有搬迁/割接任务的团队，最大教训就一句话：&lt;strong&gt;能通一半往往比全断更危险——因为它能通过错误的验收。&lt;/strong&gt; 把回程写进设计、把双向写进验收、把生成式配置写进变更，下一次割接才不会在周一早高峰才暴露「半张网」。&lt;/p&gt;&#xA;</description>
        </item></channel>
</rss>
