<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>中国移动 on 猫猫鱼的小窝</title>
    <link>https://csdn.fjh1997.top/tags/%E4%B8%AD%E5%9B%BD%E7%A7%BB%E5%8A%A8/</link>
    <description>Recent content from 猫猫鱼的小窝</description>
    <generator>Hugo</generator>
    <language>zh-CN</language>
    
    <managingEditor>xxx@example.com (catcatyu)</managingEditor>
    <webMaster>xxx@example.com (catcatyu)</webMaster>
    
    <copyright>本博客所有文章除特别声明外，均采用 BY-NC-SA 许可协议。转载请注明出处！</copyright>
    
    <lastBuildDate>Sun, 21 Jun 2026 15:15:00 +0800</lastBuildDate>
    
    
    <atom:link href="https://csdn.fjh1997.top/tags/%E4%B8%AD%E5%9B%BD%E7%A7%BB%E5%8A%A8/atom.xml" rel="self" type="application/rss&#43;xml" />
    

    
    

    <item>
      <title>中国移动浙江杭州海外ipv6 tcp不通原因排查分析</title>
      <link>https://csdn.fjh1997.top/posts/62848.html</link>
      <pubDate>Sun, 21 Jun 2026 15:15:00 &#43;0800</pubDate>
      <author>xxx@example.com (catcatyu)</author>
      <guid>https://csdn.fjh1997.top/posts/62848.html</guid>
      <description>
        <![CDATA[<h1>中国移动浙江杭州海外ipv6 tcp不通原因排查分析</h1><p>作者：catcatyu（xxx@example.com）</p>
        
          <h2 id="背景">
<a class="header-anchor" href="#%e8%83%8c%e6%99%af"></a>
背景
</h2><p>家里一条中国移动浙江杭州宽带出现了一个很奇怪的 IPv6 问题：</p>
<ul>
<li>国内 IPv6 网站的 TCP/443 正常；</li>
<li>海外 IPv6 地址可以 ping 通；</li>
<li>但是海外 IPv6 的 TCP 连接不通，包括 HTTPS 443 和自有海外服务器的 SSH 22；</li>
<li>同样是中国移动 IPv6，另一条宽带的海外 IPv6 TCP 又是正常的。</li>
</ul>
<p>这类问题很容易被误判成 DNS、MTU、光猫防火墙、OpenWrt 配置错误。实际排查下来，问题更像是移动出口或中间链路按源 IPv6 前缀分流后，部分前缀的海外 TCP 路径异常。</p>
<p>为了避免暴露家庭网络的完整地址，下面只保留网段级别信息，具体主机地址和接口 IID 均已脱敏。</p>
<h2 id="当前网络结构">
<a class="header-anchor" href="#%e5%bd%93%e5%89%8d%e7%bd%91%e7%bb%9c%e7%bb%93%e6%9e%84"></a>
当前网络结构
</h2><p>网络结构大致如下：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span><span class="lnt">9
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">终端设备
</span></span><span class="line"><span class="cl">  |
</span></span><span class="line"><span class="cl">ImmortalWrt / OpenWrt
</span></span><span class="line"><span class="cl">  |
</span></span><span class="line"><span class="cl">中国移动光猫
</span></span><span class="line"><span class="cl">  |
</span></span><span class="line"><span class="cl">中国移动 IPv6 网络
</span></span><span class="line"><span class="cl">  |
</span></span><span class="line"><span class="cl">海外服务器
</span></span></code></pre></td></tr></table>
</div>
</div><p>当时拿到的主要 IPv6 网段如下：</p>
<table>
  <thead>
      <tr>
          <th>位置</th>
          <th>网段</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>光猫到路由器侧</td>
          <td><code>2409:8a28:6e9:69a0::/64</code></td>
      </tr>
      <tr>
          <td>ImmortalWrt LAN / 手机侧</td>
          <td><code>2409:8a28:6e9:69a1::/64</code></td>
      </tr>
      <tr>
          <td>所在上级块</td>
          <td><code>2409:8a28:6e9::/48</code></td>
      </tr>
      <tr>
          <td>另一个能通的移动宽带所在块</td>
          <td><code>2409:8a28:824::/48</code></td>
      </tr>
  </tbody>
</table>
<p>可以看到，两个宽带虽然都属于中国移动 <code>2409:8a28::/32</code> 附近的地址，但从 <code>/40</code> 开始就已经不同：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">异常宽带所在大致范围：2409:8a28:600::/40
</span></span><span class="line"><span class="cl">正常宽带所在大致范围：2409:8a28:800::/40
</span></span></code></pre></td></tr></table>
</div>
</div><p>这意味着它们在移动内部可能已经走不同地址池、BRAS、城域网出口或海外出口策略。</p>
<h2 id="先排除本地配置问题">
<a class="header-anchor" href="#%e5%85%88%e6%8e%92%e9%99%a4%e6%9c%ac%e5%9c%b0%e9%85%8d%e7%bd%ae%e9%97%ae%e9%a2%98"></a>
先排除本地配置问题
</h2><p>在 ImmortalWrt 上固定同一个源地址测试，结果如下：</p>
<table>
  <thead>
      <tr>
          <th>目标</th>
          <th>协议</th>
          <th>结果</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>国内百度 IPv6</td>
          <td>TCP/443</td>
          <td>成功</td>
      </tr>
      <tr>
          <td>国内腾讯 IPv6</td>
          <td>TCP/443</td>
          <td>TCP/TLS 成功</td>
      </tr>
      <tr>
          <td>Cloudflare IPv6</td>
          <td>TCP/443</td>
          <td>超时</td>
      </tr>
      <tr>
          <td>1.1.1.1 的 IPv6</td>
          <td>TCP/443</td>
          <td>超时</td>
      </tr>
      <tr>
          <td>Debian / kernel.org / IANA</td>
          <td>TCP/443</td>
          <td>超时</td>
      </tr>
      <tr>
          <td>自有海外服务器</td>
          <td>TCP/22</td>
          <td>超时</td>
      </tr>
      <tr>
          <td>Cloudflare / 自有海外服务器</td>
          <td>ICMPv6</td>
          <td>正常</td>
      </tr>
  </tbody>
</table>
<p>这个结果说明：</p>
<ol>
<li>IPv6 地址、路由、RA/DHCPv6 基本不是问题，因为国内 IPv6 TCP 能通；</li>
<li>不是海外 IPv6 完全不通，因为 ICMPv6 能通；</li>
<li>问题集中在海外方向的 TCP。</li>
</ol>
<h2 id="光猫-wan-口抓包">
<a class="header-anchor" href="#%e5%85%89%e7%8c%ab-wan-%e5%8f%a3%e6%8a%93%e5%8c%85"></a>
光猫 WAN 口抓包
</h2><p>为了确认包有没有从本地发出去，我在光猫上放了一个静态编译的 <code>tcpdump</code>，直接抓光猫 PPP WAN 接口。</p>
<p>抓包结果显示，从 ImmortalWrt 发往自有海外服务器 TCP/22 的 SYN 已经从光猫 WAN 口发出：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">光猫 ppp 接口：
</span></span><span class="line"><span class="cl">本地 LAN 前缀地址 &gt; 海外服务器:22 Flags [S]
</span></span><span class="line"><span class="cl">本地 LAN 前缀地址 &gt; 海外服务器:22 Flags [S]
</span></span><span class="line"><span class="cl">本地 LAN 前缀地址 &gt; 海外服务器:22 Flags [S]
</span></span></code></pre></td></tr></table>
</div>
</div><p>同时在海外服务器网卡上抓包，完全收不到这些 SYN：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">海外服务器 eth0：
</span></span><span class="line"><span class="cl">0 packets captured
</span></span><span class="line"><span class="cl">0 packets received by filter
</span></span></code></pre></td></tr></table>
</div>
</div><p>这一步基本可以排除光猫和 OpenWrt 没有把包发出去的问题。包已经离开家庭网络，但没有到达海外服务器。</p>
<h2 id="同一个源地址反复验证">
<a class="header-anchor" href="#%e5%90%8c%e4%b8%80%e4%b8%aa%e6%ba%90%e5%9c%b0%e5%9d%80%e5%8f%8d%e5%a4%8d%e9%aa%8c%e8%af%81"></a>
同一个源地址反复验证
</h2><p>为了避免不同源地址造成误判，后续测试固定使用同一个 LAN 侧源地址所在网段：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">2409:8a28:6e9:69a1::/64
</span></span></code></pre></td></tr></table>
</div>
</div><p>结果依然是：</p>
<ul>
<li>国内 IPv6 TCP 正常；</li>
<li>海外 IPv6 ICMPv6 正常；</li>
<li>海外 IPv6 TCP 超时；</li>
<li>光猫 WAN 能看到 SYN 发出；</li>
<li>海外服务器收不到 SYN。</li>
</ul>
<p>这说明问题不是 DNS，也不是随机某次连接失败。</p>
<h2 id="伪源前缀探测">
<a class="header-anchor" href="#%e4%bc%aa%e6%ba%90%e5%89%8d%e7%bc%80%e6%8e%a2%e6%b5%8b"></a>
伪源前缀探测
</h2><p>后面做了一个更关键的验证：在 ImmortalWrt 上临时加一些未分配给本线路的 IPv6 源地址，只对自有海外服务器发极少量测试包，同时远端 tcpdump 观察是否能收到。</p>
<p>注意：这种方式只能判断“带这个源前缀的包是否能穿过移动出口到远端”，不能代表这个地址真的能正常使用。因为这个地址并没有分配给本线路，回包不会正确回到本线路。</p>
<p>测试现象：</p>
<table>
  <thead>
      <tr>
          <th>伪源网段</th>
          <th>ICMPv6 到远端</th>
          <th>TCP SYN 到远端</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>2409:8a28:6e9:69a2::/64</code> 附近</td>
          <td>到达</td>
          <td>未到</td>
      </tr>
      <tr>
          <td><code>2409:8a28:6e9:69b0::/64</code> 附近</td>
          <td>到达</td>
          <td>未到</td>
      </tr>
      <tr>
          <td><code>2409:8a28:824:a90::/64</code> 附近</td>
          <td>到达</td>
          <td>到达</td>
      </tr>
  </tbody>
</table>
<p>这说明移动链路并没有对源地址做非常严格的入口校验，至少伪源 ICMPv6 可以到远端；同时也说明，海外 TCP 是否到达和源 IPv6 前缀强相关。</p>
<h2 id="前缀抽样结果">
<a class="header-anchor" href="#%e5%89%8d%e7%bc%80%e6%8a%bd%e6%a0%b7%e7%bb%93%e6%9e%9c"></a>
前缀抽样结果
</h2><p>随后对 <code>2409:8a28::/32</code> 内的一些前缀做了低速抽样。所有测试都只打自有海外服务器的 TCP/22，远端以 tcpdump 判断 SYN 是否到达。</p>
<h3 id="40-粗扫">
<a class="header-anchor" href="#40-%e7%b2%97%e6%89%ab"></a>
/40 粗扫
</h3><p>每个 <code>/40</code> 取一个代表地址，结果只有这两个代表点到达：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">2409:8a28:800::/40  代表点到达
</span></span><span class="line"><span class="cl">2409:8a28:c00::/40  代表点到达
</span></span></code></pre></td></tr></table>
</div>
</div><p>异常线路所在的 <code>2409:8a28:600::/40</code> 代表点未到。</p>
<p>不过代表点失败不等于整个 <code>/40</code> 都失败，所以继续细扫。</p>
<h3 id="44-细扫">
<a class="header-anchor" href="#44-%e7%bb%86%e6%89%ab"></a>
/44 细扫
</h3><p><code>2409:8a28:600::/40</code> 内：</p>
<table>
  <thead>
      <tr>
          <th>/44</th>
          <th>结果</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>2409:8a28:610::/44</code></td>
          <td>到达</td>
      </tr>
      <tr>
          <td><code>2409:8a28:620::/44</code></td>
          <td>到达</td>
      </tr>
      <tr>
          <td><code>2409:8a28:630::/44</code></td>
          <td>到达</td>
      </tr>
      <tr>
          <td><code>2409:8a28:640::/44</code></td>
          <td>到达</td>
      </tr>
      <tr>
          <td><code>2409:8a28:660::/44</code></td>
          <td>到达</td>
      </tr>
      <tr>
          <td><code>2409:8a28:670::/44</code></td>
          <td>到达</td>
      </tr>
      <tr>
          <td><code>2409:8a28:680::/44</code></td>
          <td>到达</td>
      </tr>
      <tr>
          <td><code>2409:8a28:690::/44</code></td>
          <td>到达</td>
      </tr>
      <tr>
          <td><code>2409:8a28:600::/44</code></td>
          <td>未到</td>
      </tr>
      <tr>
          <td><code>2409:8a28:650::/44</code></td>
          <td>未到</td>
      </tr>
      <tr>
          <td><code>2409:8a28:6a0::/44</code></td>
          <td>未到</td>
      </tr>
      <tr>
          <td><code>2409:8a28:6b0::/44</code></td>
          <td>未到</td>
      </tr>
      <tr>
          <td><code>2409:8a28:6c0::/44</code></td>
          <td>未到</td>
      </tr>
      <tr>
          <td><code>2409:8a28:6d0::/44</code></td>
          <td>未到</td>
      </tr>
      <tr>
          <td><code>2409:8a28:6e0::/44</code></td>
          <td>未到</td>
      </tr>
      <tr>
          <td><code>2409:8a28:6f0::/44</code></td>
          <td>未到</td>
      </tr>
  </tbody>
</table>
<p>异常线路所在的 <code>2409:8a28:6e9::/48</code> 落在 <code>2409:8a28:6e0::/44</code> 内。</p>
<p><code>2409:8a28:800::/40</code> 内：</p>
<table>
  <thead>
      <tr>
          <th>/44</th>
          <th>结果</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>2409:8a28:800::/44</code></td>
          <td>到达</td>
      </tr>
      <tr>
          <td><code>2409:8a28:810::/44</code></td>
          <td>到达</td>
      </tr>
      <tr>
          <td><code>2409:8a28:820::/44</code></td>
          <td>到达</td>
      </tr>
      <tr>
          <td><code>2409:8a28:830::/44</code></td>
          <td>到达</td>
      </tr>
      <tr>
          <td><code>2409:8a28:840::/44</code></td>
          <td>到达</td>
      </tr>
      <tr>
          <td><code>2409:8a28:870::/44</code></td>
          <td>到达</td>
      </tr>
      <tr>
          <td><code>2409:8a28:880::/44</code></td>
          <td>到达</td>
      </tr>
      <tr>
          <td><code>2409:8a28:8b0::/44</code></td>
          <td>到达</td>
      </tr>
      <tr>
          <td><code>2409:8a28:8c0::/44</code></td>
          <td>到达</td>
      </tr>
      <tr>
          <td><code>2409:8a28:8d0::/44</code></td>
          <td>到达</td>
      </tr>
      <tr>
          <td><code>2409:8a28:8e0::/44</code></td>
          <td>到达</td>
      </tr>
      <tr>
          <td><code>2409:8a28:8f0::/44</code></td>
          <td>到达</td>
      </tr>
      <tr>
          <td><code>2409:8a28:850::/44</code></td>
          <td>未到</td>
      </tr>
      <tr>
          <td><code>2409:8a28:860::/44</code></td>
          <td>未到</td>
      </tr>
      <tr>
          <td><code>2409:8a28:890::/44</code></td>
          <td>未到</td>
      </tr>
      <tr>
          <td><code>2409:8a28:8a0::/44</code></td>
          <td>未到</td>
      </tr>
  </tbody>
</table>
<p>另一个正常宽带所在的 <code>2409:8a28:824::/48</code> 落在 <code>2409:8a28:820::/44</code> 内，测试结果为到达。</p>
<p><code>2409:8a28:c00::/40</code> 内：</p>
<table>
  <thead>
      <tr>
          <th>/44</th>
          <th>结果</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>2409:8a28:c00::/44</code></td>
          <td>到达</td>
      </tr>
      <tr>
          <td><code>2409:8a28:c10::/44</code></td>
          <td>到达</td>
      </tr>
      <tr>
          <td><code>2409:8a28:c20::/44</code></td>
          <td>到达</td>
      </tr>
      <tr>
          <td><code>2409:8a28:c30::/44</code></td>
          <td>到达</td>
      </tr>
      <tr>
          <td><code>2409:8a28:c40::/44</code></td>
          <td>到达</td>
      </tr>
      <tr>
          <td><code>2409:8a28:c50::/44</code></td>
          <td>到达</td>
      </tr>
      <tr>
          <td><code>2409:8a28:c60::/44</code></td>
          <td>到达</td>
      </tr>
      <tr>
          <td><code>2409:8a28:c70::/44</code></td>
          <td>到达</td>
      </tr>
      <tr>
          <td><code>2409:8a28:c80::/44</code></td>
          <td>到达</td>
      </tr>
      <tr>
          <td><code>2409:8a28:cb0::/44</code></td>
          <td>到达</td>
      </tr>
      <tr>
          <td><code>2409:8a28:cc0::/44</code></td>
          <td>到达</td>
      </tr>
      <tr>
          <td><code>2409:8a28:cd0::/44</code></td>
          <td>到达</td>
      </tr>
      <tr>
          <td><code>2409:8a28:ce0::/44</code></td>
          <td>到达</td>
      </tr>
      <tr>
          <td><code>2409:8a28:c90::/44</code></td>
          <td>未到</td>
      </tr>
      <tr>
          <td><code>2409:8a28:ca0::/44</code></td>
          <td>未到</td>
      </tr>
      <tr>
          <td><code>2409:8a28:cf0::/44</code></td>
          <td>未到</td>
      </tr>
  </tbody>
</table>
<h3 id="24098a286e044-继续细分">
<a class="header-anchor" href="#24098a286e044-%e7%bb%a7%e7%bb%ad%e7%bb%86%e5%88%86"></a>
<code>2409:8a28:6e0::/44</code> 继续细分
</h3><p>因为异常线路落在 <code>6e0::/44</code> 内，所以继续细分到 <code>/48</code>。</p>
<p>结果：</p>
<table>
  <thead>
      <tr>
          <th>/48</th>
          <th>结果</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>2409:8a28:6e1::/48</code></td>
          <td>到达</td>
      </tr>
      <tr>
          <td><code>2409:8a28:6e0::/48</code></td>
          <td>未到</td>
      </tr>
      <tr>
          <td><code>2409:8a28:6e2::/48</code></td>
          <td>未到</td>
      </tr>
      <tr>
          <td><code>2409:8a28:6e3::/48</code></td>
          <td>未到</td>
      </tr>
      <tr>
          <td><code>2409:8a28:6e4::/48</code></td>
          <td>未到</td>
      </tr>
      <tr>
          <td><code>2409:8a28:6e5::/48</code></td>
          <td>未到</td>
      </tr>
      <tr>
          <td><code>2409:8a28:6e6::/48</code></td>
          <td>未到</td>
      </tr>
      <tr>
          <td><code>2409:8a28:6e7::/48</code></td>
          <td>未到</td>
      </tr>
      <tr>
          <td><code>2409:8a28:6e8::/48</code></td>
          <td>未到</td>
      </tr>
      <tr>
          <td><code>2409:8a28:6e9::/48</code></td>
          <td>未到</td>
      </tr>
      <tr>
          <td><code>2409:8a28:6ea::/48</code></td>
          <td>未到</td>
      </tr>
      <tr>
          <td><code>2409:8a28:6eb::/48</code></td>
          <td>未到</td>
      </tr>
      <tr>
          <td><code>2409:8a28:6ec::/48</code></td>
          <td>未到</td>
      </tr>
      <tr>
          <td><code>2409:8a28:6ed::/48</code></td>
          <td>未到</td>
      </tr>
      <tr>
          <td><code>2409:8a28:6ee::/48</code></td>
          <td>未到</td>
      </tr>
      <tr>
          <td><code>2409:8a28:6ef::/48</code></td>
          <td>未到</td>
      </tr>
  </tbody>
</table>
<p>这里可以看到，<code>6e0::/44</code> 内部也是混合的。<code>6e1::/48</code> 能到，<code>6e9::/48</code> 不能到。</p>
<h3 id="24098a286e948-继续细分">
<a class="header-anchor" href="#24098a286e948-%e7%bb%a7%e7%bb%ad%e7%bb%86%e5%88%86"></a>
<code>2409:8a28:6e9::/48</code> 继续细分
</h3><p>异常线路所在的 <code>2409:8a28:6e9::/48</code> 继续细分到 <code>/52</code>，16 个代表点全部未到：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">2409:8a28:6e9:0000::/52  未到
</span></span><span class="line"><span class="cl">2409:8a28:6e9:1000::/52  未到
</span></span><span class="line"><span class="cl">2409:8a28:6e9:2000::/52  未到
</span></span><span class="line"><span class="cl">2409:8a28:6e9:3000::/52  未到
</span></span><span class="line"><span class="cl">2409:8a28:6e9:4000::/52  未到
</span></span><span class="line"><span class="cl">2409:8a28:6e9:5000::/52  未到
</span></span><span class="line"><span class="cl">2409:8a28:6e9:6000::/52  未到
</span></span><span class="line"><span class="cl">2409:8a28:6e9:7000::/52  未到
</span></span><span class="line"><span class="cl">2409:8a28:6e9:8000::/52  未到
</span></span><span class="line"><span class="cl">2409:8a28:6e9:9000::/52  未到
</span></span><span class="line"><span class="cl">2409:8a28:6e9:a000::/52  未到
</span></span><span class="line"><span class="cl">2409:8a28:6e9:b000::/52  未到
</span></span><span class="line"><span class="cl">2409:8a28:6e9:c000::/52  未到
</span></span><span class="line"><span class="cl">2409:8a28:6e9:d000::/52  未到
</span></span><span class="line"><span class="cl">2409:8a28:6e9:e000::/52  未到
</span></span><span class="line"><span class="cl">2409:8a28:6e9:f000::/52  未到
</span></span></code></pre></td></tr></table>
</div>
</div><p>异常线路的 LAN 前缀落在 <code>2409:8a28:6e9:6000::/52</code> 内。</p>
<h3 id="24098a286e148-对比">
<a class="header-anchor" href="#24098a286e148-%e5%af%b9%e6%af%94"></a>
<code>2409:8a28:6e1::/48</code> 对比
</h3><p>作为对照，对能到的 <code>2409:8a28:6e1::/48</code> 也细分到 <code>/52</code>。16 个代表点全部到达。</p>
<p>这说明异常不是整个 <code>2409:8a28:6e0::/44</code> 的简单统一策略，而是更细粒度的源前缀分流或出口路径差异。</p>
<h2 id="前缀结果汇总表">
<a class="header-anchor" href="#%e5%89%8d%e7%bc%80%e7%bb%93%e6%9e%9c%e6%b1%87%e6%80%bb%e8%a1%a8"></a>
前缀结果汇总表
</h2><p>下面把主要探测结果合并成一张表。这里的“到达”表示伪源 TCP SYN 能在自有海外服务器 tcpdump 中看到；“未到”表示远端没有抓到对应 SYN。</p>
<table>
  <thead>
      <tr>
          <th>前缀</th>
          <th>粒度</th>
          <th>结果</th>
          <th>备注</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>2409:8a28:000::/40</code></td>
          <td>/40 代表点</td>
          <td>未到</td>
          <td>粗扫代表点</td>
      </tr>
      <tr>
          <td><code>2409:8a28:100::/40</code></td>
          <td>/40 代表点</td>
          <td>未到</td>
          <td>粗扫代表点</td>
      </tr>
      <tr>
          <td><code>2409:8a28:200::/40</code></td>
          <td>/40 代表点</td>
          <td>未到</td>
          <td>粗扫代表点</td>
      </tr>
      <tr>
          <td><code>2409:8a28:300::/40</code></td>
          <td>/40 代表点</td>
          <td>未到</td>
          <td>粗扫代表点</td>
      </tr>
      <tr>
          <td><code>2409:8a28:400::/40</code></td>
          <td>/40 代表点</td>
          <td>未到</td>
          <td>粗扫代表点</td>
      </tr>
      <tr>
          <td><code>2409:8a28:500::/40</code></td>
          <td>/40 代表点</td>
          <td>未到</td>
          <td>粗扫代表点</td>
      </tr>
      <tr>
          <td><code>2409:8a28:600::/40</code></td>
          <td>/40 代表点</td>
          <td>未到</td>
          <td>但内部 <code>/44</code> 存在混合</td>
      </tr>
      <tr>
          <td><code>2409:8a28:700::/40</code></td>
          <td>/40 代表点</td>
          <td>未到</td>
          <td>粗扫代表点</td>
      </tr>
      <tr>
          <td><code>2409:8a28:800::/40</code></td>
          <td>/40 代表点</td>
          <td>到达</td>
          <td>另一个正常宽带落在此范围附近</td>
      </tr>
      <tr>
          <td><code>2409:8a28:900::/40</code></td>
          <td>/40 代表点</td>
          <td>未到</td>
          <td>粗扫代表点</td>
      </tr>
      <tr>
          <td><code>2409:8a28:a00::/40</code></td>
          <td>/40 代表点</td>
          <td>未到</td>
          <td>粗扫代表点</td>
      </tr>
      <tr>
          <td><code>2409:8a28:b00::/40</code></td>
          <td>/40 代表点</td>
          <td>未到</td>
          <td>粗扫代表点</td>
      </tr>
      <tr>
          <td><code>2409:8a28:c00::/40</code></td>
          <td>/40 代表点</td>
          <td>到达</td>
          <td>内部 <code>/44</code> 也存在混合</td>
      </tr>
      <tr>
          <td><code>2409:8a28:d00::/40</code></td>
          <td>/40 代表点</td>
          <td>未到</td>
          <td>粗扫代表点</td>
      </tr>
      <tr>
          <td><code>2409:8a28:e00::/40</code></td>
          <td>/40 代表点</td>
          <td>未到</td>
          <td>粗扫代表点</td>
      </tr>
      <tr>
          <td><code>2409:8a28:f00::/40</code></td>
          <td>/40 代表点</td>
          <td>未到</td>
          <td>粗扫代表点</td>
      </tr>
      <tr>
          <td><code>2409:8a28:600::/44</code>、<code>650::/44</code>、<code>6a0::/44</code> - <code>6f0::/44</code></td>
          <td>/44 代表点</td>
          <td>未到</td>
          <td>异常线路所在的 <code>6e0::/44</code> 在此组</td>
      </tr>
      <tr>
          <td><code>2409:8a28:610::/44</code> - <code>640::/44</code>、<code>660::/44</code> - <code>690::/44</code></td>
          <td>/44 代表点</td>
          <td>到达</td>
          <td>同一 <code>/40</code> 内存在可达段</td>
      </tr>
      <tr>
          <td><code>2409:8a28:800::/44</code> - <code>840::/44</code>、<code>870::/44</code>、<code>880::/44</code>、<code>8b0::/44</code> - <code>8f0::/44</code></td>
          <td>/44 代表点</td>
          <td>到达</td>
          <td><code>824::/48</code> 落在 <code>820::/44</code></td>
      </tr>
      <tr>
          <td><code>2409:8a28:850::/44</code>、<code>860::/44</code>、<code>890::/44</code>、<code>8a0::/44</code></td>
          <td>/44 代表点</td>
          <td>未到</td>
          <td><code>800::/40</code> 内的未到段</td>
      </tr>
      <tr>
          <td><code>2409:8a28:c00::/44</code> - <code>c80::/44</code>、<code>cb0::/44</code> - <code>ce0::/44</code></td>
          <td>/44 代表点</td>
          <td>到达</td>
          <td><code>c00::/40</code> 内多数可达</td>
      </tr>
      <tr>
          <td><code>2409:8a28:c90::/44</code>、<code>ca0::/44</code>、<code>cf0::/44</code></td>
          <td>/44 代表点</td>
          <td>未到</td>
          <td><code>c00::/40</code> 内的未到段</td>
      </tr>
      <tr>
          <td><code>2409:8a28:6e1::/48</code></td>
          <td>/48 代表点</td>
          <td>到达</td>
          <td>继续细分到 <code>/52</code> 后 16 个代表点均到达</td>
      </tr>
      <tr>
          <td><code>2409:8a28:6e0::/48</code>、<code>6e2::/48</code> - <code>6ef::/48</code></td>
          <td>/48 代表点</td>
          <td>未到</td>
          <td><code>6e0::/44</code> 内大多数 <code>/48</code> 未到</td>
      </tr>
      <tr>
          <td><code>2409:8a28:6e9::/48</code></td>
          <td>/52 代表点</td>
          <td>未到</td>
          <td>16 个 <code>/52</code> 代表点全部未到</td>
      </tr>
      <tr>
          <td><code>2409:8a28:6e9:6000::/52</code></td>
          <td>/52 代表点</td>
          <td>未到</td>
          <td>异常线路 LAN 前缀所在范围</td>
      </tr>
      <tr>
          <td><code>2409:8a28:6e1::/48</code></td>
          <td>/52 代表点</td>
          <td>到达</td>
          <td>16 个 <code>/52</code> 代表点全部到达，作为对照</td>
      </tr>
  </tbody>
</table>
<h2 id="结论">
<a class="header-anchor" href="#%e7%bb%93%e8%ae%ba"></a>
结论
</h2><p>这次排查得到的结论是：</p>
<ol>
<li>本地光猫和 ImmortalWrt 已经把海外 TCP SYN 发出；</li>
<li>国内 IPv6 TCP 正常，海外 IPv6 ICMPv6 正常；</li>
<li>海外 IPv6 TCP SYN 在离开本地后、到达远端前丢失；</li>
<li>丢失与源 IPv6 前缀强相关；</li>
<li>异常线路所在的 <code>2409:8a28:6e9::/48</code> 按 <code>/52</code> 抽样全部未到；</li>
<li>对照的 <code>2409:8a28:6e1::/48</code> 按 <code>/52</code> 抽样全部到达；</li>
<li>另一个正常宽带所在的 <code>2409:8a28:824::/48</code> 也落在抽样显示正常的区域。</li>
</ol>
<p>因此，这个问题不太像 DNS、MTU、光猫防火墙或 OpenWrt 配置错误，更像是中国移动浙江杭州这条线路当前拿到的 IPv6 源前缀被分配到了有问题的海外 TCP 出口路径，或者对应源前缀在中间链路上被策略性丢弃。</p>
<h2 id="后续处理建议">
<a class="header-anchor" href="#%e5%90%8e%e7%bb%ad%e5%a4%84%e7%90%86%e5%bb%ba%e8%ae%ae"></a>
后续处理建议
</h2><p>如果遇到类似问题，可以按这个顺序排查：</p>
<ol>
<li>固定同一个源 IPv6 地址测试国内和海外 TCP；</li>
<li>同时测试 ICMPv6，区分“IPv6 全不通”和“只有 TCP 不通”；</li>
<li>在光猫或主路由 WAN 口抓包，确认 SYN 是否已离开本地；</li>
<li>在自有海外服务器抓包，确认 SYN 是否到达远端；</li>
<li>如果有另一条宽带或另一段 IPv6 前缀，可以用同一目标做对照；</li>
<li>向运营商报障时，重点描述“国内 IPv6 TCP 正常、海外 IPv6 ICMP 正常、海外 IPv6 TCP SYN 从本地发出但远端收不到”，不要只说“IPv6 不通”。</li>
</ol>
<p>如果运营商无法处理，临时绕过方案通常只有：</p>
<ul>
<li>重拨尝试获取不同 IPv6 前缀；</li>
<li>使用另一条出口正常的宽带；</li>
<li>对海外流量走隧道或代理；</li>
<li>暂时关闭客户端对海外目标的 IPv6 优先级。</li>
</ul>
<p>这类问题的本质不在家庭网络内部，而在运营商 IPv6 出口路径和源前缀策略上。</p>

        
        <hr><p>本文2026-06-21首发于<a href='https://csdn.fjh1997.top/'>猫猫鱼的小窝</a>，最后修改于2026-06-21</p>]]>
      </description>
      
    </item>
    
    

    <item>
      <title>光猫拿到/60但不给二级路由委派IPv6前缀的解决方法</title>
      <link>https://csdn.fjh1997.top/posts/2026062101.html</link>
      <pubDate>Sun, 21 Jun 2026 04:45:00 &#43;0800</pubDate>
      <author>xxx@example.com (catcatyu)</author>
      <guid>https://csdn.fjh1997.top/posts/2026062101.html</guid>
      <description>
        <![CDATA[<h1>光猫拿到/60但不给二级路由委派IPv6前缀的解决方法</h1><p>作者：catcatyu（xxx@example.com）</p>
        
          <h2 id="背景">
<a class="header-anchor" href="#%e8%83%8c%e6%99%af"></a>
背景
</h2><p>家里用的是中国移动宽带，光猫是吉比特 GS3101（中国移动定制），下挂一台 ImmortalWrt 路由器（MT7981 芯片）做二级路由。最开始遇到的问题是：ImmortalWrt 的 <code>wan6</code> 经常拿不到 DHCPv6-PD 前缀，日志里反复出现：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">daemon.warn odhcp6c: Server returned IA_PD status &#39;No Prefix Available&#39;
</span></span><span class="line"><span class="cl">daemon.warn odhcp6c: Server returned IA_PD status &#39;No Binding&#39;
</span></span></code></pre></td></tr></table>
</div>
</div><p>一开始我以为是 ISP 不下发 PD，所以尝试过 NDP Relay。后面拿到光猫超管和 Telnet 后确认，真实原因不是“中国移动完全不给前缀”，而是：</p>
<p><strong>ISP 已经给光猫下发了 <code>/60</code>，但光猫默认没有把可用前缀正确委派给下挂的 ImmortalWrt。</strong></p>
<p>当前已经跑通的链路是：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">ISP -&gt; 光猫 ppp1 获取 2409:8a28:6e2:1c20::/60
</span></span><span class="line"><span class="cl">光猫 br0 自用 2409:8a28:6e2:1c20::/64
</span></span><span class="line"><span class="cl">光猫 dhcp6s -&gt; ImmortalWrt 委派 2409:8a28:6e2:1c28::/61
</span></span><span class="line"><span class="cl">ImmortalWrt br-lan -&gt; LAN 设备下发 2409:8a28:6e2:1c28::/64
</span></span></code></pre></td></tr></table>
</div>
</div><p>国内 IPv6 连通性正常；海外 IPv6 的 TCP/443 仍然不稳定或不可达，这是运营商出口策略问题，不是本地 DHCPv6-PD 配置问题。</p>
<h2 id="当前状态核对">
<a class="header-anchor" href="#%e5%bd%93%e5%89%8d%e7%8a%b6%e6%80%81%e6%a0%b8%e5%af%b9"></a>
当前状态核对
</h2><h3 id="光猫侧">
<a class="header-anchor" href="#%e5%85%89%e7%8c%ab%e4%be%a7"></a>
光猫侧
</h3><p>光猫固件：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">cat /etc/fwver.conf
</span></span><span class="line"><span class="cl"><span class="c1"># V1B0.C02.01</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>ISP 给光猫的前缀：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">cat /var/run/ppp1/orgpd6
</span></span><span class="line"><span class="cl"><span class="c1"># 2409:8a28:6e2:1c20::/60</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">cat /var/run/ppp1/pd6
</span></span><span class="line"><span class="cl"><span class="c1"># 2409:8a28:6e2:1c20::/64</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p><code>orgpd6</code> 是 ISP 原始委派给光猫的 <code>/60</code>；<code>pd6</code> 是光猫自己拿来给 <code>br0</code>/LAN 使用的 <code>/64</code>。</p>
<p>光猫 LAN 地址：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">br0 inet6 addr: 2409:8a28:6e2:1c20:b654:59ff:fe2a:59a8/64
</span></span></code></pre></td></tr></table>
</div>
</div><p>光猫当前 DHCPv6 Server 配置：</p>
<pre tabindex="0"><code class="language-conf" data-lang="conf">option domain-name-servers fe80::1;
interface br0 {
        address-pool pool1 172800 259200;
};
pool pool1 {
        range 2409:8a28:6e2:1c20::1 to 2409:8a28:6e2:1c20::1000;
};
host immortalwrt {
        duid 00:03:00:01:70:2a:d7:60:77:20;
        prefix 2409:8a28:6e2:1c28::/61 172800 259200;
};
</code></pre><p>这组配置是合理的：</p>
<ul>
<li><code>2409:8a28:6e2:1c20::/60</code> 覆盖 <code>1c20</code> 到 <code>1c2f</code> 这 16 个 <code>/64</code>。</li>
<li>光猫自己使用 <code>1c20::/64</code>。</li>
<li>委派给 ImmortalWrt 的 <code>1c28::/61</code> 覆盖 <code>1c28</code> 到 <code>1c2f</code>，没有和光猫自用的 <code>1c20::/64</code> 重叠。</li>
<li>光猫路由表中已有到 ImmortalWrt 的路由：</li>
</ul>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">2409:8a28:6e2:1c28::/61 via fe80::722a:d7ff:fe60:7720 dev br0
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="immortalwrt-侧">
<a class="header-anchor" href="#immortalwrt-%e4%be%a7"></a>
ImmortalWrt 侧
</h3><p><code>wan6</code> 当前已拿到 IA_NA 和 IA_PD：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="s2">&#34;ipv6-address&#34;</span><span class="err">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">  <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;address&#34;</span><span class="p">:</span> <span class="s2">&#34;2409:8a28:6e2:1c20:722a:d7ff:fe60:7720&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;mask&#34;</span><span class="p">:</span> <span class="mi">64</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">]</span><span class="err">,</span>
</span></span><span class="line"><span class="cl"><span class="s2">&#34;ipv6-prefix&#34;</span><span class="err">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">  <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;address&#34;</span><span class="p">:</span> <span class="s2">&#34;2409:8a28:6e2:1c28::&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;mask&#34;</span><span class="p">:</span> <span class="mi">61</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;assigned&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;lan&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;address&#34;</span><span class="p">:</span> <span class="s2">&#34;2409:8a28:6e2:1c28::&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;mask&#34;</span><span class="p">:</span> <span class="mi">64</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">]</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p><code>br-lan</code> 当前地址：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">2409:8a28:6e2:1c28::1/64
</span></span></code></pre></td></tr></table>
</div>
</div><p>关键 UCI 配置：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">uci show network.wan6
</span></span></code></pre></td></tr></table>
</div>
</div><div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">network.wan6=interface
</span></span><span class="line"><span class="cl">network.wan6.device=&#39;eth1&#39;
</span></span><span class="line"><span class="cl">network.wan6.proto=&#39;dhcpv6&#39;
</span></span><span class="line"><span class="cl">network.wan6.reqaddress=&#39;try&#39;
</span></span><span class="line"><span class="cl">network.wan6.reqprefix=&#39;60&#39;
</span></span><span class="line"><span class="cl">network.wan6.releaseprefix=&#39;1&#39;
</span></span></code></pre></td></tr></table>
</div>
</div><div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">uci show network.lan
</span></span></code></pre></td></tr></table>
</div>
</div><div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">network.lan=interface
</span></span><span class="line"><span class="cl">network.lan.device=&#39;br-lan&#39;
</span></span><span class="line"><span class="cl">network.lan.proto=&#39;static&#39;
</span></span><span class="line"><span class="cl">network.lan.ipaddr=&#39;192.168.7.1&#39;
</span></span><span class="line"><span class="cl">network.lan.ip6assign=&#39;64&#39;
</span></span></code></pre></td></tr></table>
</div>
</div><div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">uci show dhcp.lan
</span></span></code></pre></td></tr></table>
</div>
</div><div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">dhcp.lan.ra=&#39;server&#39;
</span></span><span class="line"><span class="cl">dhcp.lan.dhcpv6=&#39;server&#39;
</span></span><span class="line"><span class="cl">dhcp.lan.ndp=&#39;disabled&#39;
</span></span><span class="line"><span class="cl">dhcp.lan.ra_flags=&#39;managed-config&#39; &#39;other-config&#39;
</span></span></code></pre></td></tr></table>
</div>
</div><p>这个状态也是合理的：既然已经拿到正规 PD，LAN 侧就应该用 RA/DHCPv6 Server，下游不需要再开 NDP Relay。</p>
<p>实测连通性：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ping6 -c <span class="m">3</span> 2400:3200::1
</span></span><span class="line"><span class="cl"><span class="c1"># 0% packet loss</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">wget -6 -q -O /dev/null --timeout<span class="o">=</span><span class="m">8</span> https://www.baidu.com <span class="o">&amp;&amp;</span> <span class="nb">echo</span> OK
</span></span><span class="line"><span class="cl">wget -6 -q -O /dev/null --timeout<span class="o">=</span><span class="m">8</span> https://www.qq.com <span class="o">&amp;&amp;</span> <span class="nb">echo</span> OK
</span></span><span class="line"><span class="cl">wget -6 -q -O /dev/null --timeout<span class="o">=</span><span class="m">8</span> https://www.aliyun.com <span class="o">&amp;&amp;</span> <span class="nb">echo</span> OK
</span></span></code></pre></td></tr></table>
</div>
</div><p>国内 IPv6 和 HTTPS 都是通的。</p>
<h2 id="超管密码和-telnet-获取过程">
<a class="header-anchor" href="#%e8%b6%85%e7%ae%a1%e5%af%86%e7%a0%81%e5%92%8c-telnet-%e8%8e%b7%e5%8f%96%e8%bf%87%e7%a8%8b"></a>
超管密码和 Telnet 获取过程
</h2><p>这台 GS3101 的默认超管密码已经失效，原因大概率是运营商通过 TR-069/网管系统把超管密码随机化了。所以网上常见的默认组合不可靠：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">CMCCAdmin / 默认密码
</span></span><span class="line"><span class="cl">telecomadmin / 默认密码
</span></span><span class="line"><span class="cl">SN 推算密码
</span></span><span class="line"><span class="cl">MAC 推算密码
</span></span></code></pre></td></tr></table>
</div>
</div><p>实际可行的路径是：把光猫 SN 发给装维师傅，师傅通过移动装维/网管系统查询当前设备绑定的动态超管密码。这个密码不是本地用 SN 简单 hash 算出来的，更像是后台系统按设备 SN、地区、工单或设备注册信息查表/下发的结果。</p>
<p>常见获取路径对比：</p>
<table>
  <thead>
      <tr>
          <th>方法</th>
          <th>是否推荐</th>
          <th>说明</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>找装维师傅用 SN 查询</td>
          <td>推荐</td>
          <td>本次就是这条路，最快，也最少折腾设备</td>
      </tr>
      <tr>
          <td>闲鱼/代查超管</td>
          <td>可用但不推荐</td>
          <td>本质也是用 SN 查后台，存在隐私和账号风险</td>
      </tr>
      <tr>
          <td>UPnP <code>X_GetAccess</code></td>
          <td>看固件状态</td>
          <td>部分 GS2101/GS3101 的 5555 端口会暴露厂商自定义 action，可返回超管信息；前提是 UPnP 已开启且 action 未被封</td>
      </tr>
      <tr>
          <td>配置导出后解密/解析</td>
          <td>适合研究</td>
          <td>需要能导出 romfile，且不同固件格式不完全一致</td>
      </tr>
      <tr>
          <td>恢复出厂并阻断 TR-069</td>
          <td>有风险</td>
          <td>需要提前记录 LOID/宽带账号，操作不当会断网</td>
      </tr>
      <tr>
          <td>TTL 串口</td>
          <td>最可靠但要拆机</td>
          <td>适合硬件调试，直接进 shell 查配置</td>
      </tr>
  </tbody>
</table>
<p>UPnP 那条路要特别注意：网上文章常把“开启 UPnP 后 Telnet 自动开放”写成因果关系，但实测过程里往往还混有 <code>X_SetAccess</code>、<code>Reboot</code> 等 action。更准确地说，Telnet 开放可能来自“开启远程/本地管理权限并重启后生效”，不一定只是 UPnP 开关本身导致。</p>
<p>拿到 Web 超管后，可以进入隐藏配置页面：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">http://192.168.1.1/cgi-bin/upgrade.asp
</span></span></code></pre></td></tr></table>
</div>
</div><p>其中：</p>
<ul>
<li><code>romfile</code>：配置导入。</li>
<li><code>tclinux.bin</code>：固件导入。</li>
</ul>
<p>如果要改 romfile，务必先备份原配置。配置导入比直接在 shell 里改 <code>/etc</code> 更有机会持久化，但也更容易因为 XML/校验错误导致配置异常。</p>
<h3 id="telnet-登录踩坑">
<a class="header-anchor" href="#telnet-%e7%99%bb%e5%bd%95%e8%b8%a9%e5%9d%91"></a>
Telnet 登录踩坑
</h3><p>这台设备的 Telnet 和 Web 超管不是同一套账号。Web 用的是超管账号，Telnet 用的是 <code>Account_TelnetEntry</code> 里的账号。</p>
<p>Telnet 登录方式：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">telnet -K -8 -E 192.168.1.1 <span class="m">23</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>参数说明：</p>
<ul>
<li><code>-K</code>：不自动登录。</li>
<li><code>-8</code>：8-bit 传输，避免部分字符被处理。</li>
<li><code>-E</code>：禁用 escape 字符，避免特殊字符干扰交互。</li>
</ul>
<p>正确现象：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">Trying 192.168.1.1...
</span></span><span class="line"><span class="cl">Connected to 192.168.1.1.
</span></span><span class="line"><span class="cl">tc login:
</span></span><span class="line"><span class="cl">Password:
</span></span><span class="line"><span class="cl">#
</span></span></code></pre></td></tr></table>
</div>
</div><p>常见错误：</p>
<table>
  <thead>
      <tr>
          <th>现象</th>
          <th>原因</th>
          <th>处理</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>Connection refused</code></td>
          <td>Telnet 服务没开或被防火墙挡住</td>
          <td>先确认 Web 超管里 Telnet 是否开启，或看 <code>utelnetd</code> 是否运行</td>
      </tr>
      <tr>
          <td><code>Login incorrect</code></td>
          <td>把 Web 超管账号拿去登录 Telnet</td>
          <td>Telnet 用户通常是 <code>admin</code>，密码看 <code>Account_TelnetEntry</code></td>
      </tr>
      <tr>
          <td>能连但输入异常</td>
          <td>Telnet 客户端转义/编码影响特殊字符</td>
          <td>使用 <code>telnet -K -8 -E</code></td>
      </tr>
      <tr>
          <td>登录后不是 <code>#</code></td>
          <td>权限或 shell 不对</td>
          <td>确认登录的是 TelnetEntry 账号，不是普通 Web 用户</td>
      </tr>
  </tbody>
</table>
<p>登录后可以核对：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">tcapi show Account_TelnetEntry
</span></span><span class="line"><span class="cl">ps <span class="p">|</span> grep utelnetd
</span></span><span class="line"><span class="cl">netstat -lntup <span class="p">|</span> grep <span class="s1">&#39;:23&#39;</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>这台设备上 <code>utelnetd</code> 的启动形式是：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">/usr/bin/utelnetd -p 23 -l /bin/login -d
</span></span></code></pre></td></tr></table>
</div>
</div><p><code>utelnetd</code> 只支持 <code>-p</code>、<code>-l</code>、<code>-d</code>，没有绑定指定监听地址的参数，所以不能直接让它只监听 <code>192.168.1.1</code>。如果要保留 Telnet，又不想暴露到 WAN，只能靠防火墙规则限制 WAN 侧访问。</p>
<p>当前策略是：Telnet/Web 保留 LAN 侧可用，WAN 侧通过 <code>iptables/ip6tables</code> DROP 管理端口。</p>
<h2 id="推荐方案让光猫向-immortalwrt-委派前缀">
<a class="header-anchor" href="#%e6%8e%a8%e8%8d%90%e6%96%b9%e6%a1%88%e8%ae%a9%e5%85%89%e7%8c%ab%e5%90%91-immortalwrt-%e5%a7%94%e6%b4%be%e5%89%8d%e7%bc%80"></a>
推荐方案：让光猫向 ImmortalWrt 委派前缀
</h2><p>如果你的光猫也已经从 ISP 拿到了 <code>/60</code> 或 <code>/56</code>，优先使用 DHCPv6-PD，不要先上 NDP Relay。</p>
<h3 id="1-确认光猫拿到的原始-pd">
<a class="header-anchor" href="#1-%e7%a1%ae%e8%ae%a4%e5%85%89%e7%8c%ab%e6%8b%bf%e5%88%b0%e7%9a%84%e5%8e%9f%e5%a7%8b-pd"></a>
1. 确认光猫拿到的原始 PD
</h3><p>Telnet 登录光猫后查看：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">cat /var/run/ppp1/orgpd6
</span></span><span class="line"><span class="cl">cat /var/run/ppp1/pd6
</span></span></code></pre></td></tr></table>
</div>
</div><p>如果 <code>orgpd6</code> 有 <code>/60</code>、<code>/56</code> 之类的前缀，而二级路由拿不到 PD，问题通常在光猫的 <code>dhcp6s</code> 下发逻辑。</p>
<h3 id="2-找到-immortalwrt-的-duid">
<a class="header-anchor" href="#2-%e6%89%be%e5%88%b0-immortalwrt-%e7%9a%84-duid"></a>
2. 找到 ImmortalWrt 的 DUID
</h3><p>在 ImmortalWrt 上看 <code>wan6</code> 客户端 DUID。常见方式是看 odhcpd lease 或用 WAN 口 MAC 推导：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">cat /tmp/hosts/odhcpd 2&gt;/dev/null
</span></span><span class="line"><span class="cl">ip link show dev eth1
</span></span></code></pre></td></tr></table>
</div>
</div><p>本文这台 ImmortalWrt 的 WAN 口 MAC 是：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">70:2a:d7:60:77:20
</span></span></code></pre></td></tr></table>
</div>
</div><p>对应 DUID-LL：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">00:03:00:01:70:2a:d7:60:77:20
</span></span></code></pre></td></tr></table>
</div>
</div><p>格式说明：</p>
<ul>
<li><code>00:03</code>：DUID-LL</li>
<li><code>00:01</code>：以太网</li>
<li>后面 6 字节：WAN 口 MAC</li>
</ul>
<h3 id="3-修改光猫-dhcp6sconf">
<a class="header-anchor" href="#3-%e4%bf%ae%e6%94%b9%e5%85%89%e7%8c%ab-dhcp6sconf"></a>
3. 修改光猫 dhcp6s.conf
</h3><p>光猫运行期配置文件：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">/etc/dhcp6s.conf
</span></span></code></pre></td></tr></table>
</div>
</div><p>示例配置：</p>
<pre tabindex="0"><code class="language-conf" data-lang="conf">option domain-name-servers fe80::1;
interface br0 {
        address-pool pool1 172800 259200;
};
pool pool1 {
        range 2409:8a28:6e2:1c20::1 to 2409:8a28:6e2:1c20::1000;
};
host immortalwrt {
        duid 00:03:00:01:70:2a:d7:60:77:20;
        prefix 2409:8a28:6e2:1c28::/61 172800 259200;
};
</code></pre><p>注意前缀不要和光猫 <code>br0</code> 自用的 <code>/64</code> 重叠。比如光猫自用 <code>1c20::/64</code> 时，不要再把 <code>1c20::/64</code> 委派给二级路由。</p>
<p>重启 DHCPv6 Server：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">killall dhcp6s 2&gt;/dev/null
</span></span><span class="line"><span class="cl">sleep <span class="m">1</span>
</span></span><span class="line"><span class="cl">/userfs/bin/dhcp6s -c /etc/dhcp6s.conf br0 -p /var/run/dhcp6s.pid <span class="p">&amp;</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="4-配置-immortalwrt-请求-pd">
<a class="header-anchor" href="#4-%e9%85%8d%e7%bd%ae-immortalwrt-%e8%af%b7%e6%b1%82-pd"></a>
4. 配置 ImmortalWrt 请求 PD
</h3><div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">uci <span class="nb">set</span> network.wan6.proto<span class="o">=</span><span class="s1">&#39;dhcpv6&#39;</span>
</span></span><span class="line"><span class="cl">uci <span class="nb">set</span> network.wan6.device<span class="o">=</span><span class="s1">&#39;eth1&#39;</span>
</span></span><span class="line"><span class="cl">uci <span class="nb">set</span> network.wan6.reqaddress<span class="o">=</span><span class="s1">&#39;try&#39;</span>
</span></span><span class="line"><span class="cl">uci <span class="nb">set</span> network.wan6.reqprefix<span class="o">=</span><span class="s1">&#39;60&#39;</span>
</span></span><span class="line"><span class="cl">uci <span class="nb">set</span> network.lan.ip6assign<span class="o">=</span><span class="s1">&#39;64&#39;</span>
</span></span><span class="line"><span class="cl">uci commit network
</span></span></code></pre></td></tr></table>
</div>
</div><p>LAN 侧用 RA/DHCPv6 Server：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">uci <span class="nb">set</span> dhcp.lan.ra<span class="o">=</span><span class="s1">&#39;server&#39;</span>
</span></span><span class="line"><span class="cl">uci <span class="nb">set</span> dhcp.lan.dhcpv6<span class="o">=</span><span class="s1">&#39;server&#39;</span>
</span></span><span class="line"><span class="cl">uci <span class="nb">set</span> dhcp.lan.ndp<span class="o">=</span><span class="s1">&#39;disabled&#39;</span>
</span></span><span class="line"><span class="cl">uci delete dhcp.lan.ra_flags 2&gt;/dev/null
</span></span><span class="line"><span class="cl">uci add_list dhcp.lan.ra_flags<span class="o">=</span><span class="s1">&#39;managed-config&#39;</span>
</span></span><span class="line"><span class="cl">uci add_list dhcp.lan.ra_flags<span class="o">=</span><span class="s1">&#39;other-config&#39;</span>
</span></span><span class="line"><span class="cl">uci commit dhcp
</span></span></code></pre></td></tr></table>
</div>
</div><p>如果之前做过 NDP Relay，建议清理 <code>wan6</code> 上的 relay 残留，避免以后排障混乱：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">uci delete dhcp.wan6.ra 2&gt;/dev/null
</span></span><span class="line"><span class="cl">uci delete dhcp.wan6.dhcpv6 2&gt;/dev/null
</span></span><span class="line"><span class="cl">uci delete dhcp.wan6.ndp 2&gt;/dev/null
</span></span><span class="line"><span class="cl">uci delete dhcp.wan6.master 2&gt;/dev/null
</span></span><span class="line"><span class="cl">uci <span class="nb">set</span> dhcp.wan6.ignore<span class="o">=</span><span class="s1">&#39;1&#39;</span>
</span></span><span class="line"><span class="cl">uci commit dhcp
</span></span></code></pre></td></tr></table>
</div>
</div><p>重启服务：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ifdown wan6
</span></span><span class="line"><span class="cl">sleep <span class="m">3</span>
</span></span><span class="line"><span class="cl">ifup wan6
</span></span><span class="line"><span class="cl">/etc/init.d/odhcpd restart
</span></span><span class="line"><span class="cl">/etc/init.d/dnsmasq restart
</span></span></code></pre></td></tr></table>
</div>
</div><p>验证：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ifstatus wan6 <span class="p">|</span> grep -A20 <span class="s1">&#39;&#34;ipv6-prefix&#34;&#39;</span>
</span></span><span class="line"><span class="cl">ip -6 addr show dev br-lan
</span></span><span class="line"><span class="cl">ip -6 route show
</span></span></code></pre></td></tr></table>
</div>
</div><p>正常应该能看到：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">wan6 获得 2409:8a28:6e2:1c28::/61
</span></span><span class="line"><span class="cl">br-lan 获得 2409:8a28:6e2:1c28::1/64
</span></span><span class="line"><span class="cl">LAN 客户端获得 2409:8a28:6e2:1c28::/64 内的地址
</span></span></code></pre></td></tr></table>
</div>
</div><h2 id="一个容易踩的坑不要把动态-gua-写死到-ra_dns">
<a class="header-anchor" href="#%e4%b8%80%e4%b8%aa%e5%ae%b9%e6%98%93%e8%b8%a9%e7%9a%84%e5%9d%91%e4%b8%8d%e8%a6%81%e6%8a%8a%e5%8a%a8%e6%80%81-gua-%e5%86%99%e6%ad%bb%e5%88%b0-ra_dns"></a>
一个容易踩的坑：不要把动态 GUA 写死到 ra_dns
</h2><p>当前这台 ImmortalWrt 里有一项：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">dhcp.lan.ra_dns=&#39;2409:8a28:6e2:1c28::1&#39;
</span></span></code></pre></td></tr></table>
</div>
</div><p>这在当前前缀不变时能工作，但它绑定了动态公网前缀。如果以后光猫重新拨号后前缀变化，客户端可能继续收到过期 DNS 地址。</p>
<p>更稳的做法是：</p>
<ul>
<li>不手动写死 <code>ra_dns</code>，让 odhcpd 按当前接口状态发布 DNS；</li>
<li>或者发布稳定的公网 IPv6 DNS；</li>
<li>或者使用稳定 ULA 地址作为路由器 LAN 侧 DNS 地址。</li>
</ul>
<p>如果只是为了快速验证，写死当前 <code>br-lan</code> 地址没问题；要长期运行，建议避免这种配置。</p>
<h2 id="临时方案ndp-relay">
<a class="header-anchor" href="#%e4%b8%b4%e6%97%b6%e6%96%b9%e6%a1%88ndp-relay"></a>
临时方案：NDP Relay
</h2><p>只有在下面这种情况下才考虑 NDP Relay：</p>
<ul>
<li>光猫没有给二级路由委派 PD；</li>
<li>暂时拿不到光猫超管；</li>
<li>只是想临时让 LAN 设备获得 IPv6。</li>
</ul>
<p>NDP Relay 的本质是把上游 <code>/64</code> 共享给下游 LAN，能用但不如 DHCPv6-PD 标准。它依赖运营商没有做严格的 ND/SAVI 检查，也容易在前缀变化时出问题。</p>
<p>如果已经能让光猫给 ImmortalWrt 下发 PD，就不要再把 LAN 配成 NDP Relay。</p>
<h2 id="光猫配置持久化问题">
<a class="header-anchor" href="#%e5%85%89%e7%8c%ab%e9%85%8d%e7%bd%ae%e6%8c%81%e4%b9%85%e5%8c%96%e9%97%ae%e9%a2%98"></a>
光猫配置持久化问题
</h2><p>这类光猫的文件系统比较特殊：</p>
<ul>
<li>根文件系统是 squashfs，只读。</li>
<li><code>/etc</code> 通常是启动后生成到 tmpfs 的运行期目录。</li>
<li><code>/etc/dhcp6s.conf</code> 很可能重启后恢复。</li>
<li>我这台固件上 <code>/userfs</code> 看起来在根文件系统内，不是可靠可写分区；之前尝试写入会报 <code>Read-only file system</code>。</li>
<li><code>/usr/osgi</code> 是 jffs2 可写区，但它属于 OSGi/插件运行区，不建议随便塞启动脚本。</li>
</ul>
<p>所以不要简单照抄“把脚本追加到 <code>/etc/init.d/rcS</code>”这种做法。这个固件的 <code>/etc/init.d/rcS</code> 来自只读系统，直接修改不可持久；如果某些机型上能改，也要先确认重启后是否保留。</p>
<p>更稳的持久化路线：</p>
<ul>
<li>通过配置导出/导入修改 romfile 中的 DHCPv6 配置；</li>
<li>找装维把光猫改桥接，让 ImmortalWrt 直接拨号；</li>
<li>如果确认有可靠可写启动钩子，再做自动替换 <code>dhcp6s.conf</code> 的脚本。</li>
</ul>
<p>Web 超管页面里隐藏的配置导入页面是：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">http://192.168.1.1/cgi-bin/upgrade.asp
</span></span></code></pre></td></tr></table>
</div>
</div><p>其中 <code>romfile</code> 是配置导入，<code>tclinux.bin</code> 是固件导入。改配置前务必先备份原配置。</p>
<h2 id="tr-069upnp-和远程管理">
<a class="header-anchor" href="#tr-069upnp-%e5%92%8c%e8%bf%9c%e7%a8%8b%e7%ae%a1%e7%90%86"></a>
TR-069、UPnP 和远程管理
</h2><p>拿到超管和 Telnet 后，我做了这些安全收敛：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">tcapi <span class="nb">set</span> Cwmp_Entry Active No
</span></span><span class="line"><span class="cl">tcapi <span class="nb">set</span> Cwmp_Entry Tr069Enable <span class="m">0</span>
</span></span><span class="line"><span class="cl">tcapi <span class="nb">set</span> Cwmp_Entry periodActive No
</span></span><span class="line"><span class="cl">tcapi <span class="nb">set</span> Cwmp_Entry tr069Commit <span class="m">1</span>
</span></span><span class="line"><span class="cl">tcapi commit Cwmp_Entry
</span></span><span class="line"><span class="cl">tcapi save
</span></span><span class="line"><span class="cl">killall tr69_monitor 2&gt;/dev/null
</span></span><span class="line"><span class="cl">killall tr69 2&gt;/dev/null
</span></span></code></pre></td></tr></table>
</div>
</div><p>当前确认：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">Cwmp_Entry Active=No
</span></span><span class="line"><span class="cl">Cwmp_Entry Tr069Enable=0
</span></span><span class="line"><span class="cl">Cwmp_Entry periodActive=No
</span></span></code></pre></td></tr></table>
</div>
</div><p>UPnP 保持开启，因为内网仍然需要；但不要把 UPnP、Web、Telnet 暴露到 WAN。当前运行期防火墙已经对 <code>ppp+</code> 和 <code>nas+</code> 的管理端口做了 DROP，Web 80 还有系统自带的 <code>!br+ DROP</code> 规则。Telnet 23 的 WAN DROP 规则目前是运行期规则，重启后仍需复核。</p>
<p>一句话：<strong>Telnet/Web 可以开，但只应该对内网开。TR-069 建议关闭。UPnP 如果要保留，也只保留 LAN 侧可用。</strong></p>
<h2 id="海外-ipv6-不通的问题">
<a class="header-anchor" href="#%e6%b5%b7%e5%a4%96-ipv6-%e4%b8%8d%e9%80%9a%e7%9a%84%e9%97%ae%e9%a2%98"></a>
海外 IPv6 不通的问题
</h2><p>本地前缀和 DHCPv6-PD 配好后，国内 IPv6 站点正常：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ping6 -c <span class="m">3</span> 2400:3200::1
</span></span><span class="line"><span class="cl">wget -6 -q -O /dev/null --timeout<span class="o">=</span><span class="m">8</span> https://www.baidu.com
</span></span><span class="line"><span class="cl">wget -6 -q -O /dev/null --timeout<span class="o">=</span><span class="m">8</span> https://www.qq.com
</span></span><span class="line"><span class="cl">wget -6 -q -O /dev/null --timeout<span class="o">=</span><span class="m">8</span> https://www.aliyun.com
</span></span></code></pre></td></tr></table>
</div>
</div><p>但海外 IPv6 常见现象是：ICMPv6 能 ping，TCP/443 不通或超时。之前抓包能看到本地 SYN 发出，但收不到 SYN-ACK。</p>
<p>这更像中国移动 IPv6 国际出口策略或链路质量问题，不是本地 RA/DHCPv6 配错。判断方法：</p>
<ul>
<li>国内 IPv6 HTTPS 正常；</li>
<li>本地路由器有默认 IPv6 路由；</li>
<li>LAN 设备拿到正确公网 IPv6；</li>
<li>海外 TCP 单独失败。</li>
</ul>
<p>解决办法通常不是改 DHCPv6，而是走 IPv4 代理，或换 IPv6 国际出口更好的运营商。</p>
<h2 id="总结">
<a class="header-anchor" href="#%e6%80%bb%e7%bb%93"></a>
总结
</h2><table>
  <thead>
      <tr>
          <th>项目</th>
          <th>当前结论</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>ISP 是否给前缀</td>
          <td>给了光猫 <code>/60</code></td>
      </tr>
      <tr>
          <td>光猫自用前缀</td>
          <td><code>2409:8a28:6e2:1c20::/64</code></td>
      </tr>
      <tr>
          <td>委派给 ImmortalWrt</td>
          <td><code>2409:8a28:6e2:1c28::/61</code></td>
      </tr>
      <tr>
          <td>ImmortalWrt LAN</td>
          <td><code>2409:8a28:6e2:1c28::/64</code></td>
      </tr>
      <tr>
          <td>LAN DHCP/RA</td>
          <td>RA Server + DHCPv6 Server，NDP Relay 关闭</td>
      </tr>
      <tr>
          <td>国内 IPv6</td>
          <td>正常</td>
      </tr>
      <tr>
          <td>海外 IPv6 TCP</td>
          <td>运营商出口问题概率高</td>
      </tr>
      <tr>
          <td>TR-069</td>
          <td>已关闭</td>
      </tr>
      <tr>
          <td>UPnP</td>
          <td>保留 LAN 侧使用，不暴露 WAN</td>
      </tr>
  </tbody>
</table>
<p>最关键的修正是：不要把这个问题简单归因成“ISP 不下发前缀”。现场证据表明，ISP 给了光猫 <code>/60</code>；真正要做的是让光猫的 DHCPv6 Server 把合适的子前缀委派给 ImmortalWrt。</p>

        
        <hr><p>本文2026-06-21首发于<a href='https://csdn.fjh1997.top/'>猫猫鱼的小窝</a>，最后修改于2026-06-21</p>]]>
      </description>
      
    </item>
    
    

    <item>
      <title>ISP不下发前缀的情况下让局域网设备获得IPv6的解决方法</title>
      <link>https://csdn.fjh1997.top/posts/62847.html</link>
      <pubDate>Sat, 20 Jun 2026 23:30:00 &#43;0800</pubDate>
      <author>xxx@example.com (catcatyu)</author>
      <guid>https://csdn.fjh1997.top/posts/62847.html</guid>
      <description>
        <![CDATA[<h1>ISP不下发前缀的情况下让局域网设备获得IPv6的解决方法</h1><p>作者：catcatyu（xxx@example.com）</p>
        
          <h2 id="背景">
<a class="header-anchor" href="#%e8%83%8c%e6%99%af"></a>
背景
</h2><p>家里用的是中国移动宽带，光猫是吉比特GS3101（中国移动定制），下挂一台ImmortalWrt路由器（MT7981芯片）做二级路由。遇到的问题是：<strong>IPv6时有时无</strong>，有时候能用有时候就断了。</p>
<p>经过一番折腾，搞清楚了原因并找到了解决方案。虽然海外IPv6因为运营商原因连不通，但<strong>国内IPv6站点是可以正常访问的</strong>。</p>
<h2 id="问题诊断">
<a class="header-anchor" href="#%e9%97%ae%e9%a2%98%e8%af%8a%e6%96%ad"></a>
问题诊断
</h2><h3 id="1-isp不下发dhcpv6-pd前缀">
<a class="header-anchor" href="#1-isp%e4%b8%8d%e4%b8%8b%e5%8f%91dhcpv6-pd%e5%89%8d%e7%bc%80"></a>
1. ISP不下发DHCPv6-PD前缀
</h3><p>登录ImmortalWrt路由器查看日志，发现了关键信息：</p>
<pre tabindex="0"><code>daemon.warn odhcp6c: Server returned IA_PD status &#39;No Prefix Available&#39;
daemon.warn odhcp6c: Server returned IA_PD status &#39;No Binding&#39;
</code></pre><p>几乎每天都会出现。中国移动的DHCPv6服务器在续约前缀时返回&quot;无前缀可用&quot;或&quot;无绑定&quot;。</p>
<p>这里需要区分两个概念：</p>
<table>
  <thead>
      <tr>
          <th>类型</th>
          <th>说明</th>
          <th>ISP是否分配</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><strong>IA_NA</strong>（地址）</td>
          <td>给路由器WAN口一个IPv6地址</td>
          <td>✅ 给了 <code>/64</code></td>
      </tr>
      <tr>
          <td><strong>IA_PD</strong>（前缀）</td>
          <td>给路由器一段地址池分给LAN设备</td>
          <td>❌ 不给</td>
      </tr>
  </tbody>
</table>
<p>ISP给了路由器一个地址（IA_NA），但拒绝给前缀（IA_PD）。正常情况下，路由器需要PD前缀才能给局域网设备分配IPv6地址，所以LAN设备就拿不到IPv6了。</p>
<h3 id="2-光猫固件封堵了超管获取">
<a class="header-anchor" href="#2-%e5%85%89%e7%8c%ab%e5%9b%ba%e4%bb%b6%e5%b0%81%e5%a0%b5%e4%ba%86%e8%b6%85%e7%ae%a1%e8%8e%b7%e5%8f%96"></a>
2. 光猫固件封堵了超管获取
</h3><p>我尝试通过获取光猫超级管理员密码来改桥接模式（让路由器直接拨号，PD前缀分配会更稳定），但是：</p>
<ul>
<li>光猫型号：<strong>GS3101</strong>，固件版本：<strong>V1B0.C02.01</strong>（<a href="https://github.com/fjh1997/hexo-theme-reimu/releases/tag/gs3101-firmware-v1b0c0201" target="_blank" rel="noopener noreferrer">固件完整dump下载</a>
，256MB Flash，含全部11个MTD分区）</li>
<li><code>getGateWay.cgi</code> 接口存在但返回 <strong>400 Bad Request</strong>（已被封堵）</li>
<li>telnet端口23关闭</li>
<li>所有默认超管密码（<code>CMCCAdmin/aDm8H%MdA</code>、<code>telecomadmin/nE7jA%5m</code> 等）全部错误</li>
<li>SN推算密码、MAC推算密码均不对</li>
<li>所有已知CGI漏洞页面返回404</li>
</ul>
<p><strong>结论：这个固件版本是运营商通过TR-069远程升级的新版本，已经封堵了所有已知的软件漏洞获取超管的方法。</strong></p>
<p>想获取超管只能：恢复出厂+秒删TR-069、TTL串口硬件调试、或找装维师傅要密码。</p>
<h2 id="解决方案ndp-relay--ipv6-forwarding">
<a class="header-anchor" href="#%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88ndp-relay--ipv6-forwarding"></a>
解决方案：NDP Relay + IPv6 Forwarding
</h2><p>既然拿不到超管改不了桥接，那就换个思路——<strong>把WAN口的IPv6共享给LAN设备</strong>。</p>
<h3 id="原理">
<a class="header-anchor" href="#%e5%8e%9f%e7%90%86"></a>
原理
</h3><p>ISP虽然不给PD前缀，但WAN口有一个 <code>/64</code> 的公网IPv6地址。通过<strong>NDP Relay</strong>，可以把WAN侧收到的Router Advertisement（RA）原样转发到LAN。LAN设备收到RA后，会通过SLAAC从同一个 <code>/64</code> 前缀自动生成IPv6地址。</p>
<p>然后通过路由器的<strong>IPv6 Forwarding</strong>和<strong>NDP Proxy</strong>，让LAN设备的流量能正确路由到WAN。</p>
<p>本质上就是把WAN的 <code>/64</code> 前缀&quot;共享&quot;给了LAN设备。</p>
<h3 id="具体配置immortalwrtopenwrt">
<a class="header-anchor" href="#%e5%85%b7%e4%bd%93%e9%85%8d%e7%bd%aeimmortalwrtopenwrt"></a>
具体配置（ImmortalWrt/OpenWrt）
</h3><h4 id="1-修改dhcpra配置">
<a class="header-anchor" href="#1-%e4%bf%ae%e6%94%b9dhcpra%e9%85%8d%e7%bd%ae"></a>
1. 修改DHCP/RA配置
</h4><div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># LAN侧：开启NDP relay和RA server</span>
</span></span><span class="line"><span class="cl">uci <span class="nb">set</span> dhcp.lan.ndp<span class="o">=</span>relay
</span></span><span class="line"><span class="cl">uci <span class="nb">set</span> dhcp.lan.ra<span class="o">=</span>server
</span></span><span class="line"><span class="cl">uci <span class="nb">set</span> dhcp.lan.dhcpv6<span class="o">=</span>server
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 设置RA标志，让客户端同时使用SLAAC和DHCPv6</span>
</span></span><span class="line"><span class="cl">uci delete dhcp.lan.ra_flags 2&gt;/dev/null
</span></span><span class="line"><span class="cl">uci add_list dhcp.lan.ra_flags<span class="o">=</span>managed-config
</span></span><span class="line"><span class="cl">uci add_list dhcp.lan.ra_flags<span class="o">=</span>other-config
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 设置RA发送间隔</span>
</span></span><span class="line"><span class="cl">uci <span class="nb">set</span> dhcp.lan.ra_maxinterval<span class="o">=</span><span class="m">300</span>
</span></span><span class="line"><span class="cl">uci <span class="nb">set</span> dhcp.lan.ra_mininterval<span class="o">=</span><span class="m">100</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># DHCPv6租约时间</span>
</span></span><span class="line"><span class="cl">uci <span class="nb">set</span> dhcp.lan.dhcpv6_leasetime<span class="o">=</span><span class="m">86400</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">uci commit dhcp
</span></span></code></pre></td></tr></table>
</div>
</div><h4 id="2-给lan接口添加wan前缀的静态地址">
<a class="header-anchor" href="#2-%e7%bb%99lan%e6%8e%a5%e5%8f%a3%e6%b7%bb%e5%8a%a0wan%e5%89%8d%e7%bc%80%e7%9a%84%e9%9d%99%e6%80%81%e5%9c%b0%e5%9d%80"></a>
2. 给LAN接口添加WAN前缀的静态地址
</h4><div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># 假设WAN前缀是 2409:xxxx:xxxx:xxxx::/64</span>
</span></span><span class="line"><span class="cl"><span class="c1"># 给br-lan加一个该前缀的静态地址</span>
</span></span><span class="line"><span class="cl">ip -6 addr add 2409:xxxx:xxxx:xxxx::2/64 dev br-lan
</span></span></code></pre></td></tr></table>
</div>
</div><blockquote>
<p>把 <code>2409:xxxx:xxxx:xxxx</code> 替换为你WAN口的实际前缀。可以通过 <code>ip -6 addr show dev eth1 scope global</code> 查看。</p>
</blockquote>
<h4 id="3-开启ipv6转发和ndp代理">
<a class="header-anchor" href="#3-%e5%bc%80%e5%90%afipv6%e8%bd%ac%e5%8f%91%e5%92%8cndp%e4%bb%a3%e7%90%86"></a>
3. 开启IPv6转发和NDP代理
</h4><div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># 开启IPv6转发</span>
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="m">1</span> &gt; /proc/sys/net/ipv6/conf/all/forwarding
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="m">1</span> &gt; /proc/sys/net/ipv6/conf/eth1/forwarding
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="m">1</span> &gt; /proc/sys/net/ipv6/conf/br-lan/forwarding
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 开启NDP代理（让ISP能路由到LAN设备）</span>
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="m">1</span> &gt; /proc/sys/net/ipv6/conf/all/proxy_ndp
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="m">1</span> &gt; /proc/sys/net/ipv6/conf/eth1/proxy_ndp
</span></span></code></pre></td></tr></table>
</div>
</div><h4 id="4-持久化配置写入-etcrclocal">
<a class="header-anchor" href="#4-%e6%8c%81%e4%b9%85%e5%8c%96%e9%85%8d%e7%bd%ae%e5%86%99%e5%85%a5-etcrclocal"></a>
4. 持久化配置（写入 /etc/rc.local）
</h4><div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">cat &gt; /etc/rc.local <span class="s">&lt;&lt; &#39;EOF&#39;
</span></span></span><span class="line"><span class="cl"><span class="s"># 静态IPv6地址（替换为你的实际前缀）
</span></span></span><span class="line"><span class="cl"><span class="s">ip -6 addr add 2409:xxxx:xxxx:xxxx::2/64 dev br-lan 2&gt;/dev/null
</span></span></span><span class="line"><span class="cl"><span class="s">
</span></span></span><span class="line"><span class="cl"><span class="s"># IPv6转发
</span></span></span><span class="line"><span class="cl"><span class="s">echo 1 &gt; /proc/sys/net/ipv6/conf/all/forwarding
</span></span></span><span class="line"><span class="cl"><span class="s">echo 1 &gt; /proc/sys/net/ipv6/conf/eth1/forwarding
</span></span></span><span class="line"><span class="cl"><span class="s">echo 1 &gt; /proc/sys/net/ipv6/conf/br-lan/forwarding
</span></span></span><span class="line"><span class="cl"><span class="s">
</span></span></span><span class="line"><span class="cl"><span class="s"># NDP代理
</span></span></span><span class="line"><span class="cl"><span class="s">echo 1 &gt; /proc/sys/net/ipv6/conf/all/proxy_ndp
</span></span></span><span class="line"><span class="cl"><span class="s">echo 1 &gt; /proc/sys/net/ipv6/conf/eth1/proxy_ndp
</span></span></span><span class="line"><span class="cl"><span class="s">
</span></span></span><span class="line"><span class="cl"><span class="s">exit 0
</span></span></span><span class="line"><span class="cl"><span class="s">EOF</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h4 id="5-优化wan6-dhcpv6参数">
<a class="header-anchor" href="#5-%e4%bc%98%e5%8c%96wan6-dhcpv6%e5%8f%82%e6%95%b0"></a>
5. 优化wan6 DHCPv6参数
</h4><div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">uci <span class="nb">set</span> network.wan6.reqprefix<span class="o">=</span><span class="m">56</span>
</span></span><span class="line"><span class="cl">uci <span class="nb">set</span> network.wan6.releaseprefix<span class="o">=</span><span class="m">1</span>
</span></span><span class="line"><span class="cl">uci commit network
</span></span></code></pre></td></tr></table>
</div>
</div><p>虽然ISP目前不给PD，但万一以后给了，这个配置能自动用上。</p>
<h4 id="6-添加ipv6看门狗脚本">
<a class="header-anchor" href="#6-%e6%b7%bb%e5%8a%a0ipv6%e7%9c%8b%e9%97%a8%e7%8b%97%e8%84%9a%e6%9c%ac"></a>
6. 添加IPv6看门狗脚本
</h4><p>ISP的前缀分配不稳定，加个脚本每5分钟检测一次，掉线自动恢复：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span><span class="lnt">35
</span><span class="lnt">36
</span><span class="lnt">37
</span><span class="lnt">38
</span><span class="lnt">39
</span><span class="lnt">40
</span><span class="lnt">41
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">cat &gt; /usr/bin/ipv6-watchdog.sh <span class="s">&lt;&lt; &#39;SCRIPT&#39;
</span></span></span><span class="line"><span class="cl"><span class="s">#!/bin/sh
</span></span></span><span class="line"><span class="cl"><span class="s">LOG_TAG=&#34;ipv6-watchdog&#34;
</span></span></span><span class="line"><span class="cl"><span class="s">PING_TARGET=&#34;2400:3200::1&#34;
</span></span></span><span class="line"><span class="cl"><span class="s">
</span></span></span><span class="line"><span class="cl"><span class="s">wan6_has_prefix() {
</span></span></span><span class="line"><span class="cl"><span class="s">    ip -6 addr show dev eth1 2&gt;/dev/null | grep -q &#34;scope global&#34;
</span></span></span><span class="line"><span class="cl"><span class="s">}
</span></span></span><span class="line"><span class="cl"><span class="s">
</span></span></span><span class="line"><span class="cl"><span class="s">ipv6_ping_ok() {
</span></span></span><span class="line"><span class="cl"><span class="s">    ping6 -c 1 -W 5 &#34;$PING_TARGET&#34; &gt;/dev/null 2&gt;&amp;1
</span></span></span><span class="line"><span class="cl"><span class="s">}
</span></span></span><span class="line"><span class="cl"><span class="s">
</span></span></span><span class="line"><span class="cl"><span class="s">if wan6_has_prefix &amp;&amp; ipv6_ping_ok; then
</span></span></span><span class="line"><span class="cl"><span class="s">    exit 0
</span></span></span><span class="line"><span class="cl"><span class="s">fi
</span></span></span><span class="line"><span class="cl"><span class="s">
</span></span></span><span class="line"><span class="cl"><span class="s">logger -t &#34;$LOG_TAG&#34; &#34;IPv6 lost, restarting wan6...&#34;
</span></span></span><span class="line"><span class="cl"><span class="s">ifdown wan6
</span></span></span><span class="line"><span class="cl"><span class="s">sleep 5
</span></span></span><span class="line"><span class="cl"><span class="s">ifup wan6
</span></span></span><span class="line"><span class="cl"><span class="s">
</span></span></span><span class="line"><span class="cl"><span class="s">for i in $(seq 1 12); do
</span></span></span><span class="line"><span class="cl"><span class="s">    sleep 5
</span></span></span><span class="line"><span class="cl"><span class="s">    if wan6_has_prefix; then
</span></span></span><span class="line"><span class="cl"><span class="s">        logger -t &#34;$LOG_TAG&#34; &#34;IPv6 restored after ${i}x5s&#34;
</span></span></span><span class="line"><span class="cl"><span class="s">        /etc/init.d/odhcpd restart
</span></span></span><span class="line"><span class="cl"><span class="s">        exit 0
</span></span></span><span class="line"><span class="cl"><span class="s">    fi
</span></span></span><span class="line"><span class="cl"><span class="s">done
</span></span></span><span class="line"><span class="cl"><span class="s">
</span></span></span><span class="line"><span class="cl"><span class="s">logger -t &#34;$LOG_TAG&#34; &#34;IPv6 NOT restored after 60s&#34;
</span></span></span><span class="line"><span class="cl"><span class="s">exit 1
</span></span></span><span class="line"><span class="cl"><span class="s">SCRIPT</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">chmod +x /usr/bin/ipv6-watchdog.sh
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 添加定时任务（每5分钟检查一次）</span>
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;*/5 * * * * /usr/bin/ipv6-watchdog.sh&#34;</span> &gt;&gt; /etc/crontabs/root
</span></span><span class="line"><span class="cl">/etc/init.d/cron <span class="nb">enable</span>
</span></span><span class="line"><span class="cl">/etc/init.d/cron restart
</span></span></code></pre></td></tr></table>
</div>
</div><h4 id="7-重启服务生效">
<a class="header-anchor" href="#7-%e9%87%8d%e5%90%af%e6%9c%8d%e5%8a%a1%e7%94%9f%e6%95%88"></a>
7. 重启服务生效
</h4><div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">/etc/init.d/odhcpd restart
</span></span><span class="line"><span class="cl">/etc/init.d/dnsmasq restart
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="验证">
<a class="header-anchor" href="#%e9%aa%8c%e8%af%81"></a>
验证
</h3><p>配置完成后，直连ImmortalWrt WiFi的设备（如手机）应该能通过SLAAC自动获取公网IPv6地址。</p>
<p>测试方法：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># 从路由器测试国内IPv6站点</span>
</span></span><span class="line"><span class="cl">ping6 -c <span class="m">3</span> 2400:3200::1          <span class="c1"># 阿里DNS</span>
</span></span><span class="line"><span class="cl">ping6 -c <span class="m">3</span> 2409:8a28:6e2:1c20::1 <span class="c1"># 你的WAN网关</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 测试国内HTTPS站点</span>
</span></span><span class="line"><span class="cl">wget -6 -q -O /dev/null --timeout<span class="o">=</span><span class="m">10</span> https://www.baidu.com <span class="o">&amp;&amp;</span> <span class="nb">echo</span> <span class="s2">&#34;百度 OK&#34;</span>
</span></span><span class="line"><span class="cl">wget -6 -q -O /dev/null --timeout<span class="o">=</span><span class="m">10</span> https://www.qq.com <span class="o">&amp;&amp;</span> <span class="nb">echo</span> <span class="s2">&#34;QQ OK&#34;</span>
</span></span><span class="line"><span class="cl">wget -6 -q -O /dev/null --timeout<span class="o">=</span><span class="m">10</span> https://www.aliyun.com <span class="o">&amp;&amp;</span> <span class="nb">echo</span> <span class="s2">&#34;阿里云 OK&#34;</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h2 id="海外ipv6不通的问题">
<a class="header-anchor" href="#%e6%b5%b7%e5%a4%96ipv6%e4%b8%8d%e9%80%9a%e7%9a%84%e9%97%ae%e9%a2%98"></a>
海外IPv6不通的问题
</h2><p>配置完成后发现一个现象：<strong>国内IPv6站点全部正常，但海外IPv6站点TCP连不上</strong>（ping能通但HTTP/HTTPS超时）。</p>
<p>通过tcpdump抓包确认：</p>
<pre tabindex="0"><code># 路由器发出的TCP SYN包
IP6 router.44178 &gt; remote.443: Flags [S]  # SYN发出
# 没有任何SYN-ACK回来...
</code></pre><p><strong>原因：中国移动的IPv6国际出口过滤了TCP流量</strong>，只放行ICMPv6。这不是路由器防火墙的问题（即使完全放开防火墙也不行），而是运营商层面的策略。</p>
<p>如果你需要访问海外IPv6站点，建议：</p>
<ul>
<li>代理走IPv4出站（大部分代理客户端默认就这样）</li>
<li>换电信/联通宽带（IPv6到海外通常好很多）</li>
</ul>
<h2 id="注意事项">
<a class="header-anchor" href="#%e6%b3%a8%e6%84%8f%e4%ba%8b%e9%a1%b9"></a>
注意事项
</h2><h3 id="关于ndp-relay的安全性">
<a class="header-anchor" href="#%e5%85%b3%e4%ba%8endp-relay%e7%9a%84%e5%ae%89%e5%85%a8%e6%80%a7"></a>
关于NDP Relay的安全性
</h3><p>这种方案本质上是把WAN的 <code>/64</code> 前缀共享给LAN。如果ISP做了严格的ND安全检查（如SAVI/ND Snooping），会检测到同一端口冒出了多个IPv6源地址，从而丢弃非绑定地址的包。</p>
<p>目前中国移动大部分场景不管这个，所以能用。如果某天被限制了，表现为：设备有IPv6地址但上不了网（被静默丢弃）。到时候只能：</p>
<ul>
<li>打电话给运营商要PD前缀</li>
<li>光猫改桥接（需要超管密码）</li>
<li>用6in4/HE Tunnel Broker走隧道</li>
</ul>
<h3 id="关于光猫gs3101gs2101超管获取">
<a class="header-anchor" href="#%e5%85%b3%e4%ba%8e%e5%85%89%e7%8c%abgs3101gs2101%e8%b6%85%e7%ae%a1%e8%8e%b7%e5%8f%96"></a>
关于光猫GS3101/GS2101超管获取
</h3><p>如果你也是GS3101或GS2101型号的光猫，固件是V1B0.C02.01或更新版本，传统的<code>getGateWay.cgi</code>等软件漏洞已经被封堵。但还有以下几种方法可以获取超管密码：</p>
<h4 id="方法一upnp漏洞推荐免费">
<a class="header-anchor" href="#%e6%96%b9%e6%b3%95%e4%b8%80upnp%e6%bc%8f%e6%b4%9e%e6%8e%a8%e8%8d%90%e5%85%8d%e8%b4%b9"></a>
方法一：UPnP漏洞（推荐，免费）
</h4><blockquote>
<p>参考：<a href="https://www.right.com.cn/forum/thread-8472031-1-1.html" target="_blank" rel="noopener noreferrer nofollow">吉比特GS2101光猫-开启telnet-获取超级管理员账号密码 - 恩山无线论坛</a>
</p>
</blockquote>
<p>GS2101/GS3101光猫在端口5555运行了一个UPnP IGD服务，其中<code>DeviceInfo</code>子服务包含一个厂商自定义的SOAP方法<code>X_GetAccess</code>，<strong>不需要任何认证</strong>就能返回超管密码。</p>
<p><strong>前提条件：光猫的UPnP必须开启。</strong> UPnP设置需要超管权限才能看到（在&quot;应用&quot; → &ldquo;UPnP配置&quot;里），所以这是一个鸡生蛋的问题。但如果你能通过其他方式先拿到一次超管密码（比如找师傅），开启UPnP后以后就可以自己随时获取了。</p>
<p>获取密码的PowerShell脚本（Windows下运行）：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span><span class="lnt">35
</span><span class="lnt">36
</span><span class="lnt">37
</span><span class="lnt">38
</span><span class="lnt">39
</span><span class="lnt">40
</span><span class="lnt">41
</span><span class="lnt">42
</span><span class="lnt">43
</span><span class="lnt">44
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="c"># GS2101/GS3101 光猫超管密码获取脚本</span>
</span></span><span class="line"><span class="cl"><span class="c"># 前提：光猫UPnP已开启</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$ONT_IP</span> <span class="p">=</span> <span class="s2">&#34;192.168.1.1&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">Write-Host</span> <span class="s2">&#34;[1/2] Checking ONT...&#34;</span> <span class="n">-ForegroundColor</span> <span class="n">Yellow</span>
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="p">(</span><span class="o">-not</span> <span class="p">(</span><span class="nb">Test-Connection</span> <span class="nv">$ONT_IP</span> <span class="n">-Count</span> <span class="mf">1</span> <span class="n">-Quiet</span><span class="p">))</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nb">Write-Host</span> <span class="s2">&#34;[FAIL] Cannot reach </span><span class="nv">$ONT_IP</span><span class="s2">&#34;</span> <span class="n">-ForegroundColor</span> <span class="n">Red</span>
</span></span><span class="line"><span class="cl">    <span class="n">exit</span> <span class="mf">1</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nb">Write-Host</span> <span class="s2">&#34;      OK&#34;</span> <span class="n">-ForegroundColor</span> <span class="n">Green</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">Write-Host</span> <span class="s2">&#34;[2/2] Fetching password via UPnP...&#34;</span> <span class="n">-ForegroundColor</span> <span class="n">Yellow</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$soap</span> <span class="p">=</span> <span class="s2">&#34;POST /UD/?2 HTTP/1.1</span><span class="se">`r`n</span><span class="s2">&#34;</span> <span class="p">+</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;Host: </span><span class="nv">${ONT_IP}</span><span class="s2">:5555</span><span class="se">`r`n</span><span class="s2">&#34;</span> <span class="p">+</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;Content-Type: text/xml; charset=utf-8</span><span class="se">`r`n</span><span class="s2">&#34;</span> <span class="p">+</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;SOAPAction: </span><span class="se">`&#34;</span><span class="s2">urn:dslforum-org:service:DeviceInfo:1#X_GetAccess</span><span class="se">`&#34;`r`n</span><span class="s2">&#34;</span> <span class="p">+</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;Content-Length: {0}</span><span class="se">`r`n</span><span class="s2">&#34;</span> <span class="p">+</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;Connection: close</span><span class="se">`r`n`r`n</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$xml</span> <span class="p">=</span> <span class="s1">&#39;&lt;s:Envelope xmlns:s=&#34;http://schemas.xmlsoap.org/soap/envelope/&#34;&gt;&lt;s:Body&gt;&#39;</span> <span class="p">+</span>
</span></span><span class="line"><span class="cl">       <span class="s1">&#39;&lt;u:X_GetAccess xmlns:u=&#34;urn:dslforum-org:service:DeviceInfo:1&#34;/&gt;&lt;/s:Body&gt;&lt;/s:Envelope&gt;&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$soap</span> <span class="p">=</span> <span class="nv">$soap</span> <span class="o">-f</span> <span class="nv">$xml</span><span class="p">.</span><span class="py">Length</span>
</span></span><span class="line"><span class="cl"><span class="nv">$request</span> <span class="p">=</span> <span class="p">[</span><span class="no">Text.Encoding</span><span class="p">]::</span><span class="n">UTF8</span><span class="p">.</span><span class="py">GetBytes</span><span class="p">(</span><span class="nv">$soap</span> <span class="p">+</span> <span class="nv">$xml</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$client</span> <span class="p">=</span> <span class="nb">New-Object</span> <span class="n">System</span><span class="p">.</span><span class="py">Net</span><span class="p">.</span><span class="py">Sockets</span><span class="p">.</span><span class="py">TcpClient</span>
</span></span><span class="line"><span class="cl"><span class="nv">$client</span><span class="p">.</span><span class="py">ReceiveTimeout</span> <span class="p">=</span> <span class="mf">8000</span>
</span></span><span class="line"><span class="cl"><span class="nv">$client</span><span class="p">.</span><span class="py">Connect</span><span class="p">(</span><span class="nv">$ONT_IP</span><span class="p">,</span> <span class="mf">5555</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nv">$stream</span> <span class="p">=</span> <span class="nv">$client</span><span class="p">.</span><span class="py">GetStream</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="nv">$stream</span><span class="p">.</span><span class="py">Write</span><span class="p">(</span><span class="nv">$request</span><span class="p">,</span> <span class="mf">0</span><span class="p">,</span> <span class="nv">$request</span><span class="p">.</span><span class="n">Length</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nv">$stream</span><span class="p">.</span><span class="py">Flush</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$reader</span> <span class="p">=</span> <span class="nb">New-Object</span> <span class="n">System</span><span class="p">.</span><span class="py">IO</span><span class="p">.</span><span class="py">StreamReader</span><span class="p">(</span><span class="nv">$stream</span><span class="p">,</span> <span class="p">[</span><span class="no">Text.Encoding</span><span class="p">]::</span><span class="n">UTF8</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nv">$response</span> <span class="p">=</span> <span class="nv">$reader</span><span class="p">.</span><span class="py">ReadToEnd</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="nv">$client</span><span class="p">.</span><span class="py">Close</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="p">(</span><span class="nv">$response</span> <span class="o">-match</span> <span class="s1">&#39;NewX_RootPassword[^&gt;]*&gt;([^&lt;]+)&#39;</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nb">Write-Host</span> <span class="s2">&#34;  Username : CMCCAdmin&#34;</span> <span class="n">-ForegroundColor</span> <span class="n">Cyan</span>
</span></span><span class="line"><span class="cl">    <span class="nb">Write-Host</span> <span class="s2">&#34;  Password : </span><span class="p">$(</span><span class="nv">$matches</span><span class="p">[</span><span class="mf">1</span><span class="p">])</span><span class="s2">&#34;</span> <span class="n">-ForegroundColor</span> <span class="n">Cyan</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nb">Write-Host</span> <span class="s2">&#34;[FAIL] No password returned - is UPnP enabled?&#34;</span> <span class="n">-ForegroundColor</span> <span class="n">Red</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>如果UPnP未开启，会返回空的SOAP body（端口5555可达但所有action不返回数据）。</p>
<p><strong>附：UPnP开启后telnet自动激活</strong></p>
<p>实测发现，开启UPnP并重启光猫后，<strong>telnet端口23会自动开放</strong>，使用以下凭据可以登录并获得shell：</p>
<pre tabindex="0"><code>用户名: admin
密码: s2@We3%Dc#
</code></pre><p>登录后可进入BusyBox shell（<code>#</code>提示符），可以执行命令查看配置、修改设置等。这意味着即使TR-069后续重新随机化了超管密码，只要UPnP保持开启，你就可以随时通过telnet获取shell访问权限。</p>
<blockquote>
<p><strong>telnet开放的真正原因分析：</strong> 实测过程中，在UPnP开启后还额外调用了<code>X_SetAccess</code>（设置<code>X_AccessWAN=True</code>，开启WAN侧远程管理）和<code>Reboot</code>（远程重启光猫）两个action。因此telnet的开放可能不是UPnP本身导致的，而是这个组合链：</p>
<ol>
<li>UPnP开启后，<code>X_SetAccess</code> action成功开启了WAN侧管理权限（包括telnet/SSH等）</li>
<li><code>Reboot</code> action重启光猫，使配置生效</li>
<li>重启后telnet端口23开放</li>
</ol>
<p>也就是说，关键的触发条件可能是 <strong><code>X_SetAccess</code> + <code>Reboot</code></strong>，而不仅仅是UPnP处于开启状态。</p>
</blockquote>
<p><strong>附：UPnP漏洞的完整利用能力</strong></p>
<p>除了获取超管密码外，端口5555的UPnP服务（无需认证）还可以：</p>
<table>
  <thead>
      <tr>
          <th>UPnP Action</th>
          <th>服务</th>
          <th>效果</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>X_GetAccess</code></td>
          <td>DeviceInfo</td>
          <td>获取超管密码</td>
      </tr>
      <tr>
          <td><code>Reboot</code></td>
          <td>DeviceConfig</td>
          <td>重启光猫</td>
      </tr>
      <tr>
          <td><code>FactoryReset</code></td>
          <td>DeviceConfig</td>
          <td>恢复出厂设置</td>
      </tr>
      <tr>
          <td><code>AddPortMapping</code></td>
          <td>WANIPConnection</td>
          <td>添加端口映射（外网穿透到内网）</td>
      </tr>
      <tr>
          <td><code>GetPreSharedKey</code></td>
          <td>WLANConfiguration</td>
          <td>读取WiFi密码</td>
      </tr>
      <tr>
          <td><code>SetDNSServer</code></td>
          <td>LANHostConfigManagement</td>
          <td>修改DHCP下发的DNS（DNS劫持）</td>
      </tr>
      <tr>
          <td><code>SetManagementServerURL</code></td>
          <td>ManagementServer</td>
          <td>劫持TR-069管理服务器地址</td>
      </tr>
      <tr>
          <td><code>X_SetAccess</code></td>
          <td>DeviceInfo</td>
          <td>开启WAN侧远程管理</td>
      </tr>
  </tbody>
</table>
<p>虽然没有直接的命令执行action，但组合利用效果很强：先用<code>X_GetAccess</code>拿密码 → 开启UPnP → 用<code>Reboot</code>重启激活telnet → 用<code>admin/s2@We3%Dc#</code>登录telnet获得shell。</p>
<h4 id="方法二闲鱼购买5元">
<a class="header-anchor" href="#%e6%96%b9%e6%b3%95%e4%ba%8c%e9%97%b2%e9%b1%bc%e8%b4%ad%e4%b9%b05%e5%85%83"></a>
方法二：闲鱼购买（5元）
</h4><p>闲鱼搜索&quot;光猫超级密码&quot;或&quot;光猫超管&rdquo;，提供光猫SN码，卖家通过运营商网管系统查询，一般<strong>5元</strong>就能拿到。本质上就是装维师傅用的同一套OLT网管平台，用SN码查到设备绑定的动态密码。</p>
<h4 id="方法三找装维师傅">
<a class="header-anchor" href="#%e6%96%b9%e6%b3%95%e4%b8%89%e6%89%be%e8%a3%85%e7%bb%b4%e5%b8%88%e5%82%85"></a>
方法三：找装维师傅
</h4><p>直接联系宽带安装师傅，他们手上有工单系统/网管平台，用SN码就能查到动态密码。有些师傅愿意给，有些不愿意。</p>
<h4 id="方法四恢复出厂秒删tr-069">
<a class="header-anchor" href="#%e6%96%b9%e6%b3%95%e5%9b%9b%e6%81%a2%e5%a4%8d%e5%87%ba%e5%8e%82%e7%a7%92%e5%88%a0tr-069"></a>
方法四：恢复出厂+秒删TR-069
</h4><ol>
<li>记下LOID和宽带账号密码</li>
<li><strong>拔光纤</strong></li>
<li>捅Reset孔10秒恢复出厂</li>
<li>密码回到默认值 <code>CMCCAdmin</code> / <code>aDm8H%MdA</code></li>
<li><strong>立刻</strong>登录，删掉TR-069连接（防止密码被重新随机）</li>
<li>插回光纤，用LOID重新注册</li>
</ol>
<h4 id="方法五ttl串口硬件方法100成功">
<a class="header-anchor" href="#%e6%96%b9%e6%b3%95%e4%ba%94ttl%e4%b8%b2%e5%8f%a3%e7%a1%ac%e4%bb%b6%e6%96%b9%e6%b3%95100%e6%88%90%e5%8a%9f"></a>
方法五：TTL串口（硬件方法，100%成功）
</h4><p>买个CH340/CP2102 USB转TTL模块（淘宝几块钱），拆光猫接TX/RX/GND三条线，波特率115200，开机进root shell，直接读配置文件里的超管密码：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">cat /tmp/ctromfile.cfg <span class="p">|</span> grep -i admin
</span></span><span class="line"><span class="cl">cat /tmp/ctromfile.cfg <span class="p">|</span> grep -i passw
</span></span></code></pre></td></tr></table>
</div>
</div><h2 id="进阶从光猫获取正规的60-pd前缀委派">
<a class="header-anchor" href="#%e8%bf%9b%e9%98%b6%e4%bb%8e%e5%85%89%e7%8c%ab%e8%8e%b7%e5%8f%96%e6%ad%a3%e8%a7%84%e7%9a%8460-pd%e5%89%8d%e7%bc%80%e5%a7%94%e6%b4%be"></a>
进阶：从光猫获取正规的/60 PD前缀委派
</h2><p>如果你已经通过上面的方法拿到了光猫超管密码并开启了telnet，还有一个更好的方案——<strong>直接从光猫获取正规的PD前缀委派</strong>，不再需要NDP Relay hack。</p>
<h3 id="发现问题">
<a class="header-anchor" href="#%e5%8f%91%e7%8e%b0%e9%97%ae%e9%a2%98"></a>
发现问题
</h3><p>通过telnet查看光猫的配置，发现ISP实际上<strong>已经给了光猫一个/60前缀</strong>：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># 通过telnet登录光猫后执行</span>
</span></span><span class="line"><span class="cl">cat /var/run/ppp1/orgpd6
</span></span><span class="line"><span class="cl"><span class="c1"># 输出: 2409:8a28:6e2:1c20::/60   ← ISP给了/60！</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">cat /var/run/ppp1/pd6
</span></span><span class="line"><span class="cl"><span class="c1"># 输出: 2409:8a28:6e2:1c20::/64    ← 光猫自己只用了/64</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>ISP通过PPPoE给光猫委派了 <code>/60</code> 前缀，但光猫的DHCPv6 Server（<code>dhcp6s</code>）只把这个前缀委派给了一个硬编码的DUID，下挂的OpenWrt/ImmortalWrt路由器根本拿不到。</p>
<h3 id="原因分析">
<a class="header-anchor" href="#%e5%8e%9f%e5%9b%a0%e5%88%86%e6%9e%90"></a>
原因分析
</h3><p>光猫的 <code>/etc/dhcp6s.conf</code>（DHCPv6服务器配置）长这样：</p>
<pre tabindex="0"><code>option domain-name-servers fe80::1;
interface br0 {
         address-pool pool1 172800 259200;
};
pool pool1 {
         range 2409:8a28:6e2:1c20::1 to 2409:8a28:6e2:1c20::1000;
};
host cmcc {
        duid 11:11:11:11:11:11:11:11:11:11:11:11:11:11;
        prefix 2409:8a28:6e2:1c20::/60 172800 259200;
};
</code></pre><p><code>host cmcc</code> 里硬编码了一个假DUID（<code>11:11:11:11...</code>），只有匹配这个DUID的设备才能拿到PD前缀。下挂的OpenWrt路由器DUID不匹配，自然拿不到前缀。</p>
<h3 id="解决方法修改dhcp6sconf">
<a class="header-anchor" href="#%e8%a7%a3%e5%86%b3%e6%96%b9%e6%b3%95%e4%bf%ae%e6%94%b9dhcp6sconf"></a>
解决方法：修改dhcp6s.conf
</h3><p><strong>第一步：找到OpenWrt路由器的DUID</strong></p>
<p>在OpenWrt路由器上执行：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">cat /tmp/hosts/odhcpd
</span></span><span class="line"><span class="cl"><span class="c1"># 输出类似：</span>
</span></span><span class="line"><span class="cl"><span class="c1"># br-lan 00030001702ad7607720 0 - ...</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>DUID就是第二列的值，如 <code>00030001702ad7607720</code>。格式化为冒号分隔：<code>00:03:00:01:70:2a:d7:60:77:20</code>。</p>
<blockquote>
<p>这个DUID是DUID-LL格式：<code>0003</code>=DUID-LL类型, <code>0001</code>=以太网, 后面是WAN口的MAC地址。</p>
</blockquote>
<p><strong>第二步：通过telnet修改光猫的dhcp6s.conf</strong></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># telnet登录光猫 (admin / s2@We3%Dc#)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">cat &gt; /etc/dhcp6s.conf <span class="s">&lt;&lt; &#39;EOF&#39;
</span></span></span><span class="line"><span class="cl"><span class="s">option domain-name-servers fe80::1;
</span></span></span><span class="line"><span class="cl"><span class="s">interface br0 {
</span></span></span><span class="line"><span class="cl"><span class="s">        address-pool pool1 172800 259200;
</span></span></span><span class="line"><span class="cl"><span class="s">};
</span></span></span><span class="line"><span class="cl"><span class="s">pool pool1 {
</span></span></span><span class="line"><span class="cl"><span class="s">        range 2409:8a28:6e2:1c20::1 to 2409:8a28:6e2:1c20::1000;
</span></span></span><span class="line"><span class="cl"><span class="s">};
</span></span></span><span class="line"><span class="cl"><span class="s">host openwrt {
</span></span></span><span class="line"><span class="cl"><span class="s">        duid 00:03:00:01:70:2a:d7:60:77:20;
</span></span></span><span class="line"><span class="cl"><span class="s">        prefix 2409:8a28:6e2:1c20::/60 172800 259200;
</span></span></span><span class="line"><span class="cl"><span class="s">};
</span></span></span><span class="line"><span class="cl"><span class="s">EOF</span>
</span></span></code></pre></td></tr></table>
</div>
</div><blockquote>
<p>把 <code>00:03:00:01:70:2a:d7:60:77:20</code> 替换为你自己路由器的DUID。</p>
</blockquote>
<p><strong>第三步：重启dhcp6s</strong></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">killall dhcp6s 2&gt;/dev/null
</span></span><span class="line"><span class="cl">sleep <span class="m">1</span>
</span></span><span class="line"><span class="cl">/userfs/bin/dhcp6s -c /etc/dhcp6s.conf br0 -p /var/run/dhcp6s.pid <span class="p">&amp;</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>第四步：在OpenWrt上重新请求前缀</strong></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">killall odhcp6c 2&gt;/dev/null
</span></span><span class="line"><span class="cl">ifdown wan6
</span></span><span class="line"><span class="cl">sleep <span class="m">3</span>
</span></span><span class="line"><span class="cl">ifup wan6
</span></span><span class="line"><span class="cl">sleep <span class="m">15</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 验证是否拿到前缀</span>
</span></span><span class="line"><span class="cl">ifstatus wan6 <span class="p">|</span> grep -A8 ipv6-prefix
</span></span></code></pre></td></tr></table>
</div>
</div><p>成功的话会看到：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span><span class="lnt">9
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="s2">&#34;ipv6-prefix&#34;</span><span class="err">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">    <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;address&#34;</span><span class="p">:</span> <span class="s2">&#34;2409:8a28:6e2:1c20::&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;mask&#34;</span><span class="p">:</span> <span class="mi">60</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;preferred&#34;</span><span class="p">:</span> <span class="mi">172784</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;valid&#34;</span><span class="p">:</span> <span class="mi">259184</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;class&#34;</span><span class="p">:</span> <span class="s2">&#34;wan6&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">]</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="完整的pd链路">
<a class="header-anchor" href="#%e5%ae%8c%e6%95%b4%e7%9a%84pd%e9%93%be%e8%b7%af"></a>
完整的PD链路
</h3><p>修改后的IPv6前缀委派链路：</p>
<pre tabindex="0"><code>ISP ──/60──→ 光猫(ppp1) ──/60──→ OpenWrt(eth1) ──/64──→ LAN设备(br-lan)
</code></pre><p>这是正规的DHCPv6-PD链路，比NDP Relay方案更稳定、更标准。</p>
<h3 id="持久化注意事项">
<a class="header-anchor" href="#%e6%8c%81%e4%b9%85%e5%8c%96%e6%b3%a8%e6%84%8f%e4%ba%8b%e9%a1%b9"></a>
持久化注意事项
</h3><p>光猫的 <code>/etc/</code> 分区是只读的squashfs，重启后 <code>dhcp6s.conf</code> 会恢复原样。需要持久化的话，可以把自定义配置保存到 <code>/userfs/</code>（可写的jffs2分区），并在 <code>/etc/init.d/rcS</code> 末尾添加监控脚本，在每次dhcp6s启动后自动替换配置：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># 保存到持久分区</span>
</span></span><span class="line"><span class="cl">cp /etc/dhcp6s.conf /userfs/dhcp6s_custom.conf
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 在rcS末尾添加后台监控</span>
</span></span><span class="line"><span class="cl">cat &gt;&gt; /etc/init.d/rcS <span class="s">&lt;&lt; &#39;EOF&#39;
</span></span></span><span class="line"><span class="cl"><span class="s">(while true; do
</span></span></span><span class="line"><span class="cl"><span class="s">  if ps | grep -q &#34;[d]hcp6s&#34;; then
</span></span></span><span class="line"><span class="cl"><span class="s">    if [ -f /userfs/dhcp6s_custom.conf ]; then
</span></span></span><span class="line"><span class="cl"><span class="s">      if ! grep -q &#34;openwrt&#34; /etc/dhcp6s.conf 2&gt;/dev/null; then
</span></span></span><span class="line"><span class="cl"><span class="s">        cp /userfs/dhcp6s_custom.conf /etc/dhcp6s.conf
</span></span></span><span class="line"><span class="cl"><span class="s">        killall dhcp6s 2&gt;/dev/null
</span></span></span><span class="line"><span class="cl"><span class="s">        sleep 1
</span></span></span><span class="line"><span class="cl"><span class="s">        /userfs/bin/dhcp6s -c /etc/dhcp6s.conf br0 -p /var/run/dhcp6s.pid &amp;
</span></span></span><span class="line"><span class="cl"><span class="s">      fi
</span></span></span><span class="line"><span class="cl"><span class="s">    fi
</span></span></span><span class="line"><span class="cl"><span class="s">  fi
</span></span></span><span class="line"><span class="cl"><span class="s">  sleep 30
</span></span></span><span class="line"><span class="cl"><span class="s">done) &amp;
</span></span></span><span class="line"><span class="cl"><span class="s">EOF</span>
</span></span></code></pre></td></tr></table>
</div>
</div><blockquote>
<p><strong>注意</strong>：<code>/etc/init.d/rcS</code> 的可写性取决于具体固件版本，部分版本rcS在tmpfs上，重启后可能丢失。如遇此情况，建议联系装维师傅将光猫改为桥接模式，让OpenWrt直接拨号获取PD前缀，这是最彻底的解决方案。</p>
</blockquote>
<h2 id="总结">
<a class="header-anchor" href="#%e6%80%bb%e7%bb%93"></a>
总结
</h2><table>
  <thead>
      <tr>
          <th>问题</th>
          <th>原因</th>
          <th>解决方案</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>LAN设备没有IPv6</td>
          <td>ISP不下发PD前缀</td>
          <td>NDP Relay + IPv6 Forwarding</td>
      </tr>
      <tr>
          <td>光猫有/60但不给下挂路由器</td>
          <td>dhcp6s.conf硬编码DUID</td>
          <td>修改dhcp6s.conf加入路由器DUID</td>
      </tr>
      <tr>
          <td>IPv6时断时续</td>
          <td>ISP前缀续约失败</td>
          <td>watchdog脚本自动恢复</td>
      </tr>
      <tr>
          <td>海外IPv6 TCP不通</td>
          <td>中国移动IPv6国际出口过滤</td>
          <td>走IPv4代理</td>
      </tr>
      <tr>
          <td>光猫无法改桥接</td>
          <td>新固件封堵了超管获取</td>
          <td>UPnP漏洞/闲鱼5元/找装维师傅</td>
      </tr>
  </tbody>
</table>
<p>虽然方案不完美（海外IPv6不通、依赖ISP不做ND检查），但对于日常使用国内IPv6站点来说完全够用。</p>

        
        <hr><p>本文2026-06-20首发于<a href='https://csdn.fjh1997.top/'>猫猫鱼的小窝</a>，最后修改于2026-06-20</p>]]>
      </description>
      
    </item>
    
  </channel>
</rss>
