<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>IPv6 on Zero Day Notes</title>
        <link>https://blog.5772447.xyz/tags/ipv6/</link>
        <description>Recent content in IPv6 on Zero Day Notes</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh</language>
        <lastBuildDate>Wed, 14 Oct 2026 09:00:00 +0800</lastBuildDate><atom:link href="https://blog.5772447.xyz/tags/ipv6/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>IPv6 出站静默丢弃：客户端为何卡 21 秒？</title>
            <link>https://blog.5772447.xyz/posts/ab94812c/</link>
            <pubDate>Wed, 14 Oct 2026 09:00:00 +0800</pubDate>
            <guid>https://blog.5772447.xyz/posts/ab94812c/</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;公司办公网约 40 人，出口是一台 RouterOS 软路由，PPPoE 双栈已经稳定运行一年多：IPv6 通过 DHCPv6-PD 拿到 /60 前缀，由 RA 通告给办公网段，员工电脑大多持有 IPv6 全局地址，平时上网一切正常。&lt;/p&gt;&#xA;&lt;p&gt;上周四上午开始，陆续有同事反馈：打开公司 ERP 客户端和个别网站时，界面会卡二十秒左右才&amp;quot;缓过来&amp;quot;。奇怪的是，同一台电脑上用浏览器打开网页却基本正常。受影响的人越来越多，但故障像是&amp;quot;挑软件&amp;quot;——ERP 客户端、老版 VPN 拨号工具几乎必卡，浏览器和常用 IM 则无感。&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;ul&gt;&#xA;&lt;li&gt;卡顿时长高度一致:每次约 21 秒,然后要么成功、要么重试一次即通。&lt;/li&gt;&#xA;&lt;li&gt;浏览器打开网页基本正常,顶多首次略慢;问题集中在几款传统客户端软件。&lt;/li&gt;&#xA;&lt;li&gt;同一台电脑上 ping 域名(默认走 IPv4)完全正常;换 ping 该域名对应的 IPv6 地址则超时。&lt;/li&gt;&#xA;&lt;li&gt;内网互通无异常:能 ping 通网关,内网 IPv6 地址互访正常。&lt;/li&gt;&#xA;&lt;li&gt;电脑 CPU、内存、无线信号都正常,换有线、重启电脑均无效。&lt;/li&gt;&#xA;&lt;li&gt;换手机热点访问同一服务正常,排除目标服务端问题。&lt;/li&gt;&#xA;&lt;/ul&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;p&gt;&lt;strong&gt;第一步,把&amp;quot;卡 21 秒&amp;quot;和 IPv6 联系起来。&lt;/strong&gt; 在一台必卡的电脑上复现故障,同时抓包。Wireshark 里看得很清楚:客户端解析域名拿到 A 和 AAAA 两组地址后,先向 IPv6 地址发 SYN;这个 SYN 无人应答,按 3 秒起步、指数退避重传两次,直到约 21 秒后才放弃,转而对 IPv4 地址发 SYN、秒连。netstat 里同步能看到连接长时间停在 SYN_SENT。21 秒不是业务慢,而是 Windows 默认的 TCP 连接超时(三次 SYN 尝试)——这就是&amp;quot;卡 21 秒&amp;quot;的全部来源。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;第二步,解释为什么浏览器没事、老客户端遭殃。&lt;/strong&gt; Windows 按 RFC 6724 的地址排序规则,域名同时有 A/AAAA 记录时优先尝试 IPv6。现代浏览器都实现了 Happy Eyeballs(RFC 8305):IPv6 连接约 300 毫秒没有进展,就并行发起 IPv4,谁先通用谁,用户几乎无感。而大量传统客户端(尤其 Java 写的、以及一些老国产软件)没有这个机制,严格按地址顺序先试 IPv6,只能吃满整个 TCP 超时。顺带一提,Linux 默认的重传参数更&amp;quot;耐心&amp;quot;(约两分钟),同样的故障在 Linux 客户端上会卡得更久——这解释了为什么&amp;quot;同一个故障,每个人的体感完全不同&amp;quot;。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;第三步,从内到外逐段确认 IPv6 出站已断。&lt;/strong&gt; 终端侧:ping6 网关秒通,LAN 侧 RA、地址、邻居发现都健康。路由器侧:在 RouterOS 上 ping 公网 IPv6 地址(如 &lt;code&gt;2400:3200::1&lt;/code&gt;)四次全部超时,而 ping &lt;code&gt;223.5.5.5&lt;/code&gt; 四次全通——IPv4 出站完好、IPv6 出站不通,故障范围收缩到&amp;quot;路由器之外&amp;quot;。&lt;code&gt;/ipv6 route print&lt;/code&gt; 显示默认路由还在、指向 PPPoE 接口;traceroute6 显示数据包出一跳后就没有回应。也就是说,这不是&amp;quot;无路由&amp;quot;(那会立刻返回不可达),而是&lt;strong&gt;有路由、包在运途中被某一跳静默丢弃&lt;/strong&gt;,一路没有任何 ICMPv6 错误返回。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;第四步,确认运营商侧故障。&lt;/strong&gt; 向宽带运营商报障,后台确认该区域 IPv6 出口前一晚有割接维护、IPv4 不受影响,恢复时间待定。至此链路闭环:运营商 IPv6 出口故障(静默黑洞)+ 内网双栈&amp;quot;半通&amp;quot;状态 + 无 Happy Eyeballs 的客户端,共同构成了这次 21 秒卡顿。&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;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;止血:在出口把&amp;quot;黑洞&amp;quot;改成&amp;quot;快速失败&amp;quot;。&lt;/strong&gt; 既然公网 IPv6 暂时不可达,就不要再让流量出去&amp;quot;等死&amp;quot;——在路由器上对出站 IPv6 转发流量配置明确的 reject(回 ICMPv6 不可达),让客户端瞬间失败、立即回退 IPv4:&lt;/li&gt;&#xA;&lt;/ol&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;/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-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/ipv6 firewall filter&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;add chain=forward action=reject reject-with=icmp-no-route comment=&amp;#34;临时:上游IPv6故障&amp;#34;&#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;改完后所有客户端的 21 秒卡顿立即消失。这里有个容易踩的坑:单纯撤下 RA 通告并不能即时止血——已分配 IPv6 地址的终端会继续持有地址直到寿命到期,照样先试 IPv6;快速失败策略才是立竿见影的那个动作。&lt;/p&gt;&#xA;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;根治:等待运营商修复。&lt;/strong&gt; 运营商恢复后用 &lt;code&gt;ping6 2400:3200::1&lt;/code&gt; 验证出站正常,再移除临时 reject 规则。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;长期:IPv6 可用性探测与联动。&lt;/strong&gt; 在路由器上部署探测任务(比如每 5 分钟 ping6 两个公网目标):连续失败自动启用快速失败规则并告警,恢复后自动解除。让&amp;quot;上游 IPv6 挂了&amp;quot;从一个要靠用户投诉才会发现的事件,变成自动降级、用户无感的日常动作。&lt;/p&gt;&#xA;&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;直接根因是运营商侧 IPv6 出口割接故障,出站 IPv6 流量在运营商网络中被静默黑洞;而内网双栈照常工作——终端持有 IPv6 地址、按 RFC 6724 优先选 IPv6、连接请求却永远等不到回应,直到 Windows 默认的 TCP 连接超时(约 21 秒)才回退 IPv4。&lt;/p&gt;&#xA;&lt;p&gt;更深一层,这是&amp;quot;静默失败&amp;quot;与&amp;quot;快速失败&amp;quot;的代价差:同样是 IPv6 不可用,如果失败是&amp;quot;立即被拒绝&amp;quot;,客户端毫秒级回退 IPv4、用户毫无感知;而静默黑洞把一次网络故障放大成了用户可见的 21 秒卡顿,还让排查一开始失去方向。运营商网络的失败方式我们控制不了,但自己边界上&amp;quot;失败的速度&amp;quot;是可控的——这次故障真正的教训在这里。&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;ul&gt;&#xA;&lt;li&gt;双栈网络增加 IPv6 可用性主动探测,并与降级策略(快速失败/告警)联动,不让上游故障以&amp;quot;用户体验问题&amp;quot;的形式抵达;&lt;/li&gt;&#xA;&lt;li&gt;出口设备策略评审:对确定不可达的流量优先使用 reject(带 ICMP 错误)而不是 drop,让客户端快速回退;&lt;/li&gt;&#xA;&lt;li&gt;双栈改造与变更原则:上游 IPv6 端到端验证稳定后,再向内网通告 RA;上游维护窗口前先评估双栈降级预案;&lt;/li&gt;&#xA;&lt;li&gt;对没有 Happy Eyeballs 的历史客户端,评估升级,或在网络库层面配置连接超时,缩短最坏情况的等待;&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;卡顿&amp;quot;类问题的排查清单里加入&amp;quot;显式 ping6 / 检查 AAAA 记录&amp;quot;一项——默认 ping 走 IPv4,会把 IPv6 的问题完整地藏起来。&lt;/li&gt;&#xA;&lt;/ul&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;故障可以来自上游,但&amp;quot;失败的速度&amp;quot;掌握在自己手里。这次 21 秒卡顿的全部戏剧性来自三个机制的叠加:RFC 6724 让终端优先选 IPv6,Happy Eyeballs 的缺席让老客户端老老实实等超时,运营商侧的静默黑洞则让每一次尝试都注定失败。把&amp;quot;黑洞&amp;quot;改成&amp;quot;快速失败&amp;quot;之后,同样的上游故障,用户几乎无感。双栈时代值得反复默念的一条原则是:让失败大声且迅速,别让它安静地拖时间。&lt;/p&gt;&#xA;&lt;h2 id=&#34;延伸阅读&#34;&gt;&lt;a href=&#34;#%e5%bb%b6%e4%bc%b8%e9%98%85%e8%af%bb&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;延伸阅读&#xD;&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.5772447.xyz/posts/e0440e03/&#34; &gt;光衰超标：链路 UP 却间歇丢包&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.5772447.xyz/posts/fb53e550/&#34; &gt;DNS 转发链路异常致核心业务间歇解析超时与 504&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.5772447.xyz/posts/5cafffbb/&#34; &gt;分支到总部专线丢包，视频会议为何全程卡顿？&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
        </item></channel>
</rss>
