<?xml version="1.0" encoding="utf-8"?>
<search> 
  
  
    
    <entry>
      <title>ChatGPT / Claude / Gemini 的 IP 策略与解锁</title>
      <link href="/posts/ai-services-unlock/"/>
      <url>/posts/ai-services-unlock/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：ChatGPT、Claude、Gemini 等 AI 服务对访问 IP 有不同程度的限制。部分服务在中国大陆不可直接访问，部分对数据中心 IP 有封锁。本文整理主流 AI 服务的 IP 策略、可用地区和解锁方法，帮助你顺畅使用这些工具。</p></blockquote><hr><h2 id="为什么-AI-服务需要”解锁”"><a href="#为什么-AI-服务需要”解锁”" class="headerlink" title="为什么 AI 服务需要”解锁”"></a>为什么 AI 服务需要”解锁”</h2><p>如果你之前了解过流媒体解锁，会发现 AI 服务的访问限制有很多相似之处——但也有本质区别。</p><p><img src="/images/inline/chatgpt-blocked.jpg" alt="ChatGPT 地区限制提示"><br><em>图片来源：<a href="https://www.tenorshare.com/">Tenorshare</a></em></p><h3 id="与流媒体解锁的异同"><a href="#与流媒体解锁的异同" class="headerlink" title="与流媒体解锁的异同"></a>与流媒体解锁的异同</h3><p>流媒体解锁的核心问题是<strong>版权授权的地域分割</strong>：Netflix 在不同国家拥有不同的内容库，解锁的目的是访问特定地区的内容。</p><p>AI 服务的访问限制则有所不同。它的根源主要是以下几点：</p><p><strong>合规与法律限制</strong>：OpenAI、Anthropic 等公司在服务条款中明确列出了不支持的国家和地区。这些限制通常与出口管制法规、数据隐私法规以及公司自身的风险评估有关。中国大陆、俄罗斯、伊朗等地区被多数美国 AI 公司排除在服务范围之外。</p><p><strong>滥用防控</strong>：AI 服务的运营成本远高于流媒体。每一次对话都在消耗 GPU 算力，而 GPU 算力是有限且昂贵的。为了防止大规模滥用——比如通过自动化脚本批量调用、利用免费额度套利——AI 服务商会主动封锁大量数据中心 IP。这个逻辑和流媒体封锁数据中心 IP 类似：正常用户不会从数据中心访问 ChatGPT。</p><p><strong>反欺诈需求</strong>：AI 服务的免费层级（如 ChatGPT 的免费版、Claude 的免费额度）吸引了大量用户。部分用户通过不断注册新账号来突破使用限制，代理和 VPN IP 是这类行为的常见特征。封锁这些 IP 可以有效降低此类滥用。</p><h3 id="变化频繁"><a href="#变化频繁" class="headerlink" title="变化频繁"></a>变化频繁</h3><p>与流媒体平台相比，AI 服务的 IP 策略变化更加频繁。这些公司仍处在快速发展阶段，服务条款、可用地区、IP 检测策略都在不断调整。一个月前还能正常使用的 IP 段，下个月可能就被封锁了；一个之前限制严格的服务，可能突然放宽了地区限制。</p><p>这意味着本文的具体信息有一定的时效性。文中描述的是截至更新日期的情况，实际使用中请以当时的测试结果为准。</p><hr><h2 id="各服务-IP-策略详解"><a href="#各服务-IP-策略详解" class="headerlink" title="各服务 IP 策略详解"></a>各服务 IP 策略详解</h2><h3 id="ChatGPT-OpenAI"><a href="#ChatGPT-OpenAI" class="headerlink" title="ChatGPT (OpenAI)"></a>ChatGPT (OpenAI)</h3><p><a href="https://chat.openai.com/">ChatGPT</a> 是目前对 IP 限制最严格的主流 AI 服务。</p><p><strong>可用地区</strong></p><p>OpenAI 官方公布了一份支持国家列表。截至目前，以下地区<strong>不可使用</strong> ChatGPT：</p><ul><li>中国大陆</li><li>中国香港（SAR）</li><li>俄罗斯</li><li>伊朗</li><li>朝鲜</li><li>叙利亚</li><li>其他受美国制裁的国家&#x2F;地区</li></ul><p>注意香港被明确列入不可用地区，这是很多用户踩坑的点——不要以为香港节点就能用 ChatGPT。</p><p><strong>IP 限制策略</strong></p><p>OpenAI 对 IP 类型的检测比大多数流媒体平台更加激进：</p><ul><li><strong>大规模封锁数据中心 IP</strong>：AWS、GCP、Azure、Vultr、DigitalOcean、BandwagonHost 等主流云服务商的 IP 段被广泛封锁。这不是逐个 IP 封锁，而是对整个 ASN 或 IP 段进行批量标记。</li><li><strong>共享代理 IP 高危</strong>：被大量用户同时使用的代理出口 IP 会被检测并封锁。这就是为什么很多机场的节点能看 Netflix 但用不了 ChatGPT——太多人通过同一个 IP 访问 ChatGPT，触发了 OpenAI 的异常检测。</li><li><strong>IP 信誉评分机制</strong>：OpenAI 使用的 IP 检测系统会综合评估 IP 的类型、历史行为、并发访问量等多个维度。即使一个 IP 没有被明确列入黑名单，低信誉分也可能导致频繁的人机验证或直接拒绝访问。</li></ul><p><strong>常见报错</strong></p><p>使用不合规 IP 访问 ChatGPT 时，你可能会遇到以下提示：</p><ul><li>“Access denied” 或 “You do not have access to chat.openai.com”</li><li>反复出现 Cloudflare 人机验证，验证通过后仍然无法访问</li><li>登录后被强制登出，页面显示服务在你的地区不可用</li><li>更严重的情况：账号被标记甚至封禁</li></ul><p>最后一种情况虽然不常见，但确实存在。OpenAI 的条款明确禁止从不支持的地区访问服务，如果系统检测到你的账号长期从受限地区登录，理论上有权封禁账号。</p><p><strong>网页版 vs API</strong></p><p>这是一个关键区别：<strong>ChatGPT 网页版和 OpenAI API 的 IP 限制程度不同。</strong></p><p>ChatGPT 网页版（chat.openai.com &#x2F; chatgpt.com）的限制最严格，因为它直接面向终端用户，是滥用的重灾区。OpenAI 在网页版前面部署了 Cloudflare 的防护层，对 IP 类型和地区的检测都很严格。</p><p>OpenAI API 的限制则相对宽松。API 的计费模式是按量付费，用户已经通过信用卡验证了身份，滥用的经济动机较低。因此 API 对数据中心 IP 的封锁力度明显弱于网页版。很多在网页版被封锁的 IP，通过 API 仍然可以正常调用。</p><p>这意味着如果你的主要需求是使用 ChatGPT 的能力（而非必须使用网页界面），通过 API 接入可以绕过大部分 IP 限制。市面上有不少基于 OpenAI API 的第三方客户端，它们的可用性通常优于直接访问 ChatGPT 网页版。</p><p><strong>推荐地区与节点类型</strong></p><ul><li>美国、日本、新加坡、台湾地区、英国的原生 IP 节点可用性最好</li><li>部分干净的数据中心 IP 仍然可用，但比例在持续下降</li><li>机场中标注”ChatGPT 可用”或”AI 解锁”的节点通常经过专门测试</li></ul><p><strong>付费订阅注意事项</strong></p><p>ChatGPT Plus &#x2F; Pro 订阅需要绑定支付方式。OpenAI 接受的支付方式有地区限制，中国大陆发行的信用卡通常无法使用。常见的解决方案包括使用虚拟信用卡服务（如 WildCard、Depay 等）或使用支持地区发行的实体信用卡。</p><h3 id="Claude-Anthropic"><a href="#Claude-Anthropic" class="headerlink" title="Claude (Anthropic)"></a>Claude (Anthropic)</h3><p><a href="https://claude.ai/">Claude</a> 的 IP 限制策略目前比 ChatGPT 宽松不少，但服务的可用地区本身比较有限。</p><p><strong>可用地区</strong></p><p>Anthropic 在逐步扩展 Claude 的可用地区，但截至目前，claude.ai 网页版的正式可用地区仍然集中在以下区域：</p><ul><li>美国</li><li>英国</li><li>部分欧洲国家</li><li>日本</li><li>澳大利亚</li><li>其他逐步扩展中的地区</li></ul><p>中国大陆不在支持地区之列。但与 OpenAI 不同的是，Anthropic 对 IP 类型的检测并不算严格。</p><p><strong>IP 限制策略</strong></p><ul><li><strong>数据中心 IP 容忍度较高</strong>：相比 ChatGPT，Claude 对数据中心 IP 的封锁力度明显较弱。很多在 ChatGPT 上被封锁的数据中心 IP，访问 Claude 仍然正常。这可能与 Anthropic 目前的用户规模和策略侧重有关——公司仍处于扩张阶段，对用户增长的优先级高于严格的 IP 管控。</li><li><strong>地区限制为主</strong>：Claude 的限制更多体现在地区层面而非 IP 类型层面。只要你的 IP 地理位置在支持的国家，不管是住宅 IP 还是数据中心 IP，大概率都能正常使用。</li><li><strong>频率限制</strong>：Claude 免费版有明确的使用量限制。如果同一 IP 的使用量异常偏高，可能触发额外的限制。这种限制更多是防滥用，而非地区封锁。</li></ul><p><strong>网页版 vs API</strong></p><p>Claude API 的可用范围比网页版更广。API 通过 API Key 认证和按量计费，对 IP 的限制进一步降低。在很多地区，即使 claude.ai 网页版无法直接访问，API 调用仍然正常。</p><p>和 OpenAI 类似，如果你主要需要 Claude 的能力，通过 API 接入是更稳定的方案。</p><p><strong>推荐地区与节点类型</strong></p><ul><li>美国、英国节点的可用性最佳</li><li>日本节点通常也可以正常使用</li><li>数据中心 IP 在多数情况下可用，选择范围比 ChatGPT 宽很多</li></ul><p><strong>付费订阅</strong></p><p>Claude Pro 订阅同样需要绑定国际信用卡。支持的支付方式与 OpenAI 类似，中国大陆发行的卡一般不可用，需要通过虚拟信用卡或海外卡解决。</p><h3 id="Google-Gemini"><a href="#Google-Gemini" class="headerlink" title="Google Gemini"></a>Google Gemini</h3><p>Gemini 是三大主流 AI 服务中访问限制最宽松的。</p><p><strong>可用地区</strong></p><p>Gemini 在大多数 Google 服务可用的国家和地区都可以访问。Google 的基础设施覆盖面极广，对 IP 管控的经验也最丰富——但这种经验被用来提供更好的服务覆盖，而非更严格的限制。</p><p>中国大陆由于 Google 服务本身被屏蔽，自然无法直接访问 Gemini。但这是 GFW 层面的封锁，而非 Google 自身的地区限制。只要你能访问 Google，基本就能使用 Gemini。</p><p><strong>IP 限制策略</strong></p><ul><li><strong>对 IP 类型不敏感</strong>：Gemini 对数据中心 IP 的封锁力度最低。Google 自身就是全球最大的云服务商之一（GCP），对来自数据中心的流量有更高的容忍度。</li><li><strong>依赖 Google 账号体系</strong>：Gemini 的访问控制更多依赖 Google 账号本身，而非 IP 地址。只要你有一个正常的 Google 账号，从大多数 IP 都可以正常使用 Gemini。</li><li><strong>Gemini Advanced 可能有额外限制</strong>：付费版的 Gemini Advanced 在某些地区可能暂未上线，但这更多是产品推广节奏的问题，而非 IP 封锁。</li></ul><p><strong>推荐地区与节点类型</strong></p><ul><li>几乎任何能访问 Google 的节点都可以使用 Gemini</li><li>美国、日本、新加坡、台湾地区等节点均可</li><li>数据中心 IP 通常不会遇到问题</li></ul><p><strong>付费订阅</strong></p><p>Gemini Advanced（Google One AI Premium）的订阅通过 Google One 平台完成。Google 的支付体系比 OpenAI 和 Anthropic 更成熟，支持的支付方式也更多。但中国大陆的支付方式仍然不被接受，需要使用外区 Google 账号配合国际支付方式。</p><h3 id="其他-AI-服务"><a href="#其他-AI-服务" class="headerlink" title="其他 AI 服务"></a>其他 AI 服务</h3><p><strong>Midjourney</strong></p><p>Midjourney 通过 Discord 平台提供服务（同时也有独立网页版）。Discord 本身在中国大陆被屏蔽，但只要你能访问 Discord，Midjourney 的使用基本不会遇到 IP 相关的限制。Discord 对 IP 类型不敏感，数据中心 IP 正常使用。</p><p><strong>Microsoft Copilot &#x2F; Bing AI</strong></p><p>作为微软的产品，Copilot 在全球大部分地区可用，包括中国大陆（通过 bing.com 访问）。IP 限制极少，可能是主流 AI 服务中最容易访问的。但部分高级功能可能有地区差异。</p><p><strong>Perplexity</strong></p><p>Perplexity 的可访问性介于 ChatGPT 和 Gemini 之间。对数据中心 IP 有一定的限制，但远不如 ChatGPT 严格。美国、日本等地区的节点通常可以正常使用。</p><p><strong>Suno &#x2F; Udio（AI 音乐生成）</strong></p><p>这类垂直领域的 AI 服务通常限制较少，但各自有不同的策略，需要逐个测试。一般来说，能访问 ChatGPT 的节点也能访问这些服务。</p><hr><h2 id="对比表"><a href="#对比表" class="headerlink" title="对比表"></a>对比表</h2><table><thead><tr><th>服务</th><th>封锁力度</th><th>推荐地区</th><th>数据中心 IP 可用性</th><th>API 限制</th><th>注册难度</th></tr></thead><tbody><tr><td>ChatGPT 网页版</td><td>⭐⭐⭐⭐</td><td>US &#x2F; JP &#x2F; SG &#x2F; TW</td><td>差</td><td>—</td><td>需海外手机号</td></tr><tr><td>ChatGPT API</td><td>⭐⭐</td><td>广泛</td><td>中等</td><td>宽松</td><td>需国际支付方式</td></tr><tr><td>Claude 网页版</td><td>⭐⭐⭐</td><td>US &#x2F; UK &#x2F; JP</td><td>中等</td><td>—</td><td>需海外手机号</td></tr><tr><td>Claude API</td><td>⭐⭐</td><td>广泛</td><td>较好</td><td>宽松</td><td>需国际支付方式</td></tr><tr><td>Gemini</td><td>⭐⭐</td><td>广泛</td><td>较好</td><td>宽松</td><td>需 Google 账号</td></tr><tr><td>Midjourney</td><td>⭐</td><td>N&#x2F;A（走 Discord）</td><td>好</td><td>N&#x2F;A</td><td>Discord 账号即可</td></tr><tr><td>Copilot</td><td>⭐</td><td>全球</td><td>好</td><td>宽松</td><td>微软账号即可</td></tr><tr><td>Perplexity</td><td>⭐⭐</td><td>US &#x2F; JP</td><td>中等</td><td>宽松</td><td>邮箱即可</td></tr></tbody></table><p>封锁力度说明：⭐ 越多表示越严格。⭐ &#x3D; 几乎无限制，⭐⭐⭐⭐ &#x3D; 主动封锁数据中心 IP 且限制地区。</p><hr><h2 id="实用建议"><a href="#实用建议" class="headerlink" title="实用建议"></a>实用建议</h2><h3 id="节点选择策略"><a href="#节点选择策略" class="headerlink" title="节点选择策略"></a>节点选择策略</h3><p>不同 AI 服务对节点的要求不同，以下是针对性的选择建议：</p><p><strong>ChatGPT 用户</strong></p><p>ChatGPT 对节点质量的要求最高。优先选择以下类型的节点：</p><ul><li>美国、日本原生 IP 节点：可用性最好，被封锁概率最低</li><li>新加坡、台湾地区节点：可用性较好，延迟对亚洲用户更友好</li><li>避免使用香港节点：香港在 OpenAI 的封锁名单中，使用香港 IP 访问可能导致账号被标记</li><li>避免使用热门共享节点：如果一个节点有几千人同时使用，该出口 IP 大概率已被 OpenAI 标记</li></ul><p><strong>Claude 用户</strong></p><p>Claude 的要求相对宽松：</p><ul><li>美国、英国节点是首选</li><li>日本节点通常可用</li><li>数据中心 IP 在大多数情况下不会遇到问题</li><li>选择范围比 ChatGPT 大很多，不需要刻意寻找原生 IP 节点</li></ul><p><strong>多 AI 服务用户</strong></p><p>如果你同时使用多个 AI 服务，建议在代理客户端中创建一个专门的”AI”策略组。将所有 AI 服务的域名指向这个策略组，选择一个质量较高的节点作为默认出口。这样既保证了 AI 服务的可用性，又不会影响其他流量的路由。</p><h3 id="代理规则配置"><a href="#代理规则配置" class="headerlink" title="代理规则配置"></a>代理规则配置</h3><p>在 Clash（<a href="https://github.com/MetaCubeX/mihomo">mihomo</a>）配置中，为 AI 服务创建专门的分流规则：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># AI 服务分流规则</span></span><br><span class="line"><span class="attr">rules:</span></span><br><span class="line">  <span class="comment"># OpenAI / ChatGPT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,openai.com,AI</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,chatgpt.com,AI</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,oaistatic.com,AI</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,oaiusercontent.com,AI</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># Anthropic / Claude</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,anthropic.com,AI</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,claude.ai,AI</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># Google Gemini</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,gemini.google.com,AI</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,bard.google.com,AI</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,aistudio.google.com,AI</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># Midjourney</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,midjourney.com,AI</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># Perplexity</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,perplexity.ai,AI</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># Suno</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,suno.com,AI</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># 通用 AI 相关</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,openrouter.ai,AI</span></span><br></pre></td></tr></table></figure><p>如果使用 rule-provider，也可以将这些规则整理为一个独立的规则集文件，方便维护和更新。</p><p>对于 Sing-box 用户，对应的路由规则写法不同（使用 JSON 格式），但逻辑一致——将 AI 服务的域名指向专门的出站节点或策略组。</p><h3 id="账号注册建议"><a href="#账号注册建议" class="headerlink" title="账号注册建议"></a>账号注册建议</h3><p>AI 服务的账号注册环节同样需要注意 IP 问题：</p><p><strong>注册时使用干净 IP</strong></p><p>注册新账号时，尽量使用原生 IP 或干净的住宅 IP。原因是这些平台在注册阶段的 IP 检测往往比日常使用时更严格——注册是滥用者的必经之路，平台会在这个环节设置更高的门槛。</p><p>如果你使用一个被大量其他用户注册过的共享代理 IP，注册过程中可能会遇到更多的验证步骤，甚至直接被拒绝。</p><p><strong>手机号验证</strong></p><p>ChatGPT 和 Claude 的注册都需要手机号验证。中国大陆的手机号（+86）在这些平台通常不被接受。常见的解决方案：</p><ul><li>使用海外实体手机号（如果你有的话）</li><li>使用接码平台获取临时海外手机号（注意选择可靠的平台，避免号码被大量复用导致注册失败）</li><li>使用 Google Voice 等虚拟号码服务（部分平台可能不接受虚拟号码）</li></ul><p><strong>支付方式</strong></p><p>ChatGPT Plus、Claude Pro 等付费订阅需要国际支付方式。解决方案包括：</p><ul><li>虚拟信用卡服务：如 WildCard 等平台提供针对 AI 服务订阅优化的虚拟卡</li><li>海外实体信用卡：如果你有海外银行账户</li><li>Apple ID 余额：部分 AI 服务的 iOS 应用支持通过 App Store 订阅，可以使用外区 Apple ID 配合礼品卡充值</li></ul><p><strong>注册后的注意事项</strong></p><ul><li>不要频繁切换登录地区。今天从美国登录，明天从日本登录，后天从新加坡登录——这种模式在 AI 平台的安全系统看来非常可疑，可能触发安全审查甚至账号锁定</li><li>选定一个地区后尽量保持一致，偶尔切换问题不大，但频繁跳转风险较高</li><li>正常使用的情况下（不是大规模自动化调用），通过代理访问通常不会导致封号。但风险始终存在，因为它在技术上违反了这些服务的使用条款</li></ul><hr><h2 id="常见坑与避坑指南"><a href="#常见坑与避坑指南" class="headerlink" title="常见坑与避坑指南"></a>常见坑与避坑指南</h2><h3 id="坑一：香港节点与-ChatGPT"><a href="#坑一：香港节点与-ChatGPT" class="headerlink" title="坑一：香港节点与 ChatGPT"></a>坑一：香港节点与 ChatGPT</h3><p>这是最常见的坑之一。很多用户想当然地认为香港节点是访问海外服务的最佳选择——延迟低、速度快、带宽充足。但 OpenAI 明确将香港列为不支持的地区。使用香港 IP 访问 ChatGPT 不仅会被拒绝，还可能导致账号被标记。</p><p>如果你的机场默认节点是香港，务必为 ChatGPT 相关域名单独配置路由规则，将流量导向美国、日本等支持地区的节点。</p><h3 id="坑二：Netflix-能解锁不代表-ChatGPT-能用"><a href="#坑二：Netflix-能解锁不代表-ChatGPT-能用" class="headerlink" title="坑二：Netflix 能解锁不代表 ChatGPT 能用"></a>坑二：Netflix 能解锁不代表 ChatGPT 能用</h3><p>流媒体解锁和 AI 服务解锁使用不同的 IP 检测数据库和策略。Netflix 可能使用 MaxMind 的数据库来判断 IP 类型，而 OpenAI 可能使用另一套检测系统（包括但不限于 ipinfo.io、IPQualityScore 等）。</p><p>一个 IP 在 MaxMind 中被标记为住宅 IP（解锁 Netflix），但在 ipinfo.io 中被标记为数据中心 IP（无法使用 ChatGPT）——这种不一致完全可能发生。</p><p>所以不要用”能看 Netflix”来推断”能用 ChatGPT”，这两件事需要分别测试。</p><h3 id="坑三：频繁切换节点"><a href="#坑三：频繁切换节点" class="headerlink" title="坑三：频繁切换节点"></a>坑三：频繁切换节点</h3><p>很多代理客户端支持自动切换节点（如延迟最低自动选择、负载均衡等）。对于普通上网来说这很方便，但对 AI 服务来说可能带来问题。</p><p>如果你的客户端在一次对话过程中自动切换了节点——你的 IP 地址在会话中间突然从美国变成了日本——AI 平台的安全系统可能判定这是异常行为。轻则触发重新验证，重则导致会话中断。</p><p>建议为 AI 服务使用固定节点，而不是自动切换的策略组。或者至少将自动切换的范围限制在同一国家的节点之间。</p><h3 id="坑四：浏览器指纹"><a href="#坑四：浏览器指纹" class="headerlink" title="坑四：浏览器指纹"></a>坑四：浏览器指纹</h3><p>IP 地址不是 AI 平台检测的唯一维度。浏览器指纹——包括 User-Agent、屏幕分辨率、时区、语言设置、已安装的插件等——也是判断用户真实性的重要参考。</p><p>如果你的 IP 显示在美国，但浏览器的时区设置是 UTC+8（中国标准时间），语言是 zh-CN，这种不一致可能引起平台的怀疑。</p><p>建议：</p><ul><li>使用无痕&#x2F;隐私模式访问 AI 服务</li><li>或使用独立的浏览器配置文件（Profile），将语言和时区设置与节点所在地区匹配</li><li>避免在同一浏览器配置文件中混用不同地区的代理</li></ul><h3 id="坑五：免费节点的风险"><a href="#坑五：免费节点的风险" class="headerlink" title="坑五：免费节点的风险"></a>坑五：免费节点的风险</h3><p>免费代理节点（无论是免费机场还是公开的节点分享）在访问 AI 服务时问题尤其严重。这些节点通常被大量用户共享，出口 IP 早已被各大 AI 平台标记。不仅 ChatGPT 用不了，还可能因为节点提供者的监控导致账号信息泄露。</p><p>对于 AI 服务的访问，使用付费、有信誉的代理服务是基本要求。</p><hr><h2 id="长期方案"><a href="#长期方案" class="headerlink" title="长期方案"></a>长期方案</h2><h3 id="API-优先策略"><a href="#API-优先策略" class="headerlink" title="API 优先策略"></a>API 优先策略</h3><p>如果你是 AI 工具的重度用户，强烈建议考虑 API 接入方案。</p><p><strong>为什么 API 更稳定？</strong></p><ul><li>IP 限制比网页版宽松：API 用户已经通过付费验证了身份，平台对 API 流量的 IP 管控明显更松</li><li>不受前端变化影响：网页版的 Cloudflare 防护、验证码机制经常变化，API 调用不受这些影响</li><li>可以自由选择客户端：不必依赖官方网页界面，可以使用本地客户端、终端工具、或自建前端</li></ul><p><strong>API 接入方式</strong></p><ul><li>直接使用 OpenAI &#x2F; Anthropic &#x2F; Google AI 的官方 API</li><li>通过 OpenRouter 等 API 聚合服务统一调用多个模型</li><li>使用 ChatBox、LobeChat、NextChat 等开源客户端连接 API</li></ul><p>API 的缺点是需要按量付费，没有”包月无限使用”的选项（不像 ChatGPT Plus 月付固定金额）。但对于普通使用量的用户来说，API 的月费用通常低于 Plus 订阅费。</p><h3 id="专门的-AI-解锁节点"><a href="#专门的-AI-解锁节点" class="headerlink" title="专门的 AI 解锁节点"></a>专门的 AI 解锁节点</h3><p>越来越多的代理服务提供商意识到 AI 服务解锁的需求，开始提供专门的”AI 解锁”节点组。这些节点通常具备以下特征：</p><ul><li>使用经过 AI 服务可用性测试的 IP</li><li>用户密度较低（减少因共享 IP 被封的风险）</li><li>定期检测和更换被封锁的 IP</li></ul><p>如果你的机场提供此类节点，在代理规则中将 AI 服务域名指向这些专用节点是最省心的方案。</p><h3 id="自建方案"><a href="#自建方案" class="headerlink" title="自建方案"></a>自建方案</h3><p>如果你有技术能力并且对可控性有更高要求，自建代理节点来访问 AI 服务也是可行的：</p><ul><li>选择服务商时关注 IP 质量，而非只看价格和带宽。部分小众 VPS 供应商的 IP 尚未被大规模标记</li><li>定期检测你的 IP 是否仍然可用。可以通过 ipinfo.io 查询 IP 类型，或直接访问 AI 服务进行测试</li><li>如果你的 VPS IP 被封锁，联系供应商更换 IP 或更换供应商</li></ul><p>自建的优势在于独享 IP、没有其他用户的滥用行为影响你的 IP 信誉。劣势在于成本较高、维护需要一定的技术能力、且 IP 被封后需要自行解决。</p><hr><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="Q-为什么我的节点能看-Netflix-但不能用-ChatGPT？"><a href="#Q-为什么我的节点能看-Netflix-但不能用-ChatGPT？" class="headerlink" title="Q: 为什么我的节点能看 Netflix 但不能用 ChatGPT？"></a>Q: 为什么我的节点能看 Netflix 但不能用 ChatGPT？</h3><p>不同服务使用不同的 IP 检测系统和数据库。Netflix 的 IP 检测主要依赖 MaxMind 等地理位置数据库，而 OpenAI 可能使用 ipinfo.io、IPQualityScore 等更侧重于 IP 类型识别的服务。一个 IP 在不同数据库中的分类可能不一致——在 A 数据库中被标记为住宅 IP，在 B 数据库中被标记为数据中心 IP。因此，流媒体解锁能力和 AI 服务解锁能力需要分别测试，不能互相推断。</p><h3 id="Q-用代理访问-ChatGPT-会被封号吗？"><a href="#Q-用代理访问-ChatGPT-会被封号吗？" class="headerlink" title="Q: 用代理访问 ChatGPT 会被封号吗？"></a>Q: 用代理访问 ChatGPT 会被封号吗？</h3><p>有风险，但实际概率较低。OpenAI 的服务条款确实限制了从不支持地区的访问，从技术上说，使用代理绕过地区限制违反了条款。但在实际执行中，OpenAI 目前的主要精力集中在封锁 IP 端（阻止访问），而非封禁单个用户账号端。</p><p>在以下条件下，封号风险相对较低：</p><ul><li>使用干净的 IP（非大规模共享的代理 IP）</li><li>不频繁切换登录地区</li><li>正常的个人使用（非自动化批量调用）</li><li>账号有正常的付费记录</li></ul><p>但风险始终存在，这一点需要明确认知。</p><h3 id="Q-API-和网页版的-IP-限制有什么区别？"><a href="#Q-API-和网页版的-IP-限制有什么区别？" class="headerlink" title="Q: API 和网页版的 IP 限制有什么区别？"></a>Q: API 和网页版的 IP 限制有什么区别？</h3><p>API 的 IP 限制通常比网页版宽松得多。具体差异如下：</p><ul><li><strong>OpenAI</strong>：API 不限制访问地区（只限制注册地区和支付方式），对数据中心 IP 的容忍度也比网页版高。很多网页版被封锁的 IP 通过 API 仍可正常调用</li><li><strong>Anthropic</strong>：Claude API 同样比 claude.ai 网页版限制更少，可用地区更广</li><li><strong>Google</strong>：Gemini API（通过 AI Studio 或 Vertex AI）的地区限制与网页版大致相同，因为 Google 的 API 基础设施本身就是全球化的</li></ul><p>如果网页版遇到限制，可以优先尝试 API 接入。</p><h3 id="Q-有免费使用这些-AI-服务的方法吗？"><a href="#Q-有免费使用这些-AI-服务的方法吗？" class="headerlink" title="Q: 有免费使用这些 AI 服务的方法吗？"></a>Q: 有免费使用这些 AI 服务的方法吗？</h3><p>三大主流 AI 服务都提供免费层级：</p><ul><li><strong>ChatGPT</strong>：免费版可使用 GPT-4o mini 模型，有一定的使用频率限制</li><li><strong>Claude</strong>：免费版可使用 Claude Sonnet 模型，有每日使用量限制</li><li><strong>Gemini</strong>：免费版功能较为完整，使用限制相对宽松</li></ul><p>核心问题不在于服务本身是否免费，而在于访问通道是否畅通。上述免费层级在支持的地区可以直接使用，关键是解决从受限地区访问的问题。</p><h3 id="Q-哪个-AI-服务最容易访问？"><a href="#Q-哪个-AI-服务最容易访问？" class="headerlink" title="Q: 哪个 AI 服务最容易访问？"></a>Q: 哪个 AI 服务最容易访问？</h3><p>从 IP 限制的角度排序（从易到难）：</p><ol><li><strong>Gemini</strong> —— 最容易。只要能访问 Google，基本就能用 Gemini。对 IP 类型不敏感</li><li><strong>Copilot</strong> —— 很容易。微软服务全球可用性好，中国大陆可直接访问部分功能</li><li><strong>Claude</strong> —— 中等。地区限制有但 IP 类型检测不严格</li><li><strong>Perplexity</strong> —— 中等。有一定限制但不算严格</li><li><strong>ChatGPT</strong> —— 最难。地区限制 + IP 类型检测双重封锁</li></ol><p>如果你只是想尝试 AI 工具，从 Gemini 或 Copilot 开始是最省事的选择。</p><h3 id="Q-AI-服务的-IP-策略未来会怎么变？"><a href="#Q-AI-服务的-IP-策略未来会怎么变？" class="headerlink" title="Q: AI 服务的 IP 策略未来会怎么变？"></a>Q: AI 服务的 IP 策略未来会怎么变？</h3><p>难以准确预测，但可以观察到几个趋势：</p><ul><li><strong>可用地区逐步扩展</strong>：OpenAI 和 Anthropic 都在逐步开放更多地区的访问。随着这些公司的国际化战略推进，限制可能会逐步放宽</li><li><strong>对数据中心 IP 的封锁可能持续收紧</strong>：随着 AI 服务用户量增长，滥用问题只会更加严重，对数据中心 IP 的封锁力度预计会持续加强</li><li><strong>API 可能保持相对宽松</strong>：API 的按量付费模式天然减少了滥用动机，预计 API 的 IP 限制不会大幅收紧</li><li><strong>可能出现新的检测手段</strong>：除了 IP 类型检测之外，行为分析、设备指纹等更高级的检测手段可能被引入</li></ul><p>总体而言，通过高质量的代理节点访问 AI 服务在可预见的未来仍然是可行的，但对节点质量的要求会越来越高。</p>]]></content>
      
      
      <categories>
          
          <category> 流媒体与解锁 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> ChatGPT </tag>
            
            <tag> Claude </tag>
            
            <tag> Gemini </tag>
            
            <tag> AI </tag>
            
            <tag> 解锁 </tag>
            
            <tag> IP策略 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>BGP 与 Anycast：为什么有些节点全球都快</title>
      <link href="/posts/bgp-anycast/"/>
      <url>/posts/bgp-anycast/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：你可能有过这样的体验——同样的目标网站，换一个代理节点速度天差地别。这背后的原因往往不是服务器配置的差异，而是网络路由的差异。BGP（边界网关协议）决定了互联网流量的传输路径，Anycast（任播）让同一个 IP 地址在全球多个位置同时服务。理解这两个概念，能帮助你理解为什么某些线路特别快，以及如何挑选更好的节点。</p></blockquote><h2 id="互联网是怎么传输数据的"><a href="#互联网是怎么传输数据的" class="headerlink" title="互联网是怎么传输数据的"></a>互联网是怎么传输数据的</h2><p>在了解 BGP 之前，先简单回顾一下互联网的基本结构。</p><p>互联网不是一个统一的网络，而是由成千上万个<strong>独立网络</strong>互相连接组成的。每个独立网络被称为一个 <strong>AS（Autonomous System，自治系统）</strong>，每个 AS 都有一个唯一的编号（ASN）。</p><p>举几个例子：</p><table><thead><tr><th>ASN</th><th>运营商</th><th>说明</th></tr></thead><tbody><tr><td>AS4134</td><td>中国电信 163</td><td>中国电信的普通骨干网</td></tr><tr><td>AS4809</td><td>中国电信 CN2</td><td>中国电信的精品网络</td></tr><tr><td>AS4837</td><td>中国联通</td><td>联通骨干网</td></tr><tr><td>AS9808</td><td>中国移动</td><td>移动骨干网</td></tr><tr><td>AS13335</td><td>Cloudflare</td><td>CDN 和网络安全服务</td></tr><tr><td>AS15169</td><td>Google</td><td>Google 的网络</td></tr><tr><td>AS32934</td><td>Meta (Facebook)</td><td>Meta 的网络</td></tr></tbody></table><p>当你从北京家中访问一台位于洛杉矶的服务器时，你的数据包不是直飞过去的——它需要在多个 AS 之间”接力传递”。从你的家庭宽带（运营商的接入网）→ 运营商的骨干网 → 国际出口 → 海底光缆 → 美国的骨干网 → 目标服务器所在的网络。</p><p>这个”接力”过程中，数据包在每个 AS 之间的”传递方式”就是由 <strong>BGP</strong> 决定的。</p><h2 id="BGP-是什么"><a href="#BGP-是什么" class="headerlink" title="BGP 是什么"></a>BGP 是什么</h2><p>BGP（Border Gateway Protocol，边界网关协议）是互联网的核心路由协议。它的作用简单来说就是：<strong>告诉每个网络，如何到达其他网络</strong>。</p><h3 id="BGP-的工作方式"><a href="#BGP-的工作方式" class="headerlink" title="BGP 的工作方式"></a>BGP 的工作方式</h3><p>每个 AS 通过 BGP 向邻居 AS 宣告（announce）自己管理的 IP 地址范围。这些宣告会在 AS 之间传播，最终形成一张全球性的路由表。</p><p>假设你在电信网络（AS4134）中，要访问 Google（AS15169）的服务器：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">你的电脑 → AS4134 (中国电信) → AS ??? → AS ??? → AS15169 (Google)</span><br></pre></td></tr></table></figure><p>中间经过哪些 AS，由 BGP 决定。BGP 会根据以下因素选择路径：</p><ol><li><strong>AS 路径长度</strong>：经过的 AS 数量越少，路径通常越短</li><li><strong>路由策略</strong>：运营商会配置各种策略偏好，比如优先使用成本更低的路径</li><li><strong>商业关系</strong>：AS 之间存在不同的商业关系（对等互联、上游购买、下游客户），这些关系影响路由选择</li><li><strong>网络拥塞</strong>：某些路径拥塞时，流量可能被引导到其他路径</li></ol><h3 id="AS-路径（AS-Path）"><a href="#AS-路径（AS-Path）" class="headerlink" title="AS 路径（AS Path）"></a>AS 路径（AS Path）</h3><p>AS Path 是 BGP 中最重要的属性之一。它记录了数据包到达目标需要经过的所有 AS。例如：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">AS4134 → AS4837 → AS6939 → AS15169</span><br></pre></td></tr></table></figure><p>这条路径表示：从中国电信出发，经过中国联通（可能在某个交换中心互联），然后到 Hurricane Electric（HE，美国的一个大型网络），最后到 Google。</p><p>AS Path 越短，通常延迟越低。但这不是绝对的——一条经过 3 个 AS 但物理距离很长的路径，可能比一条经过 5 个 AS 但物理距离短的路径更慢。</p><h3 id="为什么-BGP-路由对代理很重要"><a href="#为什么-BGP-路由对代理很重要" class="headerlink" title="为什么 BGP 路由对代理很重要"></a>为什么 BGP 路由对代理很重要</h3><p>BGP 路由直接决定了你使用代理时的实际网络体验：</p><p><strong>延迟（Latency）</strong>：好的路由意味着更少的中间跳转和更短的物理距离，延迟更低。</p><p><strong>带宽（Throughput）</strong>：不同路径的可用带宽不同。拥挤的路径会降低实际吞吐量。</p><p><strong>稳定性（Stability）</strong>：频繁变化的路由会导致连接不稳定，甚至出现丢包。</p><p><strong>丢包率（Packet Loss）</strong>：某些路径（特别是高峰期的国际出口）丢包率很高。</p><p>一个非常现实的例子：同样是从北京到洛杉矶的 VPS，使用中国电信 163 骨干网（AS4134）的路由可能延迟 200ms+ 且高峰期丢包严重；而使用中国电信 CN2 GIA（AS4809）的路由可能延迟只有 150ms 且几乎不丢包。两台 VPS 可能物理上在同一个数据中心，但网络体验天差地别。</p><h2 id="BGP-优化线路"><a href="#BGP-优化线路" class="headerlink" title="BGP 优化线路"></a>BGP 优化线路</h2><p>在代理领域，”优质线路”通常指的是有 BGP 优化的网络路径。以下是最常见的几种。</p><h3 id="CN2-GIA（全球互联网接入）"><a href="#CN2-GIA（全球互联网接入）" class="headerlink" title="CN2 GIA（全球互联网接入）"></a>CN2 GIA（全球互联网接入）</h3><p>CN2 GIA 是中国电信的高端国际线路，属于 AS4809。它的特点是：</p><ul><li><strong>双向 CN2</strong>：去程和回程都走 CN2 网络，不绕路</li><li><strong>低延迟</strong>：中美之间延迟通常在 130-160ms</li><li><strong>低丢包</strong>：即使在高峰期也能保持极低的丢包率</li><li><strong>价格昂贵</strong>：CN2 GIA 的 VPS 价格远高于普通线路</li></ul><p>CN2 GIA 之所以好，核心原因是它的 BGP 路由经过精心优化——流量走的是电信的精品骨干网，避开了拥挤的 163 骨干网。</p><h3 id="CUII（中国联通精品网）"><a href="#CUII（中国联通精品网）" class="headerlink" title="CUII（中国联通精品网）"></a>CUII（中国联通精品网）</h3><p>AS9929 是中国联通的精品网络（CUII），类似于电信的 CN2 GIA。对联通用户来说，CUII 线路提供了更好的国际出口体验。</p><h3 id="CMI（中国移动国际）"><a href="#CMI（中国移动国际）" class="headerlink" title="CMI（中国移动国际）"></a>CMI（中国移动国际）</h3><p>AS58453 是中国移动的国际出口。CMI 线路在近年来有较大改善，某些目的地的表现甚至优于 CN2。</p><h3 id="如何判断-VPS-使用的线路"><a href="#如何判断-VPS-使用的线路" class="headerlink" title="如何判断 VPS 使用的线路"></a>如何判断 VPS 使用的线路</h3><p>使用 traceroute（或 Windows 上的 tracert）可以查看数据包的路由路径：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">traceroute -I your-server-ip</span><br></pre></td></tr></table></figure><p>或者使用更好用的 <code>mtr</code>（结合了 ping 和 traceroute 的功能）：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">mtr your-server-ip</span><br></pre></td></tr></table></figure><p>在 traceroute 的结果中，关注以下 IP 段可以判断走的是什么线路：</p><table><thead><tr><th>IP 段特征</th><th>线路</th></tr></thead><tbody><tr><td>59.43.x.x</td><td>CN2 (AS4809)</td></tr><tr><td>202.97.x.x</td><td>163 骨干网 (AS4134)</td></tr><tr><td>219.158.x.x</td><td>联通骨干 (AS4837)</td></tr><tr><td>218.105.x.x &#x2F; 223.120.x.x</td><td>移动骨干 (AS9808&#x2F;AS58453)</td></tr></tbody></table><p>如果去程（从你到服务器）走的全是 59.43 开头的 IP，说明你走的是 CN2 线路。</p><h2 id="Anycast-是什么"><a href="#Anycast-是什么" class="headerlink" title="Anycast 是什么"></a>Anycast 是什么</h2><p>理解了 BGP 之后，Anycast 就很好理解了。</p><p>在正常的互联网通信中，一个 IP 地址对应一台服务器——这叫做 <strong>Unicast（单播）</strong>。无论你在世界哪个角落访问这个 IP，数据包都会被路由到同一台服务器。</p><p><strong>Anycast（任播）</strong> 则完全不同：<strong>同一个 IP 地址在全球多个位置同时被宣告</strong>。当你访问一个 Anycast IP 时，BGP 会自动将你的流量路由到离你最近的那个位置。</p><p>用一个比喻来理解：</p><ul><li><strong>Unicast</strong> 像是只有一家总店的餐厅——无论你住在哪里，想吃就得去总店</li><li><strong>Anycast</strong> 像是连锁餐厅——每个城市都有分店，你自然会去离你最近的那家</li></ul><h3 id="Anycast-的工作原理"><a href="#Anycast-的工作原理" class="headerlink" title="Anycast 的工作原理"></a>Anycast 的工作原理</h3><p>Anycast 的实现依赖于 BGP。假设一个服务在全球 10 个位置部署了服务器，这 10 个位置的路由器都通过 BGP 向外宣告同一段 IP 地址。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">美国西海岸数据中心 → BGP 宣告: 1.2.3.0/24</span><br><span class="line">欧洲法兰克福数据中心 → BGP 宣告: 1.2.3.0/24</span><br><span class="line">亚太新加坡数据中心 → BGP 宣告: 1.2.3.0/24</span><br><span class="line">...</span><br></pre></td></tr></table></figure><p>当北京的用户访问 1.2.3.1 时，BGP 路由系统会发现到 1.2.3.0&#x2F;24 有多条路径，然后选择 AS 路径最短（通常也是物理距离最近）的那条——大概率是新加坡的数据中心。而当纽约的用户访问同一个 IP 时，流量会被路由到美国西海岸的数据中心。</p><p>所有这一切对用户来说是透明的——他们访问的是同一个 IP 地址，但实际响应来自不同的物理服务器。</p><h3 id="Cloudflare：Anycast-的典型案例"><a href="#Cloudflare：Anycast-的典型案例" class="headerlink" title="Cloudflare：Anycast 的典型案例"></a>Cloudflare：Anycast 的典型案例</h3><p><a href="https://www.cloudflare.com/">Cloudflare</a> 是 Anycast 技术的最大规模应用者之一。Cloudflare 在全球 300 多个城市部署了数据中心，所有数据中心都通过 BGP 宣告相同的 IP 地址。</p><p>当你使用 Cloudflare 的 DNS 服务（1.1.1.1）时，你的请求会被自动路由到离你最近的 Cloudflare 数据中心。在中国大陆，这通常是香港、日本或新加坡的节点。</p><p>这就是为什么 Cloudflare 的 DNS 在全球范围内都能提供很低的延迟——不是因为某一台服务器特别快，而是因为在你附近总有一台服务器在响应。</p><h3 id="Anycast-的优势"><a href="#Anycast-的优势" class="headerlink" title="Anycast 的优势"></a>Anycast 的优势</h3><ol><li><strong>低延迟</strong>：用户总是连接到最近的服务器</li><li><strong>高可用</strong>：某个数据中心故障时，流量自动切换到下一个最近的位置</li><li><strong>DDoS 防护</strong>：攻击流量会被分散到全球各个位置，不会集中打击单一服务器</li><li><strong>简单部署</strong>：客户端不需要做任何特殊配置，IP 地址始终不变</li></ol><h3 id="Anycast-的局限"><a href="#Anycast-的局限" class="headerlink" title="Anycast 的局限"></a>Anycast 的局限</h3><ol><li><strong>TCP 长连接不友好</strong>：如果 BGP 路由发生变化，可能导致已建立的 TCP 连接断开（因为流量被路由到了不同的服务器）</li><li><strong>无法精确控制</strong>：你不能选择连接到哪个位置，完全由 BGP 路由决定</li><li><strong>部署成本高</strong>：需要在全球多个位置部署服务器，且需要自己的 AS 和 IP 段</li></ol><h2 id="代理服务如何利用-BGP-和-Anycast"><a href="#代理服务如何利用-BGP-和-Anycast" class="headerlink" title="代理服务如何利用 BGP 和 Anycast"></a>代理服务如何利用 BGP 和 Anycast</h2><p>理解了 BGP 和 Anycast 之后，让我们看看代理服务是如何利用这些概念的。</p><h3 id="BGP-优化：选择更好的上游"><a href="#BGP-优化：选择更好的上游" class="headerlink" title="BGP 优化：选择更好的上游"></a>BGP 优化：选择更好的上游</h3><p>高质量的 VPS 提供商会通过 BGP 优化来提供更好的网络路径。具体做法包括：</p><p><strong>多线接入（Multi-homed）</strong>：VPS 连接多个上游网络提供商，通过 BGP 选择最优路径。例如，一台位于洛杉矶的 VPS 可能同时接入了 Cogent、NTT 和 PCCW 三家上游，对于来自中国的流量，BGP 会选择经过 PCCW（太平洋方向优化）的路径。</p><p><strong>BGP 社区（BGP Communities）</strong>：运营商通过 BGP 社区属性来标记和控制路由策略。高端 VPS 提供商可能提供 BGP 社区控制功能，允许用户自定义路由策略。</p><p><strong>直接互联（Peering）</strong>：在互联网交换点（IXP）直接互联，减少中间跳转。这是为什么某些 VPS 在特定地区表现特别好的原因——它们与当地的运营商有直接互联关系。</p><h3 id="中转-IPLC-的-BGP-原理"><a href="#中转-IPLC-的-BGP-原理" class="headerlink" title="中转&#x2F;IPLC 的 BGP 原理"></a>中转&#x2F;IPLC 的 BGP 原理</h3><p>中转节点（relay）的核心思路是利用 BGP 路由优化来改善整体路径。一般的工作方式是：</p><ol><li>在中国境内部署一台服务器（入口节点），连接到优质骨干网</li><li>入口节点通过优化的线路（如 CN2 GIA、IPLC 专线等）连接到海外服务器（出口节点）</li><li>用户连接入口节点，流量通过优化路径到达出口节点，再访问目标网站</li></ol><p>这实际上是在 BGP 无法优化的路径上，通过额外的网络跳转来”绕开”拥塞。</p><h3 id="CDN-与-Anycast-的结合"><a href="#CDN-与-Anycast-的结合" class="headerlink" title="CDN 与 Anycast 的结合"></a>CDN 与 Anycast 的结合</h3><p>一些高端机场服务使用类似 CDN 的架构——在全球多个位置部署入口节点，使用 Anycast 或智能 DNS 将用户引导到最近的入口。这种架构能提供更一致的用户体验，但成本也相应更高。</p><h2 id="如何利用这些知识选择更好的节点"><a href="#如何利用这些知识选择更好的节点" class="headerlink" title="如何利用这些知识选择更好的节点"></a>如何利用这些知识选择更好的节点</h2><h3 id="查看路由路径"><a href="#查看路由路径" class="headerlink" title="查看路由路径"></a>查看路由路径</h3><p>使用 traceroute 或 mtr 查看从你到代理服务器的路由路径。关注以下几点：</p><ol><li><strong>经过的 AS 数量</strong>：越少通常越好</li><li><strong>是否走优质线路</strong>：查看是否经过 CN2（59.43.x.x）等优质骨干网</li><li><strong>是否有明显绕路</strong>：比如从北京到东京，如果路由先绕到美国再回来，那就是绕路了</li><li><strong>高延迟跳</strong>：如果某一跳的延迟突然增加了 100ms 以上，说明那里是瓶颈</li></ol><h3 id="选择合适的机房位置"><a href="#选择合适的机房位置" class="headerlink" title="选择合适的机房位置"></a>选择合适的机房位置</h3><p>对于中国大陆用户，以下机房位置通常有较好的网络表现：</p><ul><li><strong>香港</strong>：物理距离近，延迟低，是最受欢迎的节点位置</li><li><strong>日本东京</strong>：延迟适中，与中国运营商的互联质量通常不错</li><li><strong>新加坡</strong>：对南方用户较友好</li><li><strong>美国西海岸（洛杉矶&#x2F;圣何塞）</strong>：CN2 GIA 线路表现优秀</li><li><strong>韩国首尔</strong>：延迟低，但带宽通常较小</li></ul><h3 id="关注线路标识"><a href="#关注线路标识" class="headerlink" title="关注线路标识"></a>关注线路标识</h3><p>机场和 VPS 提供商通常会标注线路类型：</p><ul><li><strong>CN2 GIA</strong>：最优质的电信国际线路，三网优化</li><li><strong>CN2 GT</strong>：CN2 的普通版，去程走 CN2 但回程可能走 163</li><li><strong>BGP 优化</strong>：多线接入，自动选择最优路径</li><li><strong>IPLC&#x2F;IEPL</strong>：国际专线，不经过公共互联网，最稳定但最贵</li><li><strong>普通线路</strong>：走运营商默认的 BGP 路由，高峰期可能拥塞</li></ul><h3 id="理解”三网优化”"><a href="#理解”三网优化”" class="headerlink" title="理解”三网优化”"></a>理解”三网优化”</h3><p>“三网优化”指的是对中国电信、联通、移动三大运营商都进行了路由优化。普通的 VPS 可能只对某一家运营商的路由较好，而三网优化的节点通过 BGP 多线接入，保证三家运营商的用户都有不错的体验。</p><h2 id="用-traceroute-读懂路由"><a href="#用-traceroute-读懂路由" class="headerlink" title="用 traceroute 读懂路由"></a>用 traceroute 读懂路由</h2><p>traceroute 是诊断网络路径最重要的工具。以下是一个简化的阅读指南。</p><h3 id="基本用法"><a href="#基本用法" class="headerlink" title="基本用法"></a>基本用法</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Linux / macOS</span></span><br><span class="line">traceroute -I your-server-ip</span><br><span class="line"></span><br><span class="line"><span class="comment"># Windows</span></span><br><span class="line">tracert your-server-ip</span><br><span class="line"></span><br><span class="line"><span class="comment"># 更好的选择：mtr（需要安装）</span></span><br><span class="line">mtr your-server-ip</span><br></pre></td></tr></table></figure><h3 id="解读输出"><a href="#解读输出" class="headerlink" title="解读输出"></a>解读输出</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">1  192.168.1.1     1.2ms   ← 你的路由器</span><br><span class="line">2  100.64.0.1      5.3ms   ← 运营商接入网</span><br><span class="line">3  202.97.33.1    10.2ms   ← 163 骨干网（电信）</span><br><span class="line">4  202.97.90.1    35.6ms   ← 163 骨干网国际出口</span><br><span class="line">5  218.30.54.1   160.2ms   ← 跨太平洋海底光缆</span><br><span class="line">6  69.174.14.1   155.8ms   ← 美国骨干网</span><br><span class="line">7  104.16.88.1   158.3ms   ← 目标服务器</span><br></pre></td></tr></table></figure><p>关注点：</p><ul><li><strong>第 3-4 跳</strong>：如果 IP 是 59.43.x.x 说明走的 CN2，202.97.x.x 说明走的 163 普通骨干</li><li><strong>延迟突增的位置</strong>：第 4→5 跳延迟从 35ms 跳到 160ms，这是跨洋传输造成的，属于正常</li><li><strong>星号（*）</strong>：表示该跳未响应 ICMP，不一定是问题——很多路由器配置为不回应 traceroute</li><li><strong>延迟波动</strong>：如果某一跳的延迟在多次测试中波动很大，说明该节点可能拥塞</li></ul><h2 id="常见问题（FAQ）"><a href="#常见问题（FAQ）" class="headerlink" title="常见问题（FAQ）"></a>常见问题（FAQ）</h2><h3 id="Q1：BGP-优化对普通用户有多大影响？"><a href="#Q1：BGP-优化对普通用户有多大影响？" class="headerlink" title="Q1：BGP 优化对普通用户有多大影响？"></a>Q1：BGP 优化对普通用户有多大影响？</h3><p>影响很大。同一台服务器，走 CN2 GIA 和走 163 普通线路的体验可能完全不同。好的 BGP 路由能将延迟降低 30-50%，高峰期丢包率降低 90% 以上。对于代理用户来说，选择 BGP 优化的线路是提升体验最有效的方式之一。</p><h3 id="Q2：为什么我-traceroute-时某些跳显示星号？"><a href="#Q2：为什么我-traceroute-时某些跳显示星号？" class="headerlink" title="Q2：为什么我 traceroute 时某些跳显示星号？"></a>Q2：为什么我 traceroute 时某些跳显示星号？</h3><p>很多路由器配置为不回应 ICMP traceroute 请求（出于安全考虑），这不代表网络有问题。关注起点和终点的延迟即可。</p><h3 id="Q3：Anycast-会导致代理连接不稳定吗？"><a href="#Q3：Anycast-会导致代理连接不稳定吗？" class="headerlink" title="Q3：Anycast 会导致代理连接不稳定吗？"></a>Q3：Anycast 会导致代理连接不稳定吗？</h3><p>理论上存在这种可能——如果 BGP 路由在连接过程中发生变化，TCP 连接可能被路由到不同的服务器导致断开。但在实际使用中，BGP 路由变化不会非常频繁，这种情况比较少见。</p><h3 id="Q4：CN2-GIA-和-IPLC-哪个更好？"><a href="#Q4：CN2-GIA-和-IPLC-哪个更好？" class="headerlink" title="Q4：CN2 GIA 和 IPLC 哪个更好？"></a>Q4：CN2 GIA 和 IPLC 哪个更好？</h3><p>IPLC（国际私有租用线路）是专线，不走公共互联网，理论上最稳定。CN2 GIA 走的仍然是公共网络，但路径经过优化。在大多数情况下 CN2 GIA 已经够用，IPLC 价格贵很多但边际收益有限，适合对延迟和稳定性要求极高的场景。</p><h3 id="Q5：如何知道我当前走的是什么线路？"><a href="#Q5：如何知道我当前走的是什么线路？" class="headerlink" title="Q5：如何知道我当前走的是什么线路？"></a>Q5：如何知道我当前走的是什么线路？</h3><p>使用 mtr 或 traceroute 查看路由路径，根据中间节点的 IP 地址判断走的是哪个运营商的哪条线路。也可以使用 <a href="https://tools.ipip.net/traceroute.php">ipip.net</a> 等在线 traceroute 工具。</p><h3 id="Q6：BGP-路由会随时间变化吗？"><a href="#Q6：BGP-路由会随时间变化吗？" class="headerlink" title="Q6：BGP 路由会随时间变化吗？"></a>Q6：BGP 路由会随时间变化吗？</h3><p>会。BGP 路由受到网络状况、运营商策略等多种因素影响，可能在不同时段走不同的路径。这也是为什么同一个节点在白天和晚上高峰期的速度可能差别很大。</p><h2 id="外部链接"><a href="#外部链接" class="headerlink" title="外部链接"></a>外部链接</h2><ul><li><a href="https://bgp.tools/">bgp.tools</a> — BGP 和 ASN 信息查询</li><li><a href="https://tools.ipip.net/traceroute.php">ipip.net 路由追踪</a> — 在线 traceroute 工具</li><li><a href="https://bgp.he.net/">Hurricane Electric BGP Toolkit</a> — 详细的 BGP 数据</li><li><a href="https://www.peeringdb.com/">PeeringDB</a> — 互联网交换点和对等互联信息</li><li><a href="https://www.cloudflare.com/network/">Cloudflare 网络地图</a> — Anycast 部署示例</li></ul><hr><p><em>理解 BGP 和 Anycast 不需要成为网络工程师，但掌握这些基础知识能帮助你做出更好的节点选择，并理解为什么某些线路的价格差异如此之大。</em></p>]]></content>
      
      
      <categories>
          
          <category> 网络知识 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> BGP </tag>
            
            <tag> Anycast </tag>
            
            <tag> 路由 </tag>
            
            <tag> 网络 </tag>
            
            <tag> CDN </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>看懂机场参数：倍率、流量、限速、在线设备数</title>
      <link href="/posts/airport-parameters/"/>
      <url>/posts/airport-parameters/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：选择机场套餐时，你会看到”月流量 500G”、”倍率 0.5x”、”限速 300Mbps”、”同时在线 3 设备”等参数。这些数字直接影响你的使用体验和实际成本。本文逐一解释每个参数的含义和选择要点。</p></blockquote><hr><h2 id="流量（Traffic-Bandwidth-Quota）"><a href="#流量（Traffic-Bandwidth-Quota）" class="headerlink" title="流量（Traffic &#x2F; Bandwidth Quota）"></a>流量（Traffic &#x2F; Bandwidth Quota）</h2><h3 id="什么是月流量"><a href="#什么是月流量" class="headerlink" title="什么是月流量"></a>什么是月流量</h3><p>月流量是你每个月可以通过代理传输的数据总量，通常以 GB 或 TB 为单位。它在每个计费周期（通常是订阅日当天）重置。</p><p>需要明确的一点：<strong>月流量只计算经过代理的流量</strong>。你的直连流量（比如访问国内网站）走的是你自己的宽带，不消耗机场的配额。代理客户端的分流规则决定了哪些流量走代理、哪些直连——这也是为什么合理的分流配置不仅影响速度，还直接影响流量消耗。</p><p>大部分机场的流量计算方式是<strong>上传+下载合并计算</strong>。也就是说，你从 YouTube 下载了 1GB 的视频数据，实际消耗的流量就是 1GB 左右（上传请求的数据量很小，可以忽略）。少数机场会将上传和下载分开计算，这种情况下实际消耗会略高，但差异不大。</p><h3 id="多少流量够用"><a href="#多少流量够用" class="headerlink" title="多少流量够用"></a>多少流量够用</h3><p>不同使用场景下的月流量消耗差异很大。以下是实际估算值：</p><p><strong>轻度使用（30-50 GB&#x2F;月）</strong>：日常浏览网页、收发邮件、使用社交媒体（Twitter、Telegram、Instagram）。文字和图片为主的内容消耗流量很少，刷一天 Twitter 大概消耗 1-2GB。</p><p><strong>中度使用（100-200 GB&#x2F;月）</strong>：经常观看 YouTube 视频，以 1080p 为主。YouTube 1080p 视频的码率大约在 4-8 Mbps，一小时消耗约 2-4GB。每天看两小时视频，一个月就是 120-240GB。</p><p><strong>重度使用（300-500 GB&#x2F;月）</strong>：高频观看 4K 流媒体内容（Netflix、Disney+等）。4K 视频的码率约 15-25 Mbps，一小时消耗约 7-10GB。如果你是影视重度用户，这个范围是起步。</p><p><strong>远程办公（200-400 GB&#x2F;月）</strong>：全天通过代理进行远程工作，包括视频会议（Zoom&#x2F;Google Meet）、代码仓库同步、云文档协作。视频会议一小时约消耗 1-2GB，加上其他工作流量，全天大约 8-15GB。</p><p><strong>极重度使用（500GB-1TB+&#x2F;月）</strong>：大量下载文件、高频使用 AI 服务（ChatGPT、Claude 等生成大量图片或长上下文对话）、做种或下载大型资源。如果你属于这个级别，通常需要 1TB 以上的套餐或不限量套餐。</p><h3 id="注意事项"><a href="#注意事项" class="headerlink" title="注意事项"></a>注意事项</h3><p><strong>“不限量”套餐的真相</strong>。号称不限量的套餐往往附带隐性限制：可能有公平使用政策（Fair Use Policy），超过某个阈值后自动降速；可能高峰时段优先级低于限量套餐用户；也可能只是把限速设得很低，让你物理上用不了太多。购买前务必看清条款。</p><p><strong>闲时流量不计费</strong>。部分机场会在非高峰时段（通常是凌晨到早上）不计算流量消耗。如果你有大文件需要下载，可以安排在这个时间段进行，可以省下不少配额。</p><p><strong>流量用完后的处理</strong>。大多数机场在流量耗尽后会直接断开代理连接，或者将速度限制到极低（如 128Kbps 或 1Mbps），直到下个计费周期重置。部分机场提供额外购买流量包的选项。需要注意的是，与手机流量超额计费不同，机场通常<strong>不会产生额外费用</strong>——用完就是用完了。</p><hr><h2 id="倍率（Rate-Multiplier）"><a href="#倍率（Rate-Multiplier）" class="headerlink" title="倍率（Rate &#x2F; Multiplier）"></a>倍率（Rate &#x2F; Multiplier）</h2><h3 id="什么是倍率"><a href="#什么是倍率" class="headerlink" title="什么是倍率"></a>什么是倍率</h3><p>倍率是机场对不同节点设置的流量计算系数。它改变的不是你实际传输的数据量，而是从你套餐配额中扣除的量。</p><p>具体来说：</p><ul><li><strong>1x（一倍率）</strong>：标准计费。使用 1GB 实际数据，扣除 1GB 配额。</li><li><strong>0.5x（半倍率）</strong>：半价计费。使用 1GB 实际数据，只扣除 0.5GB 配额。</li><li><strong>0.1x（低倍率）</strong>：近乎免费。使用 1GB 实际数据，只扣除 0.1GB 配额。</li><li><strong>2x（双倍率）</strong>：加倍计费。使用 1GB 实际数据，扣除 2GB 配额。</li><li><strong>3x 或更高</strong>：高倍率，通常出现在最高品质的专线节点上。</li></ul><p>举个实际的例子：你有一个 300GB 的月套餐。如果你只使用 0.5x 倍率的节点，你实际可以传输 600GB 的数据。反过来，如果你只使用 2x 倍率的节点，你的实际可用流量只有 150GB。</p><h3 id="为什么存在倍率"><a href="#为什么存在倍率" class="headerlink" title="为什么存在倍率"></a>为什么存在倍率</h3><p>倍率本质上是机场运营者的成本管理工具。不同类型的线路成本差异巨大：</p><p><strong>低倍率节点（0.1x-0.5x）</strong> 通常是直连线路或普通中转线路。这些线路的带宽成本低，但可能在高峰期拥堵、延迟较高、稳定性一般。机场用低倍率鼓励用户使用这些线路，分担高端线路的负载压力。</p><p><strong>标准倍率节点（1x）</strong> 是最常见的配置，使用的是普通中转线路，品质和成本都处于中间水平。</p><p><strong>高倍率节点（1.5x-3x+）</strong> 通常是 IPLC&#x2F;IEPL 专线或优质 BGP 中转线路。IPLC 专线的带宽成本可以是普通线路的 5-10 倍，质量也确实更好——延迟低、稳定、不受国际出口拥堵影响。机场用高倍率来覆盖这些成本，同时防止所有用户都涌向这些节点。</p><p>倍率机制实现了一种经济层面的分流：对速度和稳定性要求不高的日常浏览被引导到低成本线路，而高品质线路被保留给真正需要的场景。</p><h3 id="选择策略"><a href="#选择策略" class="headerlink" title="选择策略"></a>选择策略</h3><p><strong>日常浏览：优先选择低倍率节点</strong>。刷 Twitter、看新闻、浏览网页这类操作对延迟和速度要求不高，使用 0.1x-0.5x 的节点完全够用，还能大幅节省配额。</p><p><strong>流媒体和远程办公：根据实际需求选择</strong>。如果低倍率节点能流畅播放 YouTube 1080p，就没必要切到高倍率节点。但如果你需要稳定的 4K 播放或者不能断线的视频会议，高倍率的专线节点值得消耗。</p><p><strong>计算有效流量</strong>。在比较不同机场的套餐时，不要只看标称流量，要考虑倍率的影响。一个 500GB 套餐如果大部分节点是 0.5x 倍率，实际可用流量约 1TB；而另一个 800GB 套餐如果节点全是 1x 倍率，实际可用就是 800GB。前者反而更划算。</p><p><strong>不要过度纠结倍率</strong>。如果你的套餐流量本身很充裕（比如 1TB 以上），倍率的影响就不大了。优先选择速度和稳定性最好的节点，不必为了省流量而忍受差的体验。</p><hr><h2 id="限速（Speed-Limit）"><a href="#限速（Speed-Limit）" class="headerlink" title="限速（Speed Limit）"></a>限速（Speed Limit）</h2><h3 id="限速的类型"><a href="#限速的类型" class="headerlink" title="限速的类型"></a>限速的类型</h3><p>限速分为多个层面，理解它们的区别很重要：</p><p><strong>套餐限速（Plan Speed Limit）</strong>：这是你购买的套餐所允许的最大速度，适用于你通过代理传输的所有数据。不同价位的套餐通常有不同的速度上限：</p><ul><li>入门套餐：50-100 Mbps</li><li>标准套餐：100-300 Mbps</li><li>高级套餐：300-1000 Mbps</li><li>旗舰套餐：不限速（通常标注为”Unlimited”或”不限速”）</li></ul><p><strong>节点限速（Node Speed Limit）</strong>：单个节点本身的带宽上限。即使你的套餐不限速，如果某个节点只有 500Mbps 的带宽上限，你在这个节点上就跑不到更高。节点限速通常不在套餐说明中体现，需要实际测试才能知道。</p><p><strong>共享带宽 vs 独享带宽</strong>：这是一个经常被忽略的概念。</p><ul><li><strong>共享带宽</strong>：一个节点的总带宽由所有使用该节点的用户共享。如果一个节点有 1Gbps 带宽，100 个用户同时使用，平均每人只有 10Mbps。高峰期速度会明显下降。</li><li><strong>独享带宽</strong>：你的速度不受其他用户影响。这种模式成本极高，通常只出现在高端套餐或自建服务器中。</li></ul><p>绝大多数机场采用的是共享带宽模式。这意味着标称速度只是理论最大值，实际速度取决于同时在线的用户数量和他们的使用情况。</p><h3 id="实际速度需求"><a href="#实际速度需求" class="headerlink" title="实际速度需求"></a>实际速度需求</h3><p>很多用户高估了自己对带宽的需求。以下是各场景的实际需求：</p><ul><li><strong>网页浏览</strong>：10 Mbps 绰绰有余。网页加载速度更多取决于延迟而非带宽。</li><li><strong>1080p 视频流</strong>：10-20 Mbps。YouTube 和 Netflix 的 1080p 流需要约 5-8 Mbps 的持续带宽，留一些余量就够了。</li><li><strong>4K 视频流</strong>：25-50 Mbps。Netflix 4K 需要约 25 Mbps，YouTube 4K 可能更高一些。</li><li><strong>游戏</strong>：5-10 Mbps 的带宽就够了，但<strong>延迟（Ping）比带宽重要得多</strong>。一个延迟 30ms 但速度只有 10Mbps 的节点，游戏体验远好于延迟 200ms 但速度 500Mbps 的节点。</li><li><strong>远程办公（视频会议）</strong>：10-30 Mbps。Zoom 高清视频通话需要约 3-5 Mbps 上下行，多人会议需要更多。</li><li><strong>大文件下载</strong>：越快越好，但这不是常态需求。</li></ul><p>结论是：<strong>对大多数用户来说，100 Mbps 的套餐限速已经远超日常需求</strong>。除非你有持续的大文件下载需求或者同时进行多个高带宽活动，否则为不限速套餐额外付费通常不划算。</p><h3 id="注意事项-1"><a href="#注意事项-1" class="headerlink" title="注意事项"></a>注意事项</h3><p><strong>标称速度不等于实际速度</strong>。机场标称的速度是理论最大值。实际速度受多种因素影响：当前使用该节点的用户数量、国际出口的拥堵程度、你本地的网络环境、目标服务器的响应速度等。高峰时段（晚上 8-11 点）速度下降是普遍现象。</p><p><strong>ISP 带宽是天花板</strong>。你的本地宽带速度是一切的前提。如果你的家庭宽带是 100Mbps，那么花钱买 500Mbps 限速的代理套餐就是浪费——你的速度永远不会超过 100Mbps。购买代理套餐前，先用 <a href="https://www.speedtest.net/">Speedtest</a> 测一下你的裸连速度。</p><p><strong>测速结果仅供参考</strong>。很多用户热衷于跑测速截图，但测速和实际使用是两回事。测速时服务器负载可能较低，且测速工具会尽力拉满带宽。日常使用中的体验更取决于延迟、丢包率和稳定性，而不是峰值带宽。一个速度中等但全天稳定的节点，体验远好于时快时慢的节点。</p><hr><h2 id="在线设备数（Device-Limit）"><a href="#在线设备数（Device-Limit）" class="headerlink" title="在线设备数（Device Limit）"></a>在线设备数（Device Limit）</h2><h3 id="什么是设备限制"><a href="#什么是设备限制" class="headerlink" title="什么是设备限制"></a>什么是设备限制</h3><p>设备限制是指你的订阅允许<strong>同时</strong>使用代理服务的设备数量。关键词是”同时”——不是你总共可以在多少设备上安装客户端，而是同一时间有多少设备在活跃使用。</p><p>常见的设备限制从 1 到 5 台不等，取决于套餐等级。</p><h3 id="怎么计算"><a href="#怎么计算" class="headerlink" title="怎么计算"></a>怎么计算</h3><p><strong>基本计算方式</strong>：每个运行代理客户端并连接到节点的设备算一台。你的手机开着 Shadowrocket 连接代理、笔记本开着 <a href="https://github.com/clash-verge-rev/clash-verge-rev">Clash Verge Rev</a> 连接代理、台式机开着 v2rayN 连接代理——这就是 3 台设备。</p><p><strong>超出限制的后果</strong>：如果你的套餐限制 3 台设备，尝试连接第 4 台时，通常会出现以下情况之一：</p><ul><li>第 4 台设备无法连接（最常见）</li><li>最早连接的设备被踢下线</li><li>所有设备的速度被平均分配（限速惩罚）</li></ul><p><strong>不同的计算方式</strong>：不同机场计算”设备”的方式可能不同：</p><ul><li><strong>按客户端连接数</strong>：最常见。每个建立连接的客户端算一台设备。</li><li><strong>按 IP 地址</strong>：所有使用同一个公网 IP 的设备算一台。如果你的手机和电脑都在家里使用同一个 Wi-Fi，它们共享同一个公网 IP，可能只算一台设备。但这种计算方式在你切换网络（比如手机从 Wi-Fi 切到蜂窝数据）时可能出问题。</li><li><strong>按活跃连接</strong>：只计算正在活跃传输数据的设备，而不是所有已连接的设备。这种方式最宽松。</li></ul><h3 id="选择建议"><a href="#选择建议" class="headerlink" title="选择建议"></a>选择建议</h3><p><strong>个人用户：2-3 台就够了</strong>。手机一台、电脑一台，偶尔需要平板或备用设备算一台。大部分时间你不会同时在所有设备上使用代理。</p><p><strong>家庭用户：3-5 台</strong>。夫妻或家庭成员各有手机和电脑，需要的设备数更多。</p><p><strong>路由器方案：突破设备限制的最佳方式</strong>。如果你把代理配置在路由器上（通过 OpenWrt + <a href="https://github.com/vernesong/OpenClash">OpenClash</a>&#x2F;<a href="https://github.com/Openwrt-Passwall/openwrt-passwall2">PassWall</a> 等方案），所有通过这个路由器上网的设备都走代理，但机场只会看到一台设备（路由器本身）。这是在设备限制较低时服务多台设备的最有效方案。一台路由器可以覆盖全家所有设备。</p><p><strong>注意</strong>：路由器方案虽然在设备数上有优势，但所有设备的流量都会叠加。一家人同时使用代理时，流量消耗速度会成倍增长。</p><hr><h2 id="其他常见参数"><a href="#其他常见参数" class="headerlink" title="其他常见参数"></a>其他常见参数</h2><h3 id="重置日期"><a href="#重置日期" class="headerlink" title="重置日期"></a>重置日期</h3><p>月流量的重置日期通常有两种模式：</p><ul><li><strong>订阅日重置</strong>：从你购买或续费的那天起算。比如你 3 月 15 日购买，流量在每个月 15 日重置。</li><li><strong>固定日期重置</strong>：不管你何时购买，统一在每月 1 号（或其他固定日期）重置。</li></ul><p>订阅日重置更公平，固定日期重置更便于机场管理。购买前了解清楚，避免月底买了套餐却发现几天后就重置浪费了。</p><h3 id="套餐周期"><a href="#套餐周期" class="headerlink" title="套餐周期"></a>套餐周期</h3><p>机场通常提供多种订阅周期：</p><ul><li><strong>月付</strong>：灵活，随时可以不续费。适合试用期或不确定是否长期使用的阶段。</li><li><strong>季付</strong>：通常打 9 折左右。在确认机场质量后可以考虑。</li><li><strong>半年付</strong>：通常打 8 折左右。适合已经使用 2-3 个月并确认满意的情况。</li><li><strong>年付</strong>：通常打 6-8 折，折扣最大。但风险也最大——如果机场跑路或质量下降，损失最大。</li></ul><p>建议的策略是：<strong>先月付使用 1-2 个月</strong>，确认速度、稳定性和客服都满意后，再考虑季付或半年付。年付需要对机场的运营稳定性有足够的信心。机场行业跑路事件并不罕见，年付要谨慎。</p><h3 id="节点数量与地区"><a href="#节点数量与地区" class="headerlink" title="节点数量与地区"></a>节点数量与地区</h3><p>节点数量不是越多越好——<strong>质量远比数量重要</strong>。100 个来自同一上游供应商的转售节点，不如 20 个分布在不同地区和运营商的自建节点。</p><p>对大多数中国大陆用户而言，关键地区是：</p><ul><li><strong>香港</strong>：延迟最低（通常 30-50ms），是日常使用的首选地区</li><li><strong>日本</strong>：延迟较低（50-80ms），节点选择多，流媒体解锁好</li><li><strong>新加坡</strong>：稳定性好，ChatGPT 等 AI 服务友好</li><li><strong>美国</strong>：延迟较高（150-200ms+），但很多服务的原生支持最好</li><li><strong>台湾</strong>：延迟低，中文内容友好</li><li><strong>小众地区</strong>：英国（BBC iPlayer）、韩国（韩国内容）、德国（特定需求）——按需选择</li></ul><h3 id="协议支持"><a href="#协议支持" class="headerlink" title="协议支持"></a>协议支持</h3><p>机场支持的代理协议直接关系到安全性和抗干扰能力。在 2026 年的当下：</p><ul><li><strong>最低要求</strong>：支持 VLESS + Reality。这是目前安全性和隐蔽性最高的主流组合。</li><li><strong>加分项</strong>：支持 Hysteria2（基于 QUIC 的协议，高丢包环境下表现优异）、AnyTLS（新兴的抗检测协议）。</li><li><strong>警告信号</strong>：仍在使用裸 VMess（无 TLS）——这类协议的流量特征已经可以被精准识别，说明机场的技术能力堪忧。</li></ul><hr><h2 id="一个实际案例"><a href="#一个实际案例" class="headerlink" title="一个实际案例"></a>一个实际案例</h2><p>以下是一个假设的机场套餐对比。通过这个例子，你可以直观地看到各参数如何影响实际使用体验和性价比。</p><table><thead><tr><th>参数</th><th>入门套餐</th><th>标准套餐</th><th>高级套餐</th></tr></thead><tbody><tr><td>价格</td><td>¥15&#x2F;月</td><td>¥30&#x2F;月</td><td>¥60&#x2F;月</td></tr><tr><td>月流量</td><td>100GB</td><td>300GB</td><td>800GB</td></tr><tr><td>限速</td><td>100Mbps</td><td>300Mbps</td><td>不限速</td></tr><tr><td>设备数</td><td>2</td><td>3</td><td>5</td></tr><tr><td>线路</td><td>直连</td><td>中转</td><td>中转+IPLC</td></tr><tr><td>节点倍率</td><td>1x</td><td>0.5x-1x</td><td>0.2x-1x</td></tr></tbody></table><p><strong>分析</strong>：</p><p><strong>入门套餐（¥15&#x2F;月）</strong>：100GB 流量 + 1x 倍率 &#x3D; 实际可用 100GB。配合 100Mbps 限速和直连线路，适合轻度使用——日常浏览、社交媒体、偶尔看看视频。2 台设备限制对个人用户足够。缺点是直连线路在敏感时期可能不稳定。</p><p><strong>标准套餐（¥30&#x2F;月）</strong>：300GB 流量 + 0.5x-1x 倍率。如果你主要使用 0.5x 倍率的节点，有效可用流量约 600GB。300Mbps 限速对绝大多数使用场景绰绰有余。中转线路意味着更好的稳定性。3 台设备满足个人多设备需求。<strong>这是大多数用户的最佳选择</strong>——性价比最高，流量充裕，速度和稳定性都有保障。</p><p><strong>高级套餐（¥60&#x2F;月）</strong>：800GB 流量 + 0.2x-1x 倍率。如果大量使用 0.2x 节点，有效流量可达 4TB，基本等同于不限量。不限速 + IPLC 专线是最好的体验。5 台设备适合家庭使用。但价格翻倍，适合重度用户或对品质有极高要求的用户。</p><p>对大多数用户来说，<strong>标准套餐是最均衡的选择</strong>。如果你发现标准套餐的流量每个月都用不完，说明你甚至可以降级到入门套餐。</p><hr><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="Q-流量用完了会怎样？"><a href="#Q-流量用完了会怎样？" class="headerlink" title="Q: 流量用完了会怎样？"></a>Q: 流量用完了会怎样？</h3><p>大多数机场会断开连接或限速到极低速度（如 1Mbps），直到下个周期重置。部分机场允许额外购买流量包补充当月配额。关键点是：<strong>不会像手机流量那样超额计费</strong>，你不用担心会产生意料之外的费用。如果代理突然断了而且离重置日还很远，优先检查一下是不是流量用完了。</p><h3 id="Q-倍率-0-1x-的节点值得用吗？"><a href="#Q-倍率-0-1x-的节点值得用吗？" class="headerlink" title="Q: 倍率 0.1x 的节点值得用吗？"></a>Q: 倍率 0.1x 的节点值得用吗？</h3><p>值得用，但要看场景。0.1x 倍率的节点几乎不消耗配额，非常省流量。但这些节点通常是直连线路或低优先级线路，速度和稳定性会差一些。</p><p><strong>适合使用 0.1x 节点的场景</strong>：日常浏览网页、收发消息、查阅文档——这些对速度和延迟要求不高的轻度活动。</p><p><strong>不适合使用 0.1x 节点的场景</strong>：看视频（可能卡顿）、视频会议（容易断线）、在线游戏（延迟高）、任何对稳定性有要求的工作。</p><p>实际操作中，可以在代理客户端中设置策略：轻度流量走低倍率节点，视频和重要应用走高品质节点。这样既省流量，又不牺牲关键场景的体验。</p><h3 id="Q-限速-300Mbps-和不限速差别大吗？"><a href="#Q-限速-300Mbps-和不限速差别大吗？" class="headerlink" title="Q: 限速 300Mbps 和不限速差别大吗？"></a>Q: 限速 300Mbps 和不限速差别大吗？</h3><p>对大多数用户来说，<strong>没有实质性差别</strong>。日常使用中你很少能持续跑满 300Mbps，除非你在做以下事情：</p><ul><li>持续下载大文件（几十 GB 级别的游戏、数据集等）</li><li>跑测速工具验证线路质量</li><li>多线程 BT&#x2F;PT 下载</li></ul><p>300Mbps 已经可以同时流畅播放多路 4K 视频，支持多个设备同时高强度使用。为”不限速”额外付费，性价比通常不高。</p><h3 id="Q-可以多人共享一个账号吗？"><a href="#Q-可以多人共享一个账号吗？" class="headerlink" title="Q: 可以多人共享一个账号吗？"></a>Q: 可以多人共享一个账号吗？</h3><p>技术上可以——在设备数限制内，多人可以同时使用同一个订阅。但需要注意几点：</p><p><strong>服务条款</strong>：大多数机场在用户协议中明确禁止账号共享。虽然技术上很难检测，但一旦被发现可能导致封号。</p><p><strong>流量分摊</strong>：多人共享意味着流量消耗速度成倍增长。300GB 的月流量一个人用可能绰绰有余，两个人分就变紧张了。</p><p><strong>隐私风险</strong>：共享账号意味着你的代理使用和对方的代理使用混在一起。虽然代理内容本身是加密的，但使用记录是共享的。</p><p><strong>更好的方案</strong>：如果是家庭使用，把代理配置在路由器上（算一台设备），全家共用。如果是朋友之间，各买各的套餐更省心——很多机场有便宜的入门套餐，人均成本可能和分摊差不多。</p><h3 id="Q-买年付划算吗？"><a href="#Q-买年付划算吗？" class="headerlink" title="Q: 买年付划算吗？"></a>Q: 买年付划算吗？</h3><p>价格上确实划算——年付通常是月付价格的 6-8 折。但”划算”不能只看价格，还要考虑风险。</p><p><strong>风险一：机场跑路</strong>。机场行业不受监管，运营者随时可能关停服务。年付意味着一旦跑路，你损失的是一整年的费用。</p><p><strong>风险二：质量下降</strong>。有些机场在早期为了吸引用户提供高品质服务，用户基数增长后开始超售（卖出的带宽总量超过实际带宽），导致速度和稳定性下降。如果你是月付，可以随时走人；年付就只能忍受。</p><p><strong>建议</strong>：先月付试用 1-2 个月，确认机场的速度、稳定性、客服响应都满意后，再考虑季付或半年付。年付只推荐给已经使用超过半年且运营稳定的机场。不要被首次年付的大幅折扣冲昏头脑。</p>]]></content>
      
      
      <categories>
          
          <category> 选择与评估 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> 倍率 </tag>
            
            <tag> 流量 </tag>
            
            <tag> 限速 </tag>
            
            <tag> 设备数 </tag>
            
            <tag> 机场 </tag>
            
            <tag> 套餐 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>AnyTLS 技术原理与适用场景</title>
      <link href="/posts/anytls-explained/"/>
      <url>/posts/anytls-explained/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：AnyTLS 是一种针对 TLS-in-TLS 检测问题提出的代理传输方案。与 Reality 在握手阶段借用目标站证书不同，AnyTLS 的思路是与目标网站建立一条真实的 TLS 连接，然后在这条已建立的 TLS 会话中混入代理数据。两者代表了两种截然不同的抗检测哲学。本文深入解析 AnyTLS 的工作原理、技术优劣势、与 Reality 的对比，以及实际部署中的选择建议。</p></blockquote><h2 id="TLS-in-TLS-问题回顾"><a href="#TLS-in-TLS-问题回顾" class="headerlink" title="TLS-in-TLS 问题回顾"></a>TLS-in-TLS 问题回顾</h2><p>在讨论 AnyTLS 之前，需要先理解它试图解决的核心问题。</p><p>当代理客户端通过 TLS 隧道访问一个 HTTPS 网站时，会出现一个结构性问题：外层是客户端与代理服务器之间的 TLS 连接，内层是客户端通过代理访问目标网站时产生的 TLS 连接。这就是所谓的 <strong>TLS-in-TLS</strong>——加密隧道内部嵌套了另一层加密隧道。</p><p>问题在于，内层 TLS 握手的数据包有非常明显的长度和时序特征。GFW 的深度包检测（DPI）系统虽然无法解密外层 TLS 的内容，但可以通过分析加密数据包的长度序列来推断内部是否嵌套了另一个 TLS 会话。如果一条”普通的 HTTPS 连接”内部持续出现符合 TLS 握手模式的数据包长度分布，审查者就有理由怀疑这是一条代理连接。</p><p>现有的应对方案包括 Xray 的 <code>xtls-rprx-vision</code>（通过对内层握手包进行 padding 来打破长度特征）和 Reality（在握手阶段借用真实证书）。而 <a href="https://github.com/anytls/anytls">AnyTLS</a> 提供了第三种思路：既然 TLS-in-TLS 的特征难以完全消除，那就直接建立一条真实的 TLS 连接，让代理数据在真实 TLS 会话的掩护下传输。</p><h2 id="AnyTLS-是什么"><a href="#AnyTLS-是什么" class="headerlink" title="AnyTLS 是什么"></a>AnyTLS 是什么</h2><p>AnyTLS 是由 <a href="https://github.com/anytls/anytls">anytls 项目</a>开发的一种代理传输技术。它的核心目标是让代理流量与真实的 HTTPS 流量在网络层面上难以区分，但采用的方法与 Reality 截然不同。</p><p><strong>Reality 的思路</strong>是在 TLS 握手阶段做文章——借用目标站的真实证书完成握手伪装，握手成功后再切换到代理数据传输模式。整个过程中，代理服务器实际上并没有与目标站建立持续的数据连接，证书只是”借来用一下”。</p><p><strong>AnyTLS 的思路</strong>则是在数据传输阶段做文章——代理服务器与目标网站之间建立一条真实的、完整的 TLS 连接，然后在这条真实连接的数据流中混入代理数据。从外部观察者的角度看，这条连接不仅握手是真实的，数据传输也是真实的，因为它确实在与目标网站进行通信。</p><p>简单来说：Reality 是”借皮”，AnyTLS 是”寄生”。</p><h2 id="核心工作原理"><a href="#核心工作原理" class="headerlink" title="核心工作原理"></a>核心工作原理</h2><p>AnyTLS 的运作过程可以分为以下几个阶段。</p><h3 id="第一阶段：建立真实连接"><a href="#第一阶段：建立真实连接" class="headerlink" title="第一阶段：建立真实连接"></a>第一阶段：建立真实连接</h3><p>代理服务器首先与一个预配置的目标网站（如一个高流量的 HTTPS 站点）建立一条标准的 TLS 连接。这条连接是完全真实的——使用目标站的真实证书、完成完整的 TLS 握手、可以正常交换 HTTP 数据。从网络层面看，这就是一台服务器在正常访问一个网站。</p><h3 id="第二阶段：会话复用"><a href="#第二阶段：会话复用" class="headerlink" title="第二阶段：会话复用"></a>第二阶段：会话复用</h3><p>当代理客户端需要传输数据时，AnyTLS 将代理数据编码并嵌入到这条已建立的真实 TLS 会话中。具体的混入方式涉及到数据的分片、编码和调度，目标是让混合后的流量在统计特征上尽可能接近正常的 HTTPS 数据交换。</p><h3 id="第三阶段：数据分离与转发"><a href="#第三阶段：数据分离与转发" class="headerlink" title="第三阶段：数据分离与转发"></a>第三阶段：数据分离与转发</h3><p>代理服务器接收到混合数据后，将代理数据与正常网站数据分离，代理数据被转发到实际的目标地址，而与目标站的正常通信则继续维持，保持连接的”真实性”。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line">sequenceDiagram</span><br><span class="line">    participant C as 代理客户端</span><br><span class="line">    participant S as AnyTLS 代理服务器</span><br><span class="line">    participant T as 目标站(example.com)</span><br><span class="line">    participant D as 实际访问目标</span><br><span class="line">    participant G as GFW</span><br><span class="line"></span><br><span class="line">    S-&gt;&gt;T: 建立真实 TLS 连接</span><br><span class="line">    T-&gt;&gt;S: 完成 TLS 握手 + 正常数据交换</span><br><span class="line">    Note over G: 看到: 正常的 HTTPS 连接 ✓</span><br><span class="line"></span><br><span class="line">    C-&gt;&gt;S: 发送代理请求(加密)</span><br><span class="line">    S-&gt;&gt;S: 将代理数据混入真实 TLS 会话</span><br><span class="line">    S-&gt;&gt;T: 混合数据流(外观为正常 HTTPS)</span><br><span class="line">    Note over G: 看到: 持续的正常 HTTPS 数据交换 ✓</span><br><span class="line"></span><br><span class="line">    S-&gt;&gt;D: 分离并转发代理数据</span><br><span class="line">    D-&gt;&gt;S: 返回响应</span><br><span class="line">    S-&gt;&gt;S: 将响应混入 TLS 会话</span><br><span class="line">    S-&gt;&gt;C: 返回代理响应(加密)</span><br></pre></td></tr></table></figure><h3 id="与传统代理的关键区别"><a href="#与传统代理的关键区别" class="headerlink" title="与传统代理的关键区别"></a>与传统代理的关键区别</h3><p>传统的 TLS 代理（包括使用 Reality 的方案）在握手完成后，数据传输阶段的流量内容完全是代理数据。虽然外层 TLS 加密使内容不可见，但流量的统计特征（包大小分布、时序模式、持续时间等）可能与真实的 HTTPS 流量有所不同。</p><p>AnyTLS 的不同之处在于，它维持了一条真实的 HTTPS 数据流作为”载体”，代理数据嵌入其中。这意味着即使审查者对加密流量进行统计分析，也会看到真实的 HTTPS 数据交换模式——因为确实存在真实的数据交换。</p><h2 id="AnyTLS-与-Reality-的深度对比"><a href="#AnyTLS-与-Reality-的深度对比" class="headerlink" title="AnyTLS 与 Reality 的深度对比"></a>AnyTLS 与 Reality 的深度对比</h2><p>AnyTLS 和 Reality 都是为了让代理流量不被 GFW 识别，但它们的技术哲学有着根本性的差异。理解这些差异，才能在实际部署中做出正确的选择。</p><h3 id="伪装层次不同"><a href="#伪装层次不同" class="headerlink" title="伪装层次不同"></a>伪装层次不同</h3><table><thead><tr><th>维度</th><th>Reality</th><th>AnyTLS</th></tr></thead><tbody><tr><td><strong>伪装阶段</strong></td><td>TLS 握手阶段</td><td>TLS 数据传输阶段</td></tr><tr><td><strong>证书使用</strong></td><td>借用目标站证书，握手后切换</td><td>建立真实连接，持续使用</td></tr><tr><td><strong>与目标站的关系</strong></td><td>获取证书后断开</td><td>维持持续连接</td></tr><tr><td><strong>数据传输阶段</strong></td><td>纯代理数据（加密）</td><td>代理数据混入真实流量</td></tr><tr><td><strong>连接真实性</strong></td><td>握手真实，传输阶段无真实数据</td><td>全程真实</td></tr></tbody></table><h3 id="抗检测能力对比"><a href="#抗检测能力对比" class="headerlink" title="抗检测能力对比"></a>抗检测能力对比</h3><p><strong>Reality 的检测风险</strong>：</p><p>Reality 在 TLS 握手阶段几乎无懈可击——证书是真的、指纹是真的、SNI 是真的。但握手完成后，连接进入数据传输阶段时，流量内容完全是代理数据。如果 GFW 在握手后对流量进行深度统计分析（比如比较与同一目标站正常流量的差异），理论上存在被识别的可能性。此外，长时间保持连接但几乎不与 dest 站点进行 HTTP 数据交换，这种行为模式本身也可能引起关注。</p><p><strong>AnyTLS 的检测风险</strong>：</p><p>AnyTLS 的优势在于数据传输阶段的流量中混合了真实的 HTTPS 数据。审查者在分析加密流量的统计特征时，会看到真实的数据交换模式。但它也有自身的风险：如果代理数据量远大于正常网站数据量，混合后的流量在数据量上可能与该目标站的典型访问模式不符。</p><h3 id="设计哲学的差异"><a href="#设计哲学的差异" class="headerlink" title="设计哲学的差异"></a>设计哲学的差异</h3><p>可以用一个比喻来理解两者的区别：</p><ul><li><p><strong>Reality</strong> 像是拿着别人的身份证进入一栋大楼。门卫（GFW）检查身份证时发现是真的，于是放行。但进入大楼后，你的行为与身份证上的身份无关。如果有人跟踪你在大楼内的活动，可能会发现异常。</p></li><li><p><strong>AnyTLS</strong> 像是和一个有合法身份的人一起进入大楼，并且一直跟着这个人活动。门卫看到的是两个人正常出入，跟踪者看到的也是正常的访客行为。但维持这种”同行”关系需要额外的协调成本。</p></li></ul><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">flowchart TB</span><br><span class="line">    subgraph Reality[&quot;Reality 的伪装策略&quot;]</span><br><span class="line">        R1[借用目标站 TLS 证书] --&gt; R2[完成握手伪装]</span><br><span class="line">        R2 --&gt; R3[切换到代理模式]</span><br><span class="line">        R3 --&gt; R4[纯代理数据传输]</span><br><span class="line">        style R4 fill:#fff3cd</span><br><span class="line">    end</span><br><span class="line"></span><br><span class="line">    subgraph AnyTLS[&quot;AnyTLS 的伪装策略&quot;]</span><br><span class="line">        A1[与目标站建立真实连接] --&gt; A2[维持真实 TLS 会话]</span><br><span class="line">        A2 --&gt; A3[代理数据混入会话]</span><br><span class="line">        A3 --&gt; A4[真实数据 + 代理数据混合传输]</span><br><span class="line">        style A4 fill:#d4edda</span><br><span class="line">    end</span><br></pre></td></tr></table></figure><h2 id="优势分析"><a href="#优势分析" class="headerlink" title="优势分析"></a>优势分析</h2><h3 id="真实的-TLS-连接"><a href="#真实的-TLS-连接" class="headerlink" title="真实的 TLS 连接"></a>真实的 TLS 连接</h3><p>AnyTLS 最大的优势是连接的真实性。与目标站的 TLS 连接从始至终都是真实的——真实的证书、真实的数据交换、真实的会话维持。这意味着任何试图验证连接真实性的检测手段（包括主动探测）都会得到”这是一条正常连接”的结论。</p><h3 id="更强的抗统计分析能力"><a href="#更强的抗统计分析能力" class="headerlink" title="更强的抗统计分析能力"></a>更强的抗统计分析能力</h3><p>由于数据传输阶段存在真实的 HTTPS 数据流，加密流量的统计特征（包大小分布、传输间隔等）更接近正常的网站访问。对于依赖流量统计特征进行检测的 DPI 系统来说，这种混合流量更难被识别。</p><h3 id="无-TLS-in-TLS-特征"><a href="#无-TLS-in-TLS-特征" class="headerlink" title="无 TLS-in-TLS 特征"></a>无 TLS-in-TLS 特征</h3><p>传统的 TLS 代理在加密隧道内传输的数据可能包含内层 TLS 握手的特征性包长度序列。AnyTLS 由于复用了真实的 TLS 会话，代理数据被融入到真实的 HTTPS 数据流中，内层 TLS 握手的特征被有效稀释。</p><h2 id="劣势与局限"><a href="#劣势与局限" class="headerlink" title="劣势与局限"></a>劣势与局限</h2><h3 id="需要目标站配合"><a href="#需要目标站配合" class="headerlink" title="需要目标站配合"></a>需要目标站配合</h3><p>AnyTLS 要求代理服务器能够与目标站建立并维持稳定的 TLS 连接。这意味着目标站必须始终可达，且不能对来自代理服务器的连接进行限制（如频率限制、IP 封锁等）。如果目标站的服务出现波动，代理连接也会受到直接影响。</p><p>与 Reality 只需在握手阶段获取一次证书不同，AnyTLS 需要持续维护与目标站的连接，对目标站的可用性有着更强的依赖。</p><h3 id="性能开销"><a href="#性能开销" class="headerlink" title="性能开销"></a>性能开销</h3><p>维护与目标站的真实连接意味着额外的网络开销。每一次代理数据传输都需要同时处理与目标站的数据交换，数据的混入和分离也需要额外的计算资源。在高并发场景下，这种开销可能会变得显著。</p><p>相比之下，Reality 在握手完成后就不再与 dest 站点通信，数据传输阶段的开销与普通 TLS 代理几乎一致。</p><h3 id="部署复杂度"><a href="#部署复杂度" class="headerlink" title="部署复杂度"></a>部署复杂度</h3><p>AnyTLS 的配置比 Reality 更复杂。除了基本的代理参数外，还需要配置和维护与目标站的连接参数、数据混入策略等。目标站的选择也更加讲究——不仅要满足 TLS 版本和证书要求，还要考虑数据交换模式是否适合混入代理数据。</p><h3 id="成熟度与生态"><a href="#成熟度与生态" class="headerlink" title="成熟度与生态"></a>成熟度与生态</h3><p>作为一个相对较新的项目，AnyTLS 的生态系统远不如 Reality 成熟。Reality 已经集成在 <a href="https://github.com/XTLS/Xray-core">Xray-core</a> 中，被大量面板和管理工具支持，社区经验丰富，故障排查资料也相对充足。AnyTLS 在这些方面还处于早期阶段，遇到问题时可参考的资源有限。</p><h2 id="客户端支持"><a href="#客户端支持" class="headerlink" title="客户端支持"></a>客户端支持</h2><p>目前 AnyTLS 的客户端支持情况如下：</p><table><thead><tr><th>客户端</th><th>支持状态</th><th>备注</th></tr></thead><tbody><tr><td><a href="https://github.com/SagerNet/sing-box">sing-box</a></td><td>已支持</td><td>主要的客户端支持</td></tr><tr><td>Clash.Meta &#x2F; mihomo</td><td>待确认</td><td>关注项目更新</td></tr><tr><td>Xray-core</td><td>不支持</td><td>Xray 使用自己的 Reality 方案</td></tr><tr><td>V2Ray</td><td>不支持</td><td>无集成计划</td></tr></tbody></table><p>需要注意的是，AnyTLS 的客户端支持范围远小于 Reality。如果你使用的客户端不支持 AnyTLS，那么 Reality 仍然是更务实的选择。</p><h2 id="AnyTLS-与-Reality：如何选择"><a href="#AnyTLS-与-Reality：如何选择" class="headerlink" title="AnyTLS 与 Reality：如何选择"></a>AnyTLS 与 Reality：如何选择</h2><p>这两种方案并不是简单的”谁更好”的关系，而是适用于不同场景和需求。</p><h3 id="推荐使用-Reality-的场景"><a href="#推荐使用-Reality-的场景" class="headerlink" title="推荐使用 Reality 的场景"></a>推荐使用 Reality 的场景</h3><ul><li><strong>多数用户的默认选择</strong>：如果你没有特殊的抗检测需求，Reality 已经足够安全，且部署运维成本远低于 AnyTLS。</li><li><strong>需要广泛客户端兼容的场景</strong>：Reality 被几乎所有主流客户端支持，不用担心兼容性问题。</li><li><strong>追求稳定性和性能的场景</strong>：Reality 在握手后不依赖目标站，数据传输阶段的稳定性和性能与普通 TLS 代理一致。</li><li><strong>运维资源有限的场景</strong>：Reality 的配置和维护相对简单，社区经验丰富，遇到问题容易找到解决方案。</li></ul><h3 id="可以考虑-AnyTLS-的场景"><a href="#可以考虑-AnyTLS-的场景" class="headerlink" title="可以考虑 AnyTLS 的场景"></a>可以考虑 AnyTLS 的场景</h3><ul><li><strong>对抗高强度流量分析</strong>：如果你的网络环境中 DPI 系统已经开始对 TLS 代理的数据传输阶段进行统计分析，AnyTLS 的混合流量策略可能提供额外的保护。</li><li><strong>技术探索和研究</strong>：如果你对代理技术的前沿发展感兴趣，AnyTLS 代表了一种值得关注的新方向。</li><li><strong>愿意承担额外运维成本</strong>：部署 AnyTLS 需要更多的配置工作和持续维护，确保你有足够的技术能力和时间。</li></ul><h3 id="决策参考"><a href="#决策参考" class="headerlink" title="决策参考"></a>决策参考</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">flowchart TD</span><br><span class="line">    Start([选择传输方案]) --&gt; Q1&#123;是否需要对抗&lt;br/&gt;数据传输阶段的统计分析?&#125;</span><br><span class="line">    Q1 --&gt;|否| Q2&#123;客户端是否支持 AnyTLS?&#125;</span><br><span class="line">    Q1 --&gt;|是| Q3&#123;是否有足够的&lt;br/&gt;技术能力和运维资源?&#125;</span><br><span class="line">    Q2 --&gt;|否| Reality[推荐 Reality]</span><br><span class="line">    Q2 --&gt;|是| Q4&#123;是否愿意承担&lt;br/&gt;额外的性能开销?&#125;</span><br><span class="line">    Q3 --&gt;|否| Reality</span><br><span class="line">    Q3 --&gt;|是| Q4</span><br><span class="line">    Q4 --&gt;|否| Reality</span><br><span class="line">    Q4 --&gt;|是| AnyTLS[可以尝试 AnyTLS]</span><br><span class="line"></span><br><span class="line">    style Reality fill:#d4edda,stroke:#28a745</span><br><span class="line">    style AnyTLS fill:#cce5ff,stroke:#007bff</span><br></pre></td></tr></table></figure><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="Q-AnyTLS-是否已经经过实战验证？"><a href="#Q-AnyTLS-是否已经经过实战验证？" class="headerlink" title="Q: AnyTLS 是否已经经过实战验证？"></a>Q: AnyTLS 是否已经经过实战验证？</h3><p>AnyTLS 作为一个相对较新的项目，其实战经验远不如 Reality 丰富。Reality 自发布以来已经经历了多轮 GFW 升级的考验，社区积累了大量的部署和调优经验。AnyTLS 的长期抗检测表现还需要时间和更多用户的实际使用来验证。在生产环境中，建议将 AnyTLS 作为备选方案而非唯一方案。</p><h3 id="Q-AnyTLS-能和-VLESS-搭配使用吗？"><a href="#Q-AnyTLS-能和-VLESS-搭配使用吗？" class="headerlink" title="Q: AnyTLS 能和 VLESS 搭配使用吗？"></a>Q: AnyTLS 能和 VLESS 搭配使用吗？</h3><p>AnyTLS 是一种传输层技术，理论上可以与不同的代理协议搭配。但具体的协议兼容性取决于实现方式和客户端支持。目前在 <a href="https://github.com/SagerNet/sing-box">sing-box</a> 中的集成是最为成熟的实现。关于具体的协议搭配方式，建议参考 <a href="https://github.com/anytls/anytls">AnyTLS 项目</a>的官方文档。</p><h3 id="Q-目标站被封了怎么办？"><a href="#Q-目标站被封了怎么办？" class="headerlink" title="Q: 目标站被封了怎么办？"></a>Q: 目标站被封了怎么办？</h3><p>与 Reality 类似，当 AnyTLS 使用的目标站被封锁或不可达时，代理连接也会受到影响。但 AnyTLS 对目标站的依赖更强——Reality 只在握手阶段需要目标站，而 AnyTLS 在整个连接生命周期内都需要维持与目标站的通信。因此，AnyTLS 需要更加仔细地选择目标站，建议选择极不可能被封锁的大型站点，并且准备多个备选目标站。</p><h3 id="Q-AnyTLS-和-NaiveProxy-有什么区别？"><a href="#Q-AnyTLS-和-NaiveProxy-有什么区别？" class="headerlink" title="Q: AnyTLS 和 NaiveProxy 有什么区别？"></a>Q: AnyTLS 和 NaiveProxy 有什么区别？</h3><p>两者都追求更高程度的流量真实性，但实现路径不同。NaiveProxy 使用 Chromium 的网络栈来生成流量，从协议栈层面确保流量特征与真实浏览器一致。AnyTLS 则通过在真实 TLS 连接中混入代理数据来实现伪装。NaiveProxy 的方案更”彻底”但部署更复杂（需要编译 Chromium 组件），AnyTLS 的方案相对轻量但在流量混合的精细度上面临更多挑战。</p><h2 id="相关链接"><a href="#相关链接" class="headerlink" title="相关链接"></a>相关链接</h2><ul><li><a href="https://github.com/anytls/anytls">AnyTLS GitHub</a> - AnyTLS 项目仓库</li><li><a href="https://github.com/SagerNet/sing-box">sing-box</a> - 支持 AnyTLS 的代理客户端</li><li><a href="https://github.com/XTLS/Xray-core">Xray-core</a> - VLESS + Reality 的主要实现</li><li><a href="https://github.com/XTLS/REALITY">REALITY</a> - Reality 协议项目</li></ul>]]></content>
      
      
      <categories>
          
          <category> 协议与原理 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> AnyTLS </tag>
            
            <tag> 协议 </tag>
            
            <tag> TLS </tag>
            
            <tag> 抗检测 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>AS 号与 IP 归属查询：怎么看一个节点的 IP 质量</title>
      <link href="/posts/as-number-lookup/"/>
      <url>/posts/as-number-lookup/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：每一个公网 IP 地址都属于一个自治系统（AS），每个 AS 都有一个唯一编号（ASN）。通过查询 ASN，你可以知道一个 IP 的所有者是谁——是大型云服务商的数据中心，还是面向普通用户的 ISP。这个信息直接关系到节点的流媒体解锁能力、被封锁风险和长期稳定性。本文介绍 ASN 的基础概念、查询方法和实际应用。</p></blockquote><hr><h2 id="什么是-AS-和-ASN"><a href="#什么是-AS-和-ASN" class="headerlink" title="什么是 AS 和 ASN"></a>什么是 AS 和 ASN</h2><h3 id="互联网的组织方式"><a href="#互联网的组织方式" class="headerlink" title="互联网的组织方式"></a>互联网的组织方式</h3><p>互联网不是一台超级路由器连接着全球所有的电脑。它是由数万个独立管理的网络拼接在一起的——就像全球的铁路系统由各国的铁路公司分别运营，但列车可以在它们之间跨越和换乘。</p><p>每一个独立管理的网络被称为一个 <strong>自治系统（Autonomous System，AS）</strong>。一个 AS 由一个组织运营，拥有一组 IP 地址和一套统一的路由策略。这个组织可以是一家电信运营商（如中国电信）、一家云服务商（如 AWS）、一所大学、一个政府机构，甚至一家大型企业。</p><p>每个 AS 都有一个全球唯一的编号，叫做 <strong>ASN（Autonomous System Number）</strong>。ASN 由 IANA 统一分配，再通过五大 RIR（地区互联网注册机构）分发给各组织。</p><h3 id="常见的-ASN-示例"><a href="#常见的-ASN-示例" class="headerlink" title="常见的 ASN 示例"></a>常见的 ASN 示例</h3><p>一些你可能经常遇到的 ASN：</p><table><thead><tr><th>ASN</th><th>组织</th><th>类型</th></tr></thead><tbody><tr><td>AS13335</td><td>Cloudflare, Inc.</td><td>CDN &#x2F; 云服务</td></tr><tr><td>AS15169</td><td>Google LLC</td><td>云服务 &#x2F; ISP</td></tr><tr><td>AS16509</td><td>Amazon.com (AWS)</td><td>云服务</td></tr><tr><td>AS14061</td><td>DigitalOcean, LLC</td><td>云服务</td></tr><tr><td>AS20473</td><td>The Constant Company (Vultr)</td><td>云服务</td></tr><tr><td>AS24940</td><td>Hetzner Online GmbH</td><td>云服务</td></tr><tr><td>AS16276</td><td>OVH SAS</td><td>云服务</td></tr><tr><td>AS4134</td><td>中国电信骨干网 (CHINANET)</td><td>ISP</td></tr><tr><td>AS4837</td><td>中国联通骨干网 (China169)</td><td>ISP</td></tr><tr><td>AS9808</td><td>中国移动</td><td>ISP</td></tr><tr><td>AS2516</td><td>KDDI Corporation</td><td>ISP（日本）</td></tr><tr><td>AS4713</td><td>NTT Communications (OCN)</td><td>ISP（日本）</td></tr><tr><td>AS7922</td><td>Comcast Cable Communications</td><td>ISP（美国）</td></tr><tr><td>AS7018</td><td>AT&amp;T Services, Inc.</td><td>ISP（美国）</td></tr><tr><td>AS3462</td><td>中华电信 (Chunghwa Telecom &#x2F; HiNet)</td><td>ISP（台湾）</td></tr><tr><td>AS4515</td><td>PCCW Limited</td><td>ISP（香港）</td></tr><tr><td>AS9269</td><td>Hong Kong Broadband Network</td><td>ISP（香港）</td></tr></tbody></table><h3 id="AS-之间如何通信"><a href="#AS-之间如何通信" class="headerlink" title="AS 之间如何通信"></a>AS 之间如何通信</h3><p>不同的 AS 之间通过 <strong>BGP（Border Gateway Protocol，边界网关协议）</strong> 交换路由信息。你可以把 BGP 理解为”AS 之间的通讯协议”——每个 AS 通过 BGP 告诉邻居”我有哪些 IP 段，你如果要到达这些 IP，可以把流量发给我”。</p><p>当你从中国访问一个美国网站时，数据包可能经过多个 AS 的”接力”：中国电信（AS4134）→ 某个过境 AS → 美国某 ISP → 目标服务器所在的 AS。BGP 协议负责在这些 AS 之间找到最优路径。</p><p>这些 BGP 路由信息是公开可查的，这也是各种 ASN 查询工具能够工作的基础。</p><hr><h2 id="ASN-能告诉你什么"><a href="#ASN-能告诉你什么" class="headerlink" title="ASN 能告诉你什么"></a>ASN 能告诉你什么</h2><p>查到一个 IP 的 ASN 之后，你能获得以下关键信息：</p><h3 id="IP-的所有者"><a href="#IP-的所有者" class="headerlink" title="IP 的所有者"></a>IP 的所有者</h3><p>ASN 直接对应一个注册组织的名称。通过组织名称，你可以快速判断这个 IP 属于谁。比如看到 AS16509，你立刻知道这个 IP 来自 AWS；看到 AS7922，你知道这是 Comcast 的 IP。</p><h3 id="IP-的类型：数据中心还是-ISP"><a href="#IP-的类型：数据中心还是-ISP" class="headerlink" title="IP 的类型：数据中心还是 ISP"></a>IP 的类型：数据中心还是 ISP</h3><p>这是代理场景中最关键的一个判断。</p><p><strong>数据中心（Hosting）IP</strong> 属于云服务商或托管服务商的 AS。它们的特征是：大量 IP 被用于服务器托管，而非终端用户上网。流媒体平台和 AI 服务会将数据中心 IP 标记为高风险，因为从数据中心发出的请求大概率来自代理&#x2F;VPN 而非真实用户。</p><p><strong>ISP（互联网服务提供商）IP</strong> 属于面向终端用户提供接入服务的运营商的 AS。ISP 的 IP 被认为更”干净”，因为它们通常分配给家庭或企业用户使用。当流媒体平台看到来自 Comcast 或 NTT 的 IP 时，它会倾向于认为这是一个正常用户。</p><p>关于 IP 类型对解锁的影响，可以参考 <a href="/posts/ip-types/">什么是原生 IP、广播 IP、住宅 IP</a>。</p><h3 id="IP-的地理归属"><a href="#IP-的地理归属" class="headerlink" title="IP 的地理归属"></a>IP 的地理归属</h3><p>ASN 信息通常包含注册组织的所在国家&#x2F;地区。结合 GeoIP 数据库的查询结果，你可以判断一个 IP 是否是”原生 IP”——即 IP 的 ASN 归属国家与服务器的物理位置一致。</p><h3 id="IP-的网络规模和声誉"><a href="#IP-的网络规模和声誉" class="headerlink" title="IP 的网络规模和声誉"></a>IP 的网络规模和声誉</h3><p>一个 AS 管理的 IP 数量、它与多少其他 AS 有 BGP 连接（peer）、它的上游 AS 是谁——这些信息可以帮助你判断这个网络的规模和可靠性。一个大型 ISP 的 AS 通常有大量的 peer 连接，网络覆盖广泛；一个小型 VPS 提供商的 AS 可能只有几个上游连接。</p><hr><h2 id="如何查询-ASN"><a href="#如何查询-ASN" class="headerlink" title="如何查询 ASN"></a>如何查询 ASN</h2><h3 id="ipinfo-io"><a href="#ipinfo-io" class="headerlink" title="ipinfo.io"></a>ipinfo.io</h3><p><strong>网址</strong>：<a href="https://ipinfo.io/">https://ipinfo.io/</a></p><p>ipinfo.io 是最常用的 IP 信息查询工具之一。它不仅提供 ASN 信息，还标注 IP 的使用类型（ISP &#x2F; Hosting &#x2F; Business &#x2F; Education）、地理位置、隐私相关标记（是否为 VPN&#x2F;代理&#x2F;Tor 出口）等。</p><p>使用方法非常简单。在浏览器中直接访问 <code>https://ipinfo.io/IP地址</code> 即可查看结果：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https://ipinfo.io/203.0.113.1</span><br></pre></td></tr></table></figure><p>你也可以在命令行中使用：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl ipinfo.io/203.0.113.1</span><br></pre></td></tr></table></figure><p>返回的 JSON 数据中，关键字段包括：</p><ul><li><code>org</code>：所属组织和 ASN（如 “AS16509 Amazon.com, Inc.”）</li><li><code>city</code> &#x2F; <code>region</code> &#x2F; <code>country</code>：地理位置</li><li><code>company.type</code>：组织类型（isp &#x2F; hosting &#x2F; business &#x2F; education）</li></ul><p>ipinfo.io 的免费版本每月有查询次数限制，但对于偶尔查几个 IP 来说完全够用。</p><h3 id="bgp-tools"><a href="#bgp-tools" class="headerlink" title="bgp.tools"></a>bgp.tools</h3><p><strong>网址</strong>：<a href="https://bgp.tools/">https://bgp.tools/</a></p><p>bgp.tools 是一个专注于 BGP 和 ASN 分析的工具，信息深度超过 ipinfo.io。它特别适合需要了解 AS 的路由关系、上下游连接、前缀公告等技术细节的用户。</p><p>在首页的搜索框中输入 IP 地址或 ASN 编号，你可以看到：</p><ul><li>AS 的基本信息（名称、国家、注册日期）</li><li>该 AS 公告的所有 IP 前缀列表</li><li>该 AS 的上游 &#x2F; 下游 &#x2F; peer AS 列表</li><li>前缀的路由路径和历史变化</li></ul><p>对于代理用户来说，bgp.tools 的价值在于：你可以查看一个 AS 的所有前缀，判断它是一个大型 ISP（拥有大量前缀和 peer）还是一个小型托管商（只有几个前缀和有限的上游）。</p><h3 id="bgpview-io"><a href="#bgpview-io" class="headerlink" title="bgpview.io"></a>bgpview.io</h3><p><strong>网址</strong>：<a href="https://bgpview.io/">https://bgpview.io/</a></p><p>bgpview.io 和 bgp.tools 功能类似，但界面更加直观友好。它提供了 AS 关系的可视化图表，可以帮助你更直观地理解一个 AS 在互联网拓扑中的位置。</p><p>搜索方式同样简单——输入 IP 地址、ASN 编号或组织名称即可。返回结果包括：</p><ul><li>AS 的详细注册信息</li><li>前缀列表和路由状态</li><li>AS 之间的连接关系图</li><li>Whois 原始数据</li></ul><h3 id="其他工具"><a href="#其他工具" class="headerlink" title="其他工具"></a>其他工具</h3><ul><li><strong><a href="https://ipapi.is/">ipapi.is</a></strong>：提供 IP 类型检测（datacenter&#x2F;residential&#x2F;VPN&#x2F;proxy），对代理用户非常实用</li><li><strong><a href="https://whoer.net/">whoer.net</a></strong>：综合隐私检测，可以查看你当前的出口 IP、DNS 泄漏、WebRTC 泄漏等</li><li><strong><a href="https://ipleak.net/">ipleak.net</a></strong>：专注于隐私泄漏检测</li></ul><hr><h2 id="如何解读查询结果"><a href="#如何解读查询结果" class="headerlink" title="如何解读查询结果"></a>如何解读查询结果</h2><h3 id="判断-IP-是数据中心还是-ISP"><a href="#判断-IP-是数据中心还是-ISP" class="headerlink" title="判断 IP 是数据中心还是 ISP"></a>判断 IP 是数据中心还是 ISP</h3><p>拿到 ASN 查询结果后，核心判断逻辑很简单：<strong>看组织名称和类型。</strong></p><p><strong>如果组织名称中包含以下关键词，大概率是数据中心 &#x2F; 云服务商：</strong></p><ul><li>Amazon &#x2F; AWS &#x2F; EC2</li><li>Google Cloud &#x2F; GCP</li><li>Microsoft Azure</li><li>DigitalOcean</li><li>Vultr &#x2F; Choopa &#x2F; The Constant Company</li><li>OVH &#x2F; OVHcloud</li><li>Hetzner</li><li>Linode &#x2F; Akamai Connected Cloud</li><li>Bandwagon Host &#x2F; IT7 Networks（搬瓦工）</li><li>CloudInnovation（DMIT）</li></ul><p><strong>如果组织名称中包含以下关键词，通常是 ISP：</strong></p><ul><li>Telecom &#x2F; 电信 &#x2F; Telekom</li><li>Broadband &#x2F; 宽带</li><li>Communications</li><li>Cable</li><li>Mobile &#x2F; 移动</li><li>特定国家的知名 ISP 名称（Comcast、NTT、KDDI、PCCW、SingTel 等）</li></ul><p>ipinfo.io 等工具通常会直接在结果中标注 <code>type: isp</code> 或 <code>type: hosting</code>，省去了你自己判断的步骤。</p><h3 id="数据中心-IP-意味着什么"><a href="#数据中心-IP-意味着什么" class="headerlink" title="数据中心 IP 意味着什么"></a>数据中心 IP 意味着什么</h3><p>如果你的代理节点使用的是数据中心 IP（比如来自 AWS、Vultr、Hetzner 的 IP），这意味着：</p><p><strong>流媒体解锁大概率受限。</strong> Netflix、Disney+、HBO Max 等主流平台都会将数据中心 IP 列入黑名单。即使这个 IP 目前还没被封，由于数据中心 IP 段已经被系统性标记，解锁能力本身就很脆弱。</p><p><strong>AI 服务可能受限。</strong> ChatGPT、Claude 等 AI 服务也会检测数据中心 IP。从数据中心 IP 访问可能触发验证、限制功能或直接拒绝服务。</p><p><strong>IP 更容易被”连坐”。</strong> 数据中心的 IP 段被大量代理和 VPN 服务共用，一个 IP 被平台标记后，同段的其他 IP 也可能受到牵连。</p><h3 id="ISP-IP-意味着什么"><a href="#ISP-IP-意味着什么" class="headerlink" title="ISP IP 意味着什么"></a>ISP IP 意味着什么</h3><p>如果节点使用的是 ISP 的 IP（如 Comcast、NTT、PCCW 的 IP），情况通常好得多：</p><p><strong>流媒体解锁成功率高。</strong> 平台倾向于将 ISP IP 视为正常用户，除非该特定 IP 有大量异常使用记录。</p><p><strong>AI 服务限制少。</strong> ISP IP 通常不会触发数据中心检测。</p><p><strong>但成本更高。</strong> ISP IP 获取难度大，价格远高于数据中心 IP。这也是为什么提供”原生 IP”或”住宅 IP”节点的机场价格往往更贵。</p><hr><h2 id="什么是”干净-IP”"><a href="#什么是”干净-IP”" class="headerlink" title="什么是”干净 IP”"></a>什么是”干净 IP”</h2><p>在代理社区中，”干净 IP”是一个非常常见的术语。它的含义是：</p><p><strong>一个没有被流媒体平台、AI 服务或 IP 信誉数据库标记为代理&#x2F;VPN 的 IP 地址。</strong></p><p>“干净”的反面是”脏”——一个”脏 IP”已经被一个或多个平台列入黑名单，无法用于解锁服务。</p><p>判断一个 IP 是否”干净”的方法：</p><ol><li><strong>用上述工具查询 ASN 和类型。</strong> 如果是数据中心 IP，先天就不太”干净”。</li><li><strong>直接测试解锁。</strong> 连接该节点后访问 Netflix&#x2F;Disney+&#x2F;ChatGPT 等服务，看是否被拦截。</li><li><strong>使用专门的检测工具。</strong> 如 <a href="https://ipapi.is/">ipapi.is</a> 可以检测一个 IP 是否被标记为 VPN&#x2F;代理。</li><li><strong>查看 IP 信誉评分。</strong> ipinfo.io 的 privacy 检测可以显示一个 IP 是否被标记为 VPN、代理或 Tor 出口。</li></ol><p>需要注意的是，”干净”是一个相对和动态的概念：</p><ul><li>一个 IP 可能在 Netflix 上”干净”但在 Disney+ 上”脏”——不同平台使用不同的黑名单。</li><li>一个 IP 今天”干净”，明天可能被封——因为被大量用户共用或被扫描检测到。</li><li>一个曾经”脏”的 IP 也可能随时间推移逐渐”变干净”——如果长期没有被代理使用，平台可能会解除标记。</li></ul><hr><h2 id="实际应用示例"><a href="#实际应用示例" class="headerlink" title="实际应用示例"></a>实际应用示例</h2><h3 id="场景一：评估一个新机场"><a href="#场景一：评估一个新机场" class="headerlink" title="场景一：评估一个新机场"></a>场景一：评估一个新机场</h3><p>你订阅了一个新机场，想知道它的节点质量。连上一个日本节点后，先查一下出口 IP：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl ipinfo.io</span><br></pre></td></tr></table></figure><p>如果返回结果显示：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">org: AS20473 The Constant Company, LLC</span><br></pre></td></tr></table></figure><p>你就知道这是 Vultr 的数据中心 IP。解锁能力一般，Netflix 日本大概率不行（除非这个特定 IP 碰巧还没被封）。</p><p>如果返回结果显示：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">org: AS2516 KDDI Corporation</span><br></pre></td></tr></table></figure><p>这是日本 KDDI 的 ISP IP——原生日本 IP，解锁能力强，品质相对较高。</p><h3 id="场景二：排查解锁失败"><a href="#场景二：排查解锁失败" class="headerlink" title="场景二：排查解锁失败"></a>场景二：排查解锁失败</h3><p>你的美国节点之前能看 Netflix，突然不行了。查一下出口 IP 的 ASN：</p><p>如果 ASN 属于某个云服务商，大概率是这个 IP 段被 Netflix 新加入了黑名单。你可以尝试切换到同机场的其他美国节点（可能使用不同 IP 段），或者联系机场客服反馈。</p><p>如果 ASN 属于 ISP，那可能是特定 IP 因为被过多用户共用而被标记。这种情况下，机场运营者可能需要轮换 IP 地址。</p><h3 id="场景三：选择机场时的参考"><a href="#场景三：选择机场时的参考" class="headerlink" title="场景三：选择机场时的参考"></a>场景三：选择机场时的参考</h3><p>当你对比多个机场时，可以分别试用后检查它们的节点 IP 归属。一个使用 ISP IP（特别是本地 ISP IP）的机场，在解锁能力和稳定性上通常优于使用便宜云服务商 IP 的机场——虽然价格也会更高。</p><p>这并不意味着数据中心 IP 的节点完全没有价值。对于单纯的翻墙上网（不需要解锁流媒体或 AI 服务），数据中心 IP 完全够用。但如果你的核心需求是流媒体解锁或 AI 服务访问，IP 质量就是一个需要重点关注的因素。</p><hr><h2 id="常见的数据中心-ASN"><a href="#常见的数据中心-ASN" class="headerlink" title="常见的数据中心 ASN"></a>常见的数据中心 ASN</h2><p>以下是代理场景中最常遇到的数据中心 ASN。如果你查询到节点 IP 属于这些 AS，说明它是数据中心 IP：</p><table><thead><tr><th>ASN</th><th>组织</th><th>说明</th></tr></thead><tbody><tr><td>AS16509</td><td>Amazon (AWS)</td><td>全球最大的云平台</td></tr><tr><td>AS14061</td><td>DigitalOcean</td><td>中等价位 VPS</td></tr><tr><td>AS20473</td><td>Vultr &#x2F; The Constant Company</td><td>热门 VPS</td></tr><tr><td>AS24940</td><td>Hetzner</td><td>欧洲热门廉价 VPS</td></tr><tr><td>AS16276</td><td>OVH</td><td>欧洲大型云服务商</td></tr><tr><td>AS63949</td><td>Linode (Akamai)</td><td>知名 VPS</td></tr><tr><td>AS13335</td><td>Cloudflare</td><td>CDN &#x2F; 网络服务</td></tr><tr><td>AS396982</td><td>Google Cloud</td><td>GCP</td></tr><tr><td>AS8075</td><td>Microsoft Azure</td><td>微软云</td></tr><tr><td>AS25820</td><td>IT7 Networks (搬瓦工)</td><td>华人用户常用</td></tr><tr><td>AS906</td><td>DMIT</td><td>面向亚洲优化的 VPS</td></tr><tr><td>AS51847</td><td>Nearoute (IPLC 提供商)</td><td>专线服务</td></tr></tbody></table><hr><h2 id="常见的-ISP-ASN"><a href="#常见的-ISP-ASN" class="headerlink" title="常见的 ISP ASN"></a>常见的 ISP ASN</h2><p>以下是各地区常见的 ISP ASN。节点使用这些 AS 的 IP 通常意味着更好的解锁能力：</p><table><thead><tr><th>地区</th><th>ASN</th><th>组织</th></tr></thead><tbody><tr><td>日本</td><td>AS2516</td><td>KDDI Corporation</td></tr><tr><td>日本</td><td>AS4713</td><td>NTT Communications (OCN)</td></tr><tr><td>日本</td><td>AS17676</td><td>SoftBank (BBTEC)</td></tr><tr><td>美国</td><td>AS7922</td><td>Comcast</td></tr><tr><td>美国</td><td>AS7018</td><td>AT&amp;T</td></tr><tr><td>美国</td><td>AS701</td><td>Verizon</td></tr><tr><td>香港</td><td>AS4515</td><td>PCCW</td></tr><tr><td>香港</td><td>AS9269</td><td>HKBN (Hong Kong Broadband)</td></tr><tr><td>台湾</td><td>AS3462</td><td>中华电信 (HiNet)</td></tr><tr><td>新加坡</td><td>AS4657</td><td>StarHub</td></tr><tr><td>新加坡</td><td>AS9506</td><td>SingTel</td></tr><tr><td>韩国</td><td>AS4766</td><td>Korea Telecom (KT)</td></tr><tr><td>韩国</td><td>AS3786</td><td>LG Uplus</td></tr><tr><td>英国</td><td>AS5089</td><td>Virgin Media</td></tr><tr><td>德国</td><td>AS3320</td><td>Deutsche Telekom</td></tr></tbody></table><hr><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="一个-IP-可以属于多个-AS-吗？"><a href="#一个-IP-可以属于多个-AS-吗？" class="headerlink" title="一个 IP 可以属于多个 AS 吗？"></a>一个 IP 可以属于多个 AS 吗？</h3><p>通常不会。一个 IP 前缀在某一时刻只由一个 AS 公告。但在特殊情况下（如 anycast 服务），同一个 IP 前缀可能从多个物理位置的路由器公告，不过它们仍然属于同一个 AS。</p><h3 id="ASN-查询的结果会变化吗？"><a href="#ASN-查询的结果会变化吗？" class="headerlink" title="ASN 查询的结果会变化吗？"></a>ASN 查询的结果会变化吗？</h3><p>会。IP 地址可以在不同组织之间转让，AS 也可以变更自己公告的前缀。一个 IP 今天属于 AS-A，几个月后可能被转让给 AS-B。但在代理场景中，这种变化通常不会频繁发生。</p><h3 id="为什么有些节点的-IP-查不到-ASN？"><a href="#为什么有些节点的-IP-查不到-ASN？" class="headerlink" title="为什么有些节点的 IP 查不到 ASN？"></a>为什么有些节点的 IP 查不到 ASN？</h3><p>极少数情况下，某些 IP 可能没有被任何 AS 公告（属于未使用或保留的地址段），或者查询工具的数据库更新有延迟。这种情况下，可以换一个查询工具试试。</p><h3 id="数据中心-IP-完全没法解锁吗？"><a href="#数据中心-IP-完全没法解锁吗？" class="headerlink" title="数据中心 IP 完全没法解锁吗？"></a>数据中心 IP 完全没法解锁吗？</h3><p>不是绝对的。某些数据中心的特定 IP 段可能尚未被平台标记，仍然可以解锁。但这种”可用”状态通常不稳定——随时可能被封。相比之下，ISP IP 的解锁持久性要好得多。此外，一些机场运营者通过技术手段（如 DNS 解锁）配合数据中心 IP 实现解锁，具体原理可以参考 <a href="/posts/dns-vs-native-unlock/">DNS 解锁与原生解锁的区别</a>。</p><h3 id="查-ASN-对普通用户有用吗？"><a href="#查-ASN-对普通用户有用吗？" class="headerlink" title="查 ASN 对普通用户有用吗？"></a>查 ASN 对普通用户有用吗？</h3><p>如果你只是日常翻墙浏览网页，不需要关心 ASN。但如果你重视流媒体解锁、AI 服务访问或节点稳定性，了解 ASN 的基础知识可以帮助你更理性地选择机场和评估节点质量——不被宣传话术迷惑，用数据说话。</p>]]></content>
      
      
      <categories>
          
          <category> 网络知识 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> BGP </tag>
            
            <tag> ASN </tag>
            
            <tag> IP </tag>
            
            <tag> 查询 </tag>
            
            <tag> 工具 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>Clash 系列全解：Clash Premium / Clash Meta / mihomo 的关系</title>
      <link href="/posts/clash-family/"/>
      <url>/posts/clash-family/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：Clash 生态经历了开源、闭源、删库、fork 等戏剧性事件。本文梳理 Clash 系列的演变历史，解释各个分支的关系，帮助你理解当前应该使用哪个版本。</p></blockquote><h2 id="Clash-的诞生与繁荣"><a href="#Clash-的诞生与繁荣" class="headerlink" title="Clash 的诞生与繁荣"></a>Clash 的诞生与繁荣</h2><p>2018 至 2019 年间，开发者 Dreamacro 用 Go 语言创建了 Clash——一个基于规则的代理客户端。它的出现彻底改变了中文代理社区的格局。</p><p>在 Clash 之前，代理客户端的配置方式大多是图形界面点选或 JSON 手写，灵活性和可读性都有限。Clash 引入了 <strong>YAML 配置文件</strong>这一设计，让配置变得既直观又强大。一份 YAML 文件就能定义所有的代理节点、分流规则、DNS 设置和策略组——而且可读、可版本控制、可复用。</p><p>Clash 带来的核心创新包括：</p><ul><li><strong>YAML 配置格式</strong>：结构清晰、易于维护，对比 JSON 大幅降低了配置门槛。</li><li><strong>代理组（Proxy Groups）</strong>：支持自动选择、负载均衡、故障转移等策略，节点管理从”选一个用”变成了”设好策略自动选”。</li><li><strong>规则分流系统</strong>：通过 DOMAIN、GEOIP、IP-CIDR 等规则类型，精确控制每一条连接走代理还是直连。</li><li><strong>混合代理模式</strong>：同时支持 HTTP 代理、SOCKS5 代理和透明代理，一个客户端满足所有场景。</li><li><strong>rule-provider</strong>：将规则集独立托管，客户端自动拉取更新，不需要每次手动修改配置文件。</li><li><strong>RESTful API</strong>：提供外部控制接口，让 Web UI 和第三方工具能远程管理 Clash。</li></ul><p>凭借这些设计，Clash 迅速成为中文代理社区最主流的框架。它的成功不仅在于自身，还在于催生了一整个生态——基于 Clash 的图形化客户端、规则集、配置模板、订阅转换服务遍地开花。</p><h3 id="两个版本：Clash-与-Clash-Premium"><a href="#两个版本：Clash-与-Clash-Premium" class="headerlink" title="两个版本：Clash 与 Clash Premium"></a>两个版本：Clash 与 Clash Premium</h3><p>Clash 在早期就分化为两个版本：</p><ul><li><strong>Clash（开源版）</strong>：核心功能完整，代码开源在 GitHub，社区可以审计和贡献。</li><li><strong>Clash Premium（闭源版）</strong>：在开源版基础上增加了高级功能，以二进制形式分发，不开放源码。</li></ul><p>Clash Premium 增加的关键特性包括 <strong>TUN 模式</strong>（在系统层面接管所有流量，不仅限于配置了代理的应用）、<strong>rule-provider</strong>（早期只有 Premium 版支持）、<strong>Script 脚本支持</strong>（用 Python&#x2F;JS 编写自定义分流逻辑）。</p><p>这种”核心开源 + 高级功能闭源”的模式在当时并不罕见，Clash Premium 的功能确实强大，但闭源也为后来的变故埋下了隐患：一旦作者停止维护，社区无法接手闭源部分的代码。</p><h2 id="2023-年-11-月：大删库事件"><a href="#2023-年-11-月：大删库事件" class="headerlink" title="2023 年 11 月：大删库事件"></a>2023 年 11 月：大删库事件</h2><p>2023 年 11 月，Dreamacro 突然删除了 GitHub 上的 Clash 仓库。不仅仅是 Clash 核心——几乎在同一时间，基于 Clash 的多个重要项目也纷纷下线：</p><ul><li><strong>Clash for Windows</strong>（最流行的 Windows 端图形化客户端）宣布停止维护。</li><li><strong>Clash for Android</strong> 归档。</li><li>一系列相关工具和文档也被清理。</li></ul><p>这在中文代理社区引发了强烈震动。Clash 彼时已经是事实上的”基础设施”级项目，无数用户的日常上网依赖它，无数机场的配置格式围绕它构建。</p><p>关于删库的原因，Dreamacro 本人没有做详细公开说明。社区的普遍推测包括：</p><ul><li><strong>监管压力</strong>：Clash for Windows 的开发者据传受到了约谈或警告，引发连锁反应。</li><li><strong>个人决定</strong>：长期维护开源项目的压力和风险积累。</li><li><strong>法律风险规避</strong>：主动下架以避免潜在的法律责任。</li></ul><p>无论真实原因是什么，这次事件产生了两个关键结果：</p><ol><li><strong>原版 Clash 和 Clash Premium 彻底停止了更新。</strong> 没有新功能、没有 bug 修复、没有协议适配。</li><li><strong>社区 fork 成为唯一的延续路径。</strong> 幸运的是，Clash 的开源版本在删库前就已经被大量 fork，而且最重要的 fork——Clash Meta——在删库之前就已经是一个成熟的、独立发展的项目。</li></ol><h2 id="当前的-Clash-家族"><a href="#当前的-Clash-家族" class="headerlink" title="当前的 Clash 家族"></a>当前的 Clash 家族</h2><h3 id="Clash-Premium：已停止维护"><a href="#Clash-Premium：已停止维护" class="headerlink" title="Clash Premium：已停止维护"></a>Clash Premium：已停止维护</h3><p>Clash Premium 作为原版闭源增强版，曾是功能最完整的 Clash 内核。它支持 TUN 模式、rule-provider、Script 脚本等高级功能，在很长一段时间内是高级用户和机场配置的首选内核。</p><p>但由于闭源且已停更，Clash Premium 存在以下问题：</p><ul><li><strong>不再有安全更新</strong>：已知的漏洞不会被修复。</li><li><strong>不支持新协议</strong>：VLESS、Reality、Hysteria2 等 2023 年后成为主流的协议完全不被支持。</li><li><strong>无法获取新版本</strong>：官方分发渠道已关闭，网上流传的版本来源不明，存在安全隐患。</li></ul><p><strong>如果你还在使用 Clash Premium，强烈建议尽快迁移到 mihomo。</strong> 迁移成本几乎为零——mihomo 完全兼容 Clash Premium 的配置格式。</p><h3 id="Clash-Meta-到-mihomo：核心继承者"><a href="#Clash-Meta-到-mihomo：核心继承者" class="headerlink" title="Clash Meta 到 mihomo：核心继承者"></a>Clash Meta 到 mihomo：核心继承者</h3><p><strong>mihomo</strong>（原名 Clash.Meta）是当前 Clash 生态最重要的项目，也是事实上的”Clash 正统继承者”。</p><p>这个项目由 MetaCubeX 团队维护，创建时间早于删库事件。最初，它作为 Clash 的一个增强 fork 存在，目标是添加原版 Clash 和 Clash Premium 都不支持的新协议和新功能。</p><p>在删库事件后，Clash.Meta 更名为 <strong>mihomo</strong>——这个看似随意的名字背后是出于法律和安全考量的慎重决定。与”Clash”品牌脱钩，可以降低项目因名称关联而受到波及的风险。</p><p>mihomo 的定位非常明确：<strong>在完全兼容 Clash 配置格式的前提下，持续跟进最新的代理协议和技术。</strong></p><p>目前 mihomo 活跃维护，更新频率高，新协议的支持通常在协议发布后很快跟进。它已经取代了原版 Clash 和 Clash Premium 的位置，成为绝大多数 Clash 系客户端的底层内核。</p><p><strong>GitHub 地址</strong>：<a href="https://github.com/MetaCubeX/mihomo">MetaCubeX&#x2F;mihomo</a></p><h3 id="其他值得关注的分支"><a href="#其他值得关注的分支" class="headerlink" title="其他值得关注的分支"></a>其他值得关注的分支</h3><p>除了 mihomo，Clash 删库后还出现了一些其他 fork 和衍生项目。但从活跃度、功能完整度和社区采用度来看，mihomo 是压倒性的主流选择，其他项目的影响力相对有限。MetaCubeX 团队同时还维护 <strong>metacubexd</strong>（一个现代化的 Clash Web Dashboard）等配套工具，形成了完整的生态。</p><h2 id="基于-mihomo-的客户端"><a href="#基于-mihomo-的客户端" class="headerlink" title="基于 mihomo 的客户端"></a>基于 mihomo 的客户端</h2><p>mihomo 本身是一个命令行内核。大多数用户通过图形化客户端来使用它——这些客户端内置或调用 mihomo 核心，提供界面操作。</p><h3 id="Clash-Verge-Rev（桌面端首选）"><a href="#Clash-Verge-Rev（桌面端首选）" class="headerlink" title="Clash Verge Rev（桌面端首选）"></a>Clash Verge Rev（桌面端首选）</h3><ul><li><strong>平台</strong>：Windows &#x2F; macOS &#x2F; Linux</li><li><strong>技术栈</strong>：Tauri（Rust + Web 前端）</li><li><strong>定位</strong>：当前桌面端最推荐的 Clash 系客户端</li></ul><p>Clash Verge Rev 是原 Clash Verge 项目的社区继承版本。原版 Clash Verge 在大删库事件后也停止了更新，社区随后 fork 并继续维护，命名为 Clash Verge Rev（Rev 即 Revival&#x2F;Revised 之意）。</p><p>它的优势在于：</p><ul><li><strong>界面现代</strong>：比起老旧的 Clash for Windows，UI 设计更加清爽。</li><li><strong>内存占用低</strong>：得益于 Tauri 框架（Rust 后端），相比 Electron 方案内存占用显著更小。</li><li><strong>功能完整</strong>：支持 mihomo 的全部功能，包括 TUN 模式、规则集管理、节点测速等。</li><li><strong>更新活跃</strong>：社区持续维护，跟进 mihomo 的新版本。</li></ul><p><strong>GitHub 地址</strong>：<a href="https://github.com/clash-verge-rev/clash-verge-rev">clash-verge-rev&#x2F;clash-verge-rev</a></p><h3 id="OpenClash（路由器端首选）"><a href="#OpenClash（路由器端首选）" class="headerlink" title="OpenClash（路由器端首选）"></a>OpenClash（路由器端首选）</h3><ul><li><strong>平台</strong>：OpenWrt</li><li><strong>定位</strong>：路由器级别的代理解决方案，全家设备无需单独安装客户端</li></ul><p><a href="https://github.com/vernesong/OpenClash">OpenClash</a> 是 OpenWrt 路由器上最流行的代理插件。它通过 LuCI Web 界面提供管理能力，支持 mihomo 内核，可以在路由器层面为整个局域网提供透明代理。</p><p>对于家庭用户来说，在路由器上运行 OpenClash 意味着所有连接到这个路由器的设备——手机、平板、电视、游戏机——都自动通过代理上网，无需逐一安装和配置客户端。</p><h3 id="Clash-Meta-for-Android（Android-端）"><a href="#Clash-Meta-for-Android（Android-端）" class="headerlink" title="Clash Meta for Android（Android 端）"></a>Clash Meta for Android（Android 端）</h3><ul><li><strong>平台</strong>：Android</li><li><strong>定位</strong>：Android 上的 mihomo 图形化客户端</li></ul><p>采用 Material Design 界面风格，功能覆盖 mihomo 的主要特性。支持导入订阅链接、管理规则集、切换节点和代理模式。对于 Android 用户来说，是比较直接的 Clash 系选择。</p><p>不过需要注意，Android 端目前也有 sing-box 等替代方案正在快速发展。</p><h3 id="Stash（iOS-端）"><a href="#Stash（iOS-端）" class="headerlink" title="Stash（iOS 端）"></a>Stash（iOS 端）</h3><ul><li><strong>平台</strong>：iOS &#x2F; macOS</li><li><strong>定位</strong>：兼容 Clash 配置格式的商业客户端</li></ul><p><a href="https://apps.apple.com/app/stash-rule-based-proxy/id1596063349">Stash</a> 是一款付费应用（App Store 上架），<strong>不直接使用 mihomo 内核</strong>，而是使用自己的实现。但它兼容 Clash YAML 配置格式，这意味着你为 Clash&#x2F;mihomo 编写的配置文件可以直接导入 Stash 使用。</p><p>对于 iOS 用户来说，Stash 和 Shadowrocket 是两个主要选择。Stash 更偏向”Clash 生态”，Shadowrocket 则更通用。</p><h2 id="mihomo-相比原版-Clash-的改进"><a href="#mihomo-相比原版-Clash-的改进" class="headerlink" title="mihomo 相比原版 Clash 的改进"></a>mihomo 相比原版 Clash 的改进</h2><p>mihomo 不仅仅是”接手维护”，它在功能上已经远远超越了原版 Clash Premium。以下是关键差异：</p><table><thead><tr><th>特性</th><th>原版 Clash Premium</th><th>mihomo</th></tr></thead><tbody><tr><td>VLESS 协议</td><td>❌ 不支持</td><td>✅ 完整支持</td></tr><tr><td>Reality 协议</td><td>❌ 不支持</td><td>✅ 完整支持</td></tr><tr><td>Hysteria2</td><td>❌ 不支持</td><td>✅ 完整支持</td></tr><tr><td>TUIC 协议</td><td>❌ 不支持</td><td>✅ 完整支持</td></tr><tr><td>TCP Brutal</td><td>❌ 不支持</td><td>✅ 支持</td></tr><tr><td>Sub-Rule</td><td>❌ 不支持</td><td>✅ 支持嵌套规则</td></tr><tr><td>GeoSite 数据库</td><td>有限支持</td><td>✅ 完整支持</td></tr><tr><td>XHTTP 传输</td><td>❌ 不支持</td><td>✅ 支持</td></tr><tr><td>SSH 协议代理</td><td>❌ 不支持</td><td>✅ 支持</td></tr><tr><td>维护状态</td><td>已停止（2023 年 11 月）</td><td>活跃开发中</td></tr></tbody></table><p>几个特别值得说明的改进：</p><ul><li><strong>VLESS + Reality</strong>：这是目前抗检测能力最强的协议组合之一。mihomo 对其的支持意味着你可以在 Clash 配置体系下直接使用最先进的协议，不需要切换到其他内核。详见 <a href="../protocols/vless-reality-deep-dive.md">VLESS + Reality 深度解析</a>。</li><li><strong>Hysteria2 和 TUIC</strong>：这两个基于 QUIC（UDP）的协议在高延迟、高丢包网络下有显著优势。原版 Clash 完全没有 UDP 代理协议的支持，mihomo 填补了这个空白。</li><li><strong>Sub-Rule（子规则）</strong>：允许在规则匹配后进一步细分处理逻辑，配置灵活度大幅提升。</li></ul><h2 id="配置兼容性"><a href="#配置兼容性" class="headerlink" title="配置兼容性"></a>配置兼容性</h2><p>从 Clash Premium 迁移到 mihomo，配置兼容性是大多数用户最关心的问题。好消息是：<strong>mihomo 对 Clash Premium 配置格式保持了高度向后兼容</strong>。</p><p>具体来说：</p><ul><li><strong>标准 Clash YAML 配置文件</strong>可以直接被 mihomo 解析和使用，几乎不需要任何修改。</li><li><strong>rule-provider、proxy-provider</strong> 等 Clash Premium 引入的功能在 mihomo 中完全支持。</li><li><strong>代理组策略</strong>（url-test、fallback、load-balance 等）的语法和行为与原版一致。</li><li><strong>DNS 配置</strong>的格式和逻辑兼容。</li></ul><p>新功能方面，mihomo 使用了扩展的 YAML 语法来支持原版 Clash 不存在的协议和特性。例如，添加一个 VLESS + Reality 节点的写法：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">proxies:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">&quot;vless-reality&quot;</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">vless</span></span><br><span class="line">    <span class="attr">server:</span> <span class="string">your.server.com</span></span><br><span class="line">    <span class="attr">port:</span> <span class="number">443</span></span><br><span class="line">    <span class="attr">uuid:</span> <span class="string">your-uuid</span></span><br><span class="line">    <span class="attr">network:</span> <span class="string">tcp</span></span><br><span class="line">    <span class="attr">tls:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">udp:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">flow:</span> <span class="string">xtls-rprx-vision</span></span><br><span class="line">    <span class="attr">servername:</span> <span class="string">www.microsoft.com</span></span><br><span class="line">    <span class="attr">reality-opts:</span></span><br><span class="line">      <span class="attr">public-key:</span> <span class="string">your-public-key</span></span><br><span class="line">      <span class="attr">short-id:</span> <span class="string">your-short-id</span></span><br></pre></td></tr></table></figure><p>这些扩展语法不会影响已有的 Clash 配置——你的旧配置依然正常工作，只是在需要使用新协议时才会用到新语法。</p><p><strong>订阅转换</strong>方面，主流的订阅转换服务（如 <a href="https://github.com/tindy2013/subconverter">subconverter</a>）都已支持输出 mihomo 兼容格式。大多数机场的订阅链接也已经默认适配 mihomo。如果你的机场订阅链接直接能用，不需要做任何转换。</p><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="Q：现在搜”Clash”搜到的是什么版本？"><a href="#Q：现在搜”Clash”搜到的是什么版本？" class="headerlink" title="Q：现在搜”Clash”搜到的是什么版本？"></a>Q：现在搜”Clash”搜到的是什么版本？</h3><p>如果你在搜索引擎中搜索”Clash 代理”或”Clash 下载”，搜到的几乎都是基于 mihomo 的产品——Clash Verge Rev、OpenClash、Clash Meta for Android 等。原版 Clash 和 Clash Premium 的下载链接已经不存在了。在 2024 年之后的语境下，”Clash”这个词实际上已经等同于”mihomo 生态”。</p><h3 id="Q：我的-Clash-配置文件还能用吗？"><a href="#Q：我的-Clash-配置文件还能用吗？" class="headerlink" title="Q：我的 Clash 配置文件还能用吗？"></a>Q：我的 Clash 配置文件还能用吗？</h3><p>如果你的配置是标准的 Clash YAML 格式，几乎 100% 可以直接在 mihomo 下使用。直接导入即可。唯一可能需要调整的情况是：你的配置中使用了 Clash Premium 的 Script 功能（用 Python 脚本自定义分流逻辑），这个功能在 mihomo 中的实现方式有所不同。</p><h3 id="Q：Clash-Verge-和-Clash-Verge-Rev-什么关系？"><a href="#Q：Clash-Verge-和-Clash-Verge-Rev-什么关系？" class="headerlink" title="Q：Clash Verge 和 Clash Verge Rev 什么关系？"></a>Q：Clash Verge 和 Clash Verge Rev 什么关系？</h3><p>Clash Verge 是原版客户端，由 zzzgydi 开发。在删库事件后，原版 Clash Verge 也停止了更新。Clash Verge Rev 是社区基于原版的 fork，由新的维护团队继续开发。两者的界面和交互非常相似，但 Rev 版本修复了旧版的 bug、跟进了 mihomo 的新功能、改善了性能和稳定性。<strong>推荐使用 Rev 版本</strong>。</p><h3 id="Q：还有必要用-Clash-系吗？Sing-box-不是更新？"><a href="#Q：还有必要用-Clash-系吗？Sing-box-不是更新？" class="headerlink" title="Q：还有必要用 Clash 系吗？Sing-box 不是更新？"></a>Q：还有必要用 Clash 系吗？Sing-box 不是更新？</h3><p>这是一个好问题。sing-box 确实是更新的代理框架，架构设计更现代，性能也有一定优势。但 Clash 系（mihomo）的核心优势在两个方面：</p><ol><li><strong>规则系统的成熟度</strong>：Clash 的 rule-provider 生态已经非常完善，社区维护着大量成熟的规则集（Loyalsoldier、MetaCubeX、ACL4SSR 等），覆盖了绝大多数分流场景。这些规则集经过多年迭代，准确性高、维护频繁。</li><li><strong>社区生态的庞大</strong>：配置模板、教程文档、问题解答——围绕 Clash&#x2F;mihomo 的社区资源极其丰富。遇到问题时，搜索到解决方案的概率远高于 sing-box。</li></ol><p>对于大多数用户来说，Clash Verge Rev（mihomo 内核）仍然是<strong>上手最快、维护成本最低</strong>的选择。如果你对 sing-box 有兴趣，可以参考 <a href="./singbox-guide.md">Sing-box 使用指南</a> 和 <a href="./singbox-vs-clash-tun.md">Sing-box TUN vs Clash Verge TUN：实际体验对比</a>。</p><h3 id="Q：mihomo-的名字为什么这么奇怪？"><a href="#Q：mihomo-的名字为什么这么奇怪？" class="headerlink" title="Q：mihomo 的名字为什么这么奇怪？"></a>Q：mihomo 的名字为什么这么奇怪？</h3><p>mihomo 这个名字并没有特别深的含义。项目更名的主要目的是与”Clash”品牌脱钩，降低因品牌名称关联而带来的法律和安全风险。名字本身不重要——重要的是它是目前最活跃、功能最完整的 Clash 兼容内核。</p><h3 id="Q：我是新用户，应该从哪个客户端开始？"><a href="#Q：我是新用户，应该从哪个客户端开始？" class="headerlink" title="Q：我是新用户，应该从哪个客户端开始？"></a>Q：我是新用户，应该从哪个客户端开始？</h3><p>根据你的平台选择：</p><ul><li><strong>Windows &#x2F; macOS &#x2F; Linux</strong>：Clash Verge Rev。下载安装后导入订阅链接即可使用。</li><li><strong>Android</strong>：Clash Meta for Android 或 v2rayNG。</li><li><strong>iOS</strong>：Stash（付费，兼容 Clash 配置）或 Shadowrocket（付费，更通用）。</li><li><strong>路由器（OpenWrt）</strong>：OpenClash。</li></ul><p>如果你是第一次使用代理，建议先阅读 <a href="../beginner/first-time-setup.md">第一次使用代理：从零开始的配置指南</a>。</p><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>Clash 的故事是开源社区韧性的一个缩影。原始项目虽然消失了，但它的设计理念和配置生态通过 mihomo 延续了下来，并且在功能上走得更远。</p><p>当前的 Clash 生态简单明了：</p><ul><li><strong>内核</strong>：mihomo（MetaCubeX&#x2F;mihomo）——唯一活跃维护的 Clash 兼容内核。</li><li><strong>桌面客户端</strong>：Clash Verge Rev——最推荐的跨平台图形化客户端。</li><li><strong>路由器</strong>：OpenClash——OpenWrt 上的首选方案。</li><li><strong>配置格式</strong>：Clash YAML——经过 mihomo 扩展，支持所有现代协议。</li></ul><p>如果你曾经用过 Clash，你的知识和配置仍然有效。如果你是新用户，直接从 mihomo 生态开始即可。无论哪种情况，Clash 的规则系统和配置哲学在代理工具领域仍然是最成熟、最易用的方案之一。</p>]]></content>
      
      
      <categories>
          
          <category> 代理软件 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> Clash </tag>
            
            <tag> mihomo </tag>
            
            <tag> Clash Verge </tag>
            
            <tag> OpenClash </tag>
            
            <tag> 客户端 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>Clash 规则集详解：rule-provider 是什么、怎么用</title>
      <link href="/posts/clash-rule-providers/"/>
      <url>/posts/clash-rule-providers/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：rule-provider 是 Clash（mihomo）中管理分流规则的核心机制。它允许你从外部加载和自动更新规则列表，而不用在配置文件中手写成百上千条规则。本文详解 rule-provider 的工作原理、配置方法和常用规则集推荐。</p></blockquote><h2 id="为什么需要-rule-provider"><a href="#为什么需要-rule-provider" class="headerlink" title="为什么需要 rule-provider"></a>为什么需要 rule-provider</h2><p>一个能用的代理配置，分流规则是核心。你需要告诉客户端：哪些流量走代理、哪些直连、哪些应该屏蔽。</p><p>如果不使用 rule-provider，你的配置文件里会写满这样的内容：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">rules:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,google.com,Proxy</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,googleapis.com,Proxy</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,youtube.com,Proxy</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,twitter.com,Proxy</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,facebook.com,Proxy</span></span><br><span class="line">  <span class="comment"># ... 还有几千条</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">IP-CIDR,91.108.0.0/16,Proxy</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">IP-CIDR,149.154.0.0/16,Proxy</span></span><br><span class="line">  <span class="comment"># ... 还有几百条 IP 段</span></span><br></pre></td></tr></table></figure><p>这种做法有三个严重问题：</p><ol><li><p><strong>配置文件膨胀</strong>。一套完整的分流规则通常包含数千条记录——GFW 屏蔽的域名、国内直连的域名和 IP 段、广告域名、各种流媒体的域名。全部写在主配置文件中，文件大小动辄几百 KB，打开编辑都很困难。</p></li><li><p><strong>无法自动更新</strong>。GFW 的屏蔽列表不是固定的，新的域名不断被封锁，旧的 IP 段可能被释放。广告域名的变化更加频繁。如果规则写死在配置文件里，你需要手动追踪这些变化并逐条更新，这在实际操作中几乎不可能做到。</p></li><li><p><strong>维护成本极高</strong>。当你想调整分流策略时——比如把 Netflix 从通用代理组移到专门的流媒体组——你需要在几千条规则中找到所有相关条目并逐一修改。</p></li></ol><p>rule-provider 的思路和浏览器的广告拦截器完全一样：<strong>你不用自己编写拦截规则，只需要订阅别人维护的规则列表。</strong> 列表的维护者会持续更新内容，你的客户端定期拉取最新版本，始终保持规则的时效性。</p><h2 id="rule-provider-的工作原理"><a href="#rule-provider-的工作原理" class="headerlink" title="rule-provider 的工作原理"></a>rule-provider 的工作原理</h2><p>rule-provider 的运行逻辑分为三个阶段：</p><p><strong>加载阶段</strong>：Clash 启动时，读取配置文件中 <code>rule-providers</code> 段的定义。对于每个 provider，根据 <code>type</code> 字段决定加载方式——<code>http</code> 类型会从指定 URL 下载规则文件，<code>file</code> 类型会从本地路径读取文件。下载的文件会缓存到 <code>path</code> 指定的本地路径。</p><p><strong>更新阶段</strong>：对于 <code>http</code> 类型的 provider，Clash 会按照 <code>interval</code> 字段设定的时间间隔（单位为秒）重新下载规则文件。如果下载失败（比如网络不可用），Clash 会继续使用上一次成功下载的缓存文件，不会中断服务。</p><p><strong>匹配阶段</strong>：当有流量进入时，Clash 按照 <code>rules</code> 段的顺序逐条匹配。遇到 <code>RULE-SET</code> 类型的规则时，Clash 会在对应的 rule-provider 加载的规则列表中查找匹配项。如果找到匹配，按照 <code>RULE-SET</code> 指定的策略组处理；如果没有匹配，继续检查下一条规则。</p><p><strong>规则文件格式</strong>：rule-provider 支持三种格式：</p><ul><li><strong>text</strong>：纯文本格式，每行一条规则，最直观也最通用</li><li><strong>yaml</strong>：YAML 格式，规则包裹在 <code>payload</code> 字段中</li><li><strong>mrs</strong>：mihomo 专有的二进制格式，加载速度最快，但只有 mihomo 内核支持</li></ul><h2 id="配置方法"><a href="#配置方法" class="headerlink" title="配置方法"></a>配置方法</h2><h3 id="基本语法"><a href="#基本语法" class="headerlink" title="基本语法"></a>基本语法</h3><p>rule-provider 的配置分为两部分：先在 <code>rule-providers</code> 段定义规则集，再在 <code>rules</code> 段中引用它们。</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">rule-providers:</span></span><br><span class="line">  <span class="attr">google:</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">http</span></span><br><span class="line">    <span class="attr">behavior:</span> <span class="string">domain</span></span><br><span class="line">    <span class="attr">url:</span> <span class="string">&quot;https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/google.txt&quot;</span></span><br><span class="line">    <span class="attr">path:</span> <span class="string">./ruleset/google.txt</span></span><br><span class="line">    <span class="attr">interval:</span> <span class="number">86400</span></span><br><span class="line">    <span class="attr">format:</span> <span class="string">text</span></span><br><span class="line"></span><br><span class="line">  <span class="attr">cn-cidr:</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">http</span></span><br><span class="line">    <span class="attr">behavior:</span> <span class="string">ipcidr</span></span><br><span class="line">    <span class="attr">url:</span> <span class="string">&quot;https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/cncidr.txt&quot;</span></span><br><span class="line">    <span class="attr">path:</span> <span class="string">./ruleset/cncidr.txt</span></span><br><span class="line">    <span class="attr">interval:</span> <span class="number">86400</span></span><br><span class="line">    <span class="attr">format:</span> <span class="string">text</span></span><br><span class="line"></span><br><span class="line"><span class="attr">rules:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,google,Proxy</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,cn-cidr,DIRECT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">MATCH,Proxy</span></span><br></pre></td></tr></table></figure><h3 id="参数详解"><a href="#参数详解" class="headerlink" title="参数详解"></a>参数详解</h3><p>每个 rule-provider 包含以下参数：</p><p><strong>type</strong> – 加载方式</p><ul><li><code>http</code>：从远程 URL 下载规则文件。适合使用公共维护的规则集。</li><li><code>file</code>：从本地文件路径读取。适合自定义规则或网络受限环境。</li></ul><p><strong>behavior</strong> – 规则行为类型</p><p>这是最容易混淆的参数，决定了规则文件内容的解析方式。三种取值对应三种不同的文件格式要求：</p><ul><li><code>domain</code>：文件中每一行是一个域名，Clash 自动按 DOMAIN-SUFFIX 逻辑匹配。</li><li><code>ipcidr</code>：文件中每一行是一个 IP CIDR 段。</li><li><code>classical</code>：文件中每一行是完整的规则语法（包含规则类型前缀）。</li></ul><p><strong>url</strong> – 远程下载地址</p><p>规则文件的 URL。仅在 <code>type: http</code> 时需要。建议使用 CDN 加速地址（如 jsdelivr）以提高下载成功率。</p><p><strong>path</strong> – 本地缓存路径</p><p>下载的规则文件在本地的存储路径。即使是 <code>http</code> 类型也需要指定，用于缓存下载的文件。路径相对于 Clash 的配置目录。</p><p><strong>interval</strong> – 更新间隔</p><p>自动更新的时间间隔，单位为秒。<code>86400</code> 表示每 24 小时更新一次。设为 <code>0</code> 则不自动更新。</p><p><strong>format</strong> – 文件格式</p><ul><li><code>text</code>：纯文本，每行一条规则，最常用。</li><li><code>yaml</code>：YAML 格式，规则在 <code>payload</code> 列表中。</li><li><code>mrs</code>：mihomo 的二进制格式，解析速度最快。</li></ul><h3 id="behavior-类型详细说明"><a href="#behavior-类型详细说明" class="headerlink" title="behavior 类型详细说明"></a>behavior 类型详细说明</h3><p>三种 behavior 的区别是新手最容易踩坑的地方。文件内容格式必须和 behavior 声明严格对应，否则 Clash 无法正确解析。</p><p><strong>domain behavior</strong>：</p><p>文件内容只包含域名，不需要规则类型前缀：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">google.com</span><br><span class="line">googleapis.com</span><br><span class="line">youtube.com</span><br><span class="line">gstatic.com</span><br></pre></td></tr></table></figure><p>Clash 会自动将这些域名按 DOMAIN-SUFFIX 逻辑匹配。也就是说，<code>google.com</code> 会匹配 <code>google.com</code> 本身以及 <code>mail.google.com</code>、<code>docs.google.com</code> 等所有子域名。</p><p>在 <code>rules</code> 中引用时直接写 <code>RULE-SET,google,Proxy</code>，不需要再指定匹配类型。</p><p><strong>ipcidr behavior</strong>：</p><p>文件内容只包含 IP CIDR 段：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">91.108.0.0/16</span><br><span class="line">149.154.0.0/16</span><br></pre></td></tr></table></figure><p>引用方式与 domain 相同。当流量的目标 IP 落在这些 CIDR 范围内时，规则命中。</p><p><strong>classical behavior</strong>：</p><p>文件内容包含完整的规则语法，支持混合多种规则类型：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">DOMAIN-SUFFIX,google.com</span><br><span class="line">DOMAIN-KEYWORD,youtube</span><br><span class="line">IP-CIDR,91.108.0.0/16,no-resolve</span><br><span class="line">DOMAIN,api.openai.com</span><br></pre></td></tr></table></figure><p>classical 是最灵活的 behavior，因为一个文件中可以同时包含域名规则、IP 规则、关键词规则等。代价是解析速度略慢于 domain 和 ipcidr，因为 Clash 需要逐行解析规则类型前缀。</p><p><strong>选择建议</strong>：如果规则文件只包含域名，用 <code>domain</code>；只包含 IP 段，用 <code>ipcidr</code>；包含混合类型，用 <code>classical</code>。公共规则集的文档通常会标明应该使用哪种 behavior。</p><h3 id="在规则中引用-rule-provider"><a href="#在规则中引用-rule-provider" class="headerlink" title="在规则中引用 rule-provider"></a>在规则中引用 rule-provider</h3><p>定义好 rule-provider 后，在 <code>rules</code> 段中通过 <code>RULE-SET</code> 关键字引用：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">rules:</span></span><br><span class="line">  <span class="comment"># 广告拦截</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,reject,REJECT</span></span><br><span class="line">  <span class="comment"># 私有地址直连</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,private,DIRECT</span></span><br><span class="line">  <span class="comment"># 具体服务 → 专用策略组</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,openai,AI</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,google,Proxy</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,apple,Apple</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,netflix,Streaming</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,telegram,Telegram</span></span><br><span class="line">  <span class="comment"># 国内流量直连</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,cn-domain,DIRECT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,cn-cidr,DIRECT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOIP,CN,DIRECT</span></span><br><span class="line">  <span class="comment"># 兜底</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">MATCH,Proxy</span></span><br></pre></td></tr></table></figure><p>规则的匹配顺序至关重要：<strong>Clash 从上到下逐条匹配，第一条命中的规则生效。</strong> 因此：</p><ul><li>把 REJECT（广告拦截）放在最前面，确保广告域名不会被后面的规则放行</li><li>具体服务的规则放在通用规则前面，避免被更宽泛的规则覆盖</li><li>GEOIP 和 MATCH 放在最后作为兜底</li></ul><h2 id="常用规则集推荐"><a href="#常用规则集推荐" class="headerlink" title="常用规则集推荐"></a>常用规则集推荐</h2><h3 id="Loyalsoldier-clash-rules"><a href="#Loyalsoldier-clash-rules" class="headerlink" title="Loyalsoldier&#x2F;clash-rules"></a><a href="https://github.com/Loyalsoldier/clash-rules">Loyalsoldier&#x2F;clash-rules</a></h3><p>目前最流行的 Clash 规则集项目，社区维护活跃，覆盖全面。</p><p><strong>规则分类</strong>：</p><table><thead><tr><th>文件名</th><th>内容</th><th>behavior</th></tr></thead><tbody><tr><td><code>reject.txt</code></td><td>广告、追踪器域名</td><td>domain</td></tr><tr><td><code>direct.txt</code></td><td>国内直连域名</td><td>domain</td></tr><tr><td><code>proxy.txt</code></td><td>需要代理的域名</td><td>domain</td></tr><tr><td><code>google.txt</code></td><td>Google 服务域名</td><td>domain</td></tr><tr><td><code>apple.txt</code></td><td>Apple 服务域名</td><td>domain</td></tr><tr><td><code>icloud.txt</code></td><td>iCloud 域名</td><td>domain</td></tr><tr><td><code>private.txt</code></td><td>私有网络域名</td><td>domain</td></tr><tr><td><code>gfw.txt</code></td><td>GFW 屏蔽域名</td><td>domain</td></tr><tr><td><code>cncidr.txt</code></td><td>中国大陆 IP 段</td><td>ipcidr</td></tr><tr><td><code>telegramcidr.txt</code></td><td>Telegram IP 段</td><td>ipcidr</td></tr><tr><td><code>lancidr.txt</code></td><td>局域网 IP 段</td><td>ipcidr</td></tr></tbody></table><p><strong>URL 基础路径</strong>：<code>https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/</code></p><p><strong>格式</strong>：text</p><p><strong>适合人群</strong>：大多数用户。规则分类清晰，文件格式统一，文档完善。</p><h3 id="MetaCubeX-meta-rules-dat"><a href="#MetaCubeX-meta-rules-dat" class="headerlink" title="MetaCubeX&#x2F;meta-rules-dat"></a><a href="https://github.com/MetaCubeX/meta-rules-dat">MetaCubeX&#x2F;meta-rules-dat</a></h3><p>mihomo（Clash Meta）官方维护的规则数据集，提供 MRS 二进制格式。</p><p><strong>特点</strong>：</p><ul><li>提供 MRS 格式的规则文件，加载速度显著快于文本格式。在规则数量较大时（数万条），MRS 格式的解析时间可以比 text 格式快数倍。</li><li>规则数据来源于 v2fly&#x2F;domain-list-community 和 Loyalsoldier&#x2F;geoip 等上游项目，覆盖全面。</li><li>同时提供 GeoSite 和 GeoIP 数据，可以搭配 <code>GEOSITE</code> 和 <code>GEOIP</code> 规则使用。</li></ul><p><strong>适合人群</strong>：使用 mihomo 内核的用户。如果你的客户端是 Clash Verge Rev、Clash Nyanpasu 等基于 mihomo 的软件，优先考虑这个项目以获得最佳加载性能。</p><h3 id="ACL4SSR"><a href="#ACL4SSR" class="headerlink" title="ACL4SSR"></a><a href="https://github.com/ACL4SSR/ACL4SSR">ACL4SSR</a></h3><p>历史悠久的规则项目，最大的特点是提供了<strong>预制的完整配置文件</strong>，包括 rule-provider 定义和 rules 段，开箱即用。</p><p><strong>特点</strong>：</p><ul><li>规则分类非常细致，对流媒体服务有详细拆分：Netflix、Disney+、HBO、Amazon Prime Video、Spotify 等各有独立规则文件。</li><li>提供适用于不同机场订阅转换服务的配置模板。</li><li>社区讨论活跃，遇到问题容易找到解决方案。</li></ul><p><strong>适合人群</strong>：需要对每个流媒体服务单独配置路由策略的用户。比如你想让 Netflix 走美国节点、Disney+ 走新加坡节点，ACL4SSR 的细粒度分类会很方便。</p><h2 id="完整配置示例"><a href="#完整配置示例" class="headerlink" title="完整配置示例"></a>完整配置示例</h2><p>以下是一套可以直接使用或在此基础上修改的完整配置。包含广告拦截、国内直连、常用海外服务分组、流媒体、AI 服务和 Telegram 的独立路由。</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># ==================== 规则集定义 ====================</span></span><br><span class="line"><span class="attr">rule-providers:</span></span><br><span class="line">  <span class="comment"># 广告拦截</span></span><br><span class="line">  <span class="attr">reject:</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">http</span></span><br><span class="line">    <span class="attr">behavior:</span> <span class="string">domain</span></span><br><span class="line">    <span class="attr">url:</span> <span class="string">&quot;https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/reject.txt&quot;</span></span><br><span class="line">    <span class="attr">path:</span> <span class="string">./ruleset/reject.txt</span></span><br><span class="line">    <span class="attr">interval:</span> <span class="number">43200</span></span><br><span class="line">    <span class="attr">format:</span> <span class="string">text</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># 私有网络</span></span><br><span class="line">  <span class="attr">private:</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">http</span></span><br><span class="line">    <span class="attr">behavior:</span> <span class="string">domain</span></span><br><span class="line">    <span class="attr">url:</span> <span class="string">&quot;https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/private.txt&quot;</span></span><br><span class="line">    <span class="attr">path:</span> <span class="string">./ruleset/private.txt</span></span><br><span class="line">    <span class="attr">interval:</span> <span class="number">86400</span></span><br><span class="line">    <span class="attr">format:</span> <span class="string">text</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># 国内直连域名</span></span><br><span class="line">  <span class="attr">cn-domain:</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">http</span></span><br><span class="line">    <span class="attr">behavior:</span> <span class="string">domain</span></span><br><span class="line">    <span class="attr">url:</span> <span class="string">&quot;https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/direct.txt&quot;</span></span><br><span class="line">    <span class="attr">path:</span> <span class="string">./ruleset/direct.txt</span></span><br><span class="line">    <span class="attr">interval:</span> <span class="number">86400</span></span><br><span class="line">    <span class="attr">format:</span> <span class="string">text</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># 国内 IP 段</span></span><br><span class="line">  <span class="attr">cn-cidr:</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">http</span></span><br><span class="line">    <span class="attr">behavior:</span> <span class="string">ipcidr</span></span><br><span class="line">    <span class="attr">url:</span> <span class="string">&quot;https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/cncidr.txt&quot;</span></span><br><span class="line">    <span class="attr">path:</span> <span class="string">./ruleset/cncidr.txt</span></span><br><span class="line">    <span class="attr">interval:</span> <span class="number">86400</span></span><br><span class="line">    <span class="attr">format:</span> <span class="string">text</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># Google 服务</span></span><br><span class="line">  <span class="attr">google:</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">http</span></span><br><span class="line">    <span class="attr">behavior:</span> <span class="string">domain</span></span><br><span class="line">    <span class="attr">url:</span> <span class="string">&quot;https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/google.txt&quot;</span></span><br><span class="line">    <span class="attr">path:</span> <span class="string">./ruleset/google.txt</span></span><br><span class="line">    <span class="attr">interval:</span> <span class="number">86400</span></span><br><span class="line">    <span class="attr">format:</span> <span class="string">text</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># Apple 服务</span></span><br><span class="line">  <span class="attr">apple:</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">http</span></span><br><span class="line">    <span class="attr">behavior:</span> <span class="string">domain</span></span><br><span class="line">    <span class="attr">url:</span> <span class="string">&quot;https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/apple.txt&quot;</span></span><br><span class="line">    <span class="attr">path:</span> <span class="string">./ruleset/apple.txt</span></span><br><span class="line">    <span class="attr">interval:</span> <span class="number">86400</span></span><br><span class="line">    <span class="attr">format:</span> <span class="string">text</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># iCloud</span></span><br><span class="line">  <span class="attr">icloud:</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">http</span></span><br><span class="line">    <span class="attr">behavior:</span> <span class="string">domain</span></span><br><span class="line">    <span class="attr">url:</span> <span class="string">&quot;https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/icloud.txt&quot;</span></span><br><span class="line">    <span class="attr">path:</span> <span class="string">./ruleset/icloud.txt</span></span><br><span class="line">    <span class="attr">interval:</span> <span class="number">86400</span></span><br><span class="line">    <span class="attr">format:</span> <span class="string">text</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># Telegram IP 段</span></span><br><span class="line">  <span class="attr">telegram-cidr:</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">http</span></span><br><span class="line">    <span class="attr">behavior:</span> <span class="string">ipcidr</span></span><br><span class="line">    <span class="attr">url:</span> <span class="string">&quot;https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/telegramcidr.txt&quot;</span></span><br><span class="line">    <span class="attr">path:</span> <span class="string">./ruleset/telegramcidr.txt</span></span><br><span class="line">    <span class="attr">interval:</span> <span class="number">86400</span></span><br><span class="line">    <span class="attr">format:</span> <span class="string">text</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># 流媒体 - Netflix</span></span><br><span class="line">  <span class="attr">netflix:</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">http</span></span><br><span class="line">    <span class="attr">behavior:</span> <span class="string">classical</span></span><br><span class="line">    <span class="attr">url:</span> <span class="string">&quot;https://cdn.jsdelivr.net/gh/ACL4SSR/ACL4SSR@master/Clash/Providers/Ruleset/Netflix.yaml&quot;</span></span><br><span class="line">    <span class="attr">path:</span> <span class="string">./ruleset/netflix.yaml</span></span><br><span class="line">    <span class="attr">interval:</span> <span class="number">86400</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># 流媒体 - Disney+</span></span><br><span class="line">  <span class="attr">disney:</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">http</span></span><br><span class="line">    <span class="attr">behavior:</span> <span class="string">classical</span></span><br><span class="line">    <span class="attr">url:</span> <span class="string">&quot;https://cdn.jsdelivr.net/gh/ACL4SSR/ACL4SSR@master/Clash/Providers/Ruleset/DisneyPlus.yaml&quot;</span></span><br><span class="line">    <span class="attr">path:</span> <span class="string">./ruleset/disney.yaml</span></span><br><span class="line">    <span class="attr">interval:</span> <span class="number">86400</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># AI 服务 (OpenAI, Claude 等)</span></span><br><span class="line">  <span class="attr">ai-services:</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">file</span></span><br><span class="line">    <span class="attr">behavior:</span> <span class="string">classical</span></span><br><span class="line">    <span class="attr">path:</span> <span class="string">./ruleset/ai-services.txt</span></span><br><span class="line">    <span class="attr">format:</span> <span class="string">text</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># GFW 列表</span></span><br><span class="line">  <span class="attr">gfw:</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">http</span></span><br><span class="line">    <span class="attr">behavior:</span> <span class="string">domain</span></span><br><span class="line">    <span class="attr">url:</span> <span class="string">&quot;https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/gfw.txt&quot;</span></span><br><span class="line">    <span class="attr">path:</span> <span class="string">./ruleset/gfw.txt</span></span><br><span class="line">    <span class="attr">interval:</span> <span class="number">86400</span></span><br><span class="line">    <span class="attr">format:</span> <span class="string">text</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># 需要代理的域名</span></span><br><span class="line">  <span class="attr">proxy-domain:</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">http</span></span><br><span class="line">    <span class="attr">behavior:</span> <span class="string">domain</span></span><br><span class="line">    <span class="attr">url:</span> <span class="string">&quot;https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/proxy.txt&quot;</span></span><br><span class="line">    <span class="attr">path:</span> <span class="string">./ruleset/proxy.txt</span></span><br><span class="line">    <span class="attr">interval:</span> <span class="number">86400</span></span><br><span class="line">    <span class="attr">format:</span> <span class="string">text</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># ==================== 分流规则 ====================</span></span><br><span class="line"><span class="attr">rules:</span></span><br><span class="line">  <span class="comment"># 1. 广告拦截 - 最高优先级</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,reject,REJECT</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># 2. 私有地址和局域网 - 必须直连</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,private,DIRECT</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># 3. AI 服务 - 单独分组，方便切换节点地区</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,ai-services,AI</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># 4. 流媒体 - 单独分组，走专用解锁节点</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,netflix,Streaming</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,disney,Streaming</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># 5. Telegram - 基于 IP 段匹配</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,telegram-cidr,Telegram</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># 6. Google 服务</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,google,Proxy</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># 7. Apple 服务 - 国内 CDN 可直连，部分服务需要代理</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,apple,Apple</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,icloud,Apple</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># 8. 国内域名和 IP - 直连</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,cn-domain,DIRECT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,cn-cidr,DIRECT</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># 9. GFW 列表和通用代理域名</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,gfw,Proxy</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,proxy-domain,Proxy</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># 10. GeoIP 兜底 - 中国 IP 直连</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOIP,CN,DIRECT</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># 11. 最终兜底 - 未匹配的流量走代理</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">MATCH,Proxy</span></span><br></pre></td></tr></table></figure><p>上面的配置中，<code>ai-services</code> 使用了 <code>type: file</code>，你需要手动创建这个文件。示例内容如下（保存为 <code>./ruleset/ai-services.txt</code>）：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">DOMAIN-SUFFIX,openai.com</span><br><span class="line">DOMAIN-SUFFIX,ai.com</span><br><span class="line">DOMAIN-SUFFIX,chatgpt.com</span><br><span class="line">DOMAIN-SUFFIX,oaistatic.com</span><br><span class="line">DOMAIN-SUFFIX,oaiusercontent.com</span><br><span class="line">DOMAIN-SUFFIX,anthropic.com</span><br><span class="line">DOMAIN-SUFFIX,claude.ai</span><br><span class="line">DOMAIN-SUFFIX,googleapis.com</span><br><span class="line">DOMAIN-SUFFIX,gemini.google.com</span><br><span class="line">DOMAIN-SUFFIX,bard.google.com</span><br><span class="line">DOMAIN-SUFFIX,deepmind.google</span><br><span class="line">DOMAIN-SUFFIX,copilot.microsoft.com</span><br><span class="line">DOMAIN-SUFFIX,perplexity.ai</span><br></pre></td></tr></table></figure><p>配置中引用了 <code>AI</code>、<code>Streaming</code>、<code>Telegram</code>、<code>Apple</code> 等策略组名称，你需要在 <code>proxy-groups</code> 段中定义这些组。这些组的具体节点配置取决于你的代理服务提供商。</p><h2 id="自定义规则集"><a href="#自定义规则集" class="headerlink" title="自定义规则集"></a>自定义规则集</h2><p>公共规则集覆盖了绝大多数场景，但总有一些个性化需求需要自定义规则。</p><h3 id="创建自定义规则文件"><a href="#创建自定义规则文件" class="headerlink" title="创建自定义规则文件"></a>创建自定义规则文件</h3><p>以公司内网域名直连为例，创建一个文本文件 <code>company.txt</code>：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">internal.mycompany.com</span><br><span class="line">gitlab.mycompany.com</span><br><span class="line">jira.mycompany.com</span><br><span class="line">wiki.mycompany.com</span><br><span class="line">vpn.mycompany.com</span><br></pre></td></tr></table></figure><h3 id="在配置中引用"><a href="#在配置中引用" class="headerlink" title="在配置中引用"></a>在配置中引用</h3><p>如果是本地文件：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">rule-providers:</span></span><br><span class="line">  <span class="attr">company:</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">file</span></span><br><span class="line">    <span class="attr">behavior:</span> <span class="string">domain</span></span><br><span class="line">    <span class="attr">path:</span> <span class="string">./ruleset/company.txt</span></span><br><span class="line">    <span class="attr">format:</span> <span class="string">text</span></span><br><span class="line"></span><br><span class="line"><span class="attr">rules:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,company,DIRECT</span></span><br><span class="line">  <span class="comment"># ... 其他规则</span></span><br></pre></td></tr></table></figure><p>如果你把文件托管到 GitHub 或自己的服务器：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">rule-providers:</span></span><br><span class="line">  <span class="attr">company:</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">http</span></span><br><span class="line">    <span class="attr">behavior:</span> <span class="string">domain</span></span><br><span class="line">    <span class="attr">url:</span> <span class="string">&quot;https://raw.githubusercontent.com/yourname/rules/main/company.txt&quot;</span></span><br><span class="line">    <span class="attr">path:</span> <span class="string">./ruleset/company.txt</span></span><br><span class="line">    <span class="attr">interval:</span> <span class="number">86400</span></span><br><span class="line">    <span class="attr">format:</span> <span class="string">text</span></span><br></pre></td></tr></table></figure><h3 id="实际应用场景"><a href="#实际应用场景" class="headerlink" title="实际应用场景"></a>实际应用场景</h3><p><strong>游戏加速</strong>：某些游戏的服务器 IP 需要走特定节点以获得最低延迟。创建一个 <code>gaming.txt</code>，使用 ipcidr behavior，将游戏服务器 IP 段路由到延迟最低的节点组。</p><p><strong>开发工具</strong>：GitHub、npm、Docker Hub 等开发相关服务的域名，集中到一个规则文件中，路由到稳定性最好的节点。</p><p><strong>内容过滤</strong>：除了使用公共的广告拦截规则，你可以创建自己的屏蔽列表，把不想看到的域名加入其中，使用 REJECT 策略。</p><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="Q-rule-provider-下载失败怎么办？"><a href="#Q-rule-provider-下载失败怎么办？" class="headerlink" title="Q: rule-provider 下载失败怎么办？"></a>Q: rule-provider 下载失败怎么办？</h3><p>这是最常见的”先有鸡还是先有蛋”问题：你需要代理才能下载规则文件，但规则文件还没下载完成时代理无法正常工作。</p><p><strong>解决方法</strong>：</p><ol><li><strong>使用 CDN 地址</strong>：jsdelivr（<code>cdn.jsdelivr.net</code>）、ghproxy（<code>ghproxy.com</code>）等 CDN 在国内通常可以直接访问，避免直接访问 GitHub raw 域名。</li><li><strong>手动下载</strong>：先通过其他方式（比如已经能翻墙的手机）下载规则文件，放到 <code>path</code> 指定的本地路径，并将 <code>type</code> 改为 <code>file</code>。</li><li><strong>初始启动配置</strong>：第一次使用时，先用一个精简的配置（不包含 rule-provider，只有几条基本规则）连上代理，然后再切换到包含 rule-provider 的完整配置。</li><li><strong>机场提供的配置</strong>：很多机场的订阅链接已经内置了 rule-provider 配置，且使用可达的 CDN 地址，直接导入即可。</li></ol><h3 id="Q-规则集多久更新一次合适？"><a href="#Q-规则集多久更新一次合适？" class="headerlink" title="Q: 规则集多久更新一次合适？"></a>Q: 规则集多久更新一次合适？</h3><p>取决于规则集的类型：</p><ul><li><strong>广告拦截规则</strong>（reject）：建议 12 小时（<code>43200</code> 秒）。广告域名变化较快，更频繁的更新可以保持更好的拦截效果。</li><li><strong>常规分流规则</strong>（direct、proxy、gfw 等）：24 小时（<code>86400</code> 秒）足够。这类规则的变化频率较低。</li><li><strong>IP 段规则</strong>（cncidr、telegramcidr 等）：24-72 小时都可以。IP 段的分配变化很慢。</li><li><strong>自定义规则</strong>（本地文件）：设为 <code>0</code> 即可，由你手动维护。</li></ul><p>不建议将 interval 设得过小（比如每小时更新一次）。频繁下载不仅浪费带宽，还可能触发 CDN 的速率限制，导致下载失败。</p><h3 id="Q-domain-和-classical-behavior-选哪个？"><a href="#Q-domain-和-classical-behavior-选哪个？" class="headerlink" title="Q: domain 和 classical behavior 选哪个？"></a>Q: domain 和 classical behavior 选哪个？</h3><p><strong>优先用 domain 或 ipcidr</strong>，原因是：</p><ol><li><strong>解析速度更快</strong>：domain 和 ipcidr behavior 的规则文件格式简单，Clash 可以将它们高效地加载到内存中的哈希表或前缀树结构中，查询复杂度接近 O(1)。而 classical behavior 包含多种规则类型，需要逐条线性匹配，效率较低。</li><li><strong>文件更小</strong>：domain 文件每行只有一个域名，不需要 <code>DOMAIN-SUFFIX,</code> 前缀，文件体积更小，下载更快。</li><li><strong>不容易出错</strong>：格式简单意味着手动编辑时不容易写错。</li></ol><p><strong>必须用 classical 的场景</strong>：规则文件中混合了不同类型的规则（域名 + IP + 关键字），或者规则来源只提供 classical 格式。ACL4SSR 项目的部分规则文件就是 classical 格式。</p><h3 id="Q-规则集之间冲突了怎么办？"><a href="#Q-规则集之间冲突了怎么办？" class="headerlink" title="Q: 规则集之间冲突了怎么办？"></a>Q: 规则集之间冲突了怎么办？</h3><p>规则冲突的本质是：同一个域名或 IP 出现在多个 rule-provider 的规则列表中，而这些 rule-provider 对应不同的策略组。</p><p>Clash 的处理方式是 <strong>先匹配先生效</strong>（first match wins）。<code>rules</code> 段中排在前面的 <code>RULE-SET</code> 优先级更高。</p><p><strong>典型冲突场景和解决方法</strong>：</p><ul><li><code>youtube.com</code> 同时出现在 <code>google.txt</code> 和 <code>proxy.txt</code> 中。如果你在 <code>rules</code> 里先写了 <code>RULE-SET,google,Proxy</code>，再写 <code>RULE-SET,proxy-domain,Proxy</code>，YouTube 会命中 Google 的规则。两者策略相同时没有实际影响；如果策略不同，调整 <code>rules</code> 中的顺序即可。</li><li>Netflix 域名同时出现在 <code>netflix</code> 规则集和通用 <code>proxy-domain</code> 规则集中。把 <code>RULE-SET,netflix,Streaming</code> 放在 <code>RULE-SET,proxy-domain,Proxy</code> 前面，Netflix 就会走 Streaming 组而非通用 Proxy 组。</li></ul><p><strong>排查方法</strong>：在 Clash 的日志或连接面板中查看特定域名命中了哪条规则。<a href="https://github.com/clash-verge-rev/clash-verge-rev">Clash Verge Rev</a> 的”连接”页面会显示每个连接匹配的规则名称和策略组，方便排查冲突。更多配置细节可以参考 <a href="https://wiki.metacubex.one/">Clash Wiki</a>。</p><h3 id="Q-使用-MRS-格式有什么注意事项？"><a href="#Q-使用-MRS-格式有什么注意事项？" class="headerlink" title="Q: 使用 MRS 格式有什么注意事项？"></a>Q: 使用 MRS 格式有什么注意事项？</h3><p>MRS（Meta Rule Set）是 mihomo 引入的二进制规则格式，加载速度最快，但有以下限制：</p><ul><li>只有 mihomo 内核支持，原版 Clash Premium 和其他内核无法使用。</li><li>无法直接用文本编辑器查看或编辑文件内容。</li><li>需要使用 mihomo 提供的工具将文本规则编译为 MRS 格式。</li></ul><p>如果你使用的客户端基于 mihomo 内核（Clash Verge Rev、Clash Nyanpasu 等），且规则集数量较多、总条目数达到数万条级别，切换到 MRS 格式可以显著减少启动时的规则加载时间。对于规则条目较少的情况，text 格式已经足够快，差异可以忽略。</p><h3 id="Q-能同时使用-GEOSITE-GEOIP-和-rule-provider-吗？"><a href="#Q-能同时使用-GEOSITE-GEOIP-和-rule-provider-吗？" class="headerlink" title="Q: 能同时使用 GEOSITE&#x2F;GEOIP 和 rule-provider 吗？"></a>Q: 能同时使用 GEOSITE&#x2F;GEOIP 和 rule-provider 吗？</h3><p>可以，两者并不冲突。<code>GEOSITE</code> 和 <code>GEOIP</code> 是 Clash 内置的规则类型，使用预编译的数据库进行匹配；<code>RULE-SET</code> 则引用外部的 rule-provider 文件。</p><p>实际配置中，常见的搭配方式是：用 rule-provider 处理需要精细控制的服务（Netflix、Telegram、AI 等），用 <code>GEOIP,CN,DIRECT</code> 作为中国 IP 的兜底规则。两者各司其职，互相补充。</p>]]></content>
      
      
      <categories>
          
          <category> 规则与分流 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> Clash </tag>
            
            <tag> mihomo </tag>
            
            <tag> rule-provider </tag>
            
            <tag> 规则集 </tag>
            
            <tag> 配置 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>V2Ray vs Xray vs Sing-box：核心（内核）的区别与演进</title>
      <link href="/posts/core-comparison/"/>
      <url>/posts/core-comparison/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>: V2Ray、Xray、Sing-box 是当前最主流的三个代理内核。它们之间存在继承和分化关系——Xray 从 V2Ray 分裂而来，Sing-box 则是受其启发后从零构建的新生代。本文梳理它们的历史渊源、技术架构差异和各自的适用场景，帮助你理解”内核”这一层在整个代理体系中扮演的角色。</p></blockquote><hr><h2 id="什么是”代理内核”"><a href="#什么是”代理内核”" class="headerlink" title="什么是”代理内核”"></a>什么是”代理内核”</h2><p>在讨论 V2Ray、Xray、Sing-box 之前，有必要澄清一个基础概念：<strong>内核（core）是代理软件的底层引擎</strong>，负责协议解析、流量路由、加解密等核心功能。你在手机或电脑上使用的 v2rayN、NekoBox、Clash Verge 等工具，它们本身只是图形界面（GUI），真正干活的是背后集成的内核。</p><p>换句话说，选择客户端时你其实在间接选择内核。理解内核之间的差异，有助于判断一个客户端的协议支持范围、性能上限和未来的可持续性。</p><hr><h2 id="一段简短的历史"><a href="#一段简短的历史" class="headerlink" title="一段简短的历史"></a>一段简短的历史</h2><h3 id="V2Ray-的诞生"><a href="#V2Ray-的诞生" class="headerlink" title="V2Ray 的诞生"></a>V2Ray 的诞生</h3><p>V2Ray 项目诞生于 2015-2016 年前后，创建者使用化名”Victoria Raymond”（V2Ray 之名即源于此）。项目的初始目标并非发明某个单一协议，而是构建一个<strong>通用的代理平台</strong>——一个可以承载多种协议的框架。</p><p>V2Ray 引入了 VMess 协议，这是它的原生协议，采用 UUID 认证和自定义加密方案。在当时的环境下，VMess 相比传统的 SOCKS&#x2F;HTTP 代理和早期 Shadowsocks 提供了更强的安全性保障。V2Ray 还设计了灵活的路由系统、多种传输方式（WebSocket、gRPC、HTTP&#x2F;2 等），这些架构理念深刻影响了后来的所有代理项目。</p><p>2019 年左右，Victoria Raymond 逐步淡出项目。此后，V2Ray 由社区组织 <strong>V2Fly</strong> 接手维护，仓库名为 <code>v2fly/v2ray-core</code>。<a href="https://www.v2fly.org/">V2Fly</a> 团队在维护期间保持了项目的基本稳定，但开发节奏明显放缓，新功能的推进速度远不及审查技术的演进速度。</p><h3 id="Xray-的分裂"><a href="#Xray-的分裂" class="headerlink" title="Xray 的分裂"></a>Xray 的分裂</h3><p>2020 年末，开发者 <strong>RPRX</strong> 围绕 XTLS 技术与 V2Fly 团队产生了许可证分歧。XTLS 是一项重要的性能优化技术，能够在 TLS 代理场景下避免对 TLS 内层数据的重复加密，显著降低延迟和 CPU 开销。这一分歧最终导致 RPRX fork 了 v2ray-core，创建了 <strong><a href="https://github.com/XTLS/Xray-core">Xray-core</a></strong>（隶属 Project X 组织）。</p><p>Xray 并非简单的换皮分支。它在 V2Ray 的基础上带来了一系列关键技术突破：</p><ul><li><strong>VLESS 协议</strong>：比 VMess 更轻量的协议设计，去掉了 VMess 冗余的加密层（依赖外层 TLS 提供安全性），降低了协议头部开销</li><li><strong>XTLS（Vision）</strong>：避免 TLS-in-TLS 的双重加密问题，在保持安全性的前提下大幅提升转发性能</li><li><strong>Reality</strong>：2023 年推出的反检测技术，无需域名和证书即可实现 TLS 伪装，将代理流量伪装成访问真实网站的 TLS 1.3 连接，是目前抗主动探测能力最强的方案之一</li><li><strong>XHTTP 和 XMUX</strong>：基于 HTTP 的新传输方式及其多路复用扩展，为 CDN 中转等场景提供更灵活的选择</li></ul><p>截至 2026 年，Xray-core 的开发活跃度远超 v2ray-core，是协议创新的主要推动力量。在服务端部署领域，Xray 占据绝对主导地位。</p><h3 id="Sing-box-的崛起"><a href="#Sing-box-的崛起" class="headerlink" title="Sing-box 的崛起"></a>Sing-box 的崛起</h3><p><a href="https://github.com/SagerNet/sing-box">Sing-box</a> 走了一条完全不同的路。它的作者 <strong>nekohasekai</strong>（SagerNet 系列客户端的开发者）没有选择 fork V2Ray 或 Xray，而是从零开始用 Go 语言重新编写了一个全新的代理内核。</p><p>这个决策背后的逻辑是：V2Ray 的代码架构经过多年迭代已经变得臃肿，历史包袱沉重，模块间耦合度高，很难在其基础上做大规模的结构优化。与其在旧地基上修补，不如重新打地基。</p><p>Sing-box 的设计哲学是”<strong>通用代理平台</strong>“——不绑定某个特定协议阵营，而是尽可能广泛地支持各种协议。它同时支持 Xray 生态的 VLESS+Reality 和独立协议如 Hysteria2、TUIC，还提供了类似 Clash 的强大规则路由系统。</p><p>Sing-box 的增长势头很快。截至 2026 年，多个主流客户端（NekoBox、Hiddify、Clash Verge Rev 等）已将 sing-box 作为默认或可选内核。它在移动端（Android&#x2F;iOS）的表现尤为突出，因为其现代化的架构在资源受限的移动设备上有更好的内存管理和电池效率。</p><hr><h2 id="技术对比"><a href="#技术对比" class="headerlink" title="技术对比"></a>技术对比</h2><table><thead><tr><th>特性</th><th>v2ray-core</th><th>xray-core</th><th>sing-box</th></tr></thead><tbody><tr><td>开发语言</td><td>Go</td><td>Go</td><td>Go</td></tr><tr><td>协议支持</td><td>VMess, VLESS, Trojan, Shadowsocks</td><td>VMess, VLESS, Trojan, Shadowsocks, Reality, XTLS, XHTTP</td><td>VMess, VLESS, Trojan, Shadowsocks, Reality, Hysteria2, TUIC</td></tr><tr><td>独有能力</td><td>—</td><td>XTLS Vision, Reality, XHTTP, XMUX</td><td>Hysteria2&#x2F;TUIC 原生支持, 规则集路由</td></tr><tr><td>性能</td><td>中等</td><td>较高（XTLS 优化）</td><td>较高</td></tr><tr><td>配置格式</td><td>JSON</td><td>JSON（兼容 v2ray）</td><td>JSON（独立格式）</td></tr><tr><td>路由功能</td><td>基础规则匹配</td><td>基础规则匹配</td><td>强大（类 Clash 规则集、逻辑运算、规则提供器）</td></tr><tr><td>分流能力</td><td>域名&#x2F;IP 匹配</td><td>域名&#x2F;IP 匹配</td><td>域名&#x2F;IP&#x2F;进程&#x2F;规则集&#x2F;逻辑组合</td></tr><tr><td>维护活跃度</td><td>低（基本停滞）</td><td>高</td><td>高</td></tr><tr><td>文档质量</td><td>一般</td><td>较好</td><td>好</td></tr><tr><td>移动端适配</td><td>一般</td><td>一般</td><td>优秀（原生库支持）</td></tr></tbody></table><p>几个值得注意的要点：</p><ol><li><p><strong>v2ray-core 已基本停止实质性开发</strong>。最近的更新以依赖升级和小修复为主，没有新协议和新功能的推进。选择它等同于选择一个不再演进的平台。</p></li><li><p><strong>Xray 和 Sing-box 在协议覆盖上高度重叠</strong>，但侧重点不同。Xray 更专注于自有协议栈的创新（Reality、XHTTP），Sing-box 更专注于跨协议兼容和路由功能。</p></li><li><p><strong>性能差异在实际使用中通常不是瓶颈</strong>。三个内核在同一协议下的吞吐量差异通常在 5-15% 以内，真正的性能瓶颈几乎总是在网络链路本身——你的线路质量、运营商的国际出口带宽、目标服务器的距离和负载，这些因素的影响远大于内核差异。</p></li></ol><hr><h2 id="配置格式差异"><a href="#配置格式差异" class="headerlink" title="配置格式差异"></a>配置格式差异</h2><p>三个内核都使用 JSON 作为配置文件格式，但结构完全不同。以下用”连接一个 VLESS+Reality 节点”为例，展示各自的出站（outbound）配置方式。</p><h3 id="v2ray-core-xray-core-格式"><a href="#v2ray-core-xray-core-格式" class="headerlink" title="v2ray-core &#x2F; xray-core 格式"></a>v2ray-core &#x2F; xray-core 格式</h3><p>v2ray-core 和 xray-core 共享相同的配置结构（Xray 在此基础上扩展了 Reality 等字段）：</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;outbounds&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;protocol&quot;</span><span class="punctuation">:</span> <span class="string">&quot;vless&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;settings&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;vnext&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">          <span class="punctuation">&#123;</span></span><br><span class="line">            <span class="attr">&quot;address&quot;</span><span class="punctuation">:</span> <span class="string">&quot;example.com&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;port&quot;</span><span class="punctuation">:</span> <span class="number">443</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;users&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">              <span class="punctuation">&#123;</span></span><br><span class="line">                <span class="attr">&quot;id&quot;</span><span class="punctuation">:</span> <span class="string">&quot;uuid-here&quot;</span><span class="punctuation">,</span></span><br><span class="line">                <span class="attr">&quot;encryption&quot;</span><span class="punctuation">:</span> <span class="string">&quot;none&quot;</span><span class="punctuation">,</span></span><br><span class="line">                <span class="attr">&quot;flow&quot;</span><span class="punctuation">:</span> <span class="string">&quot;xtls-rprx-vision&quot;</span></span><br><span class="line">              <span class="punctuation">&#125;</span></span><br><span class="line">            <span class="punctuation">]</span></span><br><span class="line">          <span class="punctuation">&#125;</span></span><br><span class="line">        <span class="punctuation">]</span></span><br><span class="line">      <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;streamSettings&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;network&quot;</span><span class="punctuation">:</span> <span class="string">&quot;tcp&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;security&quot;</span><span class="punctuation">:</span> <span class="string">&quot;reality&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;realitySettings&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">          <span class="attr">&quot;serverName&quot;</span><span class="punctuation">:</span> <span class="string">&quot;www.microsoft.com&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="attr">&quot;fingerprint&quot;</span><span class="punctuation">:</span> <span class="string">&quot;chrome&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="attr">&quot;shortId&quot;</span><span class="punctuation">:</span> <span class="string">&quot;abcd1234&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="attr">&quot;publicKey&quot;</span><span class="punctuation">:</span> <span class="string">&quot;public-key-here&quot;</span></span><br><span class="line">        <span class="punctuation">&#125;</span></span><br><span class="line">      <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">]</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><p>配置的核心逻辑是：<code>protocol</code> 指定协议类型，<code>settings</code> 定义服务器和用户信息，<code>streamSettings</code> 定义传输层和安全层参数。这种嵌套结构沿用了 V2Ray 早期的设计。</p><h3 id="sing-box-格式"><a href="#sing-box-格式" class="headerlink" title="sing-box 格式"></a>sing-box 格式</h3><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;outbounds&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;vless&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;proxy&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;server&quot;</span><span class="punctuation">:</span> <span class="string">&quot;example.com&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;server_port&quot;</span><span class="punctuation">:</span> <span class="number">443</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;uuid&quot;</span><span class="punctuation">:</span> <span class="string">&quot;uuid-here&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;flow&quot;</span><span class="punctuation">:</span> <span class="string">&quot;xtls-rprx-vision&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;tls&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;enabled&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;server_name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;www.microsoft.com&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;utls&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">          <span class="attr">&quot;enabled&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span></span><br><span class="line">          <span class="attr">&quot;fingerprint&quot;</span><span class="punctuation">:</span> <span class="string">&quot;chrome&quot;</span></span><br><span class="line">        <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;reality&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">          <span class="attr">&quot;enabled&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span></span><br><span class="line">          <span class="attr">&quot;public_key&quot;</span><span class="punctuation">:</span> <span class="string">&quot;public-key-here&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="attr">&quot;short_id&quot;</span><span class="punctuation">:</span> <span class="string">&quot;abcd1234&quot;</span></span><br><span class="line">        <span class="punctuation">&#125;</span></span><br><span class="line">      <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">]</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><p>Sing-box 的配置结构更加扁平化：服务器地址、端口、UUID 直接作为出站对象的顶层字段，没有 v2ray 那种 <code>vnext &gt; users</code> 的多层嵌套。TLS 和 Reality 参数统一归入 <code>tls</code> 对象。整体可读性更好，编写出错的概率更低。</p><h3 id="关键区别总结"><a href="#关键区别总结" class="headerlink" title="关键区别总结"></a>关键区别总结</h3><ul><li><strong>v2ray&#x2F;xray</strong>：配置层级深（protocol &gt; settings &gt; vnext &gt; users），传输层参数独立在 <code>streamSettings</code> 中，历史兼容性好但结构冗余</li><li><strong>sing-box</strong>：配置扁平化，字段命名使用 snake_case 而非 camelCase，TLS&#x2F;传输参数整合在出站对象内部，语义更清晰</li></ul><p>对于普通用户来说，这些差异很少需要手动处理——现代客户端通过分享链接（URI）或订阅自动生成配置。但如果你需要手写或调试配置，sing-box 的格式显然对人类更友好。</p><hr><h2 id="我应该选哪个"><a href="#我应该选哪个" class="headerlink" title="我应该选哪个"></a>我应该选哪个</h2><h3 id="v2ray-core：已不推荐"><a href="#v2ray-core：已不推荐" class="headerlink" title="v2ray-core：已不推荐"></a>v2ray-core：已不推荐</h3><p>2026 年，基本没有选择 v2ray-core 的理由。它不支持 Reality、XTLS Vision、XHTTP 等现代协议特性，维护处于半停滞状态，安全更新也不及时。唯一合理的使用场景是你正在维护一个遗留系统，且迁移成本过高。</p><p>如果你还在使用基于 v2ray-core 的部署，强烈建议迁移到 Xray 或 Sing-box。Xray 的迁移路径最简单，因为它兼容 v2ray 的配置格式。</p><h3 id="xray-core：协议创新的前沿"><a href="#xray-core：协议创新的前沿" class="headerlink" title="xray-core：协议创新的前沿"></a>xray-core：协议创新的前沿</h3><p>选择 Xray 的理由：</p><ul><li>你需要 <strong>Reality</strong> 的完整实现和最新特性（Xray 是 Reality 的原生发源地）</li><li>你需要 <strong>XHTTP&#x2F;XMUX</strong> 传输方式来实现 CDN 中转等高级部署</li><li>你使用 <strong>v2rayN</strong>（Windows）、<strong>V2RayNG</strong>（Android）等以 Xray 为默认内核的客户端</li><li>你在<strong>服务端部署</strong>中需要最完整的协议选项</li><li>你已有 v2ray 格式的配置，希望无缝升级</li></ul><p>Xray 是目前服务端部署最成熟的选择，社区经验积累最丰富，配置教程和问题排查资源最多。</p><h3 id="sing-box：现代化的全能选手"><a href="#sing-box：现代化的全能选手" class="headerlink" title="sing-box：现代化的全能选手"></a>sing-box：现代化的全能选手</h3><p>选择 Sing-box 的理由：</p><ul><li>你想要<strong>强大的路由和分流功能</strong>（按域名、IP、进程、规则集灵活分流）</li><li>你使用 <strong>NekoBox</strong>、<strong>Hiddify</strong>、<strong>Clash Verge Rev</strong> 等以 sing-box 为内核的客户端</li><li>你需要在<strong>移动端</strong>获得更好的性能和电池表现</li><li>你需要 <strong>Hysteria2</strong> 或 <strong>TUIC</strong> 等基于 QUIC 的协议（sing-box 原生支持，Xray 不支持）</li><li>你希望配置文件更易读、更现代化</li></ul><h3 id="一个重要提醒"><a href="#一个重要提醒" class="headerlink" title="一个重要提醒"></a>一个重要提醒</h3><p><strong>大多数用户不需要直接选择内核。</strong> 你选择的是客户端，内核是客户端内置的。v2rayN 内置 Xray，NekoBox 内置 Sing-box，Clash Verge Rev 使用 Mihomo（另一个内核）——你只需要选一个好用的客户端，内核的事交给客户端开发者去处理。</p><p>只有当你需要在服务端部署代理服务、手动编写配置、或在客户端之间做深度技术对比时，理解内核差异才真正重要。</p><hr><h2 id="它们之间的关系图"><a href="#它们之间的关系图" class="headerlink" title="它们之间的关系图"></a>它们之间的关系图</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">v2ray-core (2015)</span><br><span class="line">    │</span><br><span class="line">    ├──fork──→ xray-core (2020)</span><br><span class="line">    │            ├── VLESS 协议优化</span><br><span class="line">    │            ├── XTLS Vision 性能加速</span><br><span class="line">    │            ├── Reality 反检测 (2023)</span><br><span class="line">    │            └── XHTTP / XMUX 传输方式</span><br><span class="line">    │</span><br><span class="line">    └──inspired──→ sing-box (2022)</span><br><span class="line">                    ├── 全新代码库，零历史包袱</span><br><span class="line">                    ├── 多协议兼容（含 Hysteria2、TUIC）</span><br><span class="line">                    └── 类 Clash 规则路由系统</span><br></pre></td></tr></table></figure><p>Xray 和 V2Ray 之间是代码级的继承关系（fork），配置格式保持兼容。Sing-box 和 V2Ray 之间是理念上的继承关系（inspired），代码和配置完全独立。</p><p>三者之间并非零和竞争。Xray 的协议创新（如 Reality）被 sing-box 跟进支持，sing-box 的路由设计也在影响其他项目的发展方向。这种良性的技术竞争推动了整个代理生态的进步。</p><hr><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="三者可以互相替换吗？"><a href="#三者可以互相替换吗？" class="headerlink" title="三者可以互相替换吗？"></a>三者可以互相替换吗？</h3><p>大部分场景下可以。如果你的服务端使用标准协议（比如 VLESS+Reality+Vision），无论客户端使用 Xray 还是 Sing-box 都能正常连接——协议是通用的，内核只是协议的不同实现。</p><p>差异出现在高级功能上：Xray 的 XHTTP&#x2F;XMUX 传输方式目前只有 Xray 客户端完整支持；sing-box 的 Hysteria2&#x2F;TUIC 协议 Xray 不支持。选择内核时需要确认你使用的协议和传输方式是否在目标内核的支持范围内。</p><h3 id="哪个性能最好？"><a href="#哪个性能最好？" class="headerlink" title="哪个性能最好？"></a>哪个性能最好？</h3><p>实际差异很小。Xray 的 XTLS Vision 在代理 TLS 流量时有理论优势，因为它避免了内层 TLS 数据的重复加密&#x2F;解密，CPU 开销更低。但在真实使用中，网络延迟、丢包率、带宽限制通常远大于内核层面的性能差异。对绝大多数用户来说，三个内核的性能表现在体感上没有区别。</p><p>如果你的场景对 CPU 开销极度敏感（比如在低性能 ARM 设备上跑高带宽代理），XTLS Vision 的优势会更明显。</p><h3 id="Sing-box-会取代-Xray-吗？"><a href="#Sing-box-会取代-Xray-吗？" class="headerlink" title="Sing-box 会取代 Xray 吗？"></a>Sing-box 会取代 Xray 吗？</h3><p>短期内不会，中长期两者更可能持续共存。原因是它们的定位有本质差异：</p><ul><li><strong>Xray</strong> 的核心竞争力在于<strong>协议创新</strong>——Reality、XHTTP 等技术都诞生于 Xray 社区。它更像是代理协议的”研发实验室”。</li><li><strong>Sing-box</strong> 的核心竞争力在于<strong>平台统一性</strong>——用一个内核覆盖尽可能多的协议和平台，提供一致的配置体验和路由功能。它更像是代理协议的”集成平台”。</li></ul><p>两者在生态位上互补而非对立。</p><h3 id="我在用-Clash，和这三个内核是什么关系？"><a href="#我在用-Clash，和这三个内核是什么关系？" class="headerlink" title="我在用 Clash，和这三个内核是什么关系？"></a>我在用 Clash，和这三个内核是什么关系？</h3><p>Clash（包括 Clash Meta &#x2F; Mihomo）是一个独立的内核体系，有自己的配置格式和协议实现。它和 V2Ray&#x2F;Xray&#x2F;Sing-box 是平行关系，不存在继承或依赖关系。不过，Clash 也支持 VMess、VLESS、Trojan 等协议——这些协议是通用标准，任何内核都可以独立实现。</p><p>值得注意的是，原版 Clash 已经停止维护。目前活跃的 <strong><a href="https://github.com/MetaCubeX/mihomo">mihomo</a></strong>（原 Clash Meta）和 <strong>Clash Verge Rev</strong> 等项目在继续推进 Clash 生态的发展。部分 Clash 衍生客户端（如 Clash Verge Rev 的某些版本）也开始支持使用 sing-box 作为可选内核。</p><hr><h2 id="写在最后"><a href="#写在最后" class="headerlink" title="写在最后"></a>写在最后</h2><p>V2Ray 开创了”通用代理平台”的理念，Xray 在此基础上推动了协议层面的重大突破，Sing-box 则以全新的工程实践重新诠释了这一理念。三者的关系是技术演进的自然脉络，而非简单的优劣之分。</p><p>对于普通用户，选一个好用的客户端，确保它支持你需要的协议，就足够了。内核的选择通常已经被客户端开发者做好了。</p><p>对于进阶用户和服务端运维者，理解这三个内核的差异有助于做出更合理的技术决策——比如服务端用 Xray 获得最完整的协议支持，客户端侧选择 sing-box 系客户端获得更好的路由和分流能力。</p><p>代理技术仍在快速迭代。本文反映的是 2026 年中的状态，半年后具体的功能对比可能已经发生变化。但核心逻辑不会变：<strong>理解工具的设计思路，比记住工具的功能列表更重要。</strong></p>]]></content>
      
      
      <categories>
          
          <category> 代理软件 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> V2Ray </tag>
            
            <tag> Xray </tag>
            
            <tag> Sing-box </tag>
            
            <tag> 内核 </tag>
            
            <tag> 对比 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>节点连不上？系统排查流程</title>
      <link href="/posts/connectivity-checklist/"/>
      <url>/posts/connectivity-checklist/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>: 代理节点突然连不上是最常遇到的问题。原因可能是节点被封、本地网络问题、配置错误或客户端故障。本文提供一套系统化的排查流程，帮助你快速定位问题并解决。</p></blockquote><hr><h2 id="第一步：确认问题范围"><a href="#第一步：确认问题范围" class="headerlink" title="第一步：确认问题范围"></a>第一步：确认问题范围</h2><p>排查之前，先花一分钟判断问题的范围，避免盲目操作浪费时间。</p><h3 id="是所有节点还是部分节点？"><a href="#是所有节点还是部分节点？" class="headerlink" title="是所有节点还是部分节点？"></a>是所有节点还是部分节点？</h3><ul><li><strong>所有节点都连不上</strong> → 大概率是本地网络问题或客户端问题</li><li><strong>只有部分节点连不上</strong> → 这些节点可能已经被封或宕机</li><li><strong>只有某个地区的节点不行</strong>（如香港全挂但日本正常）→ 该地区线路可能被针对性封锁</li></ul><h3 id="之前能用吗？发生了什么变化？"><a href="#之前能用吗？发生了什么变化？" class="headerlink" title="之前能用吗？发生了什么变化？"></a>之前能用吗？发生了什么变化？</h3><ul><li><strong>之前正常，突然不行</strong> → 节点可能被封，或者本地网络环境变了（换了 WiFi、连了公司网络等）</li><li><strong>从来没成功过</strong> → 大概率是配置问题，从头检查配置</li><li><strong>更新客户端后不行了</strong> → 新版本可能有兼容性问题，尝试回退版本</li></ul><h3 id="其他用户是否受影响？"><a href="#其他用户是否受影响？" class="headerlink" title="其他用户是否受影响？"></a>其他用户是否受影响？</h3><ul><li>查看机场的 Telegram 群组或状态页面</li><li>如果大家都反映有问题 → 服务端问题，等待机场修复</li><li>如果只有你一个人有问题 → 本地问题，继续排查</li></ul><hr><h2 id="第二步：检查本地网络"><a href="#第二步：检查本地网络" class="headerlink" title="第二步：检查本地网络"></a>第二步：检查本地网络</h2><h3 id="基础连通性测试"><a href="#基础连通性测试" class="headerlink" title="基础连通性测试"></a>基础连通性测试</h3><p>首先确认你的基础网络是通的（不经过代理）：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 测试国内网站连通性</span></span><br><span class="line">ping baidu.com</span><br><span class="line"></span><br><span class="line"><span class="comment"># 测试 DNS 解析是否正常</span></span><br><span class="line">nslookup baidu.com</span><br></pre></td></tr></table></figure><p>如果 <code>ping baidu.com</code> 都不通，说明你的基础网络就有问题，先解决本地上网问题再说。</p><h3 id="防火墙和安全软件"><a href="#防火墙和安全软件" class="headerlink" title="防火墙和安全软件"></a>防火墙和安全软件</h3><p>防火墙和杀毒软件是导致代理客户端无法正常工作的常见原因：</p><ul><li><strong>Windows Defender &#x2F; 第三方杀毒软件</strong>：可能把代理客户端识别为可疑程序并拦截</li><li><strong>Windows 防火墙</strong>：可能阻止代理客户端监听的端口</li></ul><p><strong>排查方法</strong>：</p><ol><li>临时关闭防火墙和杀毒软件</li><li>重新测试代理是否正常</li><li>如果关闭后正常 → 将代理客户端添加到防火墙和杀毒软件的白名单&#x2F;例外列表中</li><li>重新开启防火墙和杀毒软件，确认白名单生效</li></ol><h3 id="网络环境限制"><a href="#网络环境限制" class="headerlink" title="网络环境限制"></a>网络环境限制</h3><p>某些网络环境会主动限制代理流量：</p><ul><li><strong>公司&#x2F;学校网络</strong>：通常有防火墙策略，会封锁非标准端口和协议</li><li><strong>公共 WiFi</strong>：酒店、咖啡厅的 WiFi 往往限制较多</li><li><strong>运营商限制</strong>：部分地区的运营商会对特定协议做 QoS 限速</li></ul><p><strong>排查方法</strong>：</p><ol><li>切换到手机移动数据（4G&#x2F;5G）热点测试</li><li>如果移动数据下正常 → 确认是当前网络环境的限制</li><li>尝试切换到 443 端口的节点（443 是 HTTPS 端口，通常不会被封）</li><li>尝试使用支持 UDP 的协议（如 Hysteria2），有些网络只封 TCP 不封 UDP</li></ol><hr><h2 id="第三步：检查客户端"><a href="#第三步：检查客户端" class="headerlink" title="第三步：检查客户端"></a>第三步：检查客户端</h2><h3 id="客户端是否正常运行"><a href="#客户端是否正常运行" class="headerlink" title="客户端是否正常运行"></a>客户端是否正常运行</h3><p>最基本的检查，但很多人会忽略：</p><ul><li><strong>客户端进程是否在运行？</strong> 检查系统托盘（Windows 右下角）是否有客户端图标</li><li><strong>代理模式是否开启？</strong> 确认已开启系统代理或 TUN 模式</li><li><strong>尝试重启客户端</strong>：关闭后等待几秒再重新启动</li></ul><h3 id="订阅是否过期或需要更新"><a href="#订阅是否过期或需要更新" class="headerlink" title="订阅是否过期或需要更新"></a>订阅是否过期或需要更新</h3><p>订阅问题是最常见的原因之一：</p><ul><li><strong>订阅到期</strong>：套餐到期后节点自然无法连接，检查机场账户的到期时间</li><li><strong>流量用完</strong>：月流量耗尽同样无法使用，查看剩余流量</li><li><strong>订阅未更新</strong>：机场更换或新增了节点，但你的本地订阅还是旧的</li></ul><p><strong>操作方法</strong>：</p><ol><li>在客户端中找到订阅管理</li><li>手动更新订阅（Clash Verge：右键订阅 → 更新；<a href="https://github.com/2dust/v2rayN">v2rayN</a>：订阅 → 更新全部）</li><li>如果更新失败 → 尝试在浏览器中直接打开订阅链接，看是否能访问</li><li>如果订阅链接打不开 → 登录机场面板检查是否更换了订阅地址</li></ol><h3 id="端口冲突"><a href="#端口冲突" class="headerlink" title="端口冲突"></a>端口冲突</h3><p>代理客户端需要监听本地端口（常见的有 7890、7891、1080 等），如果端口被其他程序占用就会启动失败。</p><p><strong>检查方法</strong>：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Windows - 检查端口占用</span></span><br><span class="line">netstat -ano | findstr 7890</span><br><span class="line"></span><br><span class="line"><span class="comment"># macOS / Linux - 检查端口占用</span></span><br><span class="line">lsof -i :7890</span><br></pre></td></tr></table></figure><p>如果发现端口被占用：</p><ul><li>关闭占用端口的程序</li><li>或者在代理客户端的设置中更改本地监听端口</li></ul><h3 id="TUN-模式问题"><a href="#TUN-模式问题" class="headerlink" title="TUN 模式问题"></a>TUN 模式问题</h3><p>TUN 模式创建虚拟网卡来接管系统全部流量，功能更强但也更容易出问题：</p><ul><li><strong>需要管理员权限</strong>：客户端必须以管理员身份运行（Windows：右键 → 以管理员身份运行）</li><li><strong>与其他 VPN 冲突</strong>：如果同时安装了其他 VPN 软件或者有残留的虚拟网卡，可能产生冲突</li><li><strong>驱动问题</strong>：TUN 驱动安装不正确或版本不匹配</li></ul><p><strong>排查方法</strong>：</p><ol><li>先切换到<strong>系统代理模式</strong>测试，排除 TUN 特有的问题</li><li>如果系统代理模式正常 → 问题出在 TUN 模式</li><li>检查是否有其他 VPN 软件在运行，关闭它们</li><li>尝试重新安装 TUN 驱动（Clash Verge：设置 → Service Mode → Install）</li></ol><hr><h2 id="第四步：测试节点连通性"><a href="#第四步：测试节点连通性" class="headerlink" title="第四步：测试节点连通性"></a>第四步：测试节点连通性</h2><h3 id="TCPing-测试"><a href="#TCPing-测试" class="headerlink" title="TCPing 测试"></a>TCPing 测试</h3><p>TCPing 测试可以判断你的网络到节点服务器的 TCP 连通性：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 方法一：使用客户端内置的测试功能</span></span><br><span class="line"><span class="comment"># Clash Verge → 代理页面 → 点击测速按钮（闪电图标）</span></span><br><span class="line"><span class="comment"># v2rayN → 服务器列表 → 测试真连接延迟</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 方法二：命令行测试</span></span><br><span class="line"><span class="comment"># 需要先安装 tcping 工具</span></span><br><span class="line">tcping your-server-ip 443</span><br></pre></td></tr></table></figure><p><strong>结果判断</strong>：</p><ul><li><strong>超时（timeout）</strong> → 节点不可达，IP 可能被封或服务器宕机</li><li><strong>有延迟数值返回</strong> → 节点可达，问题可能出在其他环节</li><li><strong>延迟极高（&gt; 500ms）</strong> → 线路质量差，可能影响使用体验</li></ul><h3 id="切换节点测试"><a href="#切换节点测试" class="headerlink" title="切换节点测试"></a>切换节点测试</h3><p>不要在一个节点上死磕，多试几个：</p><ul><li>尝试不同地区的节点（香港、日本、新加坡、美国等）</li><li>如果<strong>某个地区全部不行</strong>但其他地区正常 → 该地区线路被封</li><li>如果<strong>所有节点全部不行</strong> → 不太可能所有节点同时被封，重点检查本地问题</li></ul><h3 id="切换协议测试"><a href="#切换协议测试" class="headerlink" title="切换协议测试"></a>切换协议测试</h3><p>如果你的机场提供多种协议的节点，切换协议是非常有效的排查手段：</p><ul><li>VLESS (TCP) 不行 → 尝试 Hysteria2 (UDP)</li><li>Shadowsocks 不行 → 尝试 VLESS + WebSocket</li><li>某个协议不行但另一个正常 → 说明是协议层面的封锁，使用可用的协议即可</li></ul><hr><h2 id="第五步：检查具体错误信息"><a href="#第五步：检查具体错误信息" class="headerlink" title="第五步：检查具体错误信息"></a>第五步：检查具体错误信息</h2><p>客户端日志中的错误信息是最直接的线索。以下是常见错误及其含义：</p><h3 id="connection-refused（连接被拒绝）"><a href="#connection-refused（连接被拒绝）" class="headerlink" title="connection refused（连接被拒绝）"></a>connection refused（连接被拒绝）</h3><ul><li><strong>含义</strong>：TCP 连接到达了服务器，但服务器拒绝了连接</li><li><strong>可能原因</strong>：服务器未运行、端口配置错误、服务器防火墙拦截</li><li><strong>处理</strong>：联系机场客服确认服务器状态；更新订阅获取最新配置</li></ul><h3 id="connection-timeout（连接超时）"><a href="#connection-timeout（连接超时）" class="headerlink" title="connection timeout（连接超时）"></a>connection timeout（连接超时）</h3><ul><li><strong>含义</strong>：TCP 连接请求发出后没有收到任何响应</li><li><strong>可能原因</strong>：IP 被 GFW 封锁、网络路由问题、服务器下线</li><li><strong>处理</strong>：切换到其他节点；切换网络环境（WiFi ↔ 移动数据）；等待机场更换 IP</li></ul><h3 id="TLS-handshake-failed（TLS-握手失败）"><a href="#TLS-handshake-failed（TLS-握手失败）" class="headerlink" title="TLS handshake failed（TLS 握手失败）"></a>TLS handshake failed（TLS 握手失败）</h3><ul><li><strong>含义</strong>：TCP 连接成功但 TLS 加密握手失败</li><li><strong>可能原因</strong>：系统时间不准确、TLS 证书过期、服务端 TLS 配置变更、SNI 被阻断</li><li><strong>处理</strong>：<ol><li>检查系统时间是否准确（TLS 握手对时间敏感，误差超过几分钟就可能失败）</li><li>更新订阅获取最新配置</li><li>如果使用了自定义 SNI，确认 SNI 域名未被封锁</li></ol></li></ul><h3 id="authentication-failed（认证失败）"><a href="#authentication-failed（认证失败）" class="headerlink" title="authentication failed（认证失败）"></a>authentication failed（认证失败）</h3><ul><li><strong>含义</strong>：连接到服务器了，但 UUID&#x2F;密码验证不通过</li><li><strong>可能原因</strong>：订阅配置过期，服务端已更换密钥但你本地还是旧的</li><li><strong>处理</strong>：更新订阅；如果更新后仍然失败，删除旧配置重新导入</li></ul><h3 id="DNS-resolution-failed（DNS-解析失败）"><a href="#DNS-resolution-failed（DNS-解析失败）" class="headerlink" title="DNS resolution failed（DNS 解析失败）"></a>DNS resolution failed（DNS 解析失败）</h3><ul><li><strong>含义</strong>：无法解析代理服务器的域名</li><li><strong>可能原因</strong>：DNS 服务器故障、DNS 被污染、域名过期</li><li><strong>处理</strong>：<ol><li>尝试更换 DNS 服务器（推荐 <code>223.5.5.5</code> 或 <code>119.29.29.29</code>）</li><li>如果知道服务器 IP，尝试直接用 IP 连接</li><li>清除本地 DNS 缓存：<code>ipconfig /flushdns</code>（Windows）</li></ol></li></ul><h3 id="EOF-或-connection-reset（连接重置）"><a href="#EOF-或-connection-reset（连接重置）" class="headerlink" title="EOF 或 connection reset（连接重置）"></a>EOF 或 connection reset（连接重置）</h3><ul><li><strong>含义</strong>：连接建立后被立即中断</li><li><strong>可能原因</strong>：GFW 发送 RST 包主动中断连接、协议特征被识别、服务端防火墙规则</li><li><strong>处理</strong>：<ol><li>切换协议（从 VMess 换到 VLESS，或使用 Hysteria2 等基于 UDP 的协议）</li><li>更换端口（尝试 443、8443、2053 等）</li><li>如果可用，启用 WebSocket 或 gRPC 传输层</li></ol></li></ul><hr><h2 id="第六步：高级排查"><a href="#第六步：高级排查" class="headerlink" title="第六步：高级排查"></a>第六步：高级排查</h2><p>如果前五步都没有解决问题，可以用以下方法做更深入的分析。</p><h3 id="抓包分析"><a href="#抓包分析" class="headerlink" title="抓包分析"></a>抓包分析</h3><p>使用 <a href="https://www.wireshark.org/">Wireshark</a> 抓包可以精确判断连接在哪个环节出了问题：</p><ol><li>打开 Wireshark，选择你的网络接口</li><li>设置过滤器：<code>ip.addr == 你的服务器IP</code></li><li>尝试连接代理，观察抓包结果</li></ol><p><strong>判断方法</strong>：</p><ul><li><strong>只有 SYN 包，没有 SYN-ACK</strong> → IP 被完全封锁，数据包被丢弃</li><li><strong>SYN-ACK 正常但之后收到 RST</strong> → 存在主动探测或 DPI（深度包检测）识别</li><li><strong>TLS 握手阶段失败</strong> → 可能是 SNI 被阻断或 TLS 指纹被识别</li><li><strong>握手完成但数据传输中断</strong> → 协议层面被识别，流量被中断</li></ul><h3 id="路由追踪"><a href="#路由追踪" class="headerlink" title="路由追踪"></a>路由追踪</h3><p>路由追踪可以帮助你了解数据包到服务器的路径，以及在哪一跳出了问题：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Windows</span></span><br><span class="line">tracert your-server-ip</span><br><span class="line"></span><br><span class="line"><span class="comment"># macOS / Linux</span></span><br><span class="line">traceroute your-server-ip</span><br><span class="line"></span><br><span class="line"><span class="comment"># 更好的工具：BestTrace（Windows）或 nexttrace（跨平台）</span></span><br><span class="line"><span class="comment"># 可以显示每一跳的地理位置和 ISP 信息</span></span><br><span class="line">nexttrace your-server-ip</span><br></pre></td></tr></table></figure><p><strong>结果分析</strong>：</p><ul><li>如果路由在某一跳之后全部超时 → 该位置存在封锁（通常是国际出口）</li><li>如果路由能到达服务器但代理仍然不通 → 服务端问题</li><li>如果路由在本地就超时 → 本地网络或 ISP 问题</li></ul><h3 id="日志分析"><a href="#日志分析" class="headerlink" title="日志分析"></a>日志分析</h3><p>客户端日志是最重要的排查信息来源：</p><p><img src="/images/inline/clash-verge-logs.jpg" alt="Clash Verge Rev 日志界面"><br><em>图片来源：<a href="https://clash.info/">clash.info</a></em></p><ul><li><strong><a href="https://github.com/clash-verge-rev/clash-verge-rev">Clash Verge Rev</a></strong>：设置 → 日志等级调为 Debug → 查看实时日志</li><li><strong>v2rayN</strong>：主界面底部有日志窗口，或点击菜单 → 查看日志</li><li><strong><a href="https://github.com/SagerNet/sing-box">sing-box</a></strong>：检查日志文件或终端输出</li></ul><p><img src="/images/inline/clash-connections.png" alt="Clash Verge 连接日志界面"><br><em>图片来源：<a href="https://zgcvpn.com/">ZGC VPN</a></em></p><p><strong>重点关注</strong>：</p><ul><li>重复出现的错误信息</li><li>连接超时的目标地址和端口</li><li>DNS 解析相关的错误</li><li>TLS 和认证相关的错误</li></ul><hr><h2 id="快速排查清单"><a href="#快速排查清单" class="headerlink" title="快速排查清单"></a>快速排查清单</h2><p>按顺序逐项检查，快速定位问题：</p><ul><li><input disabled="" type="checkbox"> 本地网络正常？（能打开 baidu.com）</li><li><input disabled="" type="checkbox"> 客户端正在运行？代理模式已开启？</li><li><input disabled="" type="checkbox"> 订阅已更新？未过期？流量未用完？</li><li><input disabled="" type="checkbox"> 防火墙&#x2F;杀毒软件没有拦截客户端？</li><li><input disabled="" type="checkbox"> 没有其他 VPN&#x2F;代理软件冲突？</li><li><input disabled="" type="checkbox"> 系统时间准确？（TLS 握手需要准确的系统时间）</li><li><input disabled="" type="checkbox"> 尝试了不同节点？不同地区？</li><li><input disabled="" type="checkbox"> 尝试了不同协议？（VLESS ↔ Hysteria2）</li><li><input disabled="" type="checkbox"> 尝试了不同网络？（WiFi ↔ 移动数据）</li><li><input disabled="" type="checkbox"> 检查了客户端日志的错误信息？</li><li><input disabled="" type="checkbox"> 确认了不是服务商那边的问题？（查 Telegram 群）</li></ul><hr><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="Q：所有节点突然全挂了怎么办？"><a href="#Q：所有节点突然全挂了怎么办？" class="headerlink" title="Q：所有节点突然全挂了怎么办？"></a>Q：所有节点突然全挂了怎么办？</h3><p>先看机场 Telegram 群是否有通知。如果是敏感时期（两会、国庆、重大会议等），可能是临时加强封锁。这种情况通常持续数小时到数天会逐步恢复。如果只有你一个人出问题，重点检查本地网络和客户端配置。特别留意是否刚切换了网络环境（比如从家里到了公司）。</p><h3 id="Q：节点有时能连有时不能？"><a href="#Q：节点有时能连有时不能？" class="headerlink" title="Q：节点有时能连有时不能？"></a>Q：节点有时能连有时不能？</h3><p>间歇性问题通常与网络质量有关：</p><ul><li><strong>丢包</strong>：网络不稳定导致连接时断时续</li><li><strong>路由波动</strong>：国际线路拥堵或路由变更</li><li><strong>晚高峰拥堵</strong>：晚间 8-11 点是上网高峰期，线路质量下降</li></ul><p>尝试以下方法：</p><ol><li>切换到有中转（IPLC&#x2F;IEPL）的线路，稳定性更好</li><li>不同 ISP 测试（电信、联通、移动表现可能不同）</li><li>避开晚高峰时段测试，确认是否为高峰期拥堵</li></ol><h3 id="Q：重装客户端能解决问题吗？"><a href="#Q：重装客户端能解决问题吗？" class="headerlink" title="Q：重装客户端能解决问题吗？"></a>Q：重装客户端能解决问题吗？</h3><p>有时可以，特别是在配置文件损坏、缓存异常的情况下。但操作前请注意：</p><ol><li><strong>备份订阅链接</strong>：重装后需要重新导入</li><li><strong>备份自定义配置</strong>：自定义规则、分流配置等</li><li><strong>大多数问题不需要重装</strong>：重启客户端 + 更新订阅通常就能解决</li></ol><h3 id="Q：怎么判断是-GFW-封的还是服务器挂了？"><a href="#Q：怎么判断是-GFW-封的还是服务器挂了？" class="headerlink" title="Q：怎么判断是 GFW 封的还是服务器挂了？"></a>Q：怎么判断是 GFW 封的还是服务器挂了？</h3><p>可以通过以下方法判断：</p><table><thead><tr><th>现象</th><th>可能原因</th></tr></thead><tbody><tr><td>TCPing 超时，但 ping 能通（ICMP 正常）</td><td>特定端口被封</td></tr><tr><td>ping 也不通，IP 完全不可达</td><td>IP 被封 或 服务器下线</td></tr><tr><td>其他用户正常，只有你不行</td><td>你的本地网络问题</td></tr><tr><td>所有用户都不行</td><td>服务端问题 或 大规模封锁</td></tr><tr><td>换端口后能连</td><td>旧端口被封，IP 暂时安全</td></tr><tr><td>换 IP 也不行，换协议才行</td><td>协议特征被识别</td></tr></tbody></table><h3 id="Q：敏感时期如何保持连接？"><a href="#Q：敏感时期如何保持连接？" class="headerlink" title="Q：敏感时期如何保持连接？"></a>Q：敏感时期如何保持连接？</h3><ul><li>优先使用基于 UDP 的协议（Hysteria2），TCP 封锁更常见</li><li>使用中转线路（IPLC&#x2F;IEPL），不经过 GFW 审查</li><li>多备几个不同机场，鸡蛋不要放在一个篮子里</li><li>提前下载好备用客户端和配置文件</li><li>保存机场面板地址和备用域名</li></ul>]]></content>
      
      
      <categories>
          
          <category> 排障手册 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> 排障 </tag>
            
            <tag> 连接 </tag>
            
            <tag> 节点 </tag>
            
            <tag> 诊断 </tag>
            
            <tag> 教程 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>如何自定义规则：让特定网站走代理/直连/特定节点</title>
      <link href="/posts/custom-rules/"/>
      <url>/posts/custom-rules/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：机场自带的规则集能满足大多数需求，但总有一些特殊情况——某个网站应该走代理但走了直连，公司内网需要直连，特定游戏需要走特定地区节点。本文教你如何在 Clash（mihomo）中自定义分流规则，覆盖三种主流方式、五个实用场景、完整的调试方法和规则语法速查表。</p></blockquote><h2 id="什么时候需要自定义规则"><a href="#什么时候需要自定义规则" class="headerlink" title="什么时候需要自定义规则"></a>什么时候需要自定义规则</h2><p>机场订阅里自带的规则集和社区公共规则集（如 Loyalsoldier、ACL4SSR）已经覆盖了绝大多数常见网站。但以下场景，你必须自己动手：</p><p><strong>某个网站路由不正确。</strong> 最常见的情况。一个被墙的网站没有出现在任何公共规则集里，导致它匹配到了兜底规则走了直连，打不开。或者反过来——一个国内网站被误判为需要代理，访问变慢了。公共规则集不可能收录互联网上的每一个域名，漏掉的那个恰好就是你需要的。</p><p><strong>公司内网或 VPN 需要绕过代理。</strong> 你在公司网络环境中使用代理，但公司内部的 GitLab、Jira、OA 系统、打印机管理页面等只能在内网访问。这些流量如果走了代理，会直接超时。你需要把公司的域名和 IP 段加入直连规则。</p><p><strong>特定游戏需要走特定地区的节点。</strong> 你玩日服的游戏，需要流量走日本节点以获得最低延迟。或者你玩的游戏服务器在韩国，需要走首尔的节点。通用的”Proxy”策略组不够精确，你需要把游戏的域名和进程指向专门的节点组。</p><p><strong>想屏蔽默认规则没覆盖的广告和追踪器。</strong> 公共的广告拦截规则集更新再勤快，也总有漏网之鱼。某个 App 里弹出的广告域名、某个网站上的追踪脚本，你可以自己加 REJECT 规则来屏蔽。</p><p><strong>特定服务需要走专用节点组。</strong> AI 服务（ChatGPT、Claude）对 IP 地区有要求，流媒体（Netflix、Disney+）需要解锁节点，Telegram 需要稳定的线路。你想让这些服务各走各的最优路径，而不是混在一起。</p><h2 id="自定义的三种方式"><a href="#自定义的三种方式" class="headerlink" title="自定义的三种方式"></a>自定义的三种方式</h2><h3 id="方式一：在配置文件中直接添加规则"><a href="#方式一：在配置文件中直接添加规则" class="headerlink" title="方式一：在配置文件中直接添加规则"></a>方式一：在配置文件中直接添加规则</h3><p>最直接的方法——打开你的 Clash 配置文件（YAML 格式），在 <code>rules:</code> 段中插入自定义规则。</p><p>关键原则：<strong>自定义规则必须放在通用规则和兜底规则之前。</strong> Clash 的规则匹配是从上到下、先到先得的。如果你把自定义规则放在 <code>MATCH,Proxy</code> 后面，它永远不会被匹配到。</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">rules:</span></span><br><span class="line">  <span class="comment"># ========== 自定义规则 - 放在最前面 ==========</span></span><br><span class="line">  <span class="comment"># 公司内网直连</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,company-internal.com,DIRECT</span></span><br><span class="line">  <span class="comment"># 特定游戏走日本节点</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,specific-game.com,GameNodes</span></span><br><span class="line">  <span class="comment"># 某个网站强制走代理</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN,blocked-site.example.com,Proxy</span></span><br><span class="line">  <span class="comment"># 屏蔽某个广告域名</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,annoying-tracker.com,REJECT</span></span><br><span class="line">  </span><br><span class="line">  <span class="comment"># ========== 以下是默认规则集 ==========</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,reject,REJECT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,direct,DIRECT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,proxy,Proxy</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOIP,CN,DIRECT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">MATCH,Proxy</span></span><br></pre></td></tr></table></figure><p><strong>优点</strong>：简单直观，改完保存就生效。</p><p><strong>缺点</strong>：当你的机场订阅更新时，配置文件会被覆盖，你加的自定义规则会丢失。每次更新订阅后都需要手动重新添加。如果你只有两三条规则还能忍，规则多了就很痛苦。</p><p><strong>适合场景</strong>：临时测试、规则数量极少（1-3 条）、不使用订阅更新的情况。</p><h3 id="方式二：使用-Clash-Verge-Rev-的覆写功能（推荐）"><a href="#方式二：使用-Clash-Verge-Rev-的覆写功能（推荐）" class="headerlink" title="方式二：使用 Clash Verge Rev 的覆写功能（推荐）"></a>方式二：使用 Clash Verge Rev 的覆写功能（推荐）</h3><p><a href="https://github.com/clash-verge-rev/clash-verge-rev">Clash Verge Rev</a> 提供了”覆写”（Override &#x2F; Script）功能，允许你用一段 JavaScript 脚本在订阅配置加载后对其进行修改。这段脚本不会被订阅更新覆盖——它在订阅配置更新之后运行，每次都会把你的自定义规则注入进去。</p><p><strong>操作步骤</strong>：</p><ol><li>打开 Clash Verge Rev</li><li>进入”订阅”页面</li><li>点击你正在使用的订阅配置右侧的编辑图标</li><li>切换到”Script”（脚本）标签页</li><li>输入覆写脚本</li></ol><p><strong>基础覆写脚本</strong>：</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// Clash Verge Rev 覆写脚本</span></span><br><span class="line"><span class="keyword">function</span> <span class="title function_">main</span>(<span class="params">config</span>) &#123;</span><br><span class="line">  <span class="comment">// 定义自定义规则 - 这些规则会被插入到所有规则的最前面</span></span><br><span class="line">  <span class="keyword">const</span> customRules = [</span><br><span class="line">    <span class="comment">// 公司内网直连</span></span><br><span class="line">    <span class="string">&quot;DOMAIN-SUFFIX,company.com,DIRECT&quot;</span>,</span><br><span class="line">    <span class="string">&quot;DOMAIN-SUFFIX,internal.corp,DIRECT&quot;</span>,</span><br><span class="line">    <span class="string">&quot;IP-CIDR,10.0.0.0/8,DIRECT,no-resolve&quot;</span>,</span><br><span class="line">    </span><br><span class="line">    <span class="comment">// 特定网站走代理</span></span><br><span class="line">    <span class="string">&quot;DOMAIN-SUFFIX,special-site.com,Proxy&quot;</span>,</span><br><span class="line">    <span class="string">&quot;DOMAIN,blocked-site.example.com,Proxy&quot;</span>,</span><br><span class="line">    </span><br><span class="line">    <span class="comment">// 游戏走特定节点组</span></span><br><span class="line">    <span class="string">&quot;PROCESS-NAME,game.exe,GameNodes&quot;</span>,</span><br><span class="line">    <span class="string">&quot;DOMAIN-SUFFIX,game-server.com,GameNodes&quot;</span>,</span><br><span class="line">    </span><br><span class="line">    <span class="comment">// 屏蔽广告</span></span><br><span class="line">    <span class="string">&quot;DOMAIN-SUFFIX,ad-tracker.com,REJECT&quot;</span>,</span><br><span class="line">  ];</span><br><span class="line">  </span><br><span class="line">  <span class="comment">// 将自定义规则插入到现有规则的最前面</span></span><br><span class="line">  config.<span class="property">rules</span> = [...customRules, ...config.<span class="property">rules</span>];</span><br><span class="line">  </span><br><span class="line">  <span class="keyword">return</span> config;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><strong>进阶覆写脚本——同时添加策略组和规则</strong>：</p><p>如果你的订阅配置里没有你想用的策略组（比如没有”AI-Services”组），你可以在脚本中同时创建策略组和规则：</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> <span class="title function_">main</span>(<span class="params">config</span>) &#123;</span><br><span class="line">  <span class="comment">// ---- 1. 添加自定义策略组 ----</span></span><br><span class="line">  <span class="comment">// 从现有的节点中筛选出日本节点，创建一个&quot;Gaming-JP&quot;策略组</span></span><br><span class="line">  <span class="keyword">const</span> allProxies = config.<span class="property">proxies</span>.<span class="title function_">map</span>(<span class="function"><span class="params">p</span> =&gt;</span> p.<span class="property">name</span>);</span><br><span class="line">  <span class="keyword">const</span> jpProxies = allProxies.<span class="title function_">filter</span>(<span class="function"><span class="params">name</span> =&gt;</span> </span><br><span class="line">    name.<span class="title function_">includes</span>(<span class="string">&quot;日本&quot;</span>) || name.<span class="title function_">includes</span>(<span class="string">&quot;JP&quot;</span>) || name.<span class="title function_">includes</span>(<span class="string">&quot;Japan&quot;</span>)</span><br><span class="line">  );</span><br><span class="line">  </span><br><span class="line">  <span class="keyword">if</span> (jpProxies.<span class="property">length</span> &gt; <span class="number">0</span>) &#123;</span><br><span class="line">    config[<span class="string">&quot;proxy-groups&quot;</span>].<span class="title function_">push</span>(&#123;</span><br><span class="line">      <span class="attr">name</span>: <span class="string">&quot;Gaming-JP&quot;</span>,</span><br><span class="line">      <span class="attr">type</span>: <span class="string">&quot;url-test&quot;</span>,</span><br><span class="line">      <span class="attr">proxies</span>: jpProxies,</span><br><span class="line">      <span class="attr">url</span>: <span class="string">&quot;http://www.gstatic.com/generate_204&quot;</span>,</span><br><span class="line">      <span class="attr">interval</span>: <span class="number">300</span>,</span><br><span class="line">    &#125;);</span><br><span class="line">  &#125;</span><br><span class="line">  </span><br><span class="line">  <span class="comment">// 创建一个&quot;AI-Services&quot;策略组</span></span><br><span class="line">  <span class="keyword">const</span> usProxies = allProxies.<span class="title function_">filter</span>(<span class="function"><span class="params">name</span> =&gt;</span></span><br><span class="line">    name.<span class="title function_">includes</span>(<span class="string">&quot;美国&quot;</span>) || name.<span class="title function_">includes</span>(<span class="string">&quot;US&quot;</span>) || name.<span class="title function_">includes</span>(<span class="string">&quot;United States&quot;</span>)</span><br><span class="line">  );</span><br><span class="line">  </span><br><span class="line">  <span class="keyword">if</span> (usProxies.<span class="property">length</span> &gt; <span class="number">0</span>) &#123;</span><br><span class="line">    config[<span class="string">&quot;proxy-groups&quot;</span>].<span class="title function_">push</span>(&#123;</span><br><span class="line">      <span class="attr">name</span>: <span class="string">&quot;AI-Services&quot;</span>,</span><br><span class="line">      <span class="attr">type</span>: <span class="string">&quot;select&quot;</span>,</span><br><span class="line">      <span class="attr">proxies</span>: [...usProxies, <span class="string">&quot;DIRECT&quot;</span>],</span><br><span class="line">    &#125;);</span><br><span class="line">  &#125;</span><br><span class="line">  </span><br><span class="line">  <span class="comment">// ---- 2. 添加自定义规则 ----</span></span><br><span class="line">  <span class="keyword">const</span> customRules = [</span><br><span class="line">    <span class="comment">// AI 服务走专用组</span></span><br><span class="line">    <span class="string">&quot;DOMAIN-SUFFIX,openai.com,AI-Services&quot;</span>,</span><br><span class="line">    <span class="string">&quot;DOMAIN-SUFFIX,chatgpt.com,AI-Services&quot;</span>,</span><br><span class="line">    <span class="string">&quot;DOMAIN-SUFFIX,anthropic.com,AI-Services&quot;</span>,</span><br><span class="line">    <span class="string">&quot;DOMAIN-SUFFIX,claude.ai,AI-Services&quot;</span>,</span><br><span class="line">    </span><br><span class="line">    <span class="comment">// 游戏走日本节点</span></span><br><span class="line">    <span class="string">&quot;DOMAIN-SUFFIX,riotgames.com,Gaming-JP&quot;</span>,</span><br><span class="line">    <span class="string">&quot;PROCESS-NAME,LeagueClient.exe,Gaming-JP&quot;</span>,</span><br><span class="line">  ];</span><br><span class="line">  </span><br><span class="line">  config.<span class="property">rules</span> = [...customRules, ...config.<span class="property">rules</span>];</span><br><span class="line">  </span><br><span class="line">  <span class="keyword">return</span> config;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><strong>优点</strong>：订阅更新不会覆盖你的自定义规则。脚本逻辑灵活，可以根据现有节点动态创建策略组。一次配置，长期有效。</p><p><strong>缺点</strong>：需要基本的 JavaScript 知识。脚本写错可能导致整个配置加载失败（但不会丢失原始配置，修改脚本即可恢复）。</p><p><strong>适合场景</strong>：长期使用的自定义规则、需要自动创建策略组、使用订阅更新的用户。这是大多数用户的最佳选择。</p><h3 id="方式三：创建自己的-rule-provider-文件"><a href="#方式三：创建自己的-rule-provider-文件" class="headerlink" title="方式三：创建自己的 rule-provider 文件"></a>方式三：创建自己的 rule-provider 文件</h3><p>当你的自定义规则数量较多（几十条甚至上百条），把它们全写在脚本或配置文件里不太方便管理。这时候可以创建独立的规则文件，通过 rule-provider 机制加载。</p><p><strong>创建规则文件</strong>：</p><p>在 Clash 配置目录下创建一个 <code>custom</code> 文件夹，在里面放你的规则文件。</p><p>以域名列表为例，创建 <code>my-direct-domains.txt</code>：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">company.com</span><br><span class="line">internal.corp</span><br><span class="line">oa.mycompany.cn</span><br><span class="line">gitlab.mycompany.com</span><br><span class="line">jira.mycompany.com</span><br><span class="line">vpn.mycompany.com</span><br><span class="line">printer.office.local</span><br></pre></td></tr></table></figure><p>以混合规则为例，创建 <code>my-custom-rules.txt</code>（需要使用 classical behavior）：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">DOMAIN-SUFFIX,company.com</span><br><span class="line">DOMAIN-SUFFIX,internal.corp</span><br><span class="line">IP-CIDR,10.0.0.0/8,no-resolve</span><br><span class="line">IP-CIDR,172.16.0.0/12,no-resolve</span><br><span class="line">IP-CIDR,192.168.0.0/16,no-resolve</span><br><span class="line">PROCESS-NAME,enterprise-vpn.exe</span><br></pre></td></tr></table></figure><p><strong>在配置中引用</strong>：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">rule-providers:</span></span><br><span class="line">  <span class="attr">my-direct-domains:</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">file</span></span><br><span class="line">    <span class="attr">behavior:</span> <span class="string">domain</span></span><br><span class="line">    <span class="attr">path:</span> <span class="string">./custom/my-direct-domains.txt</span></span><br><span class="line">    <span class="attr">format:</span> <span class="string">text</span></span><br><span class="line"></span><br><span class="line">  <span class="attr">my-custom-rules:</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">file</span></span><br><span class="line">    <span class="attr">behavior:</span> <span class="string">classical</span></span><br><span class="line">    <span class="attr">path:</span> <span class="string">./custom/my-custom-rules.txt</span></span><br><span class="line">    <span class="attr">format:</span> <span class="string">text</span></span><br><span class="line"></span><br><span class="line"><span class="attr">rules:</span></span><br><span class="line">  <span class="comment"># 自定义规则集 - 放在其他 RULE-SET 前面</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,my-direct-domains,DIRECT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,my-custom-rules,DIRECT</span></span><br><span class="line">  </span><br><span class="line">  <span class="comment"># 然后是默认规则</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,reject,REJECT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,google,Proxy</span></span><br><span class="line">  <span class="comment"># ... 其他规则</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOIP,CN,DIRECT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">MATCH,Proxy</span></span><br></pre></td></tr></table></figure><p><strong>如果配合覆写脚本使用</strong>，可以在脚本中动态注入 rule-provider 定义：</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> <span class="title function_">main</span>(<span class="params">config</span>) &#123;</span><br><span class="line">  <span class="comment">// 添加自定义 rule-provider</span></span><br><span class="line">  <span class="keyword">if</span> (!config[<span class="string">&quot;rule-providers&quot;</span>]) &#123;</span><br><span class="line">    config[<span class="string">&quot;rule-providers&quot;</span>] = &#123;&#125;;</span><br><span class="line">  &#125;</span><br><span class="line">  </span><br><span class="line">  config[<span class="string">&quot;rule-providers&quot;</span>][<span class="string">&quot;my-direct&quot;</span>] = &#123;</span><br><span class="line">    <span class="attr">type</span>: <span class="string">&quot;file&quot;</span>,</span><br><span class="line">    <span class="attr">behavior</span>: <span class="string">&quot;domain&quot;</span>,</span><br><span class="line">    <span class="attr">path</span>: <span class="string">&quot;./custom/my-direct-domains.txt&quot;</span>,</span><br><span class="line">    <span class="attr">format</span>: <span class="string">&quot;text&quot;</span>,</span><br><span class="line">  &#125;;</span><br><span class="line">  </span><br><span class="line">  <span class="comment">// 在规则最前面引用</span></span><br><span class="line">  config.<span class="property">rules</span>.<span class="title function_">unshift</span>(<span class="string">&quot;RULE-SET,my-direct,DIRECT&quot;</span>);</span><br><span class="line">  </span><br><span class="line">  <span class="keyword">return</span> config;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><strong>优点</strong>：规则和配置分离，便于管理大量规则。规则文件可以独立编辑，不影响主配置。如果托管到 GitHub 等平台，还可以设置自动更新。</p><p><strong>缺点</strong>：多一层文件管理。本地文件在多设备间不能自动同步（除非托管到远程）。</p><p><strong>适合场景</strong>：自定义规则数量较多、需要在多台设备间共享自定义规则、需要独立维护和版本管理的情况。</p><h2 id="实用场景示例"><a href="#实用场景示例" class="headerlink" title="实用场景示例"></a>实用场景示例</h2><h3 id="场景一：公司内网直连"><a href="#场景一：公司内网直连" class="headerlink" title="场景一：公司内网直连"></a>场景一：公司内网直连</h3><p>上班时开着代理，但公司内部系统必须直连，否则打不开。</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 公司域名直连</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,company.com,DIRECT</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,corp.internal,DIRECT</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,oa.mycompany.cn,DIRECT</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,mail.mycompany.com,DIRECT</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 公司 IP 段直连（RFC 1918 私有地址）</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">IP-CIDR,10.0.0.0/8,DIRECT,no-resolve</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">IP-CIDR,172.16.0.0/12,DIRECT,no-resolve</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">IP-CIDR,192.168.0.0/16,DIRECT,no-resolve</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 如果公司有专用的公网 IP 段</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">IP-CIDR,203.0.113.0/24,DIRECT</span></span><br></pre></td></tr></table></figure><p>注意 IP-CIDR 规则后面的 <code>no-resolve</code>。这个参数的作用是：当请求的目标是域名时，不要先解析 DNS 再拿 IP 去匹配这条规则。这可以避免不必要的 DNS 查询，提升匹配效率。对于只用来匹配内网 IP 段的规则，加上 <code>no-resolve</code> 是好习惯。</p><h3 id="场景二：特定游戏走特定地区节点"><a href="#场景二：特定游戏走特定地区节点" class="headerlink" title="场景二：特定游戏走特定地区节点"></a>场景二：特定游戏走特定地区节点</h3><p>你玩的游戏服务器在日本，需要走日本节点来降低延迟。</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 需要先在 proxy-groups 中定义 Gaming-JP 策略组</span></span><br><span class="line"><span class="comment"># proxy-groups:</span></span><br><span class="line"><span class="comment">#   - name: Gaming-JP</span></span><br><span class="line"><span class="comment">#     type: url-test</span></span><br><span class="line"><span class="comment">#     proxies: [JP-01, JP-02, JP-03]</span></span><br><span class="line"><span class="comment">#     url: http://www.gstatic.com/generate_204</span></span><br><span class="line"><span class="comment">#     interval: 300</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Steam 平台</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,steampowered.com,Gaming</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,steamcommunity.com,Gaming</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,steamstatic.com,Gaming</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,steam-chat.com,Gaming</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">PROCESS-NAME,steam.exe,Gaming</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 英雄联盟日服</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,riotgames.com,Gaming-JP</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,leagueoflegends.com,Gaming-JP</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">PROCESS-NAME,LeagueClient.exe,Gaming-JP</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">PROCESS-NAME,League</span> <span class="string">of</span> <span class="string">Legends.exe,Gaming-JP</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 最终幻想14</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,finalfantasyxiv.com,Gaming-JP</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,square-enix.com,Gaming-JP</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">PROCESS-NAME,ffxiv_dx11.exe,Gaming-JP</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 原神（国际服）</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,hoyoverse.com,Gaming</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,mihoyo.com,Gaming</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">PROCESS-NAME,GenshinImpact.exe,Gaming</span></span><br></pre></td></tr></table></figure><p><strong>注意</strong>：<code>PROCESS-NAME</code> 规则需要在 TUN 模式下才能生效。系统代理模式无法捕获进程信息。如果你还没开启 TUN 模式，参考客户端设置中的 TUN 选项。</p><h3 id="场景三：AI-服务走专用节点组"><a href="#场景三：AI-服务走专用节点组" class="headerlink" title="场景三：AI 服务走专用节点组"></a>场景三：AI 服务走专用节点组</h3><p>ChatGPT、Claude 等 AI 服务对 IP 地区有要求。有些节点的 IP 被这些服务封禁了，有些节点地区根本无法使用这些服务。把 AI 服务单独分组，方便切换到可用的节点。</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># AI 服务 - 走专用策略组</span></span><br><span class="line"><span class="comment"># OpenAI / ChatGPT</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,openai.com,AI-Services</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,chatgpt.com,AI-Services</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,oaistatic.com,AI-Services</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,oaiusercontent.com,AI-Services</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,ai.com,AI-Services</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Anthropic / Claude</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,anthropic.com,AI-Services</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,claude.ai,AI-Services</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Google AI</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,gemini.google.com,AI-Services</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,deepmind.google,AI-Services</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,bard.google.com,AI-Services</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Microsoft Copilot</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,copilot.microsoft.com,AI-Services</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Perplexity</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,perplexity.ai,AI-Services</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Midjourney</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,midjourney.com,AI-Services</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Suno (AI 音乐)</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,suno.com,AI-Services</span></span><br></pre></td></tr></table></figure><p>建议 AI-Services 策略组使用 <code>select</code>（手动选择）类型而不是 <code>url-test</code>（自动选最快）。原因是延迟最低的节点不一定能正常访问这些 AI 服务，手动选择可以确保切换到实际可用的节点。</p><h3 id="场景四：强制某些网站走代理"><a href="#场景四：强制某些网站走代理" class="headerlink" title="场景四：强制某些网站走代理"></a>场景四：强制某些网站走代理</h3><p>有些网站在中国能访问，但走代理更快、功能更全，或者你需要以境外 IP 访问获得不同的内容。</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># GitHub - 国内虽然能访问，但速度极不稳定，走代理更流畅</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,github.com,Proxy</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,githubusercontent.com,Proxy</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,github.io,Proxy</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,githubassets.com,Proxy</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Stack Overflow - 国内能访问但经常很慢</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,stackoverflow.com,Proxy</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,stackexchange.com,Proxy</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,sstatic.net,Proxy</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Docker Hub - 镜像拉取经常超时</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,docker.com,Proxy</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,docker.io,Proxy</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># npm 源 - 默认源在国内很慢（也可以改用国内镜像，但走代理更简单）</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,npmjs.org,Proxy</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,npmjs.com,Proxy</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Wikipedia - 部分地区已被墙</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,wikipedia.org,Proxy</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,wikimedia.org,Proxy</span></span><br></pre></td></tr></table></figure><h3 id="场景五：屏蔽特定域名"><a href="#场景五：屏蔽特定域名" class="headerlink" title="场景五：屏蔽特定域名"></a>场景五：屏蔽特定域名</h3><p>除了公共广告拦截规则之外，自己补充屏蔽名单。</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 屏蔽特定广告和追踪域名</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,annoying-ads.com,REJECT</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,user-tracker.net,REJECT</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 用关键词匹配批量屏蔽 - 注意：关键词匹配范围广，可能误伤</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-KEYWORD,adservice,REJECT</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-KEYWORD,analytics,REJECT</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">DOMAIN-KEYWORD,tracking,REJECT</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 屏蔽特定 App 的联网请求（需要 TUN 模式）</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">PROCESS-NAME,bloatware.exe,REJECT</span></span><br></pre></td></tr></table></figure><p><strong>警告</strong>：<code>DOMAIN-KEYWORD</code> 规则的匹配范围很广。<code>DOMAIN-KEYWORD,analytics,REJECT</code> 会屏蔽所有域名中包含”analytics”的请求，可能影响到正常网站的功能（比如某些网站用 analytics 子域名做非追踪用途）。建议优先使用 <code>DOMAIN-SUFFIX</code>（精确）而不是 <code>DOMAIN-KEYWORD</code>（模糊），只在你确定关键词不会误伤时才使用关键词规则。</p><h2 id="调试自定义规则"><a href="#调试自定义规则" class="headerlink" title="调试自定义规则"></a>调试自定义规则</h2><p>规则写好了，怎么确认它生效了？怎么排查没生效的原因？</p><h3 id="查看规则匹配结果"><a href="#查看规则匹配结果" class="headerlink" title="查看规则匹配结果"></a>查看规则匹配结果</h3><p><strong>Clash Verge Rev</strong>：打开”连接”（Connections）标签页。这里列出了所有当前活跃的网络连接，每条连接显示以下信息：</p><ul><li><strong>Host</strong>：目标域名或 IP</li><li><strong>Rule</strong>：匹配到的规则（比如 <code>DOMAIN-SUFFIX,github.com</code>）</li><li><strong>Chains</strong>：使用的策略组和最终节点</li><li><strong>Type</strong>：连接类型（TCP&#x2F;UDP）</li></ul><p>找到你想检查的连接，看”Rule”列。如果显示的规则不是你写的自定义规则，说明你的规则没有被匹配到——通常是因为位置不对（放在了其他规则后面）或者写法有误。</p><p><strong>实际操作</strong>：在浏览器中访问目标网站，然后立即切到 Clash Verge Rev 的连接页面查看。注意一个域名可能产生多个连接（主页面、CSS、JS、图片等可能来自不同域名），需要找到对应的那条。</p><h3 id="常见错误和排查方法"><a href="#常见错误和排查方法" class="headerlink" title="常见错误和排查方法"></a>常见错误和排查方法</h3><p><strong>错误 1：自定义规则放在了兜底规则后面</strong></p><p>这是最常见的错误。<code>MATCH,Proxy</code> 会匹配一切流量，所有放在它后面的规则都永远不会被检查。</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 错误写法</span></span><br><span class="line"><span class="attr">rules:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,proxy,Proxy</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOIP,CN,DIRECT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">MATCH,Proxy</span>               <span class="comment"># 这条匹配一切，后面的规则永远无效</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,my-site.com,DIRECT</span>  <span class="comment"># 永远不会被匹配到</span></span><br></pre></td></tr></table></figure><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 正确写法</span></span><br><span class="line"><span class="attr">rules:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,my-site.com,DIRECT</span>  <span class="comment"># 自定义规则放最前面</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,proxy,Proxy</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOIP,CN,DIRECT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">MATCH,Proxy</span></span><br></pre></td></tr></table></figure><p><strong>错误 2：域名拼写有误</strong></p><p>规则不会做模糊匹配。<code>DOMAIN-SUFFIX,gooogle.com,Proxy</code>（多了一个 o）不会匹配 <code>google.com</code>。仔细检查域名拼写。</p><p>排查方法：在连接日志中搜索目标域名，看它实际命中了哪条规则。如果命中的是 <code>MATCH</code>（兜底）或其他通用规则而不是你的自定义规则，说明你的规则没有正确匹配。</p><p><strong>错误 3：rule-provider 的 behavior 类型不对</strong></p><p>如果你创建的规则文件内容是纯域名列表（每行一个域名），但 behavior 设成了 <code>classical</code>，Clash 会尝试解析每行的规则类型前缀，发现找不到，规则加载失败。</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 错误：文件内容是纯域名，但 behavior 写了 classical</span></span><br><span class="line"><span class="attr">my-rules:</span></span><br><span class="line">  <span class="attr">type:</span> <span class="string">file</span></span><br><span class="line">  <span class="attr">behavior:</span> <span class="string">classical</span>     <span class="comment"># 错！应该是 domain</span></span><br><span class="line">  <span class="attr">path:</span> <span class="string">./custom/domains.txt</span></span><br><span class="line">  <span class="attr">format:</span> <span class="string">text</span></span><br></pre></td></tr></table></figure><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 正确</span></span><br><span class="line"><span class="attr">my-rules:</span></span><br><span class="line">  <span class="attr">type:</span> <span class="string">file</span></span><br><span class="line">  <span class="attr">behavior:</span> <span class="string">domain</span>        <span class="comment"># 纯域名列表用 domain</span></span><br><span class="line">  <span class="attr">path:</span> <span class="string">./custom/domains.txt</span></span><br><span class="line">  <span class="attr">format:</span> <span class="string">text</span></span><br></pre></td></tr></table></figure><p>反过来，如果文件中包含 <code>DOMAIN-SUFFIX,xxx.com</code> 这样带前缀的规则，behavior 就必须用 <code>classical</code>。</p><p><strong>错误 4：策略组名称不存在</strong></p><p>规则指向的策略组必须在 <code>proxy-groups</code> 中定义过。如果你写了 <code>DOMAIN-SUFFIX,example.com,GameNodes</code>，但配置中没有名为”GameNodes”的策略组，Clash 会报错。</p><p>排查方法：检查 Clash Verge Rev 的日志页面，加载配置失败时通常会输出具体的错误信息。</p><p><strong>错误 5：订阅更新覆盖了自定义规则</strong></p><p>如果你直接在配置文件中添加规则，订阅更新会用新的配置文件替换旧的，你的修改全部丢失。</p><p>解决方案：使用方式二（覆写脚本）或方式三（独立 rule-provider 文件配合覆写脚本）。覆写脚本在订阅配置加载后运行，不受更新影响。</p><h2 id="规则语法速查表"><a href="#规则语法速查表" class="headerlink" title="规则语法速查表"></a>规则语法速查表</h2><p>以下是 Clash &#x2F; mihomo 支持的所有常用规则类型（完整规则文档请参阅 <a href="https://wiki.metacubex.one/">Clash Wiki</a>）：</p><table><thead><tr><th>类型</th><th>语法</th><th>示例</th><th>说明</th></tr></thead><tbody><tr><td>精确域名</td><td><code>DOMAIN</code></td><td><code>DOMAIN,example.com,Proxy</code></td><td>只匹配 <code>example.com</code> 本身，不匹配子域名</td></tr><tr><td>域名后缀</td><td><code>DOMAIN-SUFFIX</code></td><td><code>DOMAIN-SUFFIX,google.com,Proxy</code></td><td>匹配 <code>google.com</code> 及其所有子域名 <code>*.google.com</code></td></tr><tr><td>域名关键词</td><td><code>DOMAIN-KEYWORD</code></td><td><code>DOMAIN-KEYWORD,google,Proxy</code></td><td>域名中包含 <code>google</code> 就匹配</td></tr><tr><td>IP 段</td><td><code>IP-CIDR</code></td><td><code>IP-CIDR,1.2.3.0/24,DIRECT</code></td><td>匹配目标 IP 在指定范围内</td></tr><tr><td>IPv6 段</td><td><code>IP-CIDR6</code></td><td><code>IP-CIDR6,2001:db8::/32,DIRECT</code></td><td>匹配目标 IPv6 地址在指定范围内</td></tr><tr><td>国家 IP</td><td><code>GEOIP</code></td><td><code>GEOIP,CN,DIRECT</code></td><td>根据 GeoIP 数据库判断目标 IP 所属国家</td></tr><tr><td>进程名</td><td><code>PROCESS-NAME</code></td><td><code>PROCESS-NAME,chrome.exe,Proxy</code></td><td>匹配发出请求的进程名（需要 TUN 模式）</td></tr><tr><td>目标端口</td><td><code>DST-PORT</code></td><td><code>DST-PORT,22,DIRECT</code></td><td>匹配目标端口号</td></tr><tr><td>源端口</td><td><code>SRC-PORT</code></td><td><code>SRC-PORT,7777,DIRECT</code></td><td>匹配来源端口号</td></tr><tr><td>规则集</td><td><code>RULE-SET</code></td><td><code>RULE-SET,my-rules,Proxy</code></td><td>引用 rule-provider 中定义的规则集</td></tr><tr><td>GeoSite</td><td><code>GEOSITE</code></td><td><code>GEOSITE,google,Proxy</code></td><td>使用内置 GeoSite 数据库匹配（mihomo）</td></tr><tr><td>兜底</td><td><code>MATCH</code></td><td><code>MATCH,Proxy</code></td><td>匹配所有未被前面规则命中的流量，必须放最后</td></tr></tbody></table><h3 id="规则编写的优先级原则"><a href="#规则编写的优先级原则" class="headerlink" title="规则编写的优先级原则"></a>规则编写的优先级原则</h3><p>组织规则的顺序直接决定分流的正确性。遵循以下优先级从上到下排列：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">1. REJECT 规则（广告拦截）—— 最先处理，避免广告请求浪费带宽</span><br><span class="line">2. 自定义直连规则（公司内网等）—— 确保内网流量不走代理</span><br><span class="line">3. 自定义代理/特定节点规则 —— 特殊网站走指定路径</span><br><span class="line">4. 公共规则集（RULE-SET）—— 覆盖常见网站</span><br><span class="line">5. GEOIP,CN,DIRECT —— 兜底：中国 IP 直连</span><br><span class="line">6. MATCH,Proxy —— 最终兜底：剩余流量走代理</span><br></pre></td></tr></table></figure><h2 id="完整实战：从零开始添加自定义规则"><a href="#完整实战：从零开始添加自定义规则" class="headerlink" title="完整实战：从零开始添加自定义规则"></a>完整实战：从零开始添加自定义规则</h2><p>下面用一个完整的例子串起所有知识点。假设你的需求是：</p><ol><li>公司内网域名 <code>*.mycompany.com</code> 和 <code>*.internal.corp</code> 直连</li><li>GitHub 系列域名走代理（默认规则没覆盖到）</li><li>ChatGPT 和 Claude 走一个专门的美国节点组</li><li>英雄联盟走日本节点</li><li>屏蔽一个烦人的广告域名 <code>spam-tracker.net</code></li></ol><p><strong>用覆写脚本实现</strong>（推荐方式）：</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> <span class="title function_">main</span>(<span class="params">config</span>) &#123;</span><br><span class="line">  <span class="comment">// ---------- 创建策略组 ----------</span></span><br><span class="line">  <span class="keyword">const</span> allProxies = config.<span class="property">proxies</span>.<span class="title function_">map</span>(<span class="function"><span class="params">p</span> =&gt;</span> p.<span class="property">name</span>);</span><br><span class="line">  </span><br><span class="line">  <span class="comment">// AI 服务策略组 - 筛选美国节点</span></span><br><span class="line">  <span class="keyword">const</span> usProxies = allProxies.<span class="title function_">filter</span>(<span class="function"><span class="params">name</span> =&gt;</span></span><br><span class="line">    <span class="regexp">/美国|US|United States|America/i</span>.<span class="title function_">test</span>(name)</span><br><span class="line">  );</span><br><span class="line">  <span class="keyword">if</span> (usProxies.<span class="property">length</span> &gt; <span class="number">0</span>) &#123;</span><br><span class="line">    config[<span class="string">&quot;proxy-groups&quot;</span>].<span class="title function_">push</span>(&#123;</span><br><span class="line">      <span class="attr">name</span>: <span class="string">&quot;AI-Services&quot;</span>,</span><br><span class="line">      <span class="attr">type</span>: <span class="string">&quot;select&quot;</span>,</span><br><span class="line">      <span class="attr">proxies</span>: usProxies,</span><br><span class="line">    &#125;);</span><br><span class="line">  &#125;</span><br><span class="line">  </span><br><span class="line">  <span class="comment">// 游戏策略组 - 筛选日本节点</span></span><br><span class="line">  <span class="keyword">const</span> jpProxies = allProxies.<span class="title function_">filter</span>(<span class="function"><span class="params">name</span> =&gt;</span></span><br><span class="line">    <span class="regexp">/日本|JP|Japan|Tokyo|Osaka/i</span>.<span class="title function_">test</span>(name)</span><br><span class="line">  );</span><br><span class="line">  <span class="keyword">if</span> (jpProxies.<span class="property">length</span> &gt; <span class="number">0</span>) &#123;</span><br><span class="line">    config[<span class="string">&quot;proxy-groups&quot;</span>].<span class="title function_">push</span>(&#123;</span><br><span class="line">      <span class="attr">name</span>: <span class="string">&quot;Gaming-JP&quot;</span>,</span><br><span class="line">      <span class="attr">type</span>: <span class="string">&quot;url-test&quot;</span>,</span><br><span class="line">      <span class="attr">proxies</span>: jpProxies,</span><br><span class="line">      <span class="attr">url</span>: <span class="string">&quot;http://www.gstatic.com/generate_204&quot;</span>,</span><br><span class="line">      <span class="attr">interval</span>: <span class="number">300</span>,</span><br><span class="line">    &#125;);</span><br><span class="line">  &#125;</span><br><span class="line">  </span><br><span class="line">  <span class="comment">// ---------- 自定义规则 ----------</span></span><br><span class="line">  <span class="keyword">const</span> customRules = [</span><br><span class="line">    <span class="comment">// 1. 屏蔽广告</span></span><br><span class="line">    <span class="string">&quot;DOMAIN-SUFFIX,spam-tracker.net,REJECT&quot;</span>,</span><br><span class="line">    </span><br><span class="line">    <span class="comment">// 2. 公司内网直连</span></span><br><span class="line">    <span class="string">&quot;DOMAIN-SUFFIX,mycompany.com,DIRECT&quot;</span>,</span><br><span class="line">    <span class="string">&quot;DOMAIN-SUFFIX,internal.corp,DIRECT&quot;</span>,</span><br><span class="line">    <span class="string">&quot;IP-CIDR,10.0.0.0/8,DIRECT,no-resolve&quot;</span>,</span><br><span class="line">    </span><br><span class="line">    <span class="comment">// 3. GitHub 走代理</span></span><br><span class="line">    <span class="string">&quot;DOMAIN-SUFFIX,github.com,Proxy&quot;</span>,</span><br><span class="line">    <span class="string">&quot;DOMAIN-SUFFIX,githubusercontent.com,Proxy&quot;</span>,</span><br><span class="line">    <span class="string">&quot;DOMAIN-SUFFIX,github.io,Proxy&quot;</span>,</span><br><span class="line">    <span class="string">&quot;DOMAIN-SUFFIX,githubassets.com,Proxy&quot;</span>,</span><br><span class="line">    </span><br><span class="line">    <span class="comment">// 4. AI 服务走专用组</span></span><br><span class="line">    <span class="string">&quot;DOMAIN-SUFFIX,openai.com,AI-Services&quot;</span>,</span><br><span class="line">    <span class="string">&quot;DOMAIN-SUFFIX,chatgpt.com,AI-Services&quot;</span>,</span><br><span class="line">    <span class="string">&quot;DOMAIN-SUFFIX,anthropic.com,AI-Services&quot;</span>,</span><br><span class="line">    <span class="string">&quot;DOMAIN-SUFFIX,claude.ai,AI-Services&quot;</span>,</span><br><span class="line">    </span><br><span class="line">    <span class="comment">// 5. 英雄联盟走日本节点</span></span><br><span class="line">    <span class="string">&quot;DOMAIN-SUFFIX,riotgames.com,Gaming-JP&quot;</span>,</span><br><span class="line">    <span class="string">&quot;DOMAIN-SUFFIX,leagueoflegends.com,Gaming-JP&quot;</span>,</span><br><span class="line">    <span class="string">&quot;PROCESS-NAME,LeagueClient.exe,Gaming-JP&quot;</span>,</span><br><span class="line">  ];</span><br><span class="line">  </span><br><span class="line">  config.<span class="property">rules</span> = [...customRules, ...config.<span class="property">rules</span>];</span><br><span class="line">  </span><br><span class="line">  <span class="keyword">return</span> config;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>保存脚本后，Clash Verge Rev 会自动重新加载配置。打开”连接”页面，访问 <code>github.com</code>，确认连接日志中显示的规则是 <code>DOMAIN-SUFFIX,github.com</code> 且走的是 Proxy 策略组。访问公司内网域名，确认走的是 DIRECT。</p><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="自定义规则会影响性能吗？"><a href="#自定义规则会影响性能吗？" class="headerlink" title="自定义规则会影响性能吗？"></a>自定义规则会影响性能吗？</h3><p>几乎不会。Clash 的规则匹配本身就很快——几条到几十条自定义规则对性能的影响完全可以忽略。即使加上公共规则集的几千条规则，在现代设备上也不会造成可感知的延迟。</p><p>如果你的自定义规则确实达到了上百条的量级，建议整理成 rule-provider 文件，用 <code>domain</code> 或 <code>ipcidr</code> behavior 加载。这两种 behavior 会将规则加载到高效的数据结构中（哈希表或前缀树），查询速度接近 O(1)，远快于逐条线性匹配。</p><h3 id="怎么找到某个网站对应的域名？"><a href="#怎么找到某个网站对应的域名？" class="headerlink" title="怎么找到某个网站对应的域名？"></a>怎么找到某个网站对应的域名？</h3><p><strong>方法一：浏览器开发者工具。</strong> 按 F12 打开开发者工具，切换到 Network（网络）面板，然后访问目标网站。你会看到浏览器发出的所有请求及其目标域名。主域名通常就是你在地址栏看到的，但很多网站还会加载来自其他域名的资源（CDN、API 等）。</p><p><strong>方法二：Clash 连接日志。</strong> 访问目标网站后，在 Clash Verge Rev 的”连接”页面中搜索。这里显示的是实际经过代理客户端的所有连接，比浏览器开发者工具更全面（包括非浏览器应用的流量）。</p><p><strong>方法三：命令行工具。</strong> 在 PowerShell 或终端中使用 <code>nslookup</code> 或 <code>ping</code> 命令查看域名解析结果，确认域名是否正确。</p><h3 id="订阅更新后自定义规则丢了怎么办？"><a href="#订阅更新后自定义规则丢了怎么办？" class="headerlink" title="订阅更新后自定义规则丢了怎么办？"></a>订阅更新后自定义规则丢了怎么办？</h3><p>这是最经典的”踩坑”场景。如果你是直接修改配置文件来添加规则的，每次订阅更新都会覆盖你的修改。</p><p>解决方案很明确：<strong>使用 Clash Verge Rev 的覆写（Override &#x2F; Script）功能。</strong> 覆写脚本是独立于订阅配置的，订阅更新只替换配置文件本身，不会影响脚本。脚本会在每次加载配置时自动运行，把你的自定义规则注入进去。</p><p>如果你使用的客户端不支持覆写功能，替代方案是把自定义规则写成独立的 rule-provider 文件（本地文件），然后在配置中引用。订阅更新如果不覆盖 rule-providers 段和本地文件，规则就能保留。但这取决于具体客户端和订阅转换服务的行为，不如覆写脚本可靠。</p><h3 id="可以给特定应用设置不同的代理节点吗？"><a href="#可以给特定应用设置不同的代理节点吗？" class="headerlink" title="可以给特定应用设置不同的代理节点吗？"></a>可以给特定应用设置不同的代理节点吗？</h3><p>可以，使用 <code>PROCESS-NAME</code> 规则。</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 微信走直连</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">PROCESS-NAME,WeChat.exe,DIRECT</span></span><br><span class="line"><span class="comment"># Chrome 浏览器走代理</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">PROCESS-NAME,chrome.exe,Proxy</span></span><br><span class="line"><span class="comment"># Telegram 走专用节点组</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">PROCESS-NAME,Telegram.exe,Telegram</span></span><br><span class="line"><span class="comment"># Steam 走游戏节点</span></span><br><span class="line"><span class="bullet">-</span> <span class="string">PROCESS-NAME,steam.exe,Gaming</span></span><br></pre></td></tr></table></figure><p><strong>前提条件</strong>：必须开启 TUN 模式。系统代理模式下，代理客户端只能看到来自设置了代理的应用的流量，无法获取进程信息。TUN 模式通过虚拟网卡捕获所有流量，可以识别每个连接的来源进程。</p><p>查看进程名的方法：打开任务管理器（Ctrl+Shift+Esc），在”详细信息”标签页中找到目标程序的进程名（”名称”列显示的就是 <code>PROCESS-NAME</code> 规则需要的值）。</p><h3 id="DOMAIN-和-DOMAIN-SUFFIX-该用哪个？"><a href="#DOMAIN-和-DOMAIN-SUFFIX-该用哪个？" class="headerlink" title="DOMAIN 和 DOMAIN-SUFFIX 该用哪个？"></a>DOMAIN 和 DOMAIN-SUFFIX 该用哪个？</h3><p>绝大多数情况用 <code>DOMAIN-SUFFIX</code>。</p><p><code>DOMAIN-SUFFIX,google.com</code> 会匹配 <code>google.com</code> 本身以及 <code>www.google.com</code>、<code>mail.google.com</code> 等所有子域名。一个网站通常有很多子域名用于不同的服务（主站、API、CDN、静态资源等），用 <code>DOMAIN-SUFFIX</code> 可以一条规则覆盖全部。</p><p><code>DOMAIN,www.google.com</code> 只匹配 <code>www.google.com</code> 这一个域名。只在你确实需要精确控制某个特定子域名的路由（而让其他子域名走不同的规则）时才使用。</p><h3 id="规则能用正则表达式吗？"><a href="#规则能用正则表达式吗？" class="headerlink" title="规则能用正则表达式吗？"></a>规则能用正则表达式吗？</h3><p>Clash 的标准规则不支持正则表达式。如果你需要基于复杂模式匹配域名，有两个替代方案：</p><ol><li><strong>用 <code>DOMAIN-KEYWORD</code> 做模糊匹配。</strong> 虽然不是正则，但关键词匹配能覆盖一些简单的模式需求。</li><li><strong>用覆写脚本动态生成规则。</strong> 在 JavaScript 脚本中你可以用任何逻辑来生成规则列表，包括正则匹配、字符串操作等，然后将生成的规则注入到配置中。</li></ol>]]></content>
      
      
      <categories>
          
          <category> 规则与分流 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> Clash </tag>
            
            <tag> 配置 </tag>
            
            <tag> 自定义规则 </tag>
            
            <tag> 分流 </tag>
            
            <tag> 进阶 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>月付 vs 年付、自建 vs 机场：决策框架</title>
      <link href="/posts/decision-framework/"/>
      <url>/posts/decision-framework/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：”该买月付还是年付？””自己建还是用机场？”——这两个问题几乎是每个代理用户都会面对的。答案取决于你的技术能力、预算、需求优先级和风险偏好。本文提供一套决策框架，帮你做出适合自己的选择。</p></blockquote><h2 id="为什么需要决策框架"><a href="#为什么需要决策框架" class="headerlink" title="为什么需要决策框架"></a>为什么需要决策框架</h2><p>很多人在选择代理方案时靠”感觉”：看到群里有人推荐就买了，看到年付打折就冲了，看到一键脚本就自建了。结果要么花了冤枉钱，要么折腾半天发现不适合自己。</p><p>代理方案的选择本质上是一个<strong>多变量权衡问题</strong>。你需要同时考虑技术能力、预算、隐私需求、稳定性要求、使用场景等因素。没有”最好的方案”，只有”最适合你的方案”。</p><p>本文将两个核心问题拆解成具体的决策维度，帮你系统地做出选择，而不是凭直觉踩坑。</p><hr><h2 id="自建-vs-机场"><a href="#自建-vs-机场" class="headerlink" title="自建 vs 机场"></a>自建 vs 机场</h2><p>这是代理用户面临的第一个分岔路。两种方案各有明确的优势和代价，关键是诚实评估自己的情况。</p><h3 id="自建代理的优势"><a href="#自建代理的优势" class="headerlink" title="自建代理的优势"></a>自建代理的优势</h3><p><strong>完全控制</strong></p><p>自建意味着你是唯一的管理员。服务器上运行什么软件、什么协议、什么配置，全部由你决定。你清楚地知道数据经过了哪些节点，不存在第三方中间人。对于安全性有极高要求的用户（记者、研究人员、安全从业者），这一点至关重要。</p><p><strong>隐私最优</strong></p><p>自建节点只有你一个人使用。没有任何第三方能看到你的流量元数据——连接时间、访问目标、流量大小等信息都不会暴露给机场运营者。这是自建在隐私方面的绝对优势，任何机场都无法提供同等级别的隐私保障。</p><p><strong>学习价值</strong></p><p>搭建和维护代理节点的过程，会迫使你深入理解 Linux 系统管理、网络协议、TLS 加密、DNS 解析等底层技术。这些知识不仅有助于你更好地使用代理，也是通用的技术能力。</p><p><strong>定制自由</strong></p><p>想用 VLESS + Reality？想试试 AnyTLS？想在服务器上同时跑代理和其他服务？自建没有任何限制。你可以根据自己的需求选择最合适的协议和配置方案，不受机场运营者的技术选型约束。</p><h3 id="自建代理的劣势"><a href="#自建代理的劣势" class="headerlink" title="自建代理的劣势"></a>自建代理的劣势</h3><p><strong>单点故障</strong></p><p>一台服务器就是一个故障点。服务器宕机、VPS 提供商网络抖动、机房维护——任何一个环节出问题，你就完全没有代理可用。除非你同时维护多台服务器，但这又会显著增加成本和运维负担。</p><p><strong>IP 被封自己处理</strong></p><p>这是自建用户最头疼的问题之一。当你的 VPS IP 被墙，你需要自己联系 VPS 提供商更换 IP（有的提供商不支持免费更换），或者购买新的 VPS。整个过程可能需要几个小时到几天，期间你没有可用的代理。对于需要稳定翻墙的用户来说，这个风险不容忽视。</p><p><strong>缺少多地区覆盖</strong></p><p>租用一台位于日本的 VPS 很简单，但如果你同时需要香港、新加坡、美国、台湾的节点呢？每个地区一台 VPS，成本和运维工作量线性增长。而且不同地区的 VPS 提供商各有差异，你需要分别管理多个账户和多个服务器。</p><p><strong>运维成本</strong></p><p>自建不是”搭好就不管了”。你需要定期更新系统补丁、续期或更换 TLS 证书、监控服务器状态、排查连接故障。如果使用了 CDN 中转或其他复杂架构，运维复杂度还会进一步上升。这些时间成本往往被低估。</p><p><strong>敏感时期的脆弱性</strong></p><p>每年的敏感时期（重大会议、特殊纪念日等），GFW 的封锁力度会显著加大。自建节点因为用户基数小、IP 段单一，往往是最先被封的。而且被封后你只能等待或者自己想办法，没有专业团队帮你快速恢复。</p><p><strong>实际成本不低</strong></p><p>一台基础 VPS 的价格通常在 $3-10&#x2F;月，表面上看不贵。但考虑到它只覆盖一个地区，而且你还需要投入时间进行运维，实际的总成本（资金 + 时间）并不比使用机场服务低多少。</p><h3 id="机场服务的优势"><a href="#机场服务的优势" class="headerlink" title="机场服务的优势"></a>机场服务的优势</h3><p><strong>多节点多地区</strong></p><p>这是机场最明显的优势。一个订阅就能覆盖 HK&#x2F;JP&#x2F;SG&#x2F;US&#x2F;TW 等多个地区，通常包含几十到上百个节点。不同地区用于不同场景——日本节点看番剧、美国节点用 AI 服务、香港节点低延迟办公——一个订阅全部搞定。</p><p><strong>运维专业</strong></p><p>好的机场有专业的运维团队（或者至少是经验丰富的个人），负责节点维护、IP 轮换、协议升级、故障处理。当节点 IP 被封时，运维人员会在短时间内更换 IP 或切换线路，你要做的只是等待几分钟或者手动选择其他可用节点。</p><p><strong>省心</strong></p><p>从用户角度来说，使用机场的流程极其简单：注册账号、购买套餐、复制订阅链接、导入客户端、选择节点、开始使用。整个过程不需要任何服务器管理知识，不需要了解协议细节，不需要配置防火墙规则。</p><p><strong>性价比</strong></p><p>以 ¥15-50&#x2F;月的价格，你可以获得多个地区的多条线路，包含直连、中转甚至 IPLC 专线。如果用自建方式达到同等的地区覆盖和线路质量，成本至少是机场的 3-5 倍。</p><p><strong>敏感时期应对</strong></p><p>有经验的机场运营者对敏感时期有预案：提前储备备用 IP、准备备用协议、开启备用线路。有些机场还会在敏感时期通过 Telegram 群组发布临时节点或手动配置方案。这种应急能力是个人自建很难具备的。</p><h3 id="机场服务的劣势"><a href="#机场服务的劣势" class="headerlink" title="机场服务的劣势"></a>机场服务的劣势</h3><p><strong>信任问题</strong></p><p>机场运营者在技术上有能力看到你的流量元数据（连接时间、目标域名&#x2F;IP、流量大小），虽然 TLS 加密保护了具体内容不被窥探，但元数据本身已经包含了大量信息。你必须信任运营者不会记录或滥用这些数据。</p><p>对于日常使用（工作、娱乐、学习），这个风险是可以接受的。但如果你的使用场景涉及敏感内容，你需要认真考虑这个问题。</p><p><strong>跑路风险</strong></p><p>机场是一个灰色产业，没有法律保障。运营者可能因为各种原因关闭服务——被查处、经营不善、主动退出。一旦跑路，你预付的费用全部打水漂，而且没有任何追偿的渠道。</p><p>这个风险与你的预付金额直接相关——月付最多损失一个月的费用，年付则可能损失一整年的费用。</p><p><strong>共享 IP</strong></p><p>机场的节点是多人共享的。如果其他用户进行了高风险行为（大量发送垃圾邮件、恶意扫描等），节点的 IP 可能被目标服务列入黑名单，影响到你的正常使用。这在 ChatGPT、Netflix 等对 IP 质量敏感的服务上尤为明显。</p><p><strong>服务质量参差不齐</strong></p><p>机场行业没有标准和监管。同样标称”高端IPLC”的两家机场，实际线路质量可能天差地别。选错了不仅花冤枉钱，还可能遇到频繁断线、速度极慢甚至数据泄露等问题。</p><hr><h3 id="决策矩阵"><a href="#决策矩阵" class="headerlink" title="决策矩阵"></a>决策矩阵</h3><p>下表帮你快速判断哪种方案更适合你的情况：</p><table><thead><tr><th>因素</th><th>选自建</th><th>选机场</th></tr></thead><tbody><tr><td>技术能力</td><td>有 Linux 运维经验，能独立排查问题</td><td>不想折腾技术，希望开箱即用</td></tr><tr><td>隐私需求</td><td>极高（记者、活动人士、安全研究员）</td><td>正常使用（工作、娱乐、学习）</td></tr><tr><td>预算</td><td>愿意为单一地区付 $5-10&#x2F;月</td><td>想用 ¥15-50&#x2F;月覆盖多个地区</td></tr><tr><td>可用性要求</td><td>能接受偶尔中断并自己排查修复</td><td>需要稳定服务，不想处理故障</td></tr><tr><td>流媒体需求</td><td>低（自建 IP 通常无法解锁流媒体）</td><td>高（机场通常提供流媒体解锁节点）</td></tr><tr><td>地区需求</td><td>只需要一个地区</td><td>需要多个地区的节点</td></tr><tr><td>时间成本</td><td>有足够时间折腾和维护</td><td>时间宝贵，希望省心</td></tr></tbody></table><h3 id="最佳策略：自建-机场双轨方案"><a href="#最佳策略：自建-机场双轨方案" class="headerlink" title="最佳策略：自建 + 机场双轨方案"></a>最佳策略：自建 + 机场双轨方案</h3><p>如果条件允许，最稳妥的方案是<strong>同时拥有自建节点和机场订阅</strong>。</p><ul><li><strong>日常使用</strong>：以机场作为主力，享受多节点、多地区、专业运维的便利</li><li><strong>备用保障</strong>：维护一台自建节点作为应急备用，确保机场出问题时不至于完全断连</li><li><strong>隐私场景</strong>：涉及隐私敏感的操作走自建节点，日常浏览走机场节点</li></ul><p>在客户端中的具体配置方式很简单：把自建节点和机场订阅同时导入 Clash（或其他支持多订阅的客户端），创建一个策略组包含所有节点，设置 fallback 故障转移规则。机场节点优先，自建节点作为兜底。</p><p>这个策略的成本大约是：机场订阅 ¥20-40&#x2F;月 + 自建 VPS $3-5&#x2F;月，总计约 ¥50-80&#x2F;月。对于代理服务是”刚需”的用户来说，这笔投入换来的是极高的可用性保障。</p><hr><h2 id="月付-vs-年付"><a href="#月付-vs-年付" class="headerlink" title="月付 vs 年付"></a>月付 vs 年付</h2><p>确定了使用机场之后，下一个问题是付费周期。这个选择的本质是<strong>折扣与风险之间的权衡</strong>。</p><h3 id="月付"><a href="#月付" class="headerlink" title="月付"></a>月付</h3><p><strong>优势</strong></p><ul><li>最大灵活性：不满意随时换，下个月就可以切换到另一家</li><li>试错成本低：即使选错了，最多损失一个月的费用（通常 ¥15-50）</li><li>现金流友好：不需要一次性支出大量资金</li></ul><p><strong>劣势</strong></p><ul><li>单价最高：同等套餐，月付的单月价格通常比年付贵 30-50%</li><li>每月重复操作：每个月都需要手动续费（除非设置了自动续费）</li></ul><p><strong>适合场景</strong></p><ul><li>第一次使用某个机场，处于试用阶段</li><li>对机场的长期稳定性没有信心</li><li>预算有限，希望保持灵活性</li></ul><h3 id="季付"><a href="#季付" class="headerlink" title="季付"></a>季付</h3><p><strong>优势</strong></p><ul><li>比月付便宜 15-25%（具体折扣因机场而异）</li><li>承诺周期适中：3 个月足够验证一个机场的质量</li><li>减少续费频率</li></ul><p><strong>劣势</strong></p><ul><li>中等风险：如果机场在这 3 个月内跑路或质量下降，你会损失 2-3 个月的费用</li><li>不如月付灵活</li></ul><p><strong>适合场景</strong></p><ul><li>已经月付使用了 1-2 个月，确认服务质量满意</li><li>机场运营时间超过半年，有一定口碑基础</li></ul><h3 id="半年付"><a href="#半年付" class="headerlink" title="半年付"></a>半年付</h3><p><strong>优势</strong></p><ul><li>比月付便宜 25-40%</li><li>半年周期内不用操心续费问题</li><li>折扣幅度开始变得有吸引力</li></ul><p><strong>劣势</strong></p><ul><li>半年内如果服务质量下降，你没有退路（大多数机场不提供退款）</li><li>如果机场在这半年内跑路，损失较大</li><li>你的议价能力下降——已经付了钱，机场没有动力继续给你好的服务</li></ul><p><strong>适合场景</strong></p><ul><li>对机场有较强信心的老用户</li><li>机场运营 1 年以上且口碑稳定</li><li>希望在折扣和风险之间取得平衡</li></ul><h3 id="年付"><a href="#年付" class="headerlink" title="年付"></a>年付</h3><p><strong>优势</strong></p><ul><li>最便宜：通常是月付价格的 5-7 折，个别机场甚至更低</li><li>一年内完全不用管续费</li><li>部分机场对年付用户提供额外的流量或功能权益</li></ul><p><strong>劣势</strong></p><ul><li>最高风险：一旦跑路，损失一整年的费用</li><li>锁定效应：即使中途发现了更好的机场，你也不愿意放弃已经付过的年费</li><li>机场运营者在收到年付后可能降低服务质量（反正你已经付了钱）</li><li>一年时间内，GFW 的检测技术可能发生变化，机场的线路可能变差</li></ul><p><strong>适合场景</strong></p><ul><li>仅限运营超过 2 年以上、口碑好、有稳定用户群的机场</li><li>你已经使用该机场至少半年以上，确认服务持续稳定</li><li>年付节省的金额对你来说有意义</li></ul><hr><h3 id="付费周期决策树"><a href="#付费周期决策树" class="headerlink" title="付费周期决策树"></a>付费周期决策树</h3><p>以下决策树帮你系统地选择合适的付费周期：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">是否第一次使用这个机场？</span><br><span class="line">├── 是 → 月付试用 1-2 个月</span><br><span class="line">│   └── 满意吗？</span><br><span class="line">│       ├── 是 → 这个机场运营多久了？</span><br><span class="line">│       │   ├── &lt;1 年 → 季付（降低风险）</span><br><span class="line">│       │   ├── 1-2 年 → 季付或半年付</span><br><span class="line">│       │   └── &gt;2 年且口碑好 → 可以考虑年付</span><br><span class="line">│       └── 否 → 换一家，继续月付试用</span><br><span class="line">└── 否（老用户续费）→</span><br><span class="line">    └── 过去使用满意吗？</span><br><span class="line">        ├── 是 → 半年付或年付</span><br><span class="line">        └── 否 → 找新的机场，月付重新开始</span><br></pre></td></tr></table></figure><h3 id="关键原则"><a href="#关键原则" class="headerlink" title="关键原则"></a>关键原则</h3><p><strong>原则一：新机场永远月付起步</strong></p><p>无论别人怎么推荐、无论优惠多么诱人，第一次使用一个机场就应该月付。一个月的实际使用体验比任何评测和推荐都更有参考价值。用这一个月来验证速度、稳定性、客服响应、敏感时期表现等关键指标。</p><p><strong>原则二：社区反馈是重要参考</strong></p><p>在考虑长期付费之前，去 Telegram 群、相关论坛看看其他用户的长期使用评价。重点关注负面评价——正面评价可能是水军，但详细描述问题的负面评价通常是真实的。特别关注敏感时期的表现反馈，这是检验机场质量的试金石。</p><p><strong>原则三：年付的”节省”可能是幻觉</strong></p><p>假设一个机场月付 ¥30，年付打六折 &#x3D; ¥216&#x2F;年（节省 ¥144）。看起来省了不少。但如果这个机场在第 6 个月跑路了，你实际损失 ¥108（剩余半年的费用）。用月付的话你只损失当月的 ¥30。所谓的”节省”变成了”多亏”。</p><p>年付只有在你非常确定这个机场不会在一年内出问题的情况下才是真正的省钱。而对于一个灰色产业来说，这种确定性本身就很难获得。</p><p><strong>原则四：保留支付记录</strong></p><p>无论用什么方式付费，都保留好支付凭证和截图。虽然在机场跑路的情况下维权很难，但如果通过支付平台付款，支付记录至少可以作为申诉的依据。</p><hr><h2 id="组合策略：预算分配建议"><a href="#组合策略：预算分配建议" class="headerlink" title="组合策略：预算分配建议"></a>组合策略：预算分配建议</h2><p>根据不同的预算水平，以下是一些参考方案：</p><h3 id="低预算（¥30-月以内）"><a href="#低预算（¥30-月以内）" class="headerlink" title="低预算（¥30&#x2F;月以内）"></a>低预算（¥30&#x2F;月以内）</h3><ul><li>选择一个性价比高的机场，月付或季付</li><li>暂时不考虑自建</li><li>重点关注稳定性和基础速度，不追求高端线路</li></ul><h3 id="中等预算（¥30-80-月）"><a href="#中等预算（¥30-80-月）" class="headerlink" title="中等预算（¥30-80&#x2F;月）"></a>中等预算（¥30-80&#x2F;月）</h3><ul><li>一个主力机场（¥20-40&#x2F;月）+ 一台便宜的 VPS 自建备用（$3-5&#x2F;月）</li><li>主力机场可以季付或半年付（确认质量后）</li><li>自建节点优先选择可以免费更换 IP 的 VPS 提供商</li></ul><h3 id="较高预算（¥80-150-月）"><a href="#较高预算（¥80-150-月）" class="headerlink" title="较高预算（¥80-150&#x2F;月）"></a>较高预算（¥80-150&#x2F;月）</h3><ul><li>一个高端机场（¥40-80&#x2F;月）+ 一个中端机场作为备用（¥15-30&#x2F;月）</li><li>可选：一台自建 VPS 作为第三道保险</li><li>主力机场可以半年付或年付（前提是运营稳定的老牌机场）</li></ul><h3 id="预算分配原则"><a href="#预算分配原则" class="headerlink" title="预算分配原则"></a>预算分配原则</h3><ol><li><strong>不要把所有鸡蛋放在一个篮子里</strong>：无论预算多少，尽量有备用方案</li><li><strong>备用方案不需要和主力一样好</strong>：备用的目标是”能用就行”，不需要最快的速度和最多的节点</li><li><strong>预算有限时优先保障稳定性</strong>：宁可少几个节点，也要选稳定的服务</li></ol><hr><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="Q-自建和机场可以同时用吗？"><a href="#Q-自建和机场可以同时用吗？" class="headerlink" title="Q: 自建和机场可以同时用吗？"></a>Q: 自建和机场可以同时用吗？</h3><p>当然可以，而且推荐这样做。在 Clash 系列客户端中，你可以同时添加自建节点和机场订阅。具体做法是：在配置文件中添加自建节点作为独立的 proxy，同时导入机场的 proxy-provider 订阅。然后在策略组中包含所有节点来源，设置 fallback 规则让客户端在主力节点不可用时自动切换到备用节点。</p><p>这是目前最稳妥的使用方案，兼顾了日常使用的便利性和紧急情况下的可用性保障。</p><h3 id="Q-机场跑路了怎么办？"><a href="#Q-机场跑路了怎么办？" class="headerlink" title="Q: 机场跑路了怎么办？"></a>Q: 机场跑路了怎么办？</h3><p>所有预付费用将无法追回，这是使用机场服务的固有风险。预防措施包括：</p><ul><li>选择运营时间较长（1 年以上）的老牌机场，跑路概率相对更低</li><li>不要在一家机场投入过多资金，避免年付不熟悉的机场</li><li>保持至少一个备用方案（另一个机场或自建节点）</li><li>保留支付记录，如果通过正规支付渠道付款，可以尝试向支付平台申诉</li></ul><h3 id="Q-自建一个月大概花多少钱？"><a href="#Q-自建一个月大概花多少钱？" class="headerlink" title="Q: 自建一个月大概花多少钱？"></a>Q: 自建一个月大概花多少钱？</h3><p>一台基础 VPS 的价格约 $3-10&#x2F;月，取决于地区和提供商。亚洲地区（日本、香港、新加坡）通常比美国、欧洲贵一些。如果你需要覆盖多个地区，每个地区需要一台 VPS，成本按地区数量线性增长。</p><p>如果使用中转架构（国内服务器中转到境外 VPS），还需要额外租用一台国内服务器，成本会进一步增加。</p><p>总体来说，自建覆盖 2-3 个地区的成本大约在 $10-30&#x2F;月，折合人民币约 ¥70-220&#x2F;月。同样的预算，使用机场可以获得更多地区的覆盖和更好的线路质量。</p><h3 id="Q-有没有”终身套餐”值得买？"><a href="#Q-有没有”终身套餐”值得买？" class="headerlink" title="Q: 有没有”终身套餐”值得买？"></a>Q: 有没有”终身套餐”值得买？</h3><p>极不推荐。没有任何机场能保证”终身”运营。在一个没有法律保障的灰色行业中，”终身”这个承诺本身就不可信。</p><p>推出终身套餐通常意味着两种情况：要么运营者准备快速回款然后跑路，要么是运营初期急需资金但低估了长期运营成本。前者是骗局，后者也很可能在几个月到一两年内因为入不敷出而关闭。</p><p>无论价格多么诱人，终身套餐的预期价值几乎肯定是负的。把同样的钱用来月付一个靠谱的机场，你能获得更长时间的稳定服务。</p><h3 id="Q-选机场时最重要的因素是什么？"><a href="#Q-选机场时最重要的因素是什么？" class="headerlink" title="Q: 选机场时最重要的因素是什么？"></a>Q: 选机场时最重要的因素是什么？</h3><p>排序如下：</p><ol><li><strong>运营稳定性</strong>：运营时间长、没有重大事故、敏感时期表现稳定</li><li><strong>线路质量</strong>：晚高峰速度、延迟、丢包率</li><li><strong>协议安全性</strong>：使用现代协议（VLESS+Reality、Trojan），避免裸 VMess</li><li><strong>性价比</strong>：在满足以上条件的前提下，选择价格合理的</li><li><strong>客服响应</strong>：出问题时能及时获得帮助</li></ol><p>价格不应该是第一考虑因素。一个便宜但不稳定的机场，你花在排查问题上的时间成本远超节省的那点费用。</p><h3 id="Q-多个机场订阅会互相冲突吗？"><a href="#Q-多个机场订阅会互相冲突吗？" class="headerlink" title="Q: 多个机场订阅会互相冲突吗？"></a>Q: 多个机场订阅会互相冲突吗？</h3><p>不会。Clash 系列客户端（<a href="https://github.com/clash-verge-rev/clash-verge-rev">Clash Verge Rev</a>、mihomo 等）和其他现代客户端都支持同时管理多个订阅。每个订阅的节点会被分别列出，你可以在策略组中自由组合来自不同订阅的节点。</p><p>唯一需要注意的是合理组织策略组——不要把所有节点混在一个组里，按照用途（日常、流媒体、AI 服务等）或地区分组会更方便管理。</p><hr><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>做出正确的决策不需要完美的信息，只需要一个合理的框架和一些关键原则：</p><ol><li><strong>先搞清楚自己的需求</strong>：技术能力、隐私需求、预算、使用场景——这些因素决定了你应该倾向自建还是机场</li><li><strong>新服务永远先月付</strong>：用真金白银的试用来验证质量，而不是相信别人的推荐</li><li><strong>保持备用方案</strong>：无论你的主力方案有多稳定，都要有 Plan B</li><li><strong>长期付费需要长期信任</strong>：年付只适合你已经深入了解和长期使用的机场</li><li><strong>总成本 &#x3D; 资金 + 时间</strong>：自建看似便宜，但运维的时间成本不可忽视；机场看似贵，但省下的时间和精力也有价值</li></ol><p>记住，没有完美的方案，只有适合你当前情况的方案。你的需求和条件会随时间变化，定期重新评估你的代理方案是明智的做法。</p>]]></content>
      
      
      <categories>
          
          <category> 选择与评估 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> 机场 </tag>
            
            <tag> 自建 </tag>
            
            <tag> 月付 </tag>
            
            <tag> 年付 </tag>
            
            <tag> 决策 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>DNS 基础：为什么代理和 DNS 总是一起出问题</title>
      <link href="/posts/dns-basics-for-proxy/"/>
      <url>/posts/dns-basics-for-proxy/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>: DNS 是互联网的”电话簿”，将域名翻译成 IP 地址。在使用代理时，DNS 解析的正确性直接决定了你能不能打开网站、会不会泄漏隐私、国内网站会不会变慢。本文从基础讲起，解释 DNS 在代理场景中的特殊性和常见问题。</p></blockquote><hr><h2 id="DNS-是什么"><a href="#DNS-是什么" class="headerlink" title="DNS 是什么"></a>DNS 是什么</h2><p>DNS（Domain Name System，域名系统）是互联网最基础的服务之一。它的作用只有一个：<strong>把人类能记住的域名翻译成计算机能理解的 IP 地址</strong>。</p><p>没有 DNS，你上网时需要记住的不是 <code>google.com</code>，而是 <code>142.250.80.14</code>；不是 <code>baidu.com</code>，而是 <code>39.156.66.10</code>。全球有数十亿个网站，靠记 IP 地址访问显然不现实。DNS 就是那个帮你查号码的电话簿。</p><p>DNS 的核心概念很简单：</p><ul><li><strong>域名</strong>：人类可读的网站地址，如 <code>google.com</code>、<code>github.com</code>。</li><li><strong>IP 地址</strong>：服务器的真实网络地址，如 <code>142.250.80.14</code>。</li><li><strong>DNS 服务器</strong>：负责翻译域名和 IP 的服务器。你的电脑每次访问网站，都要先问 DNS 服务器”这个域名对应哪个 IP”。</li><li><strong>默认 DNS</strong>：你连上网络后，运营商（ISP）会自动给你分配一个 DNS 服务器地址。大多数人从未手动配置过 DNS，用的就是运营商默认提供的。</li></ul><p>DNS 服务器分两种角色：</p><ul><li><strong>递归 DNS 服务器</strong>：你的设备直接询问的对象。它收到你的查询后，如果自己不知道答案，会代替你去逐级查询，最终返回结果。运营商的 DNS、阿里 DNS（223.5.5.5）、Google DNS（8.8.8.8）都属于这种。</li><li><strong>权威 DNS 服务器</strong>：某个域名的”官方”记录持有者。比如 <code>google.com</code> 的权威 DNS 由 Google 运营，只有它才能给出 <code>google.com</code> 的最终 IP 地址。</li></ul><p>普通用户不需要关心权威 DNS，只需要知道：你的设备会把域名发给一个递归 DNS 服务器，它负责帮你找到答案。</p><hr><h2 id="DNS-解析过程（简化版）"><a href="#DNS-解析过程（简化版）" class="headerlink" title="DNS 解析过程（简化版）"></a>DNS 解析过程（简化版）</h2><p>以你在浏览器中输入 <code>google.com</code> 为例，整个 DNS 解析过程如下：</p><p><strong>第一步：浏览器发起请求。</strong> 你在地址栏输入 <code>google.com</code> 并回车，浏览器需要知道这个域名对应的 IP 地址。</p><p><strong>第二步：浏览器询问操作系统。</strong> 浏览器不会自己去查 DNS，而是调用操作系统的网络接口，问”google.com 的 IP 是多少？”</p><p><strong>第三步：操作系统检查本地缓存。</strong> 如果你最近刚访问过 <code>google.com</code>，操作系统可能已经缓存了结果，直接返回 IP，不需要再查一次。</p><p><strong>第四步：缓存未命中，询问 DNS 服务器。</strong> 本地没有缓存，操作系统就把查询请求发送到配置的 DNS 服务器地址。默认情况下，这个地址是运营商自动分配的。</p><p><strong>第五步：DNS 服务器逐级查询。</strong> 递归 DNS 服务器收到请求后，先检查自己的缓存。如果没有，它会按照层级依次查询：先问根域名服务器（root）”<code>.com</code> 在哪”，再问 <code>.com</code> 的服务器”<code>google.com</code> 的权威 DNS 在哪”，最后问 <code>google.com</code> 的权威 DNS”IP 是多少”。</p><p><strong>第六步：返回 IP 地址。</strong> DNS 服务器拿到答案后，把 IP 地址返回给你的操作系统。操作系统再把结果交给浏览器，同时缓存这个结果以备下次使用。</p><p><strong>第七步：浏览器连接目标服务器。</strong> 拿到 IP 地址后，浏览器直接向这个 IP 发起 HTTP&#x2F;HTTPS 连接，网页内容开始加载。</p><p>整个过程通常在几十毫秒内完成。看起来简单直接，但在代理场景下，几乎每一步都可能出问题。</p><p><img src="/images/inline/dns-resolution-flow.png" alt="DNS 解析流程图"><br><em>图片来源：<a href="https://www.indusface.com/">Indusface</a></em></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">graph LR</span><br><span class="line">    A[你的设备] --&gt;|DNS查询| B[ISP DNS]</span><br><span class="line">    B --&gt;|被污染| C[❌ 错误IP]</span><br><span class="line">    A --&gt;|使用代理| D[代理客户端]</span><br><span class="line">    D --&gt;|国内域名| E[国内 DoH]</span><br><span class="line">    E --&gt; F[✅ 正确CDN]</span><br><span class="line">    D --&gt;|国外域名| G[远端解析]</span><br><span class="line">    G --&gt; H[✅ 真实IP]</span><br></pre></td></tr></table></figure><hr><h2 id="为什么代理场景下-DNS-特别复杂"><a href="#为什么代理场景下-DNS-特别复杂" class="headerlink" title="为什么代理场景下 DNS 特别复杂"></a>为什么代理场景下 DNS 特别复杂</h2><p>在不使用代理的正常网络环境中，DNS 解析很少出问题——你的设备问运营商的 DNS 服务器，得到正确的 IP，连接成功。但一旦涉及代理，DNS 就变成了最容易出问题的环节。原因有四个。</p><h3 id="问题一：DNS-污染"><a href="#问题一：DNS-污染" class="headerlink" title="问题一：DNS 污染"></a>问题一：DNS 污染</h3><p>DNS 污染（DNS Poisoning &#x2F; DNS Spoofing）是中国大陆网络环境中最核心的 DNS 问题。</p><p>原理很简单：当你向 DNS 服务器查询被封锁域名（如 <code>google.com</code>）的 IP 时，GFW 会抢在真正的 DNS 服务器返回结果之前，注入一个伪造的响应。这个伪造响应里的 IP 地址是错误的——可能是 <code>127.0.0.1</code>（本机）、一些随机的无关 IP，或者干脆不返回任何结果。</p><p>关键在于：<strong>DNS 污染发生在代理介入之前</strong>。</p><p>传统的 DNS 查询使用 UDP 协议的 53 端口，内容完全明文，没有任何加密或验证机制。GFW 对这个端口的监控和劫持是全面的。即使你的代理服务器完全正常、线路通畅，只要 DNS 解析这一步拿到了错误的 IP，后面的连接就不可能成功。</p><p>具体表现：</p><ul><li><code>google.com</code> 被解析到 <code>127.0.0.1</code> 或无效 IP → 浏览器显示”无法连接”</li><li><code>google.com</code> 被解析到某个国内 IP → 连接超时或显示错误页面</li><li>DNS 查询直接超时无响应</li></ul><p>这就是为什么仅仅开了代理，有时候还是打不开网站——DNS 污染在更早的阶段就把路堵死了。</p><h3 id="问题二：DNS-泄漏"><a href="#问题二：DNS-泄漏" class="headerlink" title="问题二：DNS 泄漏"></a>问题二：DNS 泄漏</h3><p>DNS 泄漏（DNS Leak）指的是：你以为自己在使用代理上网，实际上 DNS 查询仍然走的是本地网络，直接发送到运营商的 DNS 服务器。</p><p>这意味着什么？即使你的网页数据通过代理传输、运营商看不到你访问的内容，但 DNS 查询暴露了你访问的目标域名。运营商的日志里会清楚地记录：这个用户在某时某刻查询了 <code>google.com</code>、<code>twitter.com</code>、<code>youtube.com</code> 的 IP。</p><p>DNS 泄漏的常见原因：</p><ul><li><strong>系统代理模式</strong>：大多数系统代理只接管 HTTP&#x2F;HTTPS 流量，DNS 查询走的是操作系统的网络栈，不经过代理。</li><li><strong>TUN 模式未正确配置</strong>：TUN 模式理论上接管所有网络流量，但如果 DNS 设置不当，查询可能仍然走漏。</li><li><strong>应用绕过代理</strong>：某些应用程序（特别是系统级服务）可能不遵守系统代理设置，直接发起 DNS 查询。</li><li><strong>IPv6 泄漏</strong>：代理只配置了 IPv4，IPv6 的 DNS 查询从旁路走掉了。</li></ul><p>DNS 泄漏不影响功能（网站能打开），但对隐私构成威胁。如果你在意隐私，必须确保 DNS 查询也经过代理通道。</p><h3 id="问题三：CDN-定位错误"><a href="#问题三：CDN-定位错误" class="headerlink" title="问题三：CDN 定位错误"></a>问题三：CDN 定位错误</h3><p>这是很多人忽略的问题，但它直接影响网速。</p><p>大型网站（B站、淘宝、Netflix 等）使用 CDN（内容分发网络）在全球部署了大量服务器节点。当你查询这些域名的 IP 时，CDN 的 DNS 会根据你的 DNS 服务器位置来判断你在哪，然后返回离你最近的节点 IP。</p><p>问题来了：</p><ul><li><strong>国内域名用了海外 DNS 解析</strong>：你用 <code>8.8.8.8</code>（Google DNS）查询 <code>bilibili.com</code>，CDN 认为你在美国，返回美国节点 IP。结果你一个在北京的用户，访问 B 站的流量绕了一圈太平洋，速度断崖式下降。</li><li><strong>国外域名用了国内 DNS 解析</strong>：你用运营商 DNS 查询 <code>google.com</code>，得到的是被污染的结果，根本连不上。</li></ul><p>这就引出了代理场景下 DNS 的核心原则：<strong>国内域名用国内 DNS 解析，国外域名通过代理在远端解析。</strong></p><p>分流做不好，要么国内网站变慢，要么国外网站打不开。两头不讨好。</p><h3 id="问题四：先有鸡还是先有蛋"><a href="#问题四：先有鸡还是先有蛋" class="headerlink" title="问题四：先有鸡还是先有蛋"></a>问题四：先有鸡还是先有蛋</h3><p>还有一个容易被忽视的循环依赖问题：</p><p>代理客户端需要连接代理服务器。要连接代理服务器，首先要知道代理服务器的 IP。如果你的代理配置用的是域名（比如 <code>hk.example.com</code>），客户端就需要先做一次 DNS 解析。</p><p>但 DNS 查询本身就可能被污染。</p><p>如果你的代理服务器域名被 GFW 污染了，代理客户端连代理服务器都连不上——DNS 解析失败 → 拿不到正确的服务器 IP → 代理建立不了 → 所有流量都不通。</p><p>解决方法：</p><ul><li>代理服务器配置直接使用 IP 地址而非域名</li><li>使用 DoH（DNS over HTTPS）来解析代理服务器的域名，绕过 UDP 53 端口的劫持</li><li>在 hosts 文件中手动写入代理服务器域名的正确 IP</li></ul><hr><h2 id="代理客户端如何处理-DNS"><a href="#代理客户端如何处理-DNS" class="headerlink" title="代理客户端如何处理 DNS"></a>代理客户端如何处理 DNS</h2><p>理解了上面的四个问题，就能理解为什么代理客户端需要自己接管 DNS 处理，而不是交给操作系统。主流代理客户端（Clash、sing-box 等）采用以下几种方式处理 DNS。</p><h3 id="Fake-IP-模式（主流方案）"><a href="#Fake-IP-模式（主流方案）" class="headerlink" title="Fake-IP 模式（主流方案）"></a>Fake-IP 模式（主流方案）</h3><p>Fake-IP 是目前最主流、推荐度最高的 DNS 处理方式。</p><p>核心思路：<strong>不做真正的 DNS 解析，而是直接返回一个假 IP，先把连接拦截下来。</strong></p><p>工作流程：</p><ol><li>浏览器要访问 <code>google.com</code>，向系统发起 DNS 查询。</li><li>代理客户端拦截这个查询，不去问任何真实 DNS 服务器。</li><li>代理客户端从自己维护的一个假 IP 池（通常是 <code>198.18.0.0/16</code>）中分配一个 IP，比如 <code>198.18.0.1</code>，并记录下”198.18.0.1 &#x3D; google.com”的映射。</li><li>浏览器拿到 <code>198.18.0.1</code>，向这个 IP 发起连接。</li><li>代理客户端拦截这个连接，通过映射表查到目标是 <code>google.com</code>，然后根据分流规则决定：走代理还是直连？</li><li>如果走代理：把域名 <code>google.com</code> 发给远端代理服务器，由远端进行真正的 DNS 解析和连接。</li><li>如果直连：使用国内 DNS（如阿里 DNS）进行真正的解析，拿到正确的国内 CDN IP，直接连接。</li></ol><p>Fake-IP 的优势：</p><ul><li><strong>彻底避免 DNS 污染</strong>：外网域名的真实 DNS 解析在远端完成，本地根本不查询，也就不存在被污染的可能。</li><li><strong>CDN 定位准确</strong>：国内域名由国内 DNS 解析，CDN 定位正确；国外域名由代理节点所在地的 DNS 解析，CDN 定位也正确。</li><li><strong>速度快</strong>：省去了本地 DNS 查询的等待时间，首次连接速度更快。</li></ul><p>Fake-IP 的详细原理和配置参见 <a href="/posts/fake-ip-vs-redir-host/">Fake-IP 与 Redir-Host 的区别</a>。</p><h3 id="Redir-Host-模式"><a href="#Redir-Host-模式" class="headerlink" title="Redir-Host 模式"></a>Redir-Host 模式</h3><p>Redir-Host 是更传统的 DNS 处理方式。它的逻辑是先进行真正的 DNS 解析，拿到真实 IP，然后根据 IP 或域名决定路由。</p><p>流程：</p><ol><li>浏览器查询 <code>google.com</code>，代理客户端拦截。</li><li>代理客户端同时向国内 DNS 和国外 DNS 发起查询。</li><li>根据返回结果判断域名归属，选择合适的 IP 返回给浏览器。</li><li>浏览器连接该 IP，代理客户端再根据连接目标决定是否走代理。</li></ol><p>Redir-Host 的问题：</p><ul><li>DNS 查询仍然在本地发生，外网域名可能被污染。</li><li>需要同时配置国内和国外 DNS，逻辑更复杂。</li><li>如果 DNS 结果不准确，分流判断就会出错。</li></ul><p>目前 Redir-Host 已不是推荐方案。如果你的客户端支持 Fake-IP，优先使用 Fake-IP。</p><h3 id="远端解析"><a href="#远端解析" class="headerlink" title="远端解析"></a>远端解析</h3><p>远端解析指的是 DNS 查询完全在代理服务器端完成，本地不做任何解析。</p><p>这种方式隐私性最好——本地网络上完全看不到任何 DNS 查询。但缺点是所有域名（包括国内域名）都通过代理解析，国内网站的 CDN 定位可能不准确，导致速度下降。</p><p>实际使用中，远端解析通常和 Fake-IP 结合：外网域名远端解析，国内域名本地解析。这是目前最合理的组合方案。</p><hr><h2 id="常用-DNS-服务器"><a href="#常用-DNS-服务器" class="headerlink" title="常用 DNS 服务器"></a>常用 DNS 服务器</h2><p>选择合适的 DNS 服务器是配置代理 DNS 的第一步。以下是国内外常用的 DNS 服务。</p><h3 id="国内-DNS"><a href="#国内-DNS" class="headerlink" title="国内 DNS"></a>国内 DNS</h3><table><thead><tr><th>DNS 服务</th><th>IP 地址</th><th>DoH 地址</th><th>特点</th></tr></thead><tbody><tr><td><a href="https://alidns.com/">阿里 DNS</a></td><td><code>223.5.5.5</code></td><td><code>https://dns.alidns.com/dns-query</code></td><td>速度快，覆盖广，支持 DoH&#x2F;DoT</td></tr><tr><td><a href="https://www.dnspod.cn/">腾讯 DNS</a></td><td><code>119.29.29.29</code></td><td><code>https://doh.pub/dns-query</code></td><td>稳定可靠，支持 DoH</td></tr><tr><td>114 DNS</td><td><code>114.114.114.114</code></td><td>无</td><td>老牌 DNS，不支持 DoH</td></tr></tbody></table><p>国内 DNS 用于解析国内域名。推荐阿里 DNS 或腾讯 DNS，因为它们支持 DoH，可以防止查询被篡改。114 DNS 不支持加密查询，不推荐作为首选。</p><h3 id="国际-DNS"><a href="#国际-DNS" class="headerlink" title="国际 DNS"></a>国际 DNS</h3><table><thead><tr><th>DNS 服务</th><th>IP 地址</th><th>DoH 地址</th><th>特点</th></tr></thead><tbody><tr><td><a href="https://developers.cloudflare.com/1.1.1.1/">Cloudflare</a></td><td><code>1.1.1.1</code></td><td><code>https://cloudflare-dns.com/dns-query</code></td><td>全球响应速度最快</td></tr><tr><td>Google</td><td><code>8.8.8.8</code></td><td><code>https://dns.google/dns-query</code></td><td>最知名，稳定性高</td></tr><tr><td>Quad9</td><td><code>9.9.9.9</code></td><td><code>https://dns.quad9.net/dns-query</code></td><td>注重安全，自动拦截恶意域名</td></tr></tbody></table><p><strong>重要提示</strong>：国际 DNS 在中国大陆通常无法直接使用。UDP 53 端口发往 <code>8.8.8.8</code> 或 <code>1.1.1.1</code> 的查询会被劫持或丢弃。但通过代理访问时，这些 DNS 可以正常使用。在代理客户端配置中，国际 DNS 通常不需要手动配置——外网域名通过代理远端解析时，代理节点所在地可以正常访问这些 DNS。</p><hr><h2 id="什么是-DNS-over-HTTPS-DoH"><a href="#什么是-DNS-over-HTTPS-DoH" class="headerlink" title="什么是 DNS over HTTPS (DoH)"></a>什么是 DNS over HTTPS (DoH)</h2><p>传统 DNS 查询使用 UDP 协议、53 端口，内容完全明文。这意味着：</p><ul><li>任何中间设备都能看到你查了什么域名</li><li>任何中间设备都能篡改 DNS 响应（DNS 污染的技术基础）</li><li>运营商可以完整记录你的 DNS 查询日志</li></ul><p>DoH（DNS over HTTPS）把 DNS 查询封装在 HTTPS 协议里传输。HTTPS 是加密的，这带来两个好处：</p><ol><li><strong>防窃听</strong>：中间设备无法看到你查询的域名。</li><li><strong>防篡改</strong>：中间设备无法伪造 DNS 响应，因为 HTTPS 有完整的证书验证机制。</li></ol><p>在代理场景中，DoH 的作用主要体现在<strong>国内 DNS 查询</strong>上。对于国内域名（如 <code>baidu.com</code>、<code>bilibili.com</code>），你需要使用国内 DNS 服务器来获得正确的 CDN IP。如果这些查询使用明文 DNS，理论上仍然存在被篡改的可能。使用 DoH（如 <code>https://dns.alidns.com/dns-query</code>），可以确保即使是国内域名的 DNS 查询也不被篡改。</p><p>关于加密 DNS 的各类方案对比，参见 <a href="/posts/encrypted-dns/">加密 DNS 全解</a>。DoH 不是万能的。如果 DoH 服务器本身返回了错误结果（比如国内 DNS 对被墙域名返回的就是错误 IP），DoH 只能保证传输过程不被篡改，不能修正服务器本身的回答。所以，被墙的域名仍然需要通过代理远端解析。</p><hr><h2 id="推荐配置原则"><a href="#推荐配置原则" class="headerlink" title="推荐配置原则"></a>推荐配置原则</h2><p>根据以上分析，代理场景下的 DNS 配置应遵循以下原则：</p><p><strong>第一，使用国内 DNS 作为代理客户端的主要 DNS 服务器。</strong> 推荐阿里 DNS（<code>223.5.5.5</code>）或腾讯 DNS（<code>119.29.29.29</code>）。这个 DNS 服务器负责解析国内域名，确保 CDN 定位正确、访问速度正常。</p><p><strong>第二，外网域名交给代理远端解析。</strong> 不要试图在本地解析 <code>google.com</code>、<code>youtube.com</code> 等被墙域名。让代理客户端把域名传给代理节点，由节点在海外完成 DNS 解析。</p><p><strong>第三，优先使用 Fake-IP 模式。</strong> 如果你的代理客户端支持 Fake-IP（Clash、Clash Verge、sing-box 等都支持），启用它。Fake-IP 从根本上解决了 DNS 污染和泄漏问题，是目前最省心的方案。</p><p><strong>第四，国内 DNS 尽量使用 DoH。</strong> 把国内 DNS 地址配置为 DoH 格式（如 <code>https://dns.alidns.com/dns-query</code>），而不是裸 IP（<code>223.5.5.5</code>）。这样可以防止国内 DNS 查询被中间环节篡改。</p><p><strong>第五，不要在本地直接使用国际 DNS。</strong> 不要把系统 DNS 设置为 <code>8.8.8.8</code> 或 <code>1.1.1.1</code>。在中国大陆网络环境下，直接使用这些 DNS 的 UDP 53 端口查询会被劫持。即使使用 DoH 访问这些国际 DNS，国内域名也会因为 CDN 定位错误而变慢。</p><hr><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><p><strong>Q：我需要手动配置 DNS 吗？</strong></p><p>取决于你的使用方式。如果你使用 Clash Verge、mihomo 等客户端并开启了 TUN 模式或系统代理，客户端会接管 DNS 处理。但你仍然需要确认客户端的 DNS 配置是正确的——错误的 DNS 配置是代理场景中最常见的问题来源。很多”代理开了但打不开网站”的情况，根本原因是 DNS 配置不当。</p><p><strong>Q：为什么不能全部用 8.8.8.8？</strong></p><p>两个原因。第一，在中国大陆直接访问 <code>8.8.8.8</code> 的 UDP 53 端口，你的 DNS 查询会被 GFW 劫持，返回的结果不可信。第二，即使你通过 DoH 成功访问了 <code>8.8.8.8</code>，当你查询国内域名（如 <code>taobao.com</code>）时，Google DNS 会认为你在美国，返回美国 CDN 节点的 IP。你的淘宝流量会绕到美国再回来，速度大幅下降。所以必须国内域名用国内 DNS、国外域名远端解析。</p><p><strong>Q：DNS 和代理协议有关系吗？</strong></p><p>DNS 是独立于代理协议的。无论你用的是 VLESS、VMess、Trojan 还是 Hysteria，DNS 配置的原则完全相同。代理协议决定的是”数据怎么传输”，DNS 决定的是”目标服务器在哪里”。它们是两个独立的问题。</p><p><strong>Q：什么是 DNS over HTTPS (DoH)？</strong></p><p>DoH 把 DNS 查询封装在 HTTPS 请求中进行传输。传统的 DNS 查询使用 UDP 明文传输，中间人可以轻松窃听和篡改。DoH 利用 HTTPS 的加密和证书验证，使得 DNS 查询内容既无法被窥探，也无法被篡改。在代理场景中，DoH 是防止国内 DNS 查询被劫持的重要手段。</p><p><strong>Q：Fake-IP 模式会影响国内网站的速度吗？</strong></p><p>不会。Fake-IP 模式下，代理客户端对国内域名（匹配直连规则的域名）仍然使用国内 DNS 进行真实解析。只有匹配代理规则的域名才会走远端解析。所以国内网站的 CDN 定位不受影响，速度和不使用代理时相同。</p><p><strong>Q：我用了代理但 DNS 测试显示泄漏（可通过 <a href="https://dnsleaktest.com/">dnsleaktest.com</a> 检测），怎么办？</strong></p><p>检查以下几点：一、确认代理客户端是否开启了 TUN 模式（系统代理模式下 DNS 泄漏几乎不可避免，详见 <a href="/posts/dns-leak/">DNS 泄漏检测与修复</a>）；二、确认代理客户端的 DNS 设置中启用了 Fake-IP；三、检查是否存在 IPv6 泄漏——如果你的网络有 IPv6，但代理客户端只处理了 IPv4，DNS 查询可能通过 IPv6 走漏。可以在代理客户端中禁用 IPv6，或确保 TUN 模式同时接管 IPv4 和 IPv6。</p>]]></content>
      
      
      <categories>
          
          <category> DNS 专题 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> CDN </tag>
            
            <tag> DNS </tag>
            
            <tag> 基础 </tag>
            
            <tag> DNS污染 </tag>
            
            <tag> 代理 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>各客户端 DNS 配置最佳实践</title>
      <link href="/posts/dns-best-practices/"/>
      <url>/posts/dns-best-practices/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：DNS 配置是科学上网中最容易出错、也最影响体验的环节。配置不当会导致 DNS 泄漏（暴露访问意图）、解析失败（网页打不开）、或国内网站变慢（走了错误的 CDN 节点）。本文给出各主流客户端的推荐 DNS 配置，并解释每个参数背后的原理。</p></blockquote><hr><h2 id="先理解问题：为什么-DNS-这么麻烦"><a href="#先理解问题：为什么-DNS-这么麻烦" class="headerlink" title="先理解问题：为什么 DNS 这么麻烦"></a>先理解问题：为什么 DNS 这么麻烦</h2><p>使用代理时，DNS 解析存在一个根本矛盾：</p><ul><li><strong>国内域名</strong>需要用国内 DNS 解析，才能获得最近的 CDN 节点</li><li><strong>国外域名</strong>不能用国内 DNS 解析，否则会被污染（返回错误 IP）</li><li><strong>代理客户端</strong>需要判断一个域名走直连还是走代理，但判断本身可能依赖 DNS 结果</li></ul><p>举一个具体的例子来理解这个矛盾。假设你访问 <code>google.com</code>：</p><ol><li>系统需要先把 <code>google.com</code> 解析为 IP 地址</li><li>如果用国内 DNS（比如 114.114.114.114）去解析，GFW 会返回一个被污染的假 IP</li><li>代理客户端拿到这个假 IP，可能无法正确判断它应该走代理</li><li>即使判断对了，这个假 IP 也无法真正建立连接</li></ol><p>反过来，如果所有域名都用海外 DNS 解析：</p><ol><li><code>taobao.com</code> 这样的国内域名也会去海外 DNS 查询</li><li>返回的 CDN 节点可能是美国或香港的服务器</li><li>你直连访问这个海外节点，速度自然很慢</li></ol><p>这个三角矛盾是所有 DNS 配置复杂性的根源。而 Fake-IP 模式的出现，正是为了从根本上解决这个矛盾。</p><hr><h2 id="Fake-IP-vs-Redir-Host"><a href="#Fake-IP-vs-Redir-Host" class="headerlink" title="Fake-IP vs Redir-Host"></a>Fake-IP vs Redir-Host</h2><p>理解这两种模式是配置 DNS 的前提。</p><h3 id="Fake-IP-模式（推荐）"><a href="#Fake-IP-模式（推荐）" class="headerlink" title="Fake-IP 模式（推荐）"></a>Fake-IP 模式（推荐）</h3><p><strong>工作原理</strong>：</p><p>Fake-IP 的核心思路是：<strong>先不做真正的 DNS 解析，而是立即返回一个假的 IP 地址，等确定了路由策略后再做真实解析</strong>。具体流程如下：</p><ol><li><strong>拦截 DNS 请求</strong>：当应用程序（比如浏览器）请求解析 <code>google.com</code> 时，代理客户端的内置 DNS 服务器会拦截这个请求</li><li><strong>立即返回假 IP</strong>：客户端不会去查询任何上游 DNS，而是从一个预设的 IP 段（通常是 <code>198.18.0.0/16</code>）中分配一个假 IP 返回给应用。比如返回 <code>198.18.0.5</code></li><li><strong>应用发起连接</strong>：浏览器拿到 <code>198.18.0.5</code> 后，向这个地址发起 TCP 连接。由于代理客户端在 TUN 层或系统代理层会拦截所有流量，这个连接会被客户端捕获</li><li><strong>反查原始域名</strong>：客户端维护了一张 Fake-IP 到域名的映射表，通过 <code>198.18.0.5</code> 反查出原始域名 <code>google.com</code></li><li><strong>匹配分流规则</strong>：拿到域名后，客户端根据规则列表判断 <code>google.com</code> 应该走代理还是直连</li><li><strong>走代理的域名</strong>：客户端把域名（而非 IP）发送给远端代理节点，由节点在当地做真实 DNS 解析并建立连接。这样解析出的 IP 是距离节点最近的 CDN 地址，延迟最低</li><li><strong>走直连的域名</strong>：客户端在本地用配置的国内 DNS（如腾讯 DoH、阿里 DoH）做真实解析，拿到正确的国内 CDN 节点 IP，然后直连</li></ol><p><strong>优势</strong>：</p><ul><li><strong>解析速度快</strong>：DNS 请求在本地立即返回，不需要等待任何上游 DNS 的网络往返，应用几乎感受不到 DNS 延迟</li><li><strong>彻底避免 DNS 泄漏</strong>：走代理的域名，其真实 DNS 解析发生在远端节点，国内 DNS 服务器完全看不到你访问了哪些国外域名</li><li><strong>规则匹配准确</strong>：分流判断基于域名（<code>google.com</code>），而非 IP 地址。域名匹配不会受到 DNS 污染的影响，规则命中率高</li><li><strong>避免 DNS 污染影响</strong>：由于走代理的域名根本不在本地做 DNS 解析，GFW 的 DNS 污染完全不起作用</li></ul><p><strong>注意事项</strong>：</p><ul><li><strong>Fake-IP 缓存问题</strong>：部分应用（尤其是一些游戏和即时通讯软件）可能会缓存之前获得的 Fake-IP（如 <code>198.18.x.x</code>）。当你关闭代理后，应用仍然尝试连接这个不存在的假 IP，导致连接失败。解决方法是关闭代理后重启相关应用，或者清除系统 DNS 缓存（Windows 下执行 <code>ipconfig /flushdns</code>）</li><li><strong>fake-ip-filter 配置</strong>：某些服务不能使用 Fake-IP，必须返回真实 IP 才能正常工作。常见的包括：<ul><li><strong>局域网设备发现</strong>：如 mDNS、SSDP 等协议依赖真实 IP 进行设备发现（<code>*.local</code>、<code>*.lan</code>）</li><li><strong>NTP 时间同步</strong>：时间同步服务需要真实的服务器 IP（<code>time.*.com</code>、<code>ntp.*.com</code>）</li><li><strong>Windows 网络连接检测</strong>：Windows 会通过特定域名检测网络是否可用（<code>*.msftconnecttest.com</code>）</li><li><strong>STUN 协议</strong>：WebRTC 等需要 STUN 服务器的场景需要真实 IP（<code>+.stun.*.*</code>）</li></ul></li></ul><h3 id="Redir-Host-模式"><a href="#Redir-Host-模式" class="headerlink" title="Redir-Host 模式"></a>Redir-Host 模式</h3><p><strong>工作原理</strong>：</p><p>与 Fake-IP 不同，Redir-Host 模式下客户端会真正执行 DNS 解析：</p><ol><li>客户端拦截到 DNS 请求后，会向上游 DNS 服务器发起真实查询</li><li>拿到真实 IP 后，代理客户端用这个 IP 来匹配分流规则（比如通过 GeoIP 判断 IP 归属地）</li><li>根据匹配结果决定走代理还是直连</li></ol><p><strong>问题</strong>：</p><ul><li><strong>DNS 污染导致误判</strong>：如果用国内 DNS 解析 <code>google.com</code>，得到的是被 GFW 污染的假 IP（通常指向不存在的地址或国内的某个 IP）。代理客户端拿到这个假 IP，可能错误地判断为”国内 IP → 直连”，导致无法访问</li><li><strong>需要复杂的 fallback 配置</strong>：为了解决污染问题，Redir-Host 模式需要配置 fallback DNS（通常是海外 DNS），当主 DNS 返回的结果被判定为可疑时，使用 fallback 的结果。这套机制（fallback + fallback-filter + geoip 判断）配置复杂且容易出错</li><li><strong>解析延迟更高</strong>：每次 DNS 请求都需要等待真实解析完成，如果配置了 fallback，还可能触发并行查询，进一步增加延迟</li><li><strong>存在 DNS 泄漏风险</strong>：即使走代理的域名，其 DNS 查询也发生在本地，国内 DNS 服务器能看到你在查询 <code>google.com</code></li></ul><p><strong>结论</strong>：除非有特殊需求（比如某些必须依赖真实 IP 进行分流的场景），2026 年应该统一使用 Fake-IP 模式。Fake-IP 在速度、安全性和配置简便性上全面优于 Redir-Host。</p><hr><h2 id="Clash-Meta-Clash-Verge-配置"><a href="#Clash-Meta-Clash-Verge-配置" class="headerlink" title="Clash Meta &#x2F; Clash Verge 配置"></a>Clash Meta &#x2F; Clash Verge 配置</h2><p>Clash Meta（<a href="https://github.com/MetaCubeX/mihomo">mihomo</a> 内核）是目前桌面端使用最广泛的代理客户端之一，<a href="https://github.com/clash-verge-rev/clash-verge-rev">Clash Verge Rev</a> 则是其最流行的图形界面。下面是推荐的 DNS 配置。</p><h3 id="推荐配置"><a href="#推荐配置" class="headerlink" title="推荐配置"></a>推荐配置</h3><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">dns:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">listen:</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span><span class="string">:1053</span></span><br><span class="line">  <span class="attr">ipv6:</span> <span class="literal">false</span>  <span class="comment"># 除非你的网络完整支持 IPv6，否则建议关闭</span></span><br><span class="line">  <span class="attr">enhanced-mode:</span> <span class="string">fake-ip</span></span><br><span class="line">  <span class="attr">fake-ip-range:</span> <span class="number">198.18</span><span class="number">.0</span><span class="number">.1</span><span class="string">/16</span></span><br><span class="line">  </span><br><span class="line">  <span class="comment"># ⚠️ 关键：Fake-IP 模式下只需要 nameserver，不需要 fallback</span></span><br><span class="line">  <span class="attr">nameserver:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">https://doh.pub/dns-query</span>        <span class="comment"># 腾讯 DoH</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">https://dns.alidns.com/dns-query</span>  <span class="comment"># 阿里 DoH</span></span><br><span class="line">  </span><br><span class="line">  <span class="comment"># Fake-IP 过滤：这些域名返回真实 IP</span></span><br><span class="line">  <span class="attr">fake-ip-filter:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&#x27;*.lan&#x27;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&#x27;*.local&#x27;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&#x27;*.localhost&#x27;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&#x27;dns.msftncsi.com&#x27;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&#x27;www.msftncsi.com&#x27;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&#x27;*.msftconnecttest.com&#x27;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&#x27;time.*.com&#x27;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&#x27;ntp.*.com&#x27;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&#x27;+.stun.*.*&#x27;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&#x27;+.stun.*.*.*&#x27;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&#x27;localhost.ptlogin2.qq.com&#x27;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&#x27;lens.l.google.com&#x27;</span></span><br></pre></td></tr></table></figure><p><strong>配置说明</strong>：</p><ul><li><code>listen: 0.0.0.0:1053</code>：DNS 服务监听端口。如果仅本机使用，可以改为 <code>127.0.0.1:1053</code>；如果作为局域网网关（比如软路由），则需要监听 <code>0.0.0.0</code></li><li><code>ipv6: false</code>：关闭 IPv6 DNS 解析。大多数用户的网络环境不支持完整的 IPv6 链路，开启可能导致部分连接异常或 DNS 泄漏（详见下文 IPv6 章节）</li><li><code>enhanced-mode: fake-ip</code>：使用 Fake-IP 模式，这是关键配置项</li><li><code>fake-ip-range: 198.18.0.1/16</code>：Fake-IP 分配的地址段，使用默认值即可。这是一个保留地址段，不会与实际网络冲突</li><li><code>nameserver</code>：上游 DNS 服务器。这里只需要配置国内 DNS，因为在 Fake-IP 模式下，只有直连域名才会真正触发 DNS 解析。推荐使用 DoH（DNS over HTTPS）来防止 DNS 请求被运营商劫持</li></ul><h3 id="最常见的配置错误"><a href="#最常见的配置错误" class="headerlink" title="最常见的配置错误"></a>最常见的配置错误</h3><p><strong>不要在 Fake-IP 模式下配置 fallback 和 fallback-filter。</strong></p><p>这是大陆用户遇到的<strong>最高频 DNS 配置错误</strong>，没有之一。让我详细解释为什么：</p><p><strong>错误的根源</strong>：网上大量流传的 Clash DNS 配置教程是从 Redir-Host 时代直接复制过来的。在 Redir-Host 模式下，确实需要 fallback 来解决 DNS 污染问题——当 nameserver（国内 DNS）返回被污染的结果时，用 fallback（海外 DNS）的结果来纠正。但在 Fake-IP 模式下，这套机制完全多余。</p><p><strong>为什么多余</strong>：在 Fake-IP 模式下，<code>nameserver</code> 只负责解析<strong>直连域名</strong>——也就是那些匹配了直连规则（如 <code>GEOSITE,cn,DIRECT</code>）的域名。这些域名本来就是国内域名（如 <code>baidu.com</code>、<code>taobao.com</code>），用国内 DNS 解析是正确的，根本不存在被污染的问题。走代理的域名（如 <code>google.com</code>）则根本不会触发本地 DNS 解析，它们的域名直接发送给远端代理节点处理。</p><p><strong>加了 fallback 的后果</strong>：</p><ol><li><strong>增加不必要的延迟</strong>：每次直连域名的 DNS 解析，都会同时向 nameserver 和 fallback 发起查询，然后等待 fallback-filter 的判断逻辑执行完毕。这对于本来就应该秒回的国内域名解析来说，是纯粹的性能浪费</li><li><strong>可能引发 DNS 泄漏</strong>：fallback 通常配置的是海外 DNS（如 <code>8.8.8.8</code>、<code>1.1.1.1</code>），部分国内域名的查询会被发送到这些海外 DNS，造成不必要的信息泄漏</li><li><strong>配置更复杂，更容易出错</strong>：fallback-filter 的 <code>geoip</code>、<code>geosite</code>、<code>ipcidr</code> 等过滤条件，增加了配置的复杂度和出错概率</li></ol><p><strong>正确的做法</strong>：在 Fake-IP 模式下，删掉所有 <code>fallback</code> 和 <code>fallback-filter</code> 相关配置，只保留 <code>nameserver</code>，填入可靠的国内 DNS（推荐<a href="https://www.dnspod.cn/">腾讯 DNSPod DoH</a> 或<a href="https://alidns.com/">阿里 DNS DoH</a>）。</p><hr><h2 id="Shadowrocket-配置"><a href="#Shadowrocket-配置" class="headerlink" title="Shadowrocket 配置"></a>Shadowrocket 配置</h2><p>Shadowrocket 是 iOS 平台上最主流的代理客户端之一，操作界面简洁，DNS 配置也相对简单。</p><h3 id="推荐配置-1"><a href="#推荐配置-1" class="headerlink" title="推荐配置"></a>推荐配置</h3><ol><li>打开 Shadowrocket → 设置 → DNS</li><li><strong>DNS 服务器</strong>：填入 <code>system</code>（使用系统 DNS）或手动指定国内 DNS，如 <code>https://doh.pub/dns-query</code></li><li><strong>备用 DNS</strong>：可留空。在 Fake-IP 模式下不需要配置海外 DNS 作为备用</li><li><strong>代理 DNS 解析</strong>（Proxy DNS）：开启。这是关键选项，确保走代理的域名由远端节点进行 DNS 解析，避免本地 DNS 污染影响</li><li><strong>Fake-IP</strong>：如果使用的是较新版本的 Shadowrocket 且支持 Fake-IP 模式，建议开启</li></ol><h3 id="注意事项"><a href="#注意事项" class="headerlink" title="注意事项"></a>注意事项</h3><ul><li>Shadowrocket 默认使用 <code>system</code> DNS，即跟随系统的 DNS 设置。在大多数场景下，这是最简单且有效的配置——系统 DNS 通常是运营商分配的国内 DNS，解析国内域名速度快且准确</li><li>开启”代理 DNS 解析”后，所有命中代理规则的域名都会通过代理服务器进行远端 DNS 解析。这等效于 Fake-IP 中”走代理的域名由远端节点处理”的逻辑</li><li>如果遇到国内域名变慢的情况，检查分流规则是否把国内域名错误地归入了代理组。Shadowrocket 的规则匹配优先级是从上到下的，确保国内直连规则在前</li></ul><hr><h2 id="Surge-配置"><a href="#Surge-配置" class="headerlink" title="Surge 配置"></a>Surge 配置</h2><p>Surge 是 iOS 和 macOS 平台上功能最完善的代理客户端，DNS 配置方式与 Clash 有一定差异。</p><h3 id="推荐配置-2"><a href="#推荐配置-2" class="headerlink" title="推荐配置"></a>推荐配置</h3><p>在 Surge 的配置文件 <code>[General]</code> 段中添加以下内容：</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[General]</span></span><br><span class="line"><span class="attr">dns-server</span> = <span class="number">223.5</span>.<span class="number">5.5</span>, <span class="number">119.29</span>.<span class="number">29.29</span></span><br><span class="line"><span class="attr">doh-server</span> = https://dns.alidns.com/dns-query, https://doh.pub/dns-query</span><br><span class="line"><span class="attr">always-real-ip</span> = %APPEND% *.lan, *.local, time.*.com, ntp.*.com, *.msftconnecttest.com</span><br><span class="line"><span class="attr">hijack-dns</span> = *:<span class="number">53</span></span><br></pre></td></tr></table></figure><h3 id="配置说明"><a href="#配置说明" class="headerlink" title="配置说明"></a>配置说明</h3><ul><li><strong>dns-server</strong>：传统 DNS 服务器，作为 DoH 不可用时的回退。填入阿里 DNS（223.5.5.5）和腾讯 DNS（119.29.29.29）</li><li><strong>doh-server</strong>：DoH 服务器地址。Surge 会优先使用 DoH 进行解析，保证 DNS 请求本身不被运营商劫持或篡改</li><li><strong>always-real-ip</strong>：功能等同于 Clash 的 <code>fake-ip-filter</code>，这些域名始终返回真实 IP 而非 Fake-IP。Surge 使用 <code>%APPEND%</code> 语法表示在默认列表基础上追加</li><li><strong>hijack-dns</strong>：劫持所有发往 53 端口的 DNS 请求，确保即使应用硬编码了 DNS 服务器（如 <code>8.8.8.8:53</code>），也会被 Surge 接管</li></ul><h3 id="与-Clash-的主要区别"><a href="#与-Clash-的主要区别" class="headerlink" title="与 Clash 的主要区别"></a>与 Clash 的主要区别</h3><ol><li><strong>DNS 策略更加自动化</strong>：Surge 的 DNS 处理逻辑更多是内置的，不需要用户手动选择 Fake-IP 还是 Redir-Host。Surge 4+ 默认的行为已经类似 Fake-IP 的逻辑</li><li><strong>hijack-dns 功能</strong>：Surge 原生支持 DNS 劫持功能，可以强制接管所有 DNS 流量，这在 Clash 中需要配合 TUN 模式或 iptables 才能实现</li><li><strong>配置语法不同</strong>：Surge 使用 INI 风格的配置文件，而 Clash 使用 YAML 格式。虽然语法不同，但核心理念一致——国内域名用国内 DNS，代理域名由远端解析</li></ol><hr><h2 id="特殊场景"><a href="#特殊场景" class="headerlink" title="特殊场景"></a>特殊场景</h2><h3 id="透明代理（OpenWrt-软路由）下的-DNS"><a href="#透明代理（OpenWrt-软路由）下的-DNS" class="headerlink" title="透明代理（OpenWrt &#x2F; 软路由）下的 DNS"></a>透明代理（OpenWrt &#x2F; 软路由）下的 DNS</h3><p>在软路由上运行透明代理（如 OpenClash、Passwall、ShellCrash）时，DNS 配置比客户端本机使用更为复杂，因为你需要确保局域网内所有设备的 DNS 请求都被正确处理。</p><p><strong>DNS 劫持方式</strong>：</p><p>透明代理有两种主要的 DNS 劫持方式：</p><ul><li><strong>redirect（DNAT）</strong>：通过 iptables 的 NAT 规则，将所有发往 53 端口的 UDP&#x2F;TCP 流量重定向到 Clash 的 DNS 监听端口。这是最常用的方式，配置简单，兼容性好。示例规则：<code>iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-port 1053</code></li><li><strong>tproxy（透明代理）</strong>：使用 TPROXY 目标将流量透明转发，不修改数据包的目标地址。相比 redirect，tproxy 保留了原始目标信息，某些情况下可以实现更精确的处理。但配置更复杂，需要内核支持和额外的路由规则</li></ul><p><strong>dnsmasq 与 Clash DNS 的配合</strong>：</p><p>OpenWrt 默认使用 dnsmasq 作为 DNS 服务。在部署透明代理后，推荐的配合方式是：</p><ol><li>将 dnsmasq 的上游 DNS 指向 Clash 的 DNS 监听地址（如 <code>127.0.0.1#1053</code>）</li><li>局域网设备的 DHCP 分配的 DNS 指向路由器本身（dnsmasq）</li><li>DNS 请求链路为：设备 → dnsmasq → Clash DNS → 实际处理（Fake-IP 返回 &#x2F; 上游查询）</li></ol><p>这样既保留了 dnsmasq 的缓存和本地域名解析功能，又确保所有外部域名经过 Clash 的 Fake-IP 处理。</p><p><strong>硬编码 DNS 问题</strong>：</p><p>这是透明代理下最容易被忽略的问题。部分设备和应用会绕过系统分配的 DNS，直接向硬编码的 DNS 地址发起查询：</p><ul><li>Google 设备（Chromecast、Google Home）默认使用 <code>8.8.8.8</code></li><li>部分 Android 手机的 Private DNS 功能会直接连接 DoT 服务器</li><li>某些 IoT 设备和智能电视内置了固定的 DNS 地址</li></ul><p>解决方法是在 iptables 中添加强制劫持规则，将所有发往外部 53 端口的流量都重定向到 Clash DNS：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 劫持所有外发的 DNS 请求（排除路由器本身发出的）</span></span><br><span class="line">iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-port 1053</span><br><span class="line">iptables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-port 1053</span><br></pre></td></tr></table></figure><p>对于使用 DoH&#x2F;DoT 的设备（如 Android Private DNS），由于流量走的是 443&#x2F;853 端口而非 53 端口，上述规则无法劫持。需要在防火墙层面屏蔽这些设备对外部 DoH&#x2F;DoT 服务器的访问，迫使它们回退到普通 DNS。</p><h3 id="IPv6-环境"><a href="#IPv6-环境" class="headerlink" title="IPv6 环境"></a>IPv6 环境</h3><p><strong>是否建议开启 IPv6 DNS</strong>：</p><p>一般建议关闭，理由如下：</p><ol><li><strong>双栈泄漏风险</strong>：即使代理正确处理了 IPv4 流量，如果设备同时拥有 IPv6 地址，某些应用可能优先通过 IPv6 直连访问目标网站，完全绕过代理。这会导致严重的隐私泄漏</li><li><strong>路由规则不完善</strong>：很多规则集对 IPv6 地址的覆盖不如 IPv4 完善。GeoIP 数据库对 IPv6 地址段的归属判断准确度也低于 IPv4</li><li><strong>运营商支持参差不齐</strong>：国内各地运营商的 IPv6 部署进度不同，很多用户的 IPv6 链路实际上并不稳定，开启后可能出现间歇性连接问题</li></ol><p><strong>推荐做法</strong>：</p><ul><li>在代理客户端中将 <code>ipv6</code> 设为 <code>false</code></li><li>如果使用软路由，可以在防火墙层面禁止 IPv6 DNS 请求外发</li><li>只有在确认自己的网络完整支持 IPv6，且代理规则覆盖了 IPv6 地址的情况下，才考虑开启</li></ul><hr><h2 id="诊断方法"><a href="#诊断方法" class="headerlink" title="诊断方法"></a>诊断方法</h2><p>当怀疑 DNS 有问题时，按以下步骤系统排查：</p><h3 id="第一步：查看客户端日志"><a href="#第一步：查看客户端日志" class="headerlink" title="第一步：查看客户端日志"></a>第一步：查看客户端日志</h3><p>打开 Clash 的日志页面（Clash Verge 中点击日志按钮），将日志级别调整为 <code>debug</code>。观察以下信息：</p><ul><li>DNS 请求发向了哪个上游服务器</li><li>解析结果是什么（真实 IP 还是 Fake-IP）</li><li>分流规则是否正确匹配</li></ul><h3 id="第二步：确认分流规则命中"><a href="#第二步：确认分流规则命中" class="headerlink" title="第二步：确认分流规则命中"></a>第二步：确认分流规则命中</h3><p>在日志中查找目标域名，确认它命中了哪条规则。常见问题：</p><ul><li>国内域名错误匹配到了代理规则 → 走了代理节点访问，速度慢</li><li>国外域名错误匹配到了直连规则 → 本地 DNS 解析被污染，无法访问</li></ul><h3 id="第三步：手动-DNS-查询对比"><a href="#第三步：手动-DNS-查询对比" class="headerlink" title="第三步：手动 DNS 查询对比"></a>第三步：手动 DNS 查询对比</h3><p>使用系统自带的 DNS 查询工具进行独立验证：</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Windows 下使用 nslookup</span></span><br><span class="line">nslookup google.com <span class="number">223.5</span>.<span class="number">5.5</span></span><br><span class="line">nslookup google.com <span class="number">8.8</span>.<span class="number">8.8</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 或使用 dig（需安装）</span></span><br><span class="line">dig google.com @<span class="number">223.5</span>.<span class="number">5.5</span></span><br><span class="line">dig google.com @<span class="number">8.8</span>.<span class="number">8.8</span></span><br></pre></td></tr></table></figure><p>对比两个 DNS 返回的结果：如果国内 DNS 返回的 IP 明显不合理（如 <code>127.0.0.1</code> 或某些不相关的国内 IP），说明该域名被 DNS 污染了。在 Fake-IP 模式下这不会影响代理域名，但如果你在使用 Redir-Host 模式，这就是问题的根源。</p><h3 id="第四步：检测-DNS-泄漏"><a href="#第四步：检测-DNS-泄漏" class="headerlink" title="第四步：检测 DNS 泄漏"></a>第四步：检测 DNS 泄漏</h3><p>访问 <a href="https://dnsleaktest.com/">dnsleaktest.com</a> 或 <a href="https://browserleaks.com/dns">browserleaks.com&#x2F;dns</a>，点击 Extended Test。如果结果中出现了国内 DNS 服务器的地址，说明存在 DNS 泄漏——你访问国外网站的 DNS 请求被国内 DNS 看到了。</p><h3 id="第五步：验证-CDN-节点"><a href="#第五步：验证-CDN-节点" class="headerlink" title="第五步：验证 CDN 节点"></a>第五步：验证 CDN 节点</h3><p>如果国内网站变慢，使用以下方法检查 CDN 节点是否正确：</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看域名解析到的 IP</span></span><br><span class="line">nslookup cdn.example.com</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查询该 IP 的归属地</span></span><br><span class="line"><span class="comment"># 可以访问 ipinfo.io/IP地址 或 ip.sb 查看</span></span><br></pre></td></tr></table></figure><p>如果一个国内域名的 CDN 解析到了海外 IP，说明 DNS 配置有误——可能是走了海外 DNS 解析，或者规则错误地将该域名归入了代理组。</p><hr><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="Q-用了代理后国内网站反而变慢了？"><a href="#Q-用了代理后国内网站反而变慢了？" class="headerlink" title="Q: 用了代理后国内网站反而变慢了？"></a>Q: 用了代理后国内网站反而变慢了？</h3><p>最常见的原因是 DNS 解析到了错误的 CDN 节点。具体来说：</p><ul><li>国内域名的 DNS 查询走了海外 DNS 服务器，返回了距离海外节点最近的 CDN IP</li><li>或者国内域名错误地匹配到了代理规则，DNS 解析发生在代理节点所在地区</li></ul><p><strong>解决方法</strong>：确保直连域名只使用国内 DNS 解析。在 Fake-IP 模式下，检查 <code>nameserver</code> 是否只配置了国内 DNS（腾讯 DoH、阿里 DoH 等）。同时检查分流规则，确保 <code>GEOSITE,cn</code> 或对应的国内域名规则匹配到 <code>DIRECT</code>。</p><h3 id="Q-为什么有些网站打不开但浏览器没报错？"><a href="#Q-为什么有些网站打不开但浏览器没报错？" class="headerlink" title="Q: 为什么有些网站打不开但浏览器没报错？"></a>Q: 为什么有些网站打不开但浏览器没报错？</h3><p>这种”无声失败”通常有两种原因：</p><ol><li><strong>Fake-IP 缓存残留</strong>：之前代理开启时访问过某个域名，浏览器或系统缓存了它的 Fake-IP（<code>198.18.x.x</code>）。关闭代理后，浏览器仍然尝试连接这个假 IP，导致连接超时但不会显示明确的错误信息。解决方法：清除浏览器缓存和系统 DNS 缓存（<code>ipconfig /flushdns</code>）</li><li><strong>DNS 解析超时</strong>：上游 DNS 服务器响应缓慢或不可达，导致解析超时。客户端可能会静默失败而不返回错误页面。检查日志中的 DNS 超时记录，尝试更换上游 DNS 服务器</li></ol><h3 id="Q-DoH-和-DoT-选哪个？"><a href="#Q-DoH-和-DoT-选哪个？" class="headerlink" title="Q: DoH 和 DoT 选哪个？"></a>Q: DoH 和 DoT 选哪个？</h3><p><strong>推荐使用 DoH（DNS over HTTPS）</strong>。</p><p>两者都是加密 DNS 协议，作用相同——防止 DNS 请求被中间人窃听或篡改。区别在于：</p><table><thead><tr><th>对比项</th><th>DoH</th><th>DoT</th></tr></thead><tbody><tr><td>端口</td><td>443（与 HTTPS 网页流量共用）</td><td>853（专用端口）</td></tr><tr><td>伪装性</td><td>高，与普通 HTTPS 流量混在一起，难以区分</td><td>低，使用专用端口，容易被识别和封锁</td></tr><tr><td>封锁难度</td><td>高，封锁 443 端口等于封锁整个互联网</td><td>低，直接封锁 853 端口即可</td></tr><tr><td>性能</td><td>略高开销（HTTP&#x2F;2 头部）</td><td>略低开销</td></tr></tbody></table><p>在国内网络环境下，DoT 的 853 端口已经被部分运营商封锁或限速。而 DoH 使用 443 端口，与正常的 HTTPS 网页访问流量完全一致，运营商几乎不可能单独封锁，因此实际可用性更高。</p>]]></content>
      
      
      <categories>
          
          <category> DNS 专题 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> Clash </tag>
            
            <tag> 配置 </tag>
            
            <tag> DNS </tag>
            
            <tag> Surge </tag>
            
            <tag> Shadowrocket </tag>
            
            <tag> 最佳实践 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>DNS 解锁 vs 原生 IP 解锁：原理与区别</title>
      <link href="/posts/dns-vs-native-unlock/"/>
      <url>/posts/dns-vs-native-unlock/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：流媒体解锁主要有两种实现方式——DNS 解锁和原生 IP 解锁。前者通过 DNS 层面的重定向实现，后者依赖节点本身的 IP 类型。两者在可靠性、成本、维护难度上有明显差异。本文深入对比两种方案的技术原理和实际效果。</p></blockquote><hr><h2 id="为什么需要”解锁”"><a href="#为什么需要”解锁”" class="headerlink" title="为什么需要”解锁”"></a>为什么需要”解锁”</h2><p>Netflix、Disney+、Hulu、YouTube Premium、Spotify 等流媒体平台通过检测用户的 IP 地址来判断地理位置，进而决定你能看到什么内容。这套机制叫做<strong>地理限制</strong>（Geo-restriction）。</p><p>当你通过代理节点访问这些服务时，平台看到的不是你的真实 IP，而是代理节点的 IP。问题在于：并非所有代理节点的 IP 都能通过平台的检测。数据中心的 IP 段早已被各大流媒体平台标记和封锁，因为正常用户不会从数据中心发出请求。</p><p>为了让代理节点能够正常访问这些受地理限制的服务，就需要<strong>流媒体解锁</strong>。目前业界主要有两种实现路径：原生 IP 解锁和 DNS 解锁。</p><hr><h2 id="原生-IP-解锁"><a href="#原生-IP-解锁" class="headerlink" title="原生 IP 解锁"></a>原生 IP 解锁</h2><h3 id="什么是原生-IP"><a href="#什么是原生-IP" class="headerlink" title="什么是原生 IP"></a>什么是原生 IP</h3><p>原生 IP（Native IP）是指由目标国家或地区的本地互联网服务提供商（ISP）直接注册和分配的 IP 地址。关键特征如下：</p><ul><li><strong>归属地明确</strong>：通过 Whois 查询时，该 IP 的 ASN（自治系统号）属于当地的电信运营商或 ISP。例如日本的 NTT、美国的 Comcast、台湾的中华电信等。</li><li><strong>类型标识为住宅或 ISP</strong>：在 <a href="https://ipinfo.io/">ipinfo.io</a>、IP2Location 等 IP 情报数据库中，该 IP 的类型被标记为 residential（住宅）或 ISP，而非 hosting（托管&#x2F;数据中心）。</li><li><strong>流媒体平台信任</strong>：因为这些 IP 来自真实的用户网络环境，流媒体平台默认认为使用这些 IP 的是当地的真实用户，不会触发地域检测的拦截机制。</li></ul><p>原生 IP 也被称为住宅 IP、本地 IP、native IP。它和数据中心 IP 最本质的区别在于：数据中心 IP 的 ASN 归属于 IDC 或云服务商（如 AWS、GCP、DigitalOcean），而原生 IP 的 ASN 归属于面向终端用户提供网络接入的运营商。</p><h3 id="工作原理"><a href="#工作原理" class="headerlink" title="工作原理"></a>工作原理</h3><p>原生 IP 解锁的原理非常直接，不需要任何额外的技术手段：</p><ol><li>用户的流量通过代理隧道到达代理节点</li><li>代理节点本身拥有一个原生 IP 地址</li><li>代理节点使用这个原生 IP 向流媒体平台发起请求</li><li>流媒体平台看到的来源 IP 是一个本地 ISP 的住宅 IP</li><li>平台判定该请求来自本地用户，正常返回内容</li></ol><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">用户 → [代理隧道] → 代理节点（原生 IP: 203.0.113.50, ASN: NTT）→ Netflix</span><br><span class="line">                                                                      ↓</span><br><span class="line">Netflix 检查 IP: 203.0.113.50 → ASN 属于 NTT → 日本本地 ISP → 允许访问</span><br><span class="line">                                                                      ↓</span><br><span class="line">                          内容直接返回：Netflix ← 代理节点 ← 用户</span><br></pre></td></tr></table></figure><p>整个过程只有一跳（一次中转），IP 本身就是解锁的”钥匙”，不需要 DNS 层面的任何特殊处理。</p><h3 id="优势"><a href="#优势" class="headerlink" title="优势"></a>优势</h3><p><strong>可靠性最高</strong>：原生 IP 是流媒体解锁中最可靠的方案。平台对本地 ISP 的 IP 段天然信任度很高，很少会大规模封锁住宅 IP 段——因为那意味着封锁自己的正常用户。即便是 Netflix 这种检测最严格的平台，对住宅 IP 的误封率也很低。</p><p><strong>兼容性广泛</strong>：几乎所有流媒体服务都能通过原生 IP 解锁。无论是 Netflix、Disney+、HBO Max 这些对 IP 检测严格的服务，还是 Spotify、YouTube Premium 等相对宽松的平台，原生 IP 都能顺利通过检测。</p><p><strong>维护成本低</strong>：只要 IP 地址没有被单独标记封锁，原生 IP 节点不需要额外的维护工作。不存在需要持续更新的解锁服务器、DNS 配置等运维负担。</p><p><strong>延迟最低</strong>：用户流量直接从代理节点到达目标平台，中间没有额外的跳转和转发。相比 DNS 解锁多出的一跳，原生 IP 方案在延迟上有天然优势，这对视频流的加载速度和播放质量有直接影响。</p><p><strong>抗检测能力强</strong>：流媒体平台在做地域检测时，会交叉验证多个信号——包括 IP 的 ASN 归属、IP 的地理位置数据库记录、DNS 解析地址、WebRTC 泄露的 IP 等。原生 IP 节点在所有这些维度上都是一致的，不会出现”IP 在日本但 DNS 解析来自美国”这类可疑的不一致。</p><h3 id="劣势"><a href="#劣势" class="headerlink" title="劣势"></a>劣势</h3><p><strong>成本高</strong>：原生 IP 的价格远高于数据中心 IP。一个数据中心 VPS 可能每月只需几美元，但一个带有原生住宅 IP 的 VPS 价格可以是前者的数倍甚至十倍以上。这是因为住宅 IP 资源本身就稀缺，能够出租住宅 IP 段的 ISP 和供应商数量有限。</p><p><strong>供应有限</strong>：并非所有国家和地区都能方便地获取到原生 IP 的 VPS 或专用服务器。部分小众地区的原生 IP 资源极度稀缺，供应商屈指可数。</p><p><strong>替换困难</strong>：如果某个原生 IP 不幸被流媒体平台单独标记封锁，更换新的原生 IP 并不容易。不像数据中心 IP 可以快速分配新的，原生 IP 的供应链更长、替换周期更久。</p><p><strong>单点故障风险</strong>：整个解锁能力完全绑定在单个 IP 地址上。一旦这个 IP 被封，该节点就彻底失去解锁能力，没有回退方案。</p><hr><h2 id="DNS-解锁"><a href="#DNS-解锁" class="headerlink" title="DNS 解锁"></a>DNS 解锁</h2><h3 id="为什么需要-DNS-解锁"><a href="#为什么需要-DNS-解锁" class="headerlink" title="为什么需要 DNS 解锁"></a>为什么需要 DNS 解锁</h3><p>现实中，大量代理节点使用的是数据中心 IP。这些 IP 的 ASN 归属于 AWS、GCP、Vultr、BandwagonHost 等 IDC 或云服务商，早已被 Netflix 等平台标记为数据中心 IP 并拒绝访问。</p><p>但是，更换所有节点为原生 IP 的成本太高、不现实。DNS 解锁正是在这个背景下诞生的：<strong>它让使用数据中心 IP 的普通代理节点也能访问受地理限制的流媒体服务</strong>。</p><h3 id="工作原理-1"><a href="#工作原理-1" class="headerlink" title="工作原理"></a>工作原理</h3><p>DNS 解锁的核心思想是：<strong>在 DNS 层面将流媒体域名的解析结果”劫持”到一个拥有解锁能力的中间服务器</strong>。具体流程如下：</p><p><strong>第一步：DNS 查询拦截</strong></p><p>代理节点的 DNS 配置指向一个专门的 DNS 解锁服务。当节点需要解析流媒体相关的域名（如 <code>netflix.com</code>、<code>disneyplus.com</code>）时，DNS 解锁服务不会返回这些域名的真实 IP 地址，而是返回一个特殊的中间服务器的 IP 地址。</p><p><strong>第二步：流量重定向</strong></p><p>代理节点以为自己在直连流媒体平台，实际上它连接的是 DNS 解锁服务的中间服务器。这个中间服务器通常部署在拥有原生 IP 或者其他解锁能力 IP 的网络中。</p><p><strong>第三步：中间服务器转发</strong></p><p>中间服务器收到代理节点的请求后，使用自己的解锁 IP 向流媒体平台发起真正的请求。流媒体平台看到的是中间服务器的 IP——一个可以通过地域检测的 IP。</p><p><strong>第四步：内容回传</strong></p><p>流媒体平台将内容返回给中间服务器，中间服务器再转发给代理节点，最终回到用户手中。</p><p>完整的流量路径如下：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">1. 用户通过代理节点（数据中心 IP: 1.2.3.4）访问 netflix.com</span><br><span class="line">2. 代理节点向 DNS 解锁服务查询 netflix.com 的 IP</span><br><span class="line">3. DNS 解锁服务返回中间服务器的 IP（5.6.7.8）而非 Netflix 的真实 IP</span><br><span class="line">4. 代理节点将流量发送到 5.6.7.8（中间解锁服务器）</span><br><span class="line">5. 中间解锁服务器拥有原生 IP（9.10.11.12），使用该 IP 向 Netflix 发起请求</span><br><span class="line">6. Netflix 检测到来源 IP 9.10.11.12 属于本地 ISP → 允许访问</span><br><span class="line">7. 内容回传：Netflix → 中间解锁服务器 → 代理节点 → 用户</span><br></pre></td></tr></table></figure><p>示意图：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line">                     ┌──────────────────────────────────────────────┐</span><br><span class="line">                     │  DNS 解锁流程                                │</span><br><span class="line">                     └──────────────────────────────────────────────┘</span><br><span class="line"></span><br><span class="line">用户 → [代理隧道] → 代理节点（数据中心 IP: 1.2.3.4）</span><br><span class="line">                         │</span><br><span class="line">                         │ ① DNS 查询: netflix.com = ?</span><br><span class="line">                         ▼</span><br><span class="line">                    DNS 解锁服务</span><br><span class="line">                         │</span><br><span class="line">                         │ ② 返回中间服务器 IP: 5.6.7.8</span><br><span class="line">                         ▼</span><br><span class="line">                    代理节点连接 5.6.7.8</span><br><span class="line">                         │</span><br><span class="line">                         │ ③ 流量转发</span><br><span class="line">                         ▼</span><br><span class="line">                    中间解锁服务器（原生 IP: 9.10.11.12）</span><br><span class="line">                         │</span><br><span class="line">                         │ ④ 使用原生 IP 请求 Netflix</span><br><span class="line">                         ▼</span><br><span class="line">                      Netflix</span><br><span class="line">                         │</span><br><span class="line">                         │ ⑤ 内容原路返回</span><br><span class="line">                         ▼</span><br><span class="line">               Netflix → 解锁服务器 → 代理节点 → 用户</span><br></pre></td></tr></table></figure><p>值得注意的是，DNS 解锁只对特定域名生效。普通网站的 DNS 解析不受影响，流量也不经过中间服务器。DNS 解锁服务维护着一份流媒体域名列表，只有命中这个列表的域名才会被重定向。</p><h3 id="常见的-DNS-解锁实现方式"><a href="#常见的-DNS-解锁实现方式" class="headerlink" title="常见的 DNS 解锁实现方式"></a>常见的 DNS 解锁实现方式</h3><p><strong>第三方 DNS 解锁服务</strong>：这是最常见的方式。机场运营者购买第三方的 DNS 解锁服务，只需要在代理节点上将 DNS 服务器指向该服务的地址即可。市面上有多家提供此类服务的供应商，价格从每月几美元到几十美元不等，通常按节点数量计费。</p><p><strong>自建 SNI Proxy + DNS</strong>：技术能力较强的运营者可以自建 DNS 解锁系统。典型方案是在一台拥有原生 IP 的服务器上部署 SNI Proxy（如 sniproxy、nginx stream 模块），同时搭建自定义 DNS 服务器（如 dnsmasq、AdGuardHome），将流媒体域名的解析指向自己的 SNI Proxy。这种方式成本更低、可控性更高，但需要一定的运维能力。</p><p><strong>WARP + DNS 方案</strong>：某些场景下可以利用 Cloudflare WARP 的 IP 进行解锁。通过将流媒体域名的流量路由到 WARP 隧道，借助 WARP 分配的 IP 来通过平台的地域检测。但 WARP IP 并非原生住宅 IP，解锁成功率不稳定，取决于具体的 WARP 出口 IP。</p><h3 id="优势-1"><a href="#优势-1" class="headerlink" title="优势"></a>优势</h3><p><strong>成本效益高</strong>：一台拥有解锁能力 IP 的中间服务器可以同时为几十甚至上百个代理节点提供解锁服务。相比每个节点都使用原生 IP，DNS 解锁方案的成本可以降低一个数量级。</p><p><strong>灵活性强</strong>：如果中间解锁服务器的 IP 被平台封锁，可以快速更换解锁服务器，而不需要对所有代理节点做任何改动。代理节点只需要指向同一个 DNS 解锁服务的地址，后端的解锁服务器如何调整对用户完全透明。</p><p><strong>可扩展性好</strong>：要给已有的代理节点添加解锁能力，只需修改 DNS 配置。不需要更换 IP、迁移服务器、重新搭建代理服务。对于拥有大量节点的机场运营者来说，这种扩展方式的成本和工作量远低于全部更换为原生 IP。</p><p><strong>解锁范围可控</strong>：DNS 解锁可以精确到域名级别。运营者可以选择只解锁特定平台（如只解锁 Netflix 和 Disney+），也可以根据需要灵活增减支持的服务。</p><h3 id="劣势-1"><a href="#劣势-1" class="headerlink" title="劣势"></a>劣势</h3><p><strong>多一跳延迟</strong>：用户的流量需要经过”代理节点 → 中间解锁服务器 → 流媒体平台”两跳，比原生 IP 的单跳多了一次网络往返。虽然通常只增加几十毫秒的延迟，但在中间服务器距离代理节点较远的情况下，延迟增加可能更明显，影响视频加载速度和播放体验。</p><p><strong>故障点更多</strong>：DNS 解锁的链路包含三个组件——DNS 解锁服务、中间解锁服务器、以及两者之间的连接。任何一个环节出现问题都会导致解锁失败。相比之下，原生 IP 解锁的链路只有代理节点本身。</p><p><strong>维护成本持续</strong>：流媒体平台会不断更新检测策略、封锁已知的解锁服务器 IP。DNS 解锁服务需要持续监控解锁状态，及时更换被封锁的 IP 或调整解锁策略。这是一项持续的运维工作。</p><p><strong>一致性检测风险</strong>：部分流媒体平台已经开始检测 DNS 解析地址与连接 IP 之间的一致性。具体来说，如果你的代理节点 IP 显示在美国，但实际连接的流媒体服务器 IP 指向的解锁服务器在日本，平台可能判定这种不一致是使用了代理或解锁服务。这种检测虽然目前还不普遍，但趋势在加强。</p><p><strong>部分服务不支持</strong>：某些检测特别严格的流媒体平台可能同时验证多个层面（IP 地理位置、DNS 地理位置、延迟特征等），DNS 解锁无法在所有这些维度上保持一致，导致解锁失败。</p><hr><h2 id="对比表"><a href="#对比表" class="headerlink" title="对比表"></a>对比表</h2><table><thead><tr><th>维度</th><th>原生 IP 解锁</th><th>DNS 解锁</th></tr></thead><tbody><tr><td>可靠性</td><td>高——平台天然信任住宅 IP</td><td>中等——依赖中间服务器状态</td></tr><tr><td>成本</td><td>高——原生 IP 资源稀缺且昂贵</td><td>低——一台解锁服务器服务多个节点</td></tr><tr><td>延迟影响</td><td>无额外延迟</td><td>略有增加（多一跳网络往返）</td></tr><tr><td>维护难度</td><td>低——IP 不被封就无需干预</td><td>中到高——需持续监控和更新</td></tr><tr><td>覆盖服务范围</td><td>广泛——几乎所有服务</td><td>取决于 DNS 服务的域名列表</td></tr><tr><td>抗检测能力</td><td>强——所有信号维度一致</td><td>中等——可能存在一致性漏洞</td></tr><tr><td>可扩展性</td><td>差——受原生 IP 供应限制</td><td>好——DNS 配置即可扩展</td></tr><tr><td>故障恢复</td><td>慢——需更换稀缺 IP 资源</td><td>快——可迅速切换解锁服务器</td></tr></tbody></table><hr><h2 id="混合方案：实际运营中的常见做法"><a href="#混合方案：实际运营中的常见做法" class="headerlink" title="混合方案：实际运营中的常见做法"></a>混合方案：实际运营中的常见做法</h2><p>在真实的运营环境中，大多数有规模的机场不会纯粹只用一种方案，而是<strong>根据不同平台的检测严格程度，混合使用两种解锁方式</strong>。</p><p>典型的策略如下：</p><ul><li><strong>高价值、高检测强度的平台使用原生 IP</strong>：Netflix、Disney+、HBO Max 等对 IP 检测最严格的服务，使用原生 IP 节点来保证解锁稳定性。这些平台的用户付费意愿也最强，支撑得起更高的成本。</li><li><strong>中等检测强度的平台使用 DNS 解锁</strong>：Spotify、YouTube Premium、Amazon Prime Video 等检测相对宽松的服务，通过 DNS 解锁来覆盖。这样可以在保证基本解锁能力的同时大幅降低成本。</li><li><strong>特定地区差异化配置</strong>：日本、美国等热门地区的节点优先使用原生 IP，冷门地区则采用 DNS 解锁方案来控制成本。</li></ul><p>这种混合策略是成本与可靠性的平衡点。用户在选择机场时，可以关注其在核心平台上的解锁方式——标注”原生解锁”的节点通常意味着使用了原生 IP。</p><hr><h2 id="对用户的实际意义"><a href="#对用户的实际意义" class="headerlink" title="对用户的实际意义"></a>对用户的实际意义</h2><h3 id="你通常不需要知道技术细节"><a href="#你通常不需要知道技术细节" class="headerlink" title="你通常不需要知道技术细节"></a>你通常不需要知道技术细节</h3><p>作为普通用户，你在日常使用中通常不需要关心节点背后使用的是哪种解锁方式。你真正需要关心的是：<strong>这个节点能不能稳定解锁我需要的服务</strong>。</p><p>以下是一些实用的建议：</p><ul><li><strong>关注实际效果而非技术标签</strong>：有些机场会宣传”全原生 IP”，但实际解锁效果可能还不如一个维护良好的 DNS 解锁方案。解锁是否有效，要通过实际测试来验证，而不是只看宣传。</li><li><strong>善用试用期</strong>：大多数机场提供试用期或短期套餐。在这个期间测试你需要的所有流媒体服务，确认解锁正常工作后再决定长期订阅。</li><li><strong>注意价格信号</strong>：标注”原生解锁”或”流媒体解锁”的节点通常价格更高，这在一定程度上反映了原生 IP 的成本。但高价不等于一定好用，仍需实测。</li><li><strong>解锁失效时的判断</strong>：如果某个节点突然无法解锁某个平台，更可能是 DNS 解锁的中间服务器 IP 被封了——这种情况下联系机场运营者，他们通常可以较快修复。如果是原生 IP 被封，修复时间可能更长。</li></ul><hr><h2 id="怎么判断节点用的是哪种解锁方式"><a href="#怎么判断节点用的是哪种解锁方式" class="headerlink" title="怎么判断节点用的是哪种解锁方式"></a>怎么判断节点用的是哪种解锁方式</h2><p>虽然普通用户不一定需要知道这些，但如果你有探究精神，可以通过以下方式大致判断：</p><h3 id="方法一：查询-IP-类型"><a href="#方法一：查询-IP-类型" class="headerlink" title="方法一：查询 IP 类型"></a>方法一：查询 IP 类型</h3><p>使用 <code>ipinfo.io</code>、<a href="https://bgp.tools/">bgp.tools</a> 或 <code>ip.sb</code> 等工具查询你代理节点的出口 IP。重点看两个信息：</p><ul><li><strong>ASN 归属</strong>：如果 ASN 属于 AWS、GCP、DigitalOcean、Vultr 等云服务商&#x2F;IDC，说明这是数据中心 IP。如果此时流媒体服务仍然能正常使用，那大概率是通过 DNS 解锁实现的。</li><li><strong>IP 类型</strong>：ipinfo.io 会标注 IP 的类型（hosting、isp、residential 等）。如果类型是 hosting 但流媒体解锁正常，几乎可以确定使用了 DNS 解锁。</li></ul><h3 id="方法二：延迟对比测试"><a href="#方法二：延迟对比测试" class="headerlink" title="方法二：延迟对比测试"></a>方法二：延迟对比测试</h3><p>打开同一个代理节点，先访问一个普通网站（如 <code>fast.com</code> 的非流媒体测速），记录延迟。然后访问流媒体平台（如 Netflix），观察加载速度。如果流媒体内容的加载明显慢于普通网页浏览，可能说明流量经过了额外的中间服务器——这是 DNS 解锁的特征。</p><p>不过这种方法不够精确，延迟差异也可能是由其他因素导致的（如 CDN 分配、服务器负载等），仅供参考。</p><h3 id="方法三：直接询问提供商"><a href="#方法三：直接询问提供商" class="headerlink" title="方法三：直接询问提供商"></a>方法三：直接询问提供商</h3><p>信誉良好的机场运营者通常会在节点命名或文档中明确标注解锁方式。常见的标注如”原生解锁”、”Netflix 原生”、”流媒体 DNS 解锁”等。如果没有标注，可以在客服群或工单中直接询问。愿意公开解锁方式的运营者，通常也意味着更高的透明度和服务质量。</p><hr><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="Q-用户需要自己配置-DNS-解锁吗？"><a href="#Q-用户需要自己配置-DNS-解锁吗？" class="headerlink" title="Q: 用户需要自己配置 DNS 解锁吗？"></a>Q: 用户需要自己配置 DNS 解锁吗？</h3><p>通常不需要。如果你的机场提供 DNS 解锁功能，它已经在节点的服务端配置好了。DNS 解锁的配置完全在代理服务器上完成，对用户端是透明的——你只需正常连接节点，无需做任何额外的 DNS 设置。</p><p>这里要区分两个概念：<strong>客户端的 DNS 配置</strong>和<strong>服务端的 DNS 解锁配置</strong>。客户端的 DNS 配置（如在 Clash 中设置 DNS 服务器）主要解决的是 DNS 泄漏和分流问题，与流媒体解锁无关。服务端的 DNS 解锁配置是机场运营者在节点服务器上完成的，用户无需也无法干预。</p><h3 id="Q-自建节点怎么加-DNS-解锁？"><a href="#Q-自建节点怎么加-DNS-解锁？" class="headerlink" title="Q: 自建节点怎么加 DNS 解锁？"></a>Q: 自建节点怎么加 DNS 解锁？</h3><p>自建节点添加 DNS 解锁能力有两种途径：</p><ol><li><strong>购买第三方 DNS 解锁服务</strong>：这是最省事的方式。购买后只需要在你的 VPS 上将 DNS 服务器指向该服务提供的地址即可。缺点是需要持续付费。</li><li><strong>自建 DNS 解锁系统</strong>：你需要另外准备一台拥有原生 IP（或其他能解锁的 IP）的服务器。在上面部署 SNI Proxy（如 sniproxy 或 nginx 的 stream 模块），同时搭建 DNS 服务器（如 dnsmasq），将流媒体域名的解析指向你的 SNI Proxy。然后在你的代理节点上使用这个自建 DNS 服务器。这种方式需要一定的 Linux 运维能力和对网络原理的理解。</li></ol><h3 id="Q-为什么我的节点今天能解锁明天不能？"><a href="#Q-为什么我的节点今天能解锁明天不能？" class="headerlink" title="Q: 为什么我的节点今天能解锁明天不能？"></a>Q: 为什么我的节点今天能解锁明天不能？</h3><p>如果使用的是 DNS 解锁方案，最常见的原因是<strong>中间解锁服务器的 IP 被流媒体平台封锁了</strong>。平台会持续扫描和标记被大量代理用户使用的 IP 地址。当中间服务器的 IP 被封后，DNS 解锁链路就会中断，尽管你的代理节点本身工作正常。</p><p>遇到这种情况，联系你的机场提供商即可。对于使用 DNS 解锁的机场，更换解锁服务器 IP 是常规运维操作，通常在几小时到一两天内就能恢复。如果是原生 IP 被封，恢复时间可能更长，因为更换原生 IP 需要协调 ISP 资源。</p><h3 id="Q-原生-IP-节点一定更贵吗？"><a href="#Q-原生-IP-节点一定更贵吗？" class="headerlink" title="Q: 原生 IP 节点一定更贵吗？"></a>Q: 原生 IP 节点一定更贵吗？</h3><p>几乎总是更贵的。原生 IP 资源稀缺，获取成本远高于数据中心 IP，这部分成本必然会反映在服务价格上。一个使用原生 IP 的日本节点，月费可能是同等配置数据中心节点的三到五倍甚至更多。</p><p>但贵不代表一定好——关键要看实际的解锁效果和连接稳定性。一个维护不善的原生 IP 节点，体验可能还不如一个管理得当的 DNS 解锁节点。选择时应结合实际测试结果来判断，而不是单纯因为”原生”二字就愿意支付溢价。</p><h3 id="Q-有没有办法完全避免解锁失效？"><a href="#Q-有没有办法完全避免解锁失效？" class="headerlink" title="Q: 有没有办法完全避免解锁失效？"></a>Q: 有没有办法完全避免解锁失效？</h3><p>没有。无论使用哪种解锁方式，都无法保证永远不失效。流媒体平台对代理和解锁服务的检测在不断升级，这是一场持续的技术博弈。原生 IP 被单独封锁、DNS 解锁服务器被标记、新的检测算法上线——这些都可能导致原本正常的解锁突然失效。</p><p>用户能做的是选择运维能力强、响应速度快的服务提供商。解锁失效不可怕，关键是提供商能多快修复。一般来说，规模较大、口碑较好的机场在解锁维护上更有经验和资源投入。</p>]]></content>
      
      
      <categories>
          
          <category> 流媒体与解锁 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> 对比 </tag>
            
            <tag> DNS解锁 </tag>
            
            <tag> 原生IP </tag>
            
            <tag> 流媒体 </tag>
            
            <tag> Netflix </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>DNS 泄漏是什么、怎么检测、怎么防</title>
      <link href="/posts/dns-leak/"/>
      <url>/posts/dns-leak/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>: DNS 泄漏是指你以为所有流量都走了代理，但 DNS 查询实际上仍然发往了本地 ISP 的 DNS 服务器。这意味着你的 ISP（以及 GFW）仍然知道你在访问哪些网站。本文解释 DNS 泄漏的原理、检测方法和预防措施。</p></blockquote><hr><h2 id="什么是-DNS-泄漏"><a href="#什么是-DNS-泄漏" class="headerlink" title="什么是 DNS 泄漏"></a>什么是 DNS 泄漏</h2><p>DNS 泄漏（DNS Leak）的定义很简单：<strong>你以为自己完全走了代理，但你的 DNS 查询绕过了代理，直接发送到了本地网络上的 DNS 服务器（通常是 ISP 自动分配的）。</strong></p><p>这意味着什么？你的代理可能做得很好——数据传输全程加密，ISP 看不到你访问的网页内容。但 DNS 查询暴露了你的意图。ISP 的 DNS 日志里会清清楚楚地记录：这个用户在某个时间点查询了 <code>google.com</code>、<code>twitter.com</code>、<code>youtube.com</code> 的 IP 地址。</p><p>问题的严重性分几个层面：</p><p><strong>第一，隐私暴露。</strong> ISP 知道你在访问哪些网站。在中国大陆的网络环境下，这个信息本身就是敏感的。你不需要被看到访问的内容——“你在试图访问 Google”这一条信息就已经足够引起关注。</p><p><strong>第二，GFW 可见。</strong> GFW 对 DNS 流量的监控是全面的。当你的 DNS 查询以明文形式发往 ISP 的 DNS 服务器时，GFW 可以轻松看到你在查询什么域名。即使你的实际数据流量通过加密代理传输，DNS 查询已经出卖了你。</p><p><strong>第三，DNS 污染可能破坏代理。</strong> 这是很多人忽略的问题。如果你的 DNS 查询走漏到了本地网络，GFW 可以对这些查询进行 DNS 污染——返回一个伪造的 IP 地址。某些代理客户端在配置不当的情况下，会使用这个被污染的 IP 去建立连接，结果连接失败或者被劫持到错误的目标。</p><p><strong>第四，即使代理节点很安全，DNS 泄漏也会降低整体安全性。</strong> 安全是木桶效应——最短的那块板决定水位。你花了大价钱买了高质量代理节点、用了最新的协议、选了最隐蔽的端口，但 DNS 泄漏一笔勾销了这些努力。</p><p>一句话总结：DNS 泄漏就像你换了一身伪装出门，但身份证掉在了门口。</p><hr><h2 id="DNS-泄漏是怎么发生的"><a href="#DNS-泄漏是怎么发生的" class="headerlink" title="DNS 泄漏是怎么发生的"></a>DNS 泄漏是怎么发生的</h2><p>DNS 泄漏不是一个单一的问题，它有多种触发场景。理解每种场景的发生机制，才能有针对性地预防。</p><h3 id="场景一：系统代理模式（最常见）"><a href="#场景一：系统代理模式（最常见）" class="headerlink" title="场景一：系统代理模式（最常见）"></a>场景一：系统代理模式（最常见）</h3><p>这是 DNS 泄漏最常见、最容易被忽视的原因。</p><p>系统代理（System Proxy）的工作方式是：在操作系统层面设置一个 HTTP&#x2F;SOCKS 代理地址。当应用程序发起 HTTP 或 HTTPS 请求时，这些请求会被转发到代理客户端处理。</p><p>问题在于：<strong>DNS 查询不是 HTTP&#x2F;HTTPS 请求。</strong></p><p>DNS 查询使用 UDP 协议的 53 端口。系统代理只接管了 HTTP&#x2F;HTTPS 流量（TCP 80&#x2F;443），对 UDP 53 端口的 DNS 查询完全不管。当你的浏览器想访问 <code>google.com</code> 时，操作系统首先要做 DNS 解析——这个 DNS 查询直接走本地网络，发送到 ISP 的 DNS 服务器。ISP 收到你的查询，知道你在找 <code>google.com</code> 的 IP。然后浏览器拿到 IP，通过系统代理发送 HTTP 请求——这部分确实走了代理，但 DNS 早就泄漏了。</p><p>这种泄漏的特点是<strong>完全无感</strong>。你看到浏览器设置了代理，网页也能正常打开，一切看起来都很正常。但你的每一次 DNS 查询都在本地网络上裸奔。</p><p>这就是为什么我们反复强调：<strong>系统代理模式下，DNS 泄漏几乎不可避免。</strong> 如果你在意隐私，请使用 TUN 模式。</p><blockquote><p>关于系统代理和 TUN 模式的详细对比，参见 <a href="../software/tun-vs-system-proxy.md">TUN 模式 vs 系统代理</a>。</p></blockquote><h3 id="场景二：代理客户端-DNS-配置错误"><a href="#场景二：代理客户端-DNS-配置错误" class="headerlink" title="场景二：代理客户端 DNS 配置错误"></a>场景二：代理客户端 DNS 配置错误</h3><p>即使你使用了 TUN 模式，DNS 配置错误仍然可能导致泄漏。</p><p>最典型的错误是在 <code>nameserver</code> 中直接使用国际 DNS 的明文地址：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># ❌ 错误配置</span></span><br><span class="line"><span class="attr">dns:</span></span><br><span class="line">  <span class="attr">nameserver:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="number">8.8</span><span class="number">.8</span><span class="number">.8</span>       <span class="comment"># Google DNS，明文 UDP</span></span><br><span class="line">    <span class="bullet">-</span> <span class="number">1.1</span><span class="number">.1</span><span class="number">.1</span>       <span class="comment"># Cloudflare DNS，明文 UDP</span></span><br></pre></td></tr></table></figure><p>这个配置的问题是：DNS 查询使用明文 UDP 协议发送到 <code>8.8.8.8</code>。这些查询包会经过你的 ISP 网络——ISP 可以看到查询内容，GFW 也可以看到。更糟糕的是，GFW 会主动劫持发往 <code>8.8.8.8:53</code> 的 DNS 查询，返回被污染的结果。</p><p>结果就是：你以为自己在用 Google DNS，实际上你得到的是 GFW 伪造的响应。被污染的域名拿到错误的 IP，代理客户端再基于这个错误 IP 做路由决策——整个链路都被带偏了。</p><p>另一种常见的错误配置是在 Fake-IP 模式下配置了 <code>fallback</code>，并且 fallback 指向海外 DNS。虽然在 Fake-IP 模式下 nameserver 只会收到直连域名的查询，但 fallback 的存在会导致额外的 DNS 查询被发送到海外，这些查询走的是明文或加密通道取决于你的配置，但无论如何，它们增加了不必要的暴露面。</p><blockquote><p>关于 Fake-IP 模式下为什么不需要 fallback，参见 <a href="./fake-ip-vs-redir-host.md">Fake-IP vs Redir-Host</a>。</p></blockquote><h3 id="场景三：应用绕过代理"><a href="#场景三：应用绕过代理" class="headerlink" title="场景三：应用绕过代理"></a>场景三：应用绕过代理</h3><p>某些应用程序不走操作系统的 DNS 解析流程，而是自己直接发送 DNS 查询。这种行为叫做”硬编码 DNS”。</p><p>典型例子：</p><ul><li><strong>Chrome 浏览器</strong>：在某些配置下，Chrome 会使用自己内置的 DNS 解析逻辑，绕过系统 DNS 设置。尤其是当 Chrome 的”安全 DNS”功能开启并配置了特定的 DNS 服务器时，这些查询不会经过代理客户端的 DNS 拦截。</li><li><strong>Android 应用</strong>：Android 上的部分应用会硬编码 DNS 服务器地址（如 <code>8.8.8.8</code>），直接通过 UDP 53 端口发送查询，完全绕过系统 DNS 和代理客户端。</li><li><strong>某些即时通讯软件</strong>：部分 IM 应用为了加速连接，会使用 HTTPDNS（通过 HTTP 接口查询 DNS，而非传统的 UDP 53 端口），这些查询可能不被代理客户端拦截。</li></ul><p>在系统代理模式下，这些硬编码 DNS 查询会直接走本地网络，造成泄漏。即使在 TUN 模式下，如果 TUN 的 DNS 劫持配置不完善，某些应用的非标准 DNS 查询也可能漏网。</p><h3 id="场景四：IPv6-DNS-泄漏"><a href="#场景四：IPv6-DNS-泄漏" class="headerlink" title="场景四：IPv6 DNS 泄漏"></a>场景四：IPv6 DNS 泄漏</h3><p>这是一个越来越常见但经常被忽略的泄漏场景。</p><p>很多家庭网络环境同时具备 IPv4 和 IPv6 连接。代理客户端通常默认只处理 IPv4 流量。当你的系统有 IPv6 地址时，操作系统可能会通过 IPv6 网络发送 DNS 查询——这些查询完全绕过了你的代理客户端。</p><p>具体表现：</p><ul><li>你的代理客户端通过 TUN 模式接管了 IPv4 网络栈</li><li>但 IPv6 网络栈没有被接管</li><li>操作系统发起 DNS 查询时，可能优先使用 IPv6</li><li>IPv6 的 DNS 查询直接走 ISP 的 IPv6 DNS 服务器 → 泄漏</li></ul><p>这种泄漏特别隐蔽，因为大多数用户不知道自己的网络有 IPv6。你可以访问 <code>test-ipv6.com</code> 检查你的网络是否有 IPv6 连接。</p><p>更复杂的情况是：即使代理客户端在 TUN 模式下同时接管了 IPv4 和 IPv6，如果 DNS 配置中没有正确处理 AAAA 记录（IPv6 DNS 记录），客户端可能会在处理 IPv6 DNS 响应时出错，导致某些查询从旁路走掉。</p><h3 id="场景五：WebRTC-泄漏（关联问题）"><a href="#场景五：WebRTC-泄漏（关联问题）" class="headerlink" title="场景五：WebRTC 泄漏（关联问题）"></a>场景五：WebRTC 泄漏（关联问题）</h3><p>WebRTC（Web Real-Time Communication）是浏览器内置的实时通信功能，主要用于视频通话、语音聊天等场景。虽然 WebRTC 泄漏严格来说不属于 DNS 泄漏，但它经常和 DNS 泄漏一起被讨论，因为它导致的后果类似——暴露你的真实网络信息。</p><p>WebRTC 的问题在于：<strong>它可以直接获取你的本地 IP 地址和公网 IP 地址，完全绕过代理。</strong></p><p>WebRTC 使用 STUN 协议来发现你的公网 IP 和 NAT 类型。这个过程不走 HTTP 代理通道，也不走 SOCKS 代理。即使你已经通过代理上网，一个恶意网页只需要几行 JavaScript 代码，就能通过 WebRTC 获取到你的真实 IP 地址。</p><p>Chrome 和 Firefox 默认都启用了 WebRTC。这意味着除非你主动关闭它，否则你的真实 IP 随时可能被网页获取。</p><hr><h2 id="如何检测-DNS-泄漏"><a href="#如何检测-DNS-泄漏" class="headerlink" title="如何检测 DNS 泄漏"></a>如何检测 DNS 泄漏</h2><p>知道了 DNS 泄漏的原理，接下来要做的是：确认你自己有没有泄漏。以下是三种检测方法，从简单到深入。</p><h3 id="方法一：在线检测工具"><a href="#方法一：在线检测工具" class="headerlink" title="方法一：在线检测工具"></a>方法一：在线检测工具</h3><p>这是最简单、最直观的检测方式，适合所有用户。</p><p><strong>步骤：</strong></p><ol><li>确保你的代理已经连接，并且你正在使用代理上网（可以先访问 <code>google.com</code> 确认代理正常工作）</li><li>打开浏览器，访问 <a href="https://dnsleaktest.com/">dnsleaktest.com</a></li><li>页面加载后，点击 <strong>Extended test</strong>（扩展测试）——Standard test 只检测一次，Extended test 会进行多轮查询，结果更准确</li><li>等待测试完成（通常需要 30 秒左右）</li><li>查看结果</li></ol><p><strong>如何解读结果：</strong></p><ul><li><strong>没有泄漏</strong>：结果中只显示你代理节点所在地的 DNS 服务器。比如你用的是香港节点，结果应该显示香港或海外的 DNS 服务器（如 Cloudflare、Google DNS 等）。</li><li><strong>有泄漏</strong>：结果中出现了中国大陆的 DNS 服务器 IP，或者出现了你 ISP 的 DNS 地址。这意味着至少有一部分 DNS 查询没有走代理，直接到达了你本地的 ISP DNS。</li><li><strong>部分泄漏</strong>：结果中同时出现海外和国内的 DNS 服务器。这说明你的 DNS 查询一部分走了代理，一部分走了本地——这也是泄漏。</li></ul><p>除了 <code>dnsleaktest.com</code>，还有以下替代工具可以交叉验证：</p><table><thead><tr><th>工具</th><th>地址</th><th>特点</th></tr></thead><tbody><tr><td>DNS Leak Test</td><td><code>dnsleaktest.com</code></td><td>最经典的 DNS 泄漏检测工具</td></tr><tr><td>BrowserLeaks DNS</td><td><code>browserleaks.com/dns</code></td><td>同时检测 DNS 和其他浏览器信息泄漏</td></tr><tr><td>IPLeak</td><td><code>ipleak.net</code></td><td>综合检测 IP、DNS、WebRTC 泄漏</td></tr><tr><td>Mullvad DNS Check</td><td><code>mullvad.net/check</code></td><td>Mullvad VPN 提供的检测工具，界面简洁</td></tr></tbody></table><p>建议至少用两个工具交叉验证。单一工具的结果有时可能因为网络波动不够准确。</p><p><img src="/images/inline/dns-leak-test.png" alt="DNS 泄漏检测结果示例"><br><em>图片来源：<a href="https://www.reddit.com/">Reddit</a></em></p><h3 id="方法二：代理客户端日志"><a href="#方法二：代理客户端日志" class="headerlink" title="方法二：代理客户端日志"></a>方法二：代理客户端日志</h3><p>如果你使用 Clash Verge、mihomo 等代理客户端，可以通过日志直接观察 DNS 查询的去向。</p><p><strong>以 Clash Verge 为例：</strong></p><ol><li>打开 Clash Verge，进入设置</li><li>将日志级别设置为 <code>debug</code></li><li>打开日志面板（或查看日志文件）</li><li>正常浏览网页，观察日志中的 DNS 相关条目</li></ol><p>你需要关注的信息：</p><ul><li>每一条 DNS 查询的目标域名</li><li>该查询被发送到了哪个 DNS 服务器</li><li>查询是通过什么方式发起的（UDP、DoH、Fake-IP 映射等）</li></ul><p>如果你看到 <code>google.com</code>、<code>youtube.com</code> 等应该走代理的域名出现在本地 DNS 查询日志中，说明存在泄漏。在 Fake-IP 模式下，这些域名不应该触发任何真实的 DNS 查询——它们应该直接被分配假 IP，然后在远端解析。</p><h3 id="方法三：Wireshark-抓包分析"><a href="#方法三：Wireshark-抓包分析" class="headerlink" title="方法三：Wireshark 抓包分析"></a>方法三：Wireshark 抓包分析</h3><p>Wireshark 是网络协议分析工具，可以捕获你网卡上的所有网络数据包。这是最精确的检测方法，适合需要深入分析的用户。</p><p><strong>步骤：</strong></p><ol><li>下载并安装 <a href="https://www.wireshark.org/">Wireshark</a></li><li>打开 Wireshark，选择你正在使用的网络接口（Wi-Fi 或有线网卡）</li><li>在过滤器中输入 <code>udp.port == 53</code>，只显示 DNS 流量</li><li>开始捕获</li><li>正常使用浏览器，访问几个不同的网站</li><li>观察捕获到的 DNS 数据包</li></ol><p><strong>如何解读：</strong></p><ul><li><strong>没有泄漏</strong>：在代理开启的状态下，过滤器 <code>udp.port == 53</code> 应该几乎捕获不到任何数据包。因为在 TUN + Fake-IP 模式下，DNS 查询要么在本地被 Fake-IP 拦截返回假 IP（不产生真实 UDP DNS 查询），要么通过 DoH（走 HTTPS，不走 UDP 53）发送。网卡上不应该出现明文 DNS 流量。</li><li><strong>有泄漏</strong>：你看到了发往 ISP DNS 服务器（如 <code>192.168.1.1</code> 或 ISP 分配的 DNS 地址）的 DNS 查询。数据包的详细信息里能看到查询的域名——如果这些域名包含 <code>google.com</code>、<code>youtube.com</code> 等需要代理的网站，确认泄漏。</li><li><strong>DoH 查询</strong>：如果你看到发往 <code>223.5.5.5</code>（阿里 DNS）或 <code>1.12.12.12</code>（腾讯 DNS）的 HTTPS 流量（TCP 443），但没有 UDP 53 流量，这说明你的代理客户端在使用 DoH 发送 DNS 查询。只要这些查询的目标是国内域名，这不算泄漏——这是正常行为。</li></ul><p>Wireshark 抓包的另一个用途是检测 IPv6 DNS 泄漏。将过滤器改为 <code>udp.port == 53 &amp;&amp; ipv6</code>，如果在代理开启时仍然捕获到 IPv6 DNS 查询，说明你的 IPv6 DNS 正在泄漏。</p><hr><h2 id="如何防止-DNS-泄漏"><a href="#如何防止-DNS-泄漏" class="headerlink" title="如何防止 DNS 泄漏"></a>如何防止 DNS 泄漏</h2><p>检测完毕，如果发现泄漏，接下来就是修复。以下五个方案按推荐程度排序。</p><h3 id="方案一：使用-TUN-模式（最有效）"><a href="#方案一：使用-TUN-模式（最有效）" class="headerlink" title="方案一：使用 TUN 模式（最有效）"></a>方案一：使用 TUN 模式（最有效）</h3><p>TUN 模式是防止 DNS 泄漏最根本的方案。</p><p>TUN（网络隧道）模式在操作系统层面创建一个虚拟网卡，所有网络流量——包括 TCP、UDP、ICMP 等所有协议——都会经过这个虚拟网卡，被代理客户端接管。</p><p>与系统代理的区别在于：</p><ul><li><strong>系统代理</strong>：只接管遵循系统代理设置的 HTTP&#x2F;HTTPS 流量，DNS（UDP 53）不在接管范围内</li><li><strong>TUN 模式</strong>：在网络栈的最底层接管所有流量，包括 DNS 查询。任何应用程序的任何网络请求，无论使用什么协议、什么端口，都逃不过 TUN 的拦截</li></ul><p>在 TUN 模式下，即使应用程序硬编码了 DNS 服务器（如 <code>8.8.8.8</code>），这些 DNS 查询也会被代理客户端拦截并处理。应用无法绕过 TUN 的 DNS 劫持——因为所有流量都要经过虚拟网卡。</p><p>开启方法（以 <a href="https://github.com/clash-verge-rev/clash-verge-rev">Clash Verge Rev</a> 为例）：</p><ol><li>打开 Clash Verge</li><li>进入设置，找到 TUN 模式开关</li><li>开启 TUN 模式</li><li>首次开启可能需要管理员权限（安装虚拟网卡驱动）</li></ol><p>注意事项：</p><ul><li>TUN 模式需要管理员权限，因为它要在系统层面创建虚拟网卡</li><li>某些企业网络环境可能限制 TUN 模式的使用</li><li>TUN 模式与其他 VPN 软件可能冲突——同一时间只能有一个 TUN 设备接管网络</li></ul><blockquote><p>关于 TUN 模式的详细原理和配置，参见 <a href="../software/tun-vs-system-proxy.md">TUN 模式 vs 系统代理</a>。</p></blockquote><h3 id="方案二：使用-Fake-IP-模式"><a href="#方案二：使用-Fake-IP-模式" class="headerlink" title="方案二：使用 Fake-IP 模式"></a>方案二：使用 Fake-IP 模式</h3><p>Fake-IP 是从 DNS 解析层面杜绝泄漏的方案。</p><p>在 Fake-IP 模式下，代理客户端不会为需要走代理的域名发起任何真实的 DNS 查询。当浏览器请求 <code>google.com</code> 的 DNS 解析时，客户端直接返回一个假 IP（如 <code>198.18.0.1</code>），然后在数据连接阶段将域名传递给远端代理节点，由节点在海外完成真正的 DNS 解析。</p><p>从头到尾，<code>google.com</code> 的真实 DNS 查询从未在你的本地网络上发生过。ISP 和 GFW 看不到任何关于 <code>google.com</code> 的 DNS 请求——因为确实没有这样的请求存在。</p><p>对于直连域名（如 <code>baidu.com</code>），Fake-IP 模式会使用 <code>nameserver</code> 中配置的国内 DNS 进行真实解析。这些查询到达国内 DNS 服务器，但内容只是国内域名——这不构成泄漏，因为你访问 <code>baidu.com</code> 本来就是正常行为。</p><p><strong>Fake-IP + TUN 的组合是目前防止 DNS 泄漏的最佳方案。</strong> TUN 确保所有流量都被接管，Fake-IP 确保代理域名从不在本地解析。两者结合，DNS 泄漏的可能性降到接近零。</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># ✅ 推荐配置</span></span><br><span class="line"><span class="attr">dns:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">enhanced-mode:</span> <span class="string">fake-ip</span></span><br><span class="line">  <span class="attr">fake-ip-range:</span> <span class="number">198.18</span><span class="number">.0</span><span class="number">.1</span><span class="string">/16</span></span><br><span class="line">  <span class="attr">nameserver:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">https://doh.pub/dns-query</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">https://dns.alidns.com/dns-query</span></span><br></pre></td></tr></table></figure><blockquote><p>关于 Fake-IP 的详细原理，参见 <a href="./fake-ip-vs-redir-host.md">Fake-IP vs Redir-Host</a>。</p></blockquote><h3 id="方案三：正确配置-DNS-加密"><a href="#方案三：正确配置-DNS-加密" class="headerlink" title="方案三：正确配置 DNS 加密"></a>方案三：正确配置 DNS 加密</h3><p>即使你无法使用 TUN 模式（某些企业环境的限制），正确配置 DNS 加密也能大幅降低泄漏的风险。</p><p>传统 DNS 查询使用 UDP 53 端口明文传输。ISP 和 GFW 可以轻松读取查询内容并进行篡改。DoH（DNS over HTTPS）和 DoT（DNS over TLS）将 DNS 查询封装在加密通道中——即使查询被截获，第三方也无法读取查询的域名。</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">dns:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">enhanced-mode:</span> <span class="string">fake-ip</span></span><br><span class="line">  <span class="attr">nameserver:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">https://doh.pub/dns-query</span>          <span class="comment"># 腾讯 DoH — 加密传输</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">https://dns.alidns.com/dns-query</span>   <span class="comment"># 阿里 DoH — 加密传输</span></span><br><span class="line">  <span class="comment"># 不要使用：</span></span><br><span class="line">  <span class="comment"># - 8.8.8.8          ← 明文 UDP，会被劫持</span></span><br><span class="line">  <span class="comment"># - 114.114.114.114   ← 明文 UDP，可被运营商篡改</span></span><br></pre></td></tr></table></figure><p>DoH 的保护范围：</p><ul><li><strong>防窃听</strong>：ISP 无法看到你查询了什么域名</li><li><strong>防篡改</strong>：GFW 无法对 DoH 查询进行 DNS 污染（但可以封锁 DoH 服务器的 IP）</li><li><strong>防运营商劫持</strong>：某些运营商会劫持明文 DNS 查询，插入广告或重定向。DoH 完全避免了这个问题</li></ul><p>需要注意：DoH 不能替代 TUN 模式。DoH 只加密了 DNS 查询的传输过程，但如果你使用的是系统代理模式，DNS 查询本身仍然不经过代理客户端——操作系统会直接发送 DoH 请求到配置的 DNS 服务器。虽然内容加密了，但 ISP 仍然能看到你在连接某个 DoH 服务器（通过 IP 地址）。</p><h3 id="方案四：禁用-IPv6"><a href="#方案四：禁用-IPv6" class="headerlink" title="方案四：禁用 IPv6"></a>方案四：禁用 IPv6</h3><p>如果你不需要 IPv6，关闭它是消除 IPv6 DNS 泄漏的最简单方法。</p><p>在代理客户端的 DNS 配置中禁用 IPv6：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">dns:</span></span><br><span class="line">  <span class="attr">ipv6:</span> <span class="literal">false</span></span><br></pre></td></tr></table></figure><p>这个配置告诉代理客户端：不处理 AAAA 记录（IPv6 DNS 记录），所有 DNS 查询只返回 A 记录（IPv4）。</p><p>你也可以在操作系统层面禁用 IPv6：</p><p><strong>Windows：</strong></p><ol><li>打开”网络和 Internet 设置”</li><li>点击当前连接的网络适配器</li><li>找到”Internet 协议版本 6 (TCP&#x2F;IPv6)”</li><li>取消勾选</li></ol><p><strong>macOS：</strong><br>打开终端，执行 <code>sudo networksetup -setv6off Wi-Fi</code></p><p>禁用 IPv6 不会影响正常上网——2026 年的绝大多数网站和服务仍然完全支持 IPv4 访问。除非你有明确的 IPv6 需求（比如 BT 下载需要 IPv6 来改善 NAT 穿透，或者你的 ISP 要求使用 IPv6），否则关闭 IPv6 是一个无副作用的安全措施。</p><h3 id="方案五：关闭-WebRTC"><a href="#方案五：关闭-WebRTC" class="headerlink" title="方案五：关闭 WebRTC"></a>方案五：关闭 WebRTC</h3><p>WebRTC 泄漏虽然不是严格意义上的 DNS 泄漏，但它能暴露你的真实 IP，效果同样致命。</p><p><strong>Chrome 浏览器：</strong></p><p>方式一：安装浏览器扩展。搜索并安装 “WebRTC Leak Prevent” 或 “WebRTC Control” 扩展。这些扩展可以控制 WebRTC 的行为，阻止它泄漏你的真实 IP。</p><p>方式二：通过 Chrome flags 设置。在地址栏输入 <code>chrome://flags</code>，搜索 “WebRTC”，根据可用选项调整设置。不同 Chrome 版本的可用 flags 可能不同。</p><p><strong>Firefox 浏览器：</strong></p><p>Firefox 提供了更直接的控制方式：</p><ol><li>在地址栏输入 <code>about:config</code></li><li>搜索 <code>media.peerconnection.enabled</code></li><li>将其值设置为 <code>false</code></li></ol><p>这会完全禁用 WebRTC 功能。副作用是：基于 WebRTC 的网页视频通话和语音聊天将无法使用（如部分网页版视频会议工具）。如果你需要这些功能，建议在需要时临时开启，用完后关闭。</p><p><strong>最佳方案：TUN 模式处理 WebRTC。</strong> 如果你已经开启了 TUN 模式，WebRTC 的 STUN 请求也会被代理客户端接管。STUN 服务器看到的是你代理节点的 IP 而非你的真实 IP。在这种情况下，WebRTC 不会造成泄漏，你也不需要手动禁用它。</p><hr><h2 id="泄漏检测清单"><a href="#泄漏检测清单" class="headerlink" title="泄漏检测清单"></a>泄漏检测清单</h2><p>在完成防泄漏配置后，用以下清单逐项检查，确保没有遗漏。</p><ul><li><input disabled="" type="checkbox"> <strong>代理模式</strong>：是 TUN 还是系统代理？TUN 更安全。系统代理模式下 DNS 泄漏几乎不可避免。</li><li><input disabled="" type="checkbox"> <strong>DNS 增强模式</strong>：是 Fake-IP 还是 Redir-Host？Fake-IP 更安全。Fake-IP 从根本上避免了代理域名的本地 DNS 查询。</li><li><input disabled="" type="checkbox"> <strong>DNS 加密</strong>：nameserver 使用 DoH&#x2F;DoT 还是明文 UDP？DoH&#x2F;DoT 更安全。明文 DNS 查询可被 ISP 和 GFW 读取和篡改。</li><li><input disabled="" type="checkbox"> <strong>IPv6</strong>：是否需要 IPv6？不需要就关闭。IPv6 DNS 查询是容易被忽略的泄漏渠道。</li><li><input disabled="" type="checkbox"> <strong>在线检测</strong>：<code>dnsleaktest.com</code> 的 Extended test 是否通过？结果中应该只有海外 DNS 服务器。</li><li><input disabled="" type="checkbox"> <strong>WebRTC</strong>：WebRTC 是否已关闭或由 TUN 模式处理？可在 <code>browserleaks.com/webrtc</code> 检测。</li></ul><p>如果以上所有项目都满足安全要求，你的 DNS 泄漏风险已经降到了接近零的水平。</p><hr><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><p><strong>Q：DNS 泄漏有什么实际危险？</strong></p><p>你的 ISP——以及通过 ISP 的 GFW——能看到你查询的所有域名。虽然他们看不到你访问的具体内容（因为有 TLS 加密），但”你在查询 google.com &#x2F; twitter.com”这个信息本身在特定环境下就是敏感的。DNS 查询日志可以完整地还原你的浏览历史：你什么时候访问了什么网站，频率是多少，持续了多长时间。这些元数据的价值有时候比内容本身更高。在极端情况下，持续的敏感域名查询记录可能引起不必要的关注。</p><p><strong>Q：用了 Fake-IP 就不会泄漏了吗？</strong></p><p>Fake-IP 大幅降低了泄漏风险，但不能说百分之百消除。如果你使用的是系统代理模式而非 TUN 模式，某些应用程序仍然可能绕过代理客户端的 DNS 拦截，直接向系统 DNS 或硬编码的 DNS 服务器发送查询。<strong>Fake-IP + TUN 才是最安全的组合。</strong> TUN 确保所有流量被代理客户端接管，Fake-IP 确保代理域名从不触发本地真实 DNS 查询。两者缺一不可。</p><p><strong>Q：检测显示有泄漏怎么办？</strong></p><p>按以下优先级排查：</p><p>第一步，确认你的代理模式。如果是系统代理，切换到 TUN 模式。这一步解决了绝大多数 DNS 泄漏问题。</p><p>第二步，如果已经是 TUN 模式，检查 DNS 配置。确认 <code>enhanced-mode</code> 设置为 <code>fake-ip</code>，<code>nameserver</code> 中只有国内 DoH 服务器（如腾讯 DoH、阿里 DoH），没有明文 DNS，没有海外 DNS。</p><p>第三步，检查 IPv6。如果你的网络有 IPv6，确认代理客户端的 DNS 配置中 <code>ipv6: false</code>，或者 TUN 模式同时接管了 IPv6。</p><p>第四步，检查是否有其他 VPN 或代理软件冲突。同时运行两个 VPN&#x2F;代理客户端可能导致 DNS 路由混乱。确保只有一个代理客户端在运行。</p><p>第五步，检查操作系统的 DNS 设置。某些系统更新可能会重置 DNS 设置，将其改回 ISP 的默认 DNS。确认你的系统 DNS 指向代理客户端的本地监听地址（通常是 <code>127.0.0.1</code> 或代理客户端自动设置的地址）。</p><p><strong>Q：手机上也会 DNS 泄漏吗？</strong></p><p>iOS 和 Android 上的代理客户端（如 Shadowrocket、Quantumult X、Clash for Android、sing-box）通常通过系统的 VPN 接口工作——这个接口的工作方式类似于桌面端的 TUN 模式，在系统层面接管所有网络流量，包括 DNS 查询。因此，手机上的 DNS 泄漏风险通常比桌面端低。</p><p>但也有例外。如果你在手机上使用的是简单的 HTTP 代理模式（而非 VPN 模式），DNS 查询仍然会走本地网络，存在泄漏风险。另外，Android 系统从 9.0 开始引入了”私人 DNS”功能（实际上是 DNS over TLS），如果这个功能配置了和代理客户端冲突的 DNS 服务器，可能导致 DNS 查询走了意料之外的路径。</p><p>建议：在手机上确认代理客户端使用的是 VPN 模式（状态栏应该出现 VPN 图标），而不是简单的 HTTP 代理模式。</p><p><strong>Q：DoH 和 Fake-IP 有什么区别？它们解决的是同一个问题吗？</strong></p><p>不是。它们解决的是 DNS 安全的不同层面。</p><p><strong>DoH</strong> 解决的是 DNS 查询的<strong>传输安全</strong>问题。它将 DNS 查询加密，防止中间人（ISP、GFW）读取或篡改查询内容。但 DoH 不改变 DNS 查询发生的位置——查询仍然在本地发起，只是传输过程变成了加密的。</p><p><strong>Fake-IP</strong> 解决的是 DNS 查询的<strong>发生位置</strong>问题。它让需要代理的域名根本不在本地进行真实 DNS 查询——本地只分配一个假 IP 占位，真正的 DNS 查询在远端代理节点完成。</p><p>两者互补而非互斥。推荐的配置是：Fake-IP 模式 + DoH 格式的 nameserver。Fake-IP 确保代理域名不在本地解析；DoH 确保直连域名的 DNS 查询（发往国内 DNS）也是加密的，不被运营商劫持或篡改。</p><p><strong>Q：Wireshark 抓包看到有 DNS 查询，但目标地址是 127.0.0.1，这算泄漏吗？</strong></p><p>不算。发往 <code>127.0.0.1</code>（本地回环地址）的 DNS 查询是应用程序向代理客户端的本地 DNS 监听端口发送的查询请求。这些查询不会离开你的设备，也不会经过任何外部网络。它们会被代理客户端接收并处理——走 Fake-IP 映射或通过配置的 DNS 服务器进行加密查询。</p><p>真正的泄漏是 DNS 查询发往了外部 IP 地址（如你 ISP 的 DNS 服务器地址），而不是本地回环地址。</p>]]></content>
      
      
      <categories>
          
          <category> DNS 专题 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> DNS泄漏 </tag>
            
            <tag> 隐私 </tag>
            
            <tag> TUN </tag>
            
            <tag> Fake-IP </tag>
            
            <tag> 安全 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>ECH（Encrypted Client Hello）：未来能解决问题吗</title>
      <link href="/posts/ech-future/"/>
      <url>/posts/ech-future/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：TLS 握手中的 SNI 字段是明文传输的，GFW 正是利用它来判断你访问的是什么网站。ECH（Encrypted Client Hello）旨在加密整个 Client Hello 的敏感部分，从协议层面消除 SNI 暴露。然而，GFW 已经开始直接封锁带有 ECH 扩展的连接。本文分析 ECH 的工作原理、GFW 的应对手段、ECH 与 Reality 的路线差异，以及 ECH 真正发挥作用所需要的条件。</p></blockquote><h2 id="SNI-暴露问题：TLS-握手的阿喀琉斯之踵"><a href="#SNI-暴露问题：TLS-握手的阿喀琉斯之踵" class="headerlink" title="SNI 暴露问题：TLS 握手的阿喀琉斯之踵"></a>SNI 暴露问题：TLS 握手的阿喀琉斯之踵</h2><p>TLS 协议的设计目标是保护通信内容不被窃听和篡改。在 TLS 1.3 中，握手完成后的所有数据都是加密的，外部观察者无法读取任何应用层内容。但问题出在握手过程本身。</p><p>在 TLS 握手的第一步，客户端向服务器发送 <strong>Client Hello</strong> 消息。这条消息包含了大量连接参数，其中有一个关键字段叫做 <strong>SNI（Server Name Indication）</strong>。SNI 的作用是告诉服务器”我想连接的是哪个域名”，这在同一 IP 上托管多个域名的场景下是必要的——服务器需要根据域名来选择正确的 TLS 证书。</p><p>问题在于：<strong>SNI 字段是以明文发送的</strong>。</p><p>这意味着任何处于网络路径上的中间设备（ISP、防火墙、GFW）都可以直接读取你要访问的域名，即使后续的所有通信内容都是加密的。对于 GFW 来说，这是一个极其方便的审查点：</p><ul><li>不需要解密任何内容，只需要读取握手阶段的明文字段</li><li>可以精准地按域名进行过滤和封锁</li><li>对性能的影响极小，适合大规模部署</li></ul><p>实际上，SNI 过滤已经是 GFW 封锁特定网站的主要手段之一。当你尝试与一个被封锁的域名建立 TLS 连接时，GFW 会在读取到 SNI 后主动发送 RST 包来中断连接。</p><p>这就是整个问题的根源：<strong>TLS 保护了通信内容，却没有保护”你要和谁通信”这个事实</strong>。</p><h2 id="ECH-是什么"><a href="#ECH-是什么" class="headerlink" title="ECH 是什么"></a>ECH 是什么</h2><p><strong>ECH（Encrypted Client Hello）</strong> 是 IETF 正在推进的一项 TLS 扩展标准，编号为 <code>draft-ietf-tls-esni</code>。它的前身是 ESNI（Encrypted SNI），但 ESNI 只加密了 SNI 一个字段，设计上存在局限性。ECH 将加密范围扩大到了整个 Client Hello 的敏感部分，是 ESNI 的全面升级。</p><p>ECH 的核心目标只有一个：<strong>让网络中间设备无法从 TLS 握手中获取连接目标的信息</strong>。</p><p>具体来说，ECH 将原本单一的 Client Hello 拆分成两层：</p><ul><li><strong>外层（Outer Client Hello）</strong>：以明文发送，包含一个”掩护”用的 SNI，通常指向 CDN 的域名</li><li><strong>内层（Inner Client Hello）</strong>：被加密，包含真实的 SNI 和其他敏感握手参数</li></ul><p>这样一来，中间设备只能看到外层的掩护域名，无法得知客户端实际要连接的是哪个网站。</p><h2 id="工作原理：双层-Client-Hello"><a href="#工作原理：双层-Client-Hello" class="headerlink" title="工作原理：双层 Client Hello"></a>工作原理：双层 Client Hello</h2><p>ECH 的运作依赖于一个预先分发的公钥。整个流程如下：</p><h3 id="密钥获取"><a href="#密钥获取" class="headerlink" title="密钥获取"></a>密钥获取</h3><p>客户端在发起 TLS 连接之前，需要通过 <strong>DNS HTTPS 记录</strong>（也叫 SVCB 记录）获取目标域名的 ECH 配置，其中包含服务器的 ECH 公钥。这个公钥用于加密内层 Client Hello。</p><p>例如，查询 <code>example.com</code> 的 DNS HTTPS 记录，可能会返回类似这样的信息：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">example.com.  IN HTTPS 1 . alpn=&quot;h2&quot; ech=&quot;AEX+...&quot;</span><br></pre></td></tr></table></figure><p>其中 <code>ech=</code> 字段就包含了 ECH 的公钥配置。</p><h3 id="握手流程"><a href="#握手流程" class="headerlink" title="握手流程"></a>握手流程</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line">sequenceDiagram</span><br><span class="line">    participant C as 客户端</span><br><span class="line">    participant DNS as DNS 服务器</span><br><span class="line">    participant CDN as CDN / 前端服务器</span><br><span class="line">    participant S as 目标服务器</span><br><span class="line"></span><br><span class="line">    C-&gt;&gt;DNS: 查询 example.com 的 HTTPS 记录</span><br><span class="line">    DNS--&gt;&gt;C: 返回 ECH 公钥配置</span><br><span class="line"></span><br><span class="line">    Note over C: 用 ECH 公钥加密&lt;br/&gt;Inner Client Hello</span><br><span class="line"></span><br><span class="line">    C-&gt;&gt;CDN: Outer Client Hello&lt;br/&gt;SNI = cdn.example.net（掩护）&lt;br/&gt;+ 加密的 Inner Client Hello&lt;br/&gt;（真实 SNI = example.com）</span><br><span class="line"></span><br><span class="line">    Note over CDN: 解密 Inner Client Hello&lt;br/&gt;获取真实 SNI</span><br><span class="line"></span><br><span class="line">    CDN-&gt;&gt;S: 转发连接到目标服务器</span><br><span class="line">    S--&gt;&gt;C: Server Hello + 完成握手</span><br><span class="line"></span><br><span class="line">    Note over C,S: 后续通信完全加密</span><br></pre></td></tr></table></figure><p>以上流程的关键点：</p><ol><li><strong>外层 SNI 是掩护</strong>：中间设备看到的 SNI 是 CDN 的域名（如 <code>cdn.example.net</code>），而不是真实的目标域名</li><li><strong>内层被加密</strong>：真实的 SNI 和其他敏感参数被 ECH 公钥加密，只有前端服务器能解密</li><li><strong>依赖 DNS</strong>：ECH 公钥通过 DNS HTTPS 记录分发，因此也需要加密 DNS（如 DoH&#x2F;DoT）来防止公钥被篡改或窃取</li></ol><h2 id="浏览器支持"><a href="#浏览器支持" class="headerlink" title="浏览器支持"></a>浏览器支持</h2><p>截至目前，主流浏览器对 ECH 的支持情况如下：</p><table><thead><tr><th>浏览器</th><th>ECH 支持状态</th></tr></thead><tbody><tr><td>Firefox</td><td>自 Firefox 118 起默认启用 ECH（需要启用 DoH）</td></tr><tr><td>Chrome</td><td>自 Chrome 117 起支持 ECH（需要启用安全 DNS）</td></tr><tr><td>Safari</td><td>部分版本中开始实验性支持</td></tr><tr><td>Edge</td><td>跟随 Chromium 内核，支持与 Chrome 基本一致</td></tr></tbody></table><p>需要注意的是，浏览器启用 ECH 有一个<strong>前提条件</strong>：必须同时使用加密 DNS（DoH 或 DoT）。这很好理解——如果 DNS 查询本身是明文的，攻击者可以直接从 DNS 响应中获取 ECH 配置，或者篡改 DNS 返回结果来移除 ECH 公钥。</p><p>此外，服务端也需要支持 ECH。目前 <strong>Cloudflare</strong> 是最积极的推动者，已经为其平台上托管的所有域名默认启用了 ECH 支持。</p><h2 id="GFW-的应对：直接封锁-ECH"><a href="#GFW-的应对：直接封锁-ECH" class="headerlink" title="GFW 的应对：直接封锁 ECH"></a>GFW 的应对：直接封锁 ECH</h2><p>既然 ECH 的目的是隐藏 SNI，GFW 的对策非常直接——<strong>检测到 ECH 扩展，就封锁整个连接</strong>。</p><p>ECH 在 TLS 协议中以一个特定的 <strong>TLS 扩展</strong>形式存在，扩展类型编号为 <code>0xfe0d</code>（十进制 65037）。这个扩展出现在 Client Hello 的扩展列表中，而扩展列表本身是明文的。这意味着：</p><ul><li>GFW 不需要解密任何内容</li><li>只需要检查 Client Hello 的扩展列表中是否包含 <code>0xfe0d</code> 类型的扩展</li><li>一旦检测到，直接丢弃数据包或发送 RST 中断连接</li></ul><p>实测表明，GFW 确实在实施这种封锁策略。使用启用了 ECH 的浏览器访问 Cloudflare 托管的网站时，如果 DNS 返回了 ECH 配置，浏览器会尝试使用 ECH 握手，而这些连接会被 GFW 阻断。浏览器在 ECH 握手失败后通常会回退到普通的 TLS 握手（不带 ECH），此时连接可以成功建立，但 SNI 又暴露了。</p><h2 id="为什么-GFW-能封-ECH"><a href="#为什么-GFW-能封-ECH" class="headerlink" title="为什么 GFW 能封 ECH"></a>为什么 GFW 能封 ECH</h2><p>有人可能会问：ECH 不是把内层加密了吗？为什么 GFW 还是能检测和封锁？</p><p>原因在于 ECH 有两个无法隐藏的特征：</p><h3 id="1-ECH-扩展标识本身是明文的"><a href="#1-ECH-扩展标识本身是明文的" class="headerlink" title="1. ECH 扩展标识本身是明文的"></a>1. ECH 扩展标识本身是明文的</h3><p>TLS Client Hello 的格式是固定的：先是协议版本、随机数、加密套件列表，然后是扩展列表。每个扩展都有一个类型编号和长度，这些元数据是明文的。ECH 扩展的类型编号 <code>0xfe0d</code> 就像一面旗帜，告诉所有中间设备”这个连接正在使用 ECH”。</p><p>ECH 加密的是扩展的<strong>内容</strong>（即内层 Client Hello），而不是扩展的<strong>存在性</strong>。</p><h3 id="2-外层与内层-SNI-的差异"><a href="#2-外层与内层-SNI-的差异" class="headerlink" title="2. 外层与内层 SNI 的差异"></a>2. 外层与内层 SNI 的差异</h3><p>即使不看扩展标识，外层 Client Hello 的 SNI 指向 CDN 域名本身就是一个可检测的特征。GFW 可以通过以下方式进行关联分析：</p><ul><li>外层 SNI 指向的 CDN 域名通常是少数几个固定的值</li><li>大量不同用户的连接都使用相同的外层 SNI，但来自不同的 IP 地址</li><li>这种流量模式与正常的 CDN 访问有可辨别的差异</li></ul><p>总结一下：<strong>ECH 加密了 SNI 的内容，但无法隐藏自己正在使用 ECH 的事实</strong>。在当前阶段，使用 ECH 本身就是一个可被检测和封锁的特征。</p><h2 id="ECH-vs-Reality：两条不同的技术路线"><a href="#ECH-vs-Reality：两条不同的技术路线" class="headerlink" title="ECH vs Reality：两条不同的技术路线"></a>ECH vs Reality：两条不同的技术路线</h2><p>ECH 和 VLESS+Reality 都在尝试解决 SNI 暴露的问题，但思路完全不同。</p><table><thead><tr><th>对比维度</th><th>ECH</th><th>Reality</th></tr></thead><tbody><tr><td>方法论</td><td>正面解决：加密 SNI</td><td>侧面绕过：借用合法网站的证书和 SNI</td></tr><tr><td>标准化</td><td>IETF 标准草案，主流浏览器支持</td><td>非标准，代理社区自研</td></tr><tr><td>是否依赖 CDN</td><td>是，需要 CDN 支持 ECH</td><td>否，独立运行</td></tr><tr><td>GFW 可检测性</td><td>高：ECH 扩展明确可识别</td><td>低：流量与正常 HTTPS 几乎无法区分</td></tr><tr><td>适用场景</td><td>通用的隐私保护</td><td>专门的审查规避</td></tr><tr><td>部署方式</td><td>浏览器 + 服务端 + 加密 DNS</td><td>代理客户端 + 代理服务端</td></tr></tbody></table><p><strong>ECH 是”正面突破”</strong>：它试图通过加密来从根本上消除 SNI 暴露，是一种协议层面的解决方案。它的目标不仅仅是绕过审查，而是保护所有用户的连接隐私。</p><p><strong>Reality 是”侧面迂回”</strong>：它不依赖 ECH，而是让代理服务器伪装成一个完全合法的 HTTPS 网站。代理连接的 SNI 填写的就是那个合法网站的域名，TLS 握手中使用的也是那个网站的真实证书。GFW 看到的是一个完全正常的 HTTPS 连接，没有任何异常特征。</p><p>在当前 GFW 已经封锁 ECH 的情况下，Reality 的实用性显然更强。但从长远来看，ECH 如果能普及，将从根本上改变格局。</p><h2 id="未来展望：当-ECH-变成默认行为"><a href="#未来展望：当-ECH-变成默认行为" class="headerlink" title="未来展望：当 ECH 变成默认行为"></a>未来展望：当 ECH 变成默认行为</h2><p>ECH 目前面临的困境是一个典型的<strong>先有鸡还是先有蛋</strong>的问题：</p><ul><li>ECH 用户太少 → GFW 可以直接封锁 ECH 而不影响正常流量</li><li>GFW 封锁 ECH → 更少的用户能使用 ECH</li><li>更少的用户使用 ECH → ECH 推广更加困难</li></ul><p>但这个僵局有一个理论上的破解点：<strong>如果 ECH 成为 TLS 标准的默认行为</strong>。</p><p>设想一个未来场景：所有主流浏览器默认启用 ECH，所有主流 CDN 和网站服务器默认支持 ECH，所有 TLS 连接都携带 ECH 扩展。在这种情况下：</p><ul><li><strong>封锁 ECH &#x3D; 封锁所有 HTTPS 连接</strong></li><li>这将导致整个互联网的 HTTPS 通信中断</li><li>GFW 无法承受这样的代价</li></ul><p>这就像 HTTPS 本身的普及历程。在早期，HTTPS 只有银行和电商网站使用，如果当时封锁 HTTPS，影响范围有限。但当 HTTPS 成为所有网站的默认选项后，封锁 HTTPS 就等于封锁整个互联网——这是任何审查系统都无法接受的代价。</p><p>ECH 需要走同样的路。从”少数网站支持的可选功能”变成”所有网站默认启用的标准行为”。</p><h3 id="但这需要很长时间"><a href="#但这需要很长时间" class="headerlink" title="但这需要很长时间"></a>但这需要很长时间</h3><p>ECH 的全面普及面临多个现实障碍：</p><ol><li><strong>标准尚未最终确定</strong>：<code>draft-ietf-tls-esni</code> 仍然是草案状态，虽然已经接近完成，但正式成为 RFC 还需要时间</li><li><strong>服务端部署缓慢</strong>：除了 Cloudflare，其他 CDN 和服务提供商对 ECH 的支持进度参差不齐</li><li><strong>加密 DNS 是前提</strong>：ECH 需要 DoH&#x2F;DoT 配合才有意义，而加密 DNS 本身在很多地区也面临限制</li><li><strong>企业网络阻力</strong>：很多企业依赖 SNI 来进行流量审查和安全监控，它们可能不愿意放弃这个能力</li><li><strong>兼容性问题</strong>：一些老旧的中间设备（防火墙、负载均衡器）可能无法正确处理 ECH 扩展，导致连接失败</li></ol><p>乐观估计，ECH 成为 TLS 生态的默认行为可能需要<strong>数年时间</strong>。在这段过渡期内，ECH 对于审查规避的实际作用有限。</p><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="ECH-和-ESNI-有什么区别？"><a href="#ECH-和-ESNI-有什么区别？" class="headerlink" title="ECH 和 ESNI 有什么区别？"></a>ECH 和 ESNI 有什么区别？</h3><p>ESNI（Encrypted SNI）是 ECH 的前身，只加密了 Client Hello 中的 SNI 字段。ECH 是全面升级，加密了整个 Client Hello 的内层，包括 SNI、ALPN 等所有敏感参数。ESNI 已经被废弃，由 ECH 取代。</p><h3 id="为什么-ECH-需要加密-DNS？"><a href="#为什么-ECH-需要加密-DNS？" class="headerlink" title="为什么 ECH 需要加密 DNS？"></a>为什么 ECH 需要加密 DNS？</h3><p>ECH 的公钥通过 DNS HTTPS 记录分发。如果 DNS 查询是明文的，GFW 可以：(1) 读取 DNS 响应获知你要访问的域名；(2) 篡改 DNS 响应移除 ECH 公钥，使客户端无法使用 ECH。因此必须配合 DoH 或 DoT 使用。</p><h3 id="现在使用-ECH-能绕过-GFW-吗？"><a href="#现在使用-ECH-能绕过-GFW-吗？" class="headerlink" title="现在使用 ECH 能绕过 GFW 吗？"></a>现在使用 ECH 能绕过 GFW 吗？</h3><p>不能。GFW 已经在检测并封锁带有 ECH 扩展的 TLS 连接。使用 ECH 不但不能绕过审查，反而会因为连接被阻断而导致访问失败。浏览器通常会在 ECH 失败后回退到普通 TLS，此时 SNI 仍然是暴露的。</p><h3 id="ECH-对日常隐私有帮助吗？"><a href="#ECH-对日常隐私有帮助吗？" class="headerlink" title="ECH 对日常隐私有帮助吗？"></a>ECH 对日常隐私有帮助吗？</h3><p>在不存在主动审查封锁的网络环境中，ECH 确实能有效防止 ISP 和其他中间设备通过 SNI 监控你的访问目标。对于关注隐私的用户来说，ECH + 加密 DNS 是有意义的组合。</p><h3 id="Reality-协议未来会被-ECH-取代吗？"><a href="#Reality-协议未来会被-ECH-取代吗？" class="headerlink" title="Reality 协议未来会被 ECH 取代吗？"></a>Reality 协议未来会被 ECH 取代吗？</h3><p>短期内不会。两者解决的问题有交集但不完全相同。ECH 是通用的隐私保护标准，Reality 是专门针对审查规避设计的方案。即使 ECH 完全普及，代理协议仍然有其存在价值，只是在对抗 SNI 暴露这个具体问题上，ECH 可能会让 Reality 的这一优势变得不那么关键。</p><h2 id="延伸阅读"><a href="#延伸阅读" class="headerlink" title="延伸阅读"></a>延伸阅读</h2><ul><li><a href="https://datatracker.ietf.org/doc/draft-ietf-tls-esni/">ECH 标准草案（draft-ietf-tls-esni）</a></li><li><a href="https://blog.cloudflare.com/encrypted-client-hello/">Cloudflare ECH 介绍博客</a></li><li><a href="https://github.com/XTLS/REALITY">REALITY 项目</a></li></ul>]]></content>
      
      
      <categories>
          
          <category> GFW 与审查 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> TLS </tag>
            
            <tag> ECH </tag>
            
            <tag> 加密 </tag>
            
            <tag> GFW </tag>
            
            <tag> SNI </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>DoH / DoT / DoQ：加密 DNS 协议选择</title>
      <link href="/posts/encrypted-dns/"/>
      <url>/posts/encrypted-dns/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>: 传统 DNS 查询以明文传输，容易被监听和篡改（DNS 污染）。加密 DNS 协议通过加密 DNS 查询来保护隐私和防止篡改。主流的加密 DNS 协议包括 DNS over HTTPS (DoH)、DNS over TLS (DoT) 和 DNS over QUIC (DoQ)。本文对比三者的原理、优劣和在代理场景中的选择。</p></blockquote><hr><h2 id="为什么需要加密-DNS"><a href="#为什么需要加密-DNS" class="headerlink" title="为什么需要加密 DNS"></a>为什么需要加密 DNS</h2><p>传统 DNS 使用 UDP 协议的 53 端口，查询和响应内容完全明文，没有任何加密或完整性校验。这意味着网络路径上的任何节点都能看到你在查什么域名、得到了什么结果，也能随意篡改返回的结果。</p><p>具体来说，明文 DNS 面临以下威胁：</p><p><strong>窃听。</strong> 你的 ISP（网络运营商）可以完整记录你的所有 DNS 查询。你访问了哪些网站、什么时间访问、访问了多少次——DNS 日志里一清二楚。部分运营商会利用这些数据进行广告投放或用户画像分析。在公共 Wi-Fi 环境下，同一网络内的任何人都可以抓包看到你的 DNS 请求。</p><p><strong>篡改（DNS 污染）。</strong> GFW 对明文 DNS 的利用是最直接的：当你查询被封锁域名的 IP 地址时，GFW 会抢先返回一个伪造的响应，把域名指向错误的 IP。这就是 DNS 污染。由于传统 DNS 没有验证机制，你的设备无法分辨收到的响应是来自真正的 DNS 服务器还是 GFW 的注入。结果就是，即使你的代理完全正常，DNS 污染也会在更前面的环节把连接搞坏。</p><p><strong>中间人攻击。</strong> 在没有加密的情况下，网络中间的任何设备（路由器、交换机、透明代理）都可以拦截 DNS 请求、修改响应内容，或者把请求重定向到另一个 DNS 服务器。用户对此完全无感知。</p><p>加密 DNS 协议解决两个核心问题：</p><ol><li><strong>隐私（Privacy）</strong>——加密传输使第三方无法看到你的 DNS 查询内容</li><li><strong>完整性（Integrity）</strong>——加密和认证机制使第三方无法篡改 DNS 响应</li></ol><p>目前主流的加密 DNS 协议有三种：DoH、DoT 和 DoQ。它们的目标相同，但实现方式不同，各有优劣。</p><hr><h2 id="DNS-over-HTTPS-DoH"><a href="#DNS-over-HTTPS-DoH" class="headerlink" title="DNS over HTTPS (DoH)"></a>DNS over HTTPS (DoH)</h2><h3 id="原理"><a href="#原理" class="headerlink" title="原理"></a>原理</h3><p>DoH 将 DNS 查询封装在标准的 HTTPS 请求中。DNS 客户端向 DoH 服务器发送一个 HTTPS 请求（通常是 POST 或 GET），请求体中包含 DNS 查询的二进制数据（wire format），服务器返回的 HTTPS 响应体中包含 DNS 应答。</p><p>整个过程跑在标准的 HTTPS 协议栈上：TCP 连接 → TLS 握手 → HTTP&#x2F;2 或 HTTP&#x2F;3 传输。DNS 查询在外部观察者看来就是一个普通的 HTTPS 请求，与你访问网页时发送的 HTTPS 请求在形式上没有区别。</p><p>DoH 使用 TCP 端口 443——这与所有 HTTPS 网站使用的端口完全相同。</p><h3 id="常见-DoH-地址格式"><a href="#常见-DoH-地址格式" class="headerlink" title="常见 DoH 地址格式"></a>常见 DoH 地址格式</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">https://doh.pub/dns-query             # 腾讯 DNSPod</span><br><span class="line">https://dns.alidns.com/dns-query      # 阿里 DNS</span><br><span class="line">https://cloudflare-dns.com/dns-query  # Cloudflare</span><br><span class="line">https://dns.google/dns-query          # Google</span><br><span class="line">https://doh.360.cn/dns-query          # 360 DNS</span><br></pre></td></tr></table></figure><h3 id="优势"><a href="#优势" class="headerlink" title="优势"></a>优势</h3><p><strong>极难封锁。</strong> DoH 运行在 443 端口上，这是全球 HTTPS 流量使用的标准端口。封锁 443 端口等于封锁整个互联网，任何防火墙都不会这么做。而且 DoH 流量在网络层面上与普通 HTTPS 请求无法区分——它们使用相同的端口、相同的 TLS 协议、相同的 HTTP 协议。要精确识别并阻断 DoH 流量，需要进行深度包检测（DPI）来分析连接的目标域名（通过 SNI 或 IP 地址），这比封锁一个专用端口的成本高得多。</p><p><strong>客户端支持广泛。</strong> 几乎所有主流代理客户端（Clash、sing-box、V2Ray、Shadowrocket、Surge、Quantumult X）都支持 DoH。主流浏览器（Chrome、Firefox、Edge、Safari）内置了 DoH 支持。Windows、macOS、iOS、Android 的操作系统层面也已支持 DoH。这意味着无论你用什么设备、什么软件，DoH 都能用。</p><p><strong>可穿透 HTTP 代理。</strong> 在某些受限网络环境中（如企业网络只允许通过 HTTP 代理上网），DoH 可以通过 HTTP 代理正常工作，因为它本身就是 HTTP 协议。</p><p><strong>连接复用。</strong> DoH 基于 HTTP&#x2F;2，支持在一个 TCP 连接上多路复用多个 DNS 查询。建立连接后，后续查询不需要重新握手，延迟显著降低。</p><h3 id="劣势"><a href="#劣势" class="headerlink" title="劣势"></a>劣势</h3><p><strong>首次查询延迟较高。</strong> 第一次连接 DoH 服务器时，需要完成 TCP 三次握手 + TLS 握手 + HTTP 协商，总共可能需要 2-3 个 RTT。相比传统 DNS 的单次 UDP 往返，首次查询确实更慢。不过，连接建立后会保持，后续查询延迟与传统 DNS 基本持平。</p><p><strong>HTTP 协议开销。</strong> 每个 DNS 查询都需要包装成 HTTP 请求，增加了 HTTP 头部等额外数据。对于单次查询来说，数据量的增加是可以忽略的，但相比 DoT 直接在 TLS 上传输 DNS 数据，DoH 确实多了一层 HTTP 的封装。</p><p><strong>DNS 服务器可见客户端 IP。</strong> DoH 服务器能看到你的真实源 IP 地址。虽然加密保护了查询内容不被第三方看到，但 DNS 服务器本身仍然知道是谁在查询什么域名。这是所有直连式加密 DNS 协议的共同局限，不是 DoH 特有的问题。</p><p><img src="/images/inline/doh-diagram.jpg" alt="DNS over HTTPS 工作原理"><br><em>图片来源：<a href="https://heimdalsecurity.com/">Heimdal Security</a></em></p><hr><h2 id="DNS-over-TLS-DoT"><a href="#DNS-over-TLS-DoT" class="headerlink" title="DNS over TLS (DoT)"></a>DNS over TLS (DoT)</h2><h3 id="原理-1"><a href="#原理-1" class="headerlink" title="原理"></a>原理</h3><p>DoT 是最早标准化的加密 DNS 协议（RFC 7858，2016 年发布）。它的思路比 DoH 更直接：在 DNS 客户端和服务器之间建立一条 TLS 加密隧道，DNS 查询直接在这条加密隧道中传输，不经过 HTTP 层。</p><p>DoT 使用专用的 TCP 端口 853。客户端连接到服务器的 853 端口，完成 TLS 握手后，在加密通道中发送和接收标准格式的 DNS 消息。</p><h3 id="常见-DoT-地址格式"><a href="#常见-DoT-地址格式" class="headerlink" title="常见 DoT 地址格式"></a>常见 DoT 地址格式</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">tls://dns.alidns.com:853    # 阿里 DNS</span><br><span class="line">tls://1.1.1.1:853           # Cloudflare</span><br><span class="line">tls://8.8.8.8:853           # Google</span><br><span class="line">tls://dot.pub:853           # 腾讯 DNSPod</span><br></pre></td></tr></table></figure><h3 id="优势-1"><a href="#优势-1" class="headerlink" title="优势"></a>优势</h3><p><strong>协议开销更低。</strong> DoT 直接在 TLS 上传输 DNS 消息，不需要 HTTP 层的封装（HTTP 头部、分帧等）。每次查询的数据量比 DoH 略小。</p><p><strong>纯 DNS 解析速度略快。</strong> 在不考虑封锁的理想环境下，DoT 由于少了 HTTP 层的处理，单次查询的延迟比 DoH 略低（通常只差几毫秒，实际体感不明显）。</p><p><strong>协议设计简洁。</strong> DoT 是专门为 DNS 加密设计的，不依赖复杂的 HTTP 协议栈。实现和调试相对简单。</p><h3 id="劣势-1"><a href="#劣势-1" class="headerlink" title="劣势"></a>劣势</h3><p><strong>极易被封锁——这是 DoT 最致命的缺点。</strong> DoT 使用专用端口 853，这个端口除了加密 DNS 没有其他用途。防火墙只需要一条规则——阻断所有目标端口为 853 的 TCP 连接——就能彻底封杀 DoT。不需要深度包检测，不需要分析流量内容，单纯的端口封锁就够了。</p><p><strong>GFW 已经在封锁 853 端口。</strong> 在中国大陆的网络环境中，连接境外服务器的 853 端口经常不通或不稳定。即使连接国内 DoT 服务器，也可能因为运营商层面的策略而不可靠。这意味着在中国实际使用中，DoT 的可用性远不如 DoH。</p><p><strong>客户端支持不如 DoH 广泛。</strong> 虽然大部分代理客户端支持 DoT，但主流浏览器对 DoT 的原生支持很少。在需要系统级 DNS 加密的场景下，DoT 的可选方案比 DoH 少。</p><p><strong>一旦被识别就是靶子。</strong> 853 端口的流量100%是加密 DNS，这个端口本身就是一个信号。网络管理员或 ISP 看到你在连接某个 IP 的 853 端口，立刻就知道你在使用加密 DNS。这在某些环境下可能引起额外注意。</p><hr><h2 id="DNS-over-QUIC-DoQ"><a href="#DNS-over-QUIC-DoQ" class="headerlink" title="DNS over QUIC (DoQ)"></a>DNS over QUIC (DoQ)</h2><h3 id="原理-2"><a href="#原理-2" class="headerlink" title="原理"></a>原理</h3><p>DoQ 是最新的加密 DNS 协议（<a href="https://datatracker.ietf.org/doc/rfc9250/">RFC 9250</a>，2022 年发布）。它基于 QUIC 传输协议，使用 UDP 传输，默认端口为 853（与 DoT 相同的端口号，但因为 QUIC 跑在 UDP 上，所以不会冲突）。</p><p>QUIC 是 Google 开发、IETF 标准化的下一代传输协议，已经被 HTTP&#x2F;3 采用。QUIC 将传输层和加密层合二为一，在 UDP 上实现了类似 TCP + TLS 的可靠传输和加密，同时还有一些独特优势。</p><h3 id="常见-DoQ-地址格式"><a href="#常见-DoQ-地址格式" class="headerlink" title="常见 DoQ 地址格式"></a>常见 DoQ 地址格式</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">quic://dns.adguard.com:853     # AdGuard</span><br><span class="line">quic://unfiltered.adguard-dns.com:853</span><br></pre></td></tr></table></figure><h3 id="优势-2"><a href="#优势-2" class="headerlink" title="优势"></a>优势</h3><p><strong>0-RTT 连接建立。</strong> QUIC 支持 0-RTT（零往返时间）连接恢复：如果客户端之前连接过某个 DoQ 服务器，再次连接时可以在第一个数据包中就携带 DNS 查询，完全省去握手延迟。这是三种加密 DNS 协议中理论延迟最低的。</p><p><strong>多路复用无队头阻塞。</strong> QUIC 的多路复用是在传输层实现的，不同 DNS 查询在不同的 QUIC stream 上独立传输。一个查询的丢包或延迟不会影响其他查询。而 DoH 和 DoT 基于 TCP，如果一个数据包丢失，后续所有数据包都要等待重传（队头阻塞）。</p><p><strong>连接迁移。</strong> QUIC 使用连接 ID 而非 IP+端口 来标识连接。当设备网络切换时（比如从 Wi-Fi 切换到 4G），QUIC 连接可以无缝迁移而不需要重新握手。</p><h3 id="劣势-2"><a href="#劣势-2" class="headerlink" title="劣势"></a>劣势</h3><p><strong>服务器支持极为有限。</strong> 截至 2026 年，提供 DoQ 服务的 DNS 服务器屈指可数。国内几乎没有公共 DoQ 服务器，国际上也只有 AdGuard 等少数几家提供。这直接限制了 DoQ 的实用性。</p><p><strong>客户端支持有限。</strong> 虽然 AdGuard、部分版本的 sing-box 等支持 DoQ，但主流代理客户端（如 Clash Meta&#x2F;mihomo）对 DoQ 的支持不够成熟或尚未实现。浏览器和操作系统层面更是基本没有原生 DoQ 支持。</p><p><strong>UDP 在中国可能受限。</strong> 部分运营商和网络环境对 UDP 流量有限速或封锁策略。QUIC 流量（包括 DoQ）在某些网络下可能表现不稳定，甚至完全不可用。这与 DoT 被封锁 853 端口是不同的问题，但结果类似——在中国不够可靠。</p><p><strong>协议太新，生态不成熟。</strong> DoQ 标准化时间很短，整个生态还在早期阶段。遇到问题时，可参考的文档、社区讨论、排查经验都比 DoH 和 DoT 少得多。在生产环境中使用需要承担更高的不确定性。</p><hr><h2 id="三种协议对比"><a href="#三种协议对比" class="headerlink" title="三种协议对比"></a>三种协议对比</h2><table><thead><tr><th>特性</th><th>DoH</th><th>DoT</th><th>DoQ</th></tr></thead><tbody><tr><td>标准</td><td>RFC 8484 (2018)</td><td>RFC 7858 (2016)</td><td>RFC 9250 (2022)</td></tr><tr><td>传输层</td><td>HTTPS (TCP 443)</td><td>TLS (TCP 853)</td><td>QUIC (UDP 853)</td></tr><tr><td>抗封锁能力</td><td>强</td><td>弱</td><td>弱</td></tr><tr><td>首次连接延迟</td><td>较高（2-3 RTT）</td><td>中等（2 RTT）</td><td>低（1 RTT，恢复连接 0-RTT）</td></tr><tr><td>协议开销</td><td>中等（HTTP 层）</td><td>较低</td><td>较低</td></tr><tr><td>部署成熟度</td><td>高</td><td>中</td><td>低</td></tr><tr><td>客户端支持</td><td>广泛</td><td>较广</td><td>有限</td></tr><tr><td>可用服务器数量</td><td>很多</td><td>较多</td><td>很少</td></tr><tr><td>在中国的可用性</td><td>好</td><td>差（端口常被封）</td><td>差（UDP 限制）</td></tr><tr><td>多路复用</td><td>有（HTTP&#x2F;2）</td><td>无原生支持</td><td>有（QUIC stream）</td></tr><tr><td>队头阻塞</td><td>存在（TCP 层）</td><td>存在（TCP 层）</td><td>不存在</td></tr></tbody></table><p>综合来看，DoH 是目前在中国网络环境下唯一具有实际可用性的加密 DNS 协议。DoT 因为端口封锁在中国基本不可用，DoQ 因为生态不成熟和 UDP 限制也不推荐在生产环境使用。</p><hr><h2 id="在代理场景中的选择"><a href="#在代理场景中的选择" class="headerlink" title="在代理场景中的选择"></a>在代理场景中的选择</h2><h3 id="推荐方案：国内-DoH-作为-nameserver"><a href="#推荐方案：国内-DoH-作为-nameserver" class="headerlink" title="推荐方案：国内 DoH 作为 nameserver"></a>推荐方案：国内 DoH 作为 nameserver</h3><p>在代理客户端中，推荐使用国内 DoH 作为 nameserver：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">dns:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">enhanced-mode:</span> <span class="string">fake-ip</span></span><br><span class="line">  <span class="attr">nameserver:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">https://doh.pub/dns-query</span>         <span class="comment"># 腾讯 DNSPod DoH</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">https://dns.alidns.com/dns-query</span>  <span class="comment"># 阿里云 DoH</span></span><br></pre></td></tr></table></figure><p>这个配置只需要两行就够了。不需要配置 fallback，不需要配置 DoT，不需要配置国际 DNS。</p><h3 id="为什么推荐-DoH"><a href="#为什么推荐-DoH" class="headerlink" title="为什么推荐 DoH"></a>为什么推荐 DoH</h3><p><strong>可靠性第一。</strong> 443 端口不会被封锁，DoH 流量与正常 HTTPS 不可区分。在中国任何网络环境下，DoH 都能稳定工作。代理客户端的 DNS 需要 7x24 可用——如果 DNS 不通，整个代理就废了。可靠性是选择加密 DNS 协议最重要的标准，没有之一。</p><p><strong>国内 DoH 服务器延迟极低。</strong> 腾讯和阿里的 DoH 服务器在国内有大量节点，从中国大陆连接延迟通常在 10-30ms 以内。连接建立后复用连接，后续查询延迟更低。对于 Fake-IP 模式下只需要解析国内直连域名的场景，国内 DoH 完全够用。</p><p><strong>不需要国际 DoH。</strong> 在 Fake-IP 模式下，走代理的域名根本不在本地解析——它们由远端代理节点负责。本地 DNS 只解析直连域名（基本全是国内域名），所以国内 DoH 就够了。配置 Cloudflare 或 Google 的 DoH 不仅多余，反而因为需要出境连接而增加延迟和不确定性。</p><p><strong>配置最简单。</strong> 不需要纠结 DoT 端口通不通、DoQ 客户端支不支持。两个国内 DoH 地址，配完收工。</p><h3 id="为什么不推荐-DoT"><a href="#为什么不推荐-DoT" class="headerlink" title="为什么不推荐 DoT"></a>为什么不推荐 DoT</h3><p>在中国代理场景下，DoT 没有任何优于 DoH 的地方：</p><ul><li><strong>端口 853 被封锁的风险太高。</strong> GFW 和部分运营商已经对 853 端口实施了不同程度的限制。你的 DoT 今天能用，不代表明天还能用。一旦端口被封，你的整个 DNS 解析就断了。</li><li><strong>“延迟略低”的优势可以忽略。</strong> DoT 比 DoH 省去了 HTTP 层，理论延迟低几毫秒。但在实际使用中，这几毫秒的差距完全感知不到。而 DoT 因为端口问题带来的可用性风险，远超这点延迟优势。</li><li><strong>在代理场景中没有额外好处。</strong> 代理客户端只需要一个能用的 DNS 来解析直连域名。DoH 完全能胜任，不需要为了理论上微不足道的性能差异而承担可用性风险。</li></ul><h3 id="为什么不推荐-DoQ（目前）"><a href="#为什么不推荐-DoQ（目前）" class="headerlink" title="为什么不推荐 DoQ（目前）"></a>为什么不推荐 DoQ（目前）</h3><p>DoQ 的技术设计确实先进，但截至 2026 年，还不适合在代理场景中作为主力 DNS 使用：</p><ul><li><strong>可用服务器太少。</strong> 国内没有公共 DoQ 服务器，国际上只有 AdGuard 等少数几家。没有国内服务器意味着延迟高、连接不稳定。</li><li><strong>客户端支持不成熟。</strong> 主流代理客户端对 DoQ 的支持参差不齐，有些根本不支持，有些虽然支持但实现不够稳定。</li><li><strong>UDP 在中国受限。</strong> 部分运营商对 UDP 有 QoS 限制甚至丢包，这直接影响 QUIC 协议的可靠性。</li><li><strong>未来可期。</strong> 随着 QUIC&#x2F;HTTP&#x2F;3 的普及，DoQ 的生态会逐步成熟。等到国内有稳定的 DoQ 服务器、主流客户端完善了 DoQ 支持，可以重新评估。但现在不是换到 DoQ 的时候。</li></ul><h3 id="注意事项"><a href="#注意事项" class="headerlink" title="注意事项"></a>注意事项</h3><p><strong>Fake-IP 模式下，nameserver 只解析直连域名。</strong> 走代理的域名由远端节点解析，本地 DNS 不参与。所以 nameserver 里只需要配置国内 DNS，不需要配置国际 DNS。</p><p><strong>不需要配置 fallback。</strong> 在 Fake-IP 模式下，不存在”国内 DNS 被污染导致走错规则”的问题。路由决策基于域名而非 IP，DNS 污染影响不了分流准确性。fallback 是 Redir-Host 时代的产物，在 Fake-IP + DoH 的架构下没有意义。</p><p><strong>浏览器内置 DoH 可能冲突。</strong> Chrome、Firefox 等浏览器有自己的 DoH 设置。在 TUN 模式下，代理客户端会接管所有 DNS 请求，浏览器的 DoH 设置不会生效，不冲突。但在系统代理模式下，浏览器可能绕过代理客户端的 DNS 直接使用自己的 DoH，导致解析结果与预期不符。建议在使用代理客户端时关闭浏览器内置的 DoH 功能，让代理客户端统一处理。</p><hr><h2 id="常用-DoH-服务器"><a href="#常用-DoH-服务器" class="headerlink" title="常用 DoH 服务器"></a>常用 DoH 服务器</h2><h3 id="国内（推荐用于-nameserver）"><a href="#国内（推荐用于-nameserver）" class="headerlink" title="国内（推荐用于 nameserver）"></a>国内（推荐用于 nameserver）</h3><table><thead><tr><th>服务商</th><th>DoH 地址</th><th>说明</th></tr></thead><tbody><tr><td><a href="https://www.dnspod.cn/">腾讯 DNSPod</a></td><td><code>https://doh.pub/dns-query</code></td><td>推荐，稳定快速，国内节点多</td></tr><tr><td><a href="https://alidns.com/">阿里云 DNS</a></td><td><code>https://dns.alidns.com/dns-query</code></td><td>推荐，覆盖广，延迟低</td></tr><tr><td>360 DNS</td><td><code>https://doh.360.cn/dns-query</code></td><td>备选，覆盖一般</td></tr></tbody></table><h3 id="国际（通过代理访问，一般不需要配置）"><a href="#国际（通过代理访问，一般不需要配置）" class="headerlink" title="国际（通过代理访问，一般不需要配置）"></a>国际（通过代理访问，一般不需要配置）</h3><table><thead><tr><th>服务商</th><th>DoH 地址</th><th>说明</th></tr></thead><tbody><tr><td><a href="https://developers.cloudflare.com/1.1.1.1/">Cloudflare</a></td><td><code>https://cloudflare-dns.com/dns-query</code></td><td>全球最快之一</td></tr><tr><td>Google</td><td><code>https://dns.google/dns-query</code></td><td>知名度最高</td></tr><tr><td>Quad9</td><td><code>https://dns.quad9.net/dns-query</code></td><td>安全优先，过滤恶意域名</td></tr></tbody></table><p>在 Fake-IP 代理架构下，国际 DoH 服务器无需手动配置——代理节点在境外解析时会自动使用当地的 DNS。</p><hr><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><p><strong>Q：普通用户需要手动配置加密 DNS 吗？</strong></p><p>如果你已经在使用代理客户端并且配置了 Fake-IP 模式 + 国内 DoH 作为 nameserver，你的 DNS 隐私和安全已经得到了充分保护。直连域名通过加密 DoH 解析，代理域名在远端解析，本地根本不产生明文 DNS 查询。不需要再额外在系统层面或浏览器层面配置加密 DNS。</p><p><strong>Q：浏览器的 DoH 和代理客户端的 DNS 会冲突吗？</strong></p><p>取决于代理客户端的工作模式。在 TUN 模式下，代理客户端接管了系统网络栈，所有 DNS 请求（包括浏览器发出的 DoH 请求）都会被代理客户端拦截和处理，浏览器的 DoH 设置实际上不会生效。在系统代理模式下，浏览器可能绕过代理客户端的 DNS 处理，直接使用自己配置的 DoH 服务器进行解析。这可能导致解析结果与代理客户端的分流规则不匹配。建议在系统代理模式下关闭浏览器内置的 DoH，让代理客户端统一管理 DNS。</p><p><strong>Q：DoH 会影响网速吗？</strong></p><p>首次连接 DoH 服务器时需要完成 TLS 握手，可能增加几十毫秒的延迟。但连接建立后会保持复用，后续 DNS 查询的延迟与传统明文 DNS 基本相同。对整体上网速度的影响可以忽略不计。在 Fake-IP 模式下，走代理的域名在本地甚至不需要做真正的 DNS 解析（返回假 IP 是瞬间完成的），所以 DoH 的延迟只影响直连域名的解析，影响范围更小。</p><p><strong>Q：用了 DoH 还需要用 Fake-IP 吗？</strong></p><p>需要，两者解决的是不同层面的问题。DoH 保护的是 DNS 查询过程——让第三方无法窃听或篡改你的 DNS 请求和响应。Fake-IP 保护的是查询本身是否发生——走代理的域名根本不在本地解析，避免 DNS 查询行为暴露你的访问意图。即使用了 DoH，如果本地对 google.com 做了 DNS 查询（哪怕是加密的），ISP 仍然能通过目标 IP（DoH 服务器的 IP）和流量模式推断你在使用加密 DNS。而 Fake-IP 直接让这个查询不存在。最佳实践是两者结合使用：Fake-IP + 国内 DoH。</p><p><strong>Q：自建 DNS 服务器比用公共 DoH 更安全吗？</strong></p><p>自建 DNS 递归服务器（如 AdGuard Home、Pi-hole + Unbound）可以消除对第三方 DNS 服务商的信任依赖。但在代理场景下，这通常不是必需的。Fake-IP 模式下，你的 nameserver DNS 只解析国内直连域名（如 baidu.com、taobao.com），这些域名本身不敏感。使用腾讯或阿里的公共 DoH 解析这些国内域名，隐私风险极低。自建 DNS 的运维成本（服务器维护、DNS 记录更新、上游 DNS 选择）远大于它带来的边际安全收益。除非你有特殊的隐私需求或网络控制需求，否则不建议在代理场景中自建 DNS。</p>]]></content>
      
      
      <categories>
          
          <category> DNS 专题 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> DNS </tag>
            
            <tag> 加密 </tag>
            
            <tag> DoH </tag>
            
            <tag> DoT </tag>
            
            <tag> DoQ </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>故障检测与自动切换策略</title>
      <link href="/posts/failover-strategies/"/>
      <url>/posts/failover-strategies/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：在代理服务的运营中，节点故障是无法完全避免的——IP 被封、服务器宕机、线路劣化都可能随时发生。真正区分服务质量的不是”节点会不会出问题”，而是”出问题后多快能恢复”。本文系统讨论故障检测的方法和自动切换的实现策略，帮你构建高可用的代理服务架构。</p></blockquote><hr><h2 id="故障类型分析"><a href="#故障类型分析" class="headerlink" title="故障类型分析"></a>故障类型分析</h2><p>要设计有效的故障转移策略，首先需要理解代理节点可能遭遇的各类故障。不同类型的故障有不同的表现、检测难度和恢复方式。</p><h3 id="IP-被-GFW-封锁"><a href="#IP-被-GFW-封锁" class="headerlink" title="IP 被 GFW 封锁"></a>IP 被 GFW 封锁</h3><p>这是最常见也最令人头疼的故障类型。表现为节点突然无法连接，TCP 握手超时。GFW 的封锁可能是全端口封锁（整个 IP 不可达），也可能是特定端口封锁。</p><p><strong>特征</strong>：从中国大陆无法连接，但从海外仍可正常访问。ping 不通或极高丢包率。封锁通常是持久性的——被封的 IP 短期内不会自动解封。</p><p><strong>恢复方式</strong>：更换 IP 地址。这是唯一可靠的恢复手段。有些运营者会保留一批备用 IP，有些则通过云服务商 API 动态更换。</p><h3 id="服务器宕机"><a href="#服务器宕机" class="headerlink" title="服务器宕机"></a>服务器宕机</h3><p>服务器本身的硬件故障、操作系统崩溃、或云服务商的基础设施问题导致服务器不可用。</p><p><strong>特征</strong>：从任何位置都无法连接。如果是云服务商问题，通常会影响同一数据中心的多台服务器。</p><p><strong>恢复方式</strong>：等待服务商修复；或在其他服务器上重新部署。如果有自动化部署体系，恢复时间可以控制在分钟级。</p><h3 id="ISP-线路问题"><a href="#ISP-线路问题" class="headerlink" title="ISP 线路问题"></a>ISP 线路问题</h3><p>不是 GFW 主动封锁，而是运营商之间的线路拥塞或路由变更导致的连接质量下降。</p><p><strong>特征</strong>：不是完全不能连接，而是延迟大幅增加、丢包率升高、速度明显下降。通常有时间规律——晚高峰（20:00-23:00）严重，凌晨恢复。可能只影响特定运营商（如联通用户正常但电信用户卡顿）。</p><p><strong>恢复方式</strong>：等待线路恢复；或切换到经过不同线路的备用节点。使用 IPLC&#x2F;IEPL 等专线可以避免此类问题，但成本较高。</p><h3 id="证书过期"><a href="#证书过期" class="headerlink" title="证书过期"></a>证书过期</h3><p>使用 TLS 证书的协议配置（如 VLESS+TLS+WebSocket）中，Let’s Encrypt 证书每 90 天需要续签。如果自动续签失败，客户端会因证书过期而拒绝连接。</p><p><strong>特征</strong>：客户端报告 TLS 握手失败或证书验证错误。服务本身仍在运行，只是 TLS 层面出问题。</p><p><strong>恢复方式</strong>：手动或自动续签证书并重启服务。使用 Reality 协议可以完全避免证书管理问题，因为 Reality 不需要自己的 TLS 证书。</p><h3 id="后端进程崩溃"><a href="#后端进程崩溃" class="headerlink" title="后端进程崩溃"></a>后端进程崩溃</h3><p>代理后端（XrayR、V2bX 等）的进程因 bug、内存溢出或配置错误而崩溃。</p><p><strong>特征</strong>：端口不再监听，但服务器本身仍可通过 SSH 登录。systemd 或 Docker 的自动重启机制通常会在几秒内恢复进程。</p><p><strong>恢复方式</strong>：如果配置了 systemd 的 <code>Restart=on-failure</code> 或 Docker 的 <code>restart: always</code>，进程会自动重启。否则需要手动重启服务。</p><hr><h2 id="故障检测方法"><a href="#故障检测方法" class="headerlink" title="故障检测方法"></a>故障检测方法</h2><p>检测速度直接决定恢复速度。检测方法从简单到复杂分为三个层次。</p><h3 id="第一层：TCP-连接检测"><a href="#第一层：TCP-连接检测" class="headerlink" title="第一层：TCP 连接检测"></a>第一层：TCP 连接检测</h3><p>最基本的检测方式——尝试与节点的服务端口建立 TCP 连接。如果连接超时或被拒绝，则判定节点不可用。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 简单的 TCP 端口检测脚本</span></span><br><span class="line"><span class="comment">#!/bin/bash</span></span><br><span class="line">HOST=<span class="string">&quot;1.2.3.4&quot;</span></span><br><span class="line">PORT=443</span><br><span class="line">TIMEOUT=5</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> <span class="built_in">timeout</span> <span class="variable">$TIMEOUT</span> bash -c <span class="string">&quot;echo &gt; /dev/tcp/<span class="variable">$HOST</span>/<span class="variable">$PORT</span>&quot;</span> 2&gt;/dev/null; <span class="keyword">then</span></span><br><span class="line">    <span class="built_in">echo</span> <span class="string">&quot;节点 <span class="variable">$HOST</span>:<span class="variable">$PORT</span> 在线&quot;</span></span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">    <span class="built_in">echo</span> <span class="string">&quot;节点 <span class="variable">$HOST</span>:<span class="variable">$PORT</span> 离线！&quot;</span></span><br><span class="line">    <span class="comment"># 触发告警或切换逻辑</span></span><br><span class="line"><span class="keyword">fi</span></span><br></pre></td></tr></table></figure><p><strong>优点</strong>：实现简单，资源消耗极低。</p><p><strong>局限</strong>：只能检测端口是否可达。如果后端进程虽然在监听但已经无法正常处理代理请求（比如与面板的通信中断导致鉴权失败），TCP 检测无法发现这个问题。</p><h3 id="第二层：协议级检测"><a href="#第二层：协议级检测" class="headerlink" title="第二层：协议级检测"></a>第二层：协议级检测</h3><p>在 TCP 连接基础上，模拟代理客户端的行为，实际发起一次代理请求。如果能成功通过代理访问到目标网页，则判定节点正常。</p><p>这种检测方式能发现 TCP 检测遗漏的问题：后端进程运行异常、鉴权失败、协议配置错误等。</p><p><strong>实现方式</strong>：使用代理客户端的 API 接口发起一次测试请求。例如，通过 curl 指定 SOCKS5 代理访问特定 URL：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 通过节点代理访问测试页</span></span><br><span class="line">curl -x socks5://127.0.0.1:1080 \</span><br><span class="line">     --connect-timeout 10 \</span><br><span class="line">     -s -o /dev/null -w <span class="string">&quot;%&#123;http_code&#125;&quot;</span> \</span><br><span class="line">     https://www.google.com/generate_204</span><br></pre></td></tr></table></figure><p>如果返回 HTTP 204，说明代理链路完整可用。</p><h3 id="第三层：业务级检测"><a href="#第三层：业务级检测" class="headerlink" title="第三层：业务级检测"></a>第三层：业务级检测</h3><p>最全面的检测方式——不仅检查代理是否可用，还检查特定业务功能是否正常。例如：</p><ul><li><strong>流媒体解锁检测</strong>：通过节点访问 Netflix、Disney+ 等流媒体的 API 接口，检查是否返回解锁状态</li><li><strong>延迟和速度检测</strong>：不仅要求能连通，还要求延迟低于某个阈值、下载速度高于某个标准</li><li><strong>DNS 解析检测</strong>：检查通过节点进行的 DNS 解析是否返回正确结果</li></ul><p>业务级检测最准确，但实现复杂度和资源消耗也最高。建议将其作为定期（如每小时）的补充检测，而非高频的核心检测手段。</p><hr><h2 id="客户端侧故障转移"><a href="#客户端侧故障转移" class="headerlink" title="客户端侧故障转移"></a>客户端侧故障转移</h2><p>对于终端用户来说，最直接的故障转移发生在客户端——当正在使用的节点不可用时，客户端自动切换到备用节点。</p><h3 id="Clash-的代理组策略"><a href="#Clash-的代理组策略" class="headerlink" title="Clash 的代理组策略"></a>Clash 的代理组策略</h3><p><a href="https://wiki.metacubex.one/">Clash</a> 系客户端提供了完善的代理组机制来实现自动故障转移。</p><p><strong>url-test 策略组</strong>：根据延迟测试结果自动选择最快的节点。</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">proxy-groups:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">&quot;自动选择&quot;</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">url-test</span></span><br><span class="line">    <span class="attr">proxies:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">香港节点1</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">香港节点2</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">日本节点1</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">新加坡节点1</span></span><br><span class="line">    <span class="attr">url:</span> <span class="string">&quot;https://www.gstatic.com/generate_204&quot;</span></span><br><span class="line">    <span class="attr">interval:</span> <span class="number">300</span>           <span class="comment"># 每 5 分钟测试一次</span></span><br><span class="line">    <span class="attr">tolerance:</span> <span class="number">50</span>           <span class="comment"># 延迟差异超过 50ms 才切换</span></span><br><span class="line">    <span class="attr">lazy:</span> <span class="literal">true</span>              <span class="comment"># 没有流量时不主动测试</span></span><br></pre></td></tr></table></figure><p><strong>fallback 策略组</strong>：按优先级依次尝试节点，只在当前节点不可用时切换到下一个。这种策略更适合希望固定使用某个节点、只在它不可用时才切换的场景。</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">proxy-groups:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">&quot;故障转移&quot;</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">fallback</span></span><br><span class="line">    <span class="attr">proxies:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">首选节点</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">备用节点1</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">备用节点2</span></span><br><span class="line">    <span class="attr">url:</span> <span class="string">&quot;https://www.gstatic.com/generate_204&quot;</span></span><br><span class="line">    <span class="attr">interval:</span> <span class="number">300</span></span><br></pre></td></tr></table></figure><p><strong>关键区别</strong>：url-test 总是选最快的，节点切换频繁；fallback 优先使用列表靠前的节点，只在故障时切换，更稳定。</p><h3 id="切换速度优化"><a href="#切换速度优化" class="headerlink" title="切换速度优化"></a>切换速度优化</h3><p>客户端故障转移的速度取决于两个因素：</p><ol><li><strong>检测间隔</strong>（interval）：设置过长会导致故障发现慢，设置过短会增加不必要的检测流量。建议 180-300 秒。</li><li><strong>超时判定</strong>：TCP 连接超时时间通常默认 5 秒。如果节点被封，每次检测都要等 5 秒超时才能判定失败。</li></ol><hr><h2 id="服务端侧故障转移"><a href="#服务端侧故障转移" class="headerlink" title="服务端侧故障转移"></a>服务端侧故障转移</h2><p>客户端故障转移有一个根本局限：它依赖客户端的配置和能力。如果你是服务提供者，不应将所有容错能力交给客户端，而应在服务端实现故障转移。</p><h3 id="DNS-故障转移"><a href="#DNS-故障转移" class="headerlink" title="DNS 故障转移"></a>DNS 故障转移</h3><p>将节点域名的 DNS 解析与健康检查结合。当检测到某个节点不可用时，自动将其从 DNS 记录中移除。</p><p><strong>实现方式</strong>：使用 Cloudflare、AWS Route 53 等 DNS 服务商的 API，配合自定义的健康检查脚本：</p><ol><li>健康检查脚本定期检测所有节点</li><li>发现节点不可用时，通过 DNS 服务商 API 将该节点的 A 记录删除或将域名指向备用节点</li><li>节点恢复后重新添加记录</li></ol><p><strong>局限</strong>：DNS 解析有缓存（TTL），即使你立即修改了记录，客户端缓存的旧 IP 在 TTL 过期前仍然会尝试连接已故障的节点。建议将 TTL 设置为较短的值（如 60 秒），但这会增加 DNS 查询量。</p><h3 id="负载均衡器健康检查"><a href="#负载均衡器健康检查" class="headerlink" title="负载均衡器健康检查"></a>负载均衡器健康检查</h3><p>在节点前部署负载均衡器（如 Nginx、HAProxy），由负载均衡器执行健康检查并自动将流量从故障节点转移到健康节点。</p><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Nginx upstream 健康检查配置</span></span><br><span class="line"><span class="section">upstream</span> proxy_backends &#123;</span><br><span class="line">    <span class="attribute">server</span> node1.example.com:<span class="number">443</span> max_fails=<span class="number">3</span> fail_timeout=<span class="number">30s</span>;</span><br><span class="line">    <span class="attribute">server</span> node2.example.com:<span class="number">443</span> max_fails=<span class="number">3</span> fail_timeout=<span class="number">30s</span>;</span><br><span class="line">    <span class="attribute">server</span> node3.example.com:<span class="number">443</span> backup;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>这种方式对用户完全透明——用户始终连接负载均衡器的地址，后端节点的切换由负载均衡器自动完成。</p><h3 id="自动-IP-更换"><a href="#自动-IP-更换" class="headerlink" title="自动 IP 更换"></a>自动 IP 更换</h3><p>对于 IP 被封的场景，最彻底的服务端故障转移是自动更换 IP。流程为：</p><ol><li>健康检查检测到节点 IP 被封（从海外可达但从国内不可达）</li><li>通过云服务商 API 释放旧 IP，分配新 IP</li><li>更新 DNS 记录指向新 IP</li><li>更新面板中的节点信息</li><li>通过 Telegram 通知运营者</li></ol><p>整个流程可以在 2-5 分钟内完成，用户感知到的中断时间极短。</p><hr><h2 id="监控工具选择"><a href="#监控工具选择" class="headerlink" title="监控工具选择"></a>监控工具选择</h2><h3 id="外部监控服务"><a href="#外部监控服务" class="headerlink" title="外部监控服务"></a>外部监控服务</h3><ul><li><strong>UptimeRobot</strong>：免费版支持 50 个监控器，5 分钟检测间隔。适合监控节点端口可达性。但注意：UptimeRobot 的监测点在海外，它检测的是全球可达性，不等同于从中国大陆的可达性。</li><li><strong>Hetrixtools</strong>：类似 UptimeRobot，提供更细粒度的监控选项。</li></ul><h3 id="自建监控"><a href="#自建监控" class="headerlink" title="自建监控"></a>自建监控</h3><p>对于代理服务来说，从中国大陆发起的检测才是有意义的。自建监控方案：</p><ul><li>在国内服务器上部署检测脚本，定期从国内发起 TCP 连接和代理请求测试</li><li>检测结果写入数据库或推送到 Telegram</li><li>结合 Grafana 展示节点状态仪表板</li></ul><h3 id="Telegram-告警集成"><a href="#Telegram-告警集成" class="headerlink" title="Telegram 告警集成"></a>Telegram 告警集成</h3><p>Telegram Bot 是代理服务运维中最常用的告警渠道。通过 Telegram Bot API 发送告警消息，运营者可以在手机上即时收到节点状态变更通知。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Telegram 告警函数</span></span><br><span class="line"><span class="function"><span class="title">send_alert</span></span>() &#123;</span><br><span class="line">    <span class="built_in">local</span> message=<span class="string">&quot;<span class="variable">$1</span>&quot;</span></span><br><span class="line">    curl -s -X POST <span class="string">&quot;https://api.telegram.org/bot<span class="variable">$&#123;BOT_TOKEN&#125;</span>/sendMessage&quot;</span> \</span><br><span class="line">        -d chat_id=<span class="string">&quot;<span class="variable">$&#123;CHAT_ID&#125;</span>&quot;</span> \</span><br><span class="line">        -d text=<span class="string">&quot;<span class="variable">$&#123;message&#125;</span>&quot;</span> \</span><br><span class="line">        -d parse_mode=<span class="string">&quot;Markdown&quot;</span></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使用示例</span></span><br><span class="line">send_alert <span class="string">&quot;⚠ 节点 HK-01 (1.2.3.4) 已离线，正在执行自动切换...&quot;</span></span><br></pre></td></tr></table></figure><hr><h2 id="恢复时间目标（RTO）"><a href="#恢复时间目标（RTO）" class="headerlink" title="恢复时间目标（RTO）"></a>恢复时间目标（RTO）</h2><p>不同的故障转移方案对应不同的恢复时间目标（Recovery Time Objective）。明确你的 RTO 有助于选择合适的方案。</p><table><thead><tr><th>方案</th><th>典型 RTO</th><th>适用场景</th></tr></thead><tbody><tr><td>客户端 url-test&#x2F;fallback</td><td>30 秒 - 5 分钟</td><td>用户端自动切换，最常用</td></tr><tr><td>DNS 故障转移</td><td>1 - 10 分钟</td><td>取决于 DNS TTL 设置</td></tr><tr><td>负载均衡器</td><td>10 - 30 秒</td><td>对用户完全透明</td></tr><tr><td>自动 IP 更换</td><td>2 - 5 分钟</td><td>需要云服务商 API 支持</td></tr><tr><td>手动恢复</td><td>30 分钟 - 数小时</td><td>无自动化，不推荐</td></tr></tbody></table><hr><h2 id="常见问题（FAQ）"><a href="#常见问题（FAQ）" class="headerlink" title="常见问题（FAQ）"></a>常见问题（FAQ）</h2><h3 id="url-test-和-fallback-应该选哪个？"><a href="#url-test-和-fallback-应该选哪个？" class="headerlink" title="url-test 和 fallback 应该选哪个？"></a>url-test 和 fallback 应该选哪个？</h3><p>如果你希望始终使用最快的节点并且不介意频繁切换，选 url-test。如果你更重视稳定性（比如保持同一出口 IP），选 fallback。对于流媒体解锁等需要 IP 一致性的场景，fallback 更合适。</p><h3 id="健康检查间隔设置多少合适？"><a href="#健康检查间隔设置多少合适？" class="headerlink" title="健康检查间隔设置多少合适？"></a>健康检查间隔设置多少合适？</h3><p>建议 TCP 检测设置为 60-120 秒间隔，协议级检测设置为 300-600 秒间隔。间隔过短会产生大量无效流量，过长则故障发现慢。需要在及时性和资源消耗之间取得平衡。</p><h3 id="DNS-TTL-应该设多短？"><a href="#DNS-TTL-应该设多短？" class="headerlink" title="DNS TTL 应该设多短？"></a>DNS TTL 应该设多短？</h3><p>对于需要快速故障转移的代理服务，建议将 DNS TTL 设为 60-120 秒。更短的 TTL（如 30 秒）虽然能更快切换，但会显著增加 DNS 查询量，部分解析器也可能忽略过短的 TTL。</p><h3 id="自动-IP-更换是否适用于所有云服务商？"><a href="#自动-IP-更换是否适用于所有云服务商？" class="headerlink" title="自动 IP 更换是否适用于所有云服务商？"></a>自动 IP 更换是否适用于所有云服务商？</h3><p>不是。需要云服务商提供弹性 IP 或 IP 更换的 API。Vultr、DigitalOcean、AWS 等主流云服务商支持这一功能。部分小型服务商可能不提供 API，或者 IP 更换有频率限制。</p><h3 id="负载均衡器本身是否会成为单点故障？"><a href="#负载均衡器本身是否会成为单点故障？" class="headerlink" title="负载均衡器本身是否会成为单点故障？"></a>负载均衡器本身是否会成为单点故障？</h3><p>是的。如果只部署一台负载均衡器，它的故障会导致所有后端节点不可达。解决方案是部署多台负载均衡器并配合 DNS 轮询，或使用云服务商提供的托管负载均衡服务。</p><h3 id="故障转移会影响用户的连接体验吗？"><a href="#故障转移会影响用户的连接体验吗？" class="headerlink" title="故障转移会影响用户的连接体验吗？"></a>故障转移会影响用户的连接体验吗？</h3><p>会有短暂中断。TCP 连接切换时，正在传输的连接会断开，需要重新建立。对于 HTTP 浏览来说影响很小（页面刷新即可），但对于实时通话、游戏等长连接场景，用户会感知到中断。</p><hr><h2 id="外部参考"><a href="#外部参考" class="headerlink" title="外部参考"></a>外部参考</h2><ul><li><a href="https://wiki.metacubex.one/">Clash Meta Wiki - 代理组</a></li><li><a href="https://uptimerobot.com/">UptimeRobot 监控服务</a></li><li><a href="https://developers.cloudflare.com/api/">Cloudflare API 文档</a></li><li><a href="https://core.telegram.org/bots/api">Telegram Bot API</a></li></ul>]]></content>
      
      
      <categories>
          
          <category> 运营与架构 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> 故障转移 </tag>
            
            <tag> 健康检查 </tag>
            
            <tag> 自动切换 </tag>
            
            <tag> 运维 </tag>
            
            <tag> 高可用 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>Fake-IP vs Redir-Host：一次讲清楚</title>
      <link href="/posts/fake-ip-vs-redir-host/"/>
      <url>/posts/fake-ip-vs-redir-host/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：Fake-IP 和 Redir-Host 是代理客户端处理 DNS 的两种模式。选错模式或配置不当是代理使用中最常见的问题来源。本文用通俗的语言彻底讲清两者的原理、区别和选择。</p></blockquote><h2 id="先说结论"><a href="#先说结论" class="headerlink" title="先说结论"></a>先说结论</h2><ul><li>2026 年，绝大多数用户应该使用 Fake-IP 模式</li><li>Redir-Host 仍有存在价值，但适用场景很少</li><li>网上大量过时教程仍在推荐 Redir-Host + fallback 的配置，这在 Fake-IP 时代是错误的</li></ul><p>如果你只想知道”我该用哪个”，答案就是 Fake-IP。如果你想知道为什么，继续往下读。</p><h2 id="为什么-DNS-模式这么重要"><a href="#为什么-DNS-模式这么重要" class="headerlink" title="为什么 DNS 模式这么重要"></a>为什么 DNS 模式这么重要</h2><p>在代理客户端中，DNS 模式决定了一个根本性的问题：<strong>客户端在什么时候、以什么方式进行 DNS 解析。</strong> 这个决定直接影响三件事：</p><ol><li><strong>连接速度</strong>——DNS 解析越快，网页打开越快</li><li><strong>隐私安全</strong>——DNS 请求如果泄漏，你的 ISP（网络运营商）和 GFW 就知道你在访问什么</li><li><strong>路由准确性</strong>——规则匹配的依据是域名还是 IP，直接决定流量能否被正确分流</li></ol><p>理解这两种模式之前，先回顾一个基础知识：<strong>DNS 解析就是把域名（如 google.com）翻译成 IP 地址（如 142.250.80.46）。</strong> 任何网络连接都必须知道目标 IP 才能建立。所以不管用哪种模式，DNS 解析这一步都无法跳过——区别只在于谁来做、什么时候做。</p><blockquote><p>如果你对 DNS 的基础概念不太熟悉，建议先阅读 <a href="./dns-basics-for-proxy.md">DNS 基础：为什么代理和 DNS 总是一起出问题</a>。</p></blockquote><h2 id="Fake-IP-模式详解"><a href="#Fake-IP-模式详解" class="headerlink" title="Fake-IP 模式详解"></a>Fake-IP 模式详解</h2><h3 id="核心思路"><a href="#核心思路" class="headerlink" title="核心思路"></a>核心思路</h3><p>Fake-IP 的核心设计思路只有一句话：<strong>先不做真正的 DNS 解析，给应用一个假 IP 占位，等确定了路由策略后再决定是否需要真正解析。</strong></p><p>这个”延迟解析”的策略，直接绕开了传统 DNS 面临的大部分问题。</p><h3 id="工作流程：代理域名"><a href="#工作流程：代理域名" class="headerlink" title="工作流程：代理域名"></a>工作流程：代理域名</h3><p>当你访问一个需要走代理的域名（如 google.com）时，Fake-IP 模式的处理流程如下：</p><ol><li>浏览器想访问 google.com，向操作系统发起 DNS 查询请求</li><li>代理客户端拦截这个 DNS 请求（因为客户端接管了系统 DNS）</li><li>客户端<strong>不会</strong>真正去解析 google.com，而是从预设的假 IP 段中分配一个地址，比如 <code>198.18.0.1</code></li><li>客户端在内部维护一张映射表，记录下：<code>198.18.0.1 = google.com</code></li><li>浏览器收到 <code>198.18.0.1</code> 这个”解析结果”，认为 google.com 就在这个地址，于是发起 TCP 连接</li><li>代理客户端再次拦截这个连接请求，查映射表发现 <code>198.18.0.1</code> 对应的是 google.com</li><li>客户端拿 google.com 去匹配分流规则，命中规则：google.com → Proxy（走代理）</li><li>客户端将域名 google.com 发送给远端代理节点，由节点在境外进行真正的 DNS 解析并获取内容</li><li>内容通过加密通道返回给你</li></ol><p>注意关键点：<strong>从头到尾，google.com 的真实 DNS 解析从未在你的本地设备上发生。</strong> 你的 ISP 和 GFW 完全不知道你查询了 google.com——因为你确实没有查询过。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">graph TD</span><br><span class="line">    A[应用请求 google.com] --&gt; B[代理客户端拦截 DNS]</span><br><span class="line">    B --&gt; C[返回假 IP: 198.18.0.1]</span><br><span class="line">    C --&gt; D[应用连接 198.18.0.1]</span><br><span class="line">    D --&gt; E[客户端查表: 198.18.0.1 = google.com]</span><br><span class="line">    E --&gt; F&#123;匹配分流规则&#125;</span><br><span class="line">    F --&gt;|Proxy| G[发送到代理节点]</span><br><span class="line">    G --&gt; H[节点远端解析 google.com]</span><br><span class="line">    H --&gt; I[返回内容]</span><br><span class="line">    F --&gt;|Direct| J[本地 DNS 解析]</span><br><span class="line">    J --&gt; K[直连目标]</span><br><span class="line">    </span><br><span class="line">    style G fill:#4a9,color:#fff</span><br><span class="line">    style J fill:#48f,color:#fff</span><br></pre></td></tr></table></figure><p><img src="/images/inline/fake-ip-diagram.png" alt="Fake-IP 模式工作原理图"><br><em>图片来源：<a href="https://www.csl.cool/">csl.cool</a></em></p><h3 id="工作流程：直连域名"><a href="#工作流程：直连域名" class="headerlink" title="工作流程：直连域名"></a>工作流程：直连域名</h3><p>当你访问一个直连域名（如 baidu.com）时，流程有所不同：</p><ol><li>浏览器想访问 baidu.com，向操作系统发起 DNS 查询请求</li><li>代理客户端拦截 DNS 请求</li><li>客户端返回假 IP，比如 <code>198.18.0.2</code></li><li>客户端记录：<code>198.18.0.2 = baidu.com</code></li><li>浏览器发起对 <code>198.18.0.2</code> 的 TCP 连接</li><li>客户端拦截连接，查映射表找到 baidu.com</li><li>客户端匹配分流规则：baidu.com → Direct（直连）</li><li><strong>此时</strong>客户端才用配置的国内 DNS（如腾讯 DoH、阿里 DoH）去真正解析 baidu.com，获取真实 IP</li><li>客户端建立到真实 IP 的直接连接</li></ol><p>关键点：<strong>真实 DNS 解析发生在路由决策之后。</strong> 只有确认需要直连的域名，才会触发本地 DNS 查询。这意味着 <code>nameserver</code> 里配置的 DNS 服务器只会收到国内域名的查询请求——这正是我们想要的结果。</p><h3 id="关键优势"><a href="#关键优势" class="headerlink" title="关键优势"></a>关键优势</h3><p><strong>彻底杜绝 DNS 泄漏。</strong> 走代理的域名从不在本地解析，DNS 查询只发生在远端代理节点所在的网络。你的 ISP 和 GFW 看不到任何关于这些域名的 DNS 请求。在 Redir-Host 模式下，即使最终走了代理，DNS 查询本身已经暴露了你的访问意图。</p><p><strong>速度极快。</strong> DNS 请求在本地瞬间返回一个假 IP，没有任何网络往返。应用几乎感受不到 DNS 延迟。相比之下，Redir-Host 需要等待真实 DNS 查询完成（通常几十到几百毫秒），如果配置了 fallback，还要等待多个 DNS 服务器的响应并进行比较。</p><p><strong>规则匹配基于域名，极其准确。</strong> 客户端拿到的是原始域名 google.com，直接与分流规则中的域名规则（如 <code>DOMAIN-SUFFIX,google.com</code>）进行匹配。域名是确定的、不会被篡改的。而 Redir-Host 依赖 IP 进行匹配（如 <code>GEOIP,CN</code>），IP 的归属可能不准确，CDN 的 IP 可能随时变化。</p><p><strong>配置简单。</strong> 不需要 fallback、不需要 fallback-filter、不需要担心 DNS 污染。只要在 nameserver 中配置可靠的国内 DNS 就够了。</p><h3 id="Fake-IP-地址范围"><a href="#Fake-IP-地址范围" class="headerlink" title="Fake-IP 地址范围"></a>Fake-IP 地址范围</h3><p>Fake-IP 使用的地址范围默认是 <code>198.18.0.0/15</code>（即 <code>198.18.0.0</code> 到 <code>198.19.255.255</code>），在大多数客户端的配置中写作 <code>198.18.0.1/16</code>。</p><p>这个地址段是 IANA（互联网号码分配机构）保留的基准测试地址段，在真实互联网上永远不会被使用。这意味着：</p><ul><li>这些 IP 只存在于你本地设备和代理客户端之间</li><li>不会和任何真实的网络地址冲突</li><li>永远不会被路由到互联网上</li><li>对你的局域网也没有任何影响</li></ul><p>你不需要修改这个默认值，除非你的网络环境极其特殊（比如你的内网恰好使用了 198.18 段——这几乎不可能发生）。</p><h3 id="fake-ip-filter-是什么"><a href="#fake-ip-filter-是什么" class="headerlink" title="fake-ip-filter 是什么"></a>fake-ip-filter 是什么</h3><p>虽然 Fake-IP 模式适用于绝大多数场景，但确实存在一些服务需要获得真实 IP 地址才能正常工作。<code>fake-ip-filter</code> 就是告诉客户端：<strong>对于这些域名，不要返回假 IP，而是进行真实的 DNS 解析并返回真实 IP。</strong></p><p>需要加入 fake-ip-filter 的典型场景：</p><p><strong>局域网设备发现。</strong> mDNS、SSDP 等协议用于局域网内设备的自动发现（如打印机、NAS、智能音箱）。这些协议依赖真实的局域网 IP 地址来建立设备间的连接。如果返回一个 <code>198.18.x.x</code> 的假地址，设备发现会完全失败。需要过滤的域名包括 <code>*.lan</code>、<code>*.local</code>、<code>*.localhost</code>。</p><p><strong>Windows 网络连接检测。</strong> Windows 系统通过访问特定域名来判断当前是否有互联网连接（系统托盘的网络图标会据此显示”已连接”或”无 Internet 连接”）。如果这些域名返回假 IP，Windows 可能误判为没有网络连接。需要过滤的域名包括 <code>*.msftconnecttest.com</code>、<code>dns.msftncsi.com</code>。</p><p><strong>NTP 时间同步。</strong> 系统时间同步服务需要连接到真实的 NTP 服务器。如果返回假 IP，时间同步会失败，可能导致 TLS 证书验证出错（证书有有效期，时间不准就无法正确验证）。需要过滤的域名包括 <code>time.*.com</code>、<code>ntp.*.com</code>。</p><p><strong>STUN 协议。</strong> WebRTC（视频通话、语音聊天）和部分 VoIP 服务使用 STUN 服务器来发现自己的公网 IP 和 NAT 类型。如果 STUN 服务器的域名返回假 IP，NAT 穿透会失败，导致通话无法建立。需要过滤的域名包括 <code>+.stun.*.*</code>。</p><p><strong>部分游戏。</strong> 少数在线游戏的联机系统（尤其是 P2P 模式的游戏）需要知道真实 IP 来建立玩家间的直接连接。如果你发现某个游戏联机有问题，可以尝试把它的相关域名加入 fake-ip-filter。</p><p>一个典型的 fake-ip-filter 配置：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">fake-ip-filter:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&#x27;*.lan&#x27;</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&#x27;*.local&#x27;</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&#x27;*.localhost&#x27;</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&#x27;dns.msftncsi.com&#x27;</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&#x27;www.msftncsi.com&#x27;</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&#x27;*.msftconnecttest.com&#x27;</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&#x27;time.*.com&#x27;</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&#x27;ntp.*.com&#x27;</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&#x27;+.stun.*.*&#x27;</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&#x27;+.stun.*.*.*&#x27;</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&#x27;localhost.ptlogin2.qq.com&#x27;</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&#x27;lens.l.google.com&#x27;</span></span><br></pre></td></tr></table></figure><h2 id="Redir-Host-模式详解"><a href="#Redir-Host-模式详解" class="headerlink" title="Redir-Host 模式详解"></a>Redir-Host 模式详解</h2><h3 id="核心思路-1"><a href="#核心思路-1" class="headerlink" title="核心思路"></a>核心思路</h3><p>Redir-Host 的逻辑是传统思路：<strong>先做真实的 DNS 解析，拿到 IP 之后再决定路由。</strong></p><p>这个思路看似直观，但在中国大陆的网络环境下会遇到一个根本性问题：DNS 污染。</p><h3 id="工作流程"><a href="#工作流程" class="headerlink" title="工作流程"></a>工作流程</h3><ol><li>浏览器想访问 google.com，发起 DNS 查询</li><li>代理客户端拦截 DNS 请求</li><li>客户端<strong>真正去解析</strong> google.com——向配置的 DNS 服务器发送查询</li><li>这里出现第一个问题：如果使用国内 DNS（如 114.114.114.114），GFW 会拦截查询并返回一个被污染的假 IP</li><li>为了解决这个问题，Redir-Host 模式引入了 <strong>fallback 机制</strong>：同时向 nameserver（通常是国内 DNS）和 fallback（通常是海外 DNS，如 Google 的 DoH）发送查询</li><li>客户端收到两边的结果后，使用 fallback-filter 规则进行比较：<ul><li>如果 nameserver 返回的 IP 经过 GEOIP 查询属于中国 → 认为没被污染，使用 nameserver 的结果</li><li>如果 nameserver 返回的 IP 不属于中国 → 可能被污染了，使用 fallback 的结果</li></ul></li><li>客户端拿到最终的 IP 结果，去匹配分流规则（基于 IP 的规则，如 <code>GEOIP,CN</code>）</li><li>根据匹配结果决定走代理还是直连</li></ol><h3 id="问题在哪"><a href="#问题在哪" class="headerlink" title="问题在哪"></a>问题在哪</h3><p><strong>更多 DNS 查询意味着更高的延迟。</strong> 每一个新域名的首次访问，都需要等待真实的 DNS 解析完成。如果配置了 fallback，还要等待海外 DNS 的响应。海外 DNS 即使用了 DoH，从中国大陆访问也至少需要 100-300 毫秒。这些延迟直接加在每一次新连接的建立过程中。</p><p><strong>fallback 判断逻辑本身就不可靠。</strong> 上面第 6 步的判断依据是”nameserver 返回的 IP 归属地是否为中国”。但这个逻辑有明显的漏洞：</p><ul><li>有些境外网站使用了国内 CDN 节点（IP 归属地是中国），按上述逻辑会被认为”没被污染”，从而使用 nameserver 的结果——但 nameserver 返回的可能恰恰是被污染的 IP</li><li>GFW 的 DNS 污染可能返回一个境外 IP（而非传统的 <code>127.0.0.1</code>），这时 GEOIP 判断发现”不是中国 IP”，会触发 fallback——但 fallback 的海外 DNS 也可能被干扰</li></ul><p><strong>基于 IP 的路由匹配不如基于域名准确。</strong> Redir-Host 拿到的是 IP 地址，路由匹配依赖 <code>GEOIP</code> 和 <code>IP-CIDR</code> 等规则。问题在于：</p><ul><li>CDN 的 IP 地址经常变化，今天这个 IP 属于香港，明天可能分配到新加坡</li><li>有些 CDN 的 IP 归属地是境外，但实际服务的是国内用户，这种情况下 GEOIP 会将其误判为”需要代理”</li><li>同一个 IP 段可能同时服务于需要代理和不需要代理的网站</li></ul><p><strong>DNS 泄漏风险。</strong> 无论最终路由结果如何，DNS 查询已经发生了。你的 ISP 能看到你在查询 google.com、youtube.com 这些域名。虽然 DoH 可以加密 DNS 查询本身不被运营商劫持，但 DNS 查询的目标服务器（如 8.8.8.8）本身就告诉了 GFW 你可能在访问境外服务。</p><p><strong>配置复杂度显著增加。</strong> 你需要正确配置 nameserver、fallback、fallback-filter 三个部分，每个部分都有自己的参数和注意事项。配置错误的概率远高于 Fake-IP 模式。</p><h3 id="什么时候还需要-Redir-Host"><a href="#什么时候还需要-Redir-Host" class="headerlink" title="什么时候还需要 Redir-Host"></a>什么时候还需要 Redir-Host</h3><p>坦白说，2026 年几乎没有普通用户需要使用 Redir-Host 模式的场景。以下是仅存的少数例外：</p><ul><li><strong>特定企业网络环境</strong>：某些企业内网的应用依赖真实的 DNS 解析结果来进行内部路由或认证，Fake-IP 会干扰这些流程</li><li><strong>对 DNS 解析结果有特殊依赖的应用</strong>：极少数应用会验证 DNS 返回的 IP 是否”合理”，收到 198.18.x.x 会拒绝连接</li><li><strong>需要基于 IP 进行精确路由的场景</strong>：某些高级用户需要根据解析出的真实 IP 来做细粒度的路由决策</li></ul><p>对于这些场景，更好的解决方案通常是：使用 Fake-IP 模式，但把有特殊需求的域名加入 <code>fake-ip-filter</code>。只有在 fake-ip-filter 无法解决问题的极端情况下，才需要考虑切换到 Redir-Host。</p><h2 id="对比表"><a href="#对比表" class="headerlink" title="对比表"></a>对比表</h2><table><thead><tr><th>维度</th><th>Fake-IP</th><th>Redir-Host</th></tr></thead><tbody><tr><td>DNS 解析时机</td><td>路由决策后（先匹配规则，再解析）</td><td>路由决策前（先解析，再匹配规则）</td></tr><tr><td>解析速度</td><td>极快（本地瞬间返回假 IP）</td><td>较慢（需要等待真实 DNS 查询）</td></tr><tr><td>DNS 泄漏风险</td><td>几乎为零（代理域名从不在本地解析）</td><td>需要精心配置才能降低</td></tr><tr><td>规则匹配方式</td><td>基于域名（精确、稳定）</td><td>基于 IP（可能不准确、受 CDN 影响）</td></tr><tr><td>配置复杂度</td><td>简单（只需 nameserver）</td><td>复杂（需要 nameserver + fallback + filter）</td></tr><tr><td>CDN 兼容性</td><td>好（直连域名在本地用国内 DNS 解析）</td><td>可能出问题（fallback 逻辑可能返回错误节点）</td></tr><tr><td>对应用的影响</td><td>极少数应用可能缓存假 IP（关代理后需清缓存）</td><td>无</td></tr><tr><td>DNS 污染影响</td><td>无（代理域名不经过本地 DNS）</td><td>大（需要 fallback 机制来对抗）</td></tr><tr><td>适合的用户</td><td>所有用户</td><td>有特殊需求的高级用户</td></tr></tbody></table><h2 id="最常见的配置错误"><a href="#最常见的配置错误" class="headerlink" title="最常见的配置错误"></a>最常见的配置错误</h2><h3 id="错误一：Fake-IP-模式下配置-fallback"><a href="#错误一：Fake-IP-模式下配置-fallback" class="headerlink" title="错误一：Fake-IP 模式下配置 fallback"></a>错误一：Fake-IP 模式下配置 fallback</h3><p>这是<strong>最高频</strong>的 DNS 配置错误，没有之一。你在网上搜索”Clash DNS 配置”，至少一半的教程会给出类似这样的配置：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># ❌ 错误配置</span></span><br><span class="line"><span class="attr">dns:</span></span><br><span class="line">  <span class="attr">enhanced-mode:</span> <span class="string">fake-ip</span></span><br><span class="line">  <span class="attr">nameserver:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">https://doh.pub/dns-query</span></span><br><span class="line">  <span class="attr">fallback:</span>                          <span class="comment"># ← Fake-IP 下不需要这个</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">https://dns.google/dns-query</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">https://cloudflare-dns.com/dns-query</span></span><br><span class="line">  <span class="attr">fallback-filter:</span>                   <span class="comment"># ← 这个也不需要</span></span><br><span class="line">    <span class="attr">geoip:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">geoip-code:</span> <span class="string">CN</span></span><br><span class="line">    <span class="attr">ipcidr:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="number">240.0</span><span class="number">.0</span><span class="number">.0</span><span class="string">/4</span></span><br></pre></td></tr></table></figure><p>为什么这是错误的？让我逐条解释：</p><p><strong>fallback 是 Redir-Host 的概念，用于对抗 DNS 污染。</strong> 在 Redir-Host 模式下，客户端需要做真实 DNS 解析，国内 DNS 的结果可能被污染，所以需要用海外 DNS 作为 fallback 来交叉验证。但在 Fake-IP 模式下，nameserver 只负责解析<strong>直连域名</strong>——这些域名本来就是 baidu.com、taobao.com 这样的国内域名，用国内 DNS 解析它们是完全正确的，不存在被污染的问题。走代理的域名（google.com、youtube.com）根本不会触发本地 DNS 解析。</p><p><strong>加了 fallback 的后果：</strong></p><ol><li><strong>增加不必要的延迟。</strong> 每次直连域名的 DNS 解析，都会同时向 nameserver 和 fallback 发送查询。fallback 配置的是 Google DNS 或 Cloudflare DNS 等海外服务，从中国大陆访问这些服务器需要额外的几百毫秒。对于本来就应该秒回的国内域名，这是纯粹的性能浪费。</li><li><strong>可能导致 DNS 泄漏。</strong> 部分国内域名的查询请求会被发送到海外 DNS 服务器。虽然内容是国内域名，但这些查询流量本身会经过 GFW，可能引起不必要的关注。</li><li><strong>增加配置复杂度和出错概率。</strong> fallback-filter 的 geoip、geosite、ipcidr 等条件需要正确配置，任何一个参数错误都可能导致 DNS 解析异常。</li></ol><h3 id="错误二：nameserver-中混入海外-DNS"><a href="#错误二：nameserver-中混入海外-DNS" class="headerlink" title="错误二：nameserver 中混入海外 DNS"></a>错误二：nameserver 中混入海外 DNS</h3><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># ❌ 错误配置</span></span><br><span class="line"><span class="attr">dns:</span></span><br><span class="line">  <span class="attr">enhanced-mode:</span> <span class="string">fake-ip</span></span><br><span class="line">  <span class="attr">nameserver:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">https://doh.pub/dns-query</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">https://dns.google/dns-query</span>    <span class="comment"># ← 不应该放在这里</span></span><br></pre></td></tr></table></figure><p>在 Fake-IP 模式下，nameserver 只用于解析直连域名。如果 nameserver 中包含海外 DNS，国内域名的解析请求也会被发送到 Google DNS。Google DNS 返回的 CDN 节点可能是美国或香港的服务器，导致你直连访问这些海外 CDN，速度大幅下降。</p><p>nameserver 应该只包含<strong>国内 DNS 服务器</strong>——因为它只会被用来解析国内域名。</p><h3 id="错误三：同时开启-Fake-IP-和自定义-hosts"><a href="#错误三：同时开启-Fake-IP-和自定义-hosts" class="headerlink" title="错误三：同时开启 Fake-IP 和自定义 hosts"></a>错误三：同时开启 Fake-IP 和自定义 hosts</h3><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># ⚠️ 需要注意的配置</span></span><br><span class="line"><span class="attr">dns:</span></span><br><span class="line">  <span class="attr">enhanced-mode:</span> <span class="string">fake-ip</span></span><br><span class="line">  <span class="attr">use-hosts:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">hosts:</span></span><br><span class="line">    <span class="attr">&#x27;example.com&#x27;:</span> <span class="number">1.2</span><span class="number">.3</span><span class="number">.4</span></span><br></pre></td></tr></table></figure><p>如果你在 Fake-IP 模式下配置了 hosts，被 hosts 覆盖的域名会直接返回你指定的 IP，绕过 Fake-IP 的映射机制。这意味着这些域名的流量不会经过代理客户端的规则匹配——它们直接被发送到你指定的 IP。如果这个 IP 是一个需要代理才能访问的地址，连接就会失败。</p><p>如果你确实需要使用 hosts，请确保只对不需要代理的域名使用。</p><h3 id="正确配置"><a href="#正确配置" class="headerlink" title="正确配置"></a>正确配置</h3><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># ✅ 正确的 Fake-IP DNS 配置</span></span><br><span class="line"><span class="attr">dns:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">listen:</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span><span class="string">:1053</span></span><br><span class="line">  <span class="attr">ipv6:</span> <span class="literal">false</span></span><br><span class="line">  <span class="attr">enhanced-mode:</span> <span class="string">fake-ip</span></span><br><span class="line">  <span class="attr">fake-ip-range:</span> <span class="number">198.18</span><span class="number">.0</span><span class="number">.1</span><span class="string">/16</span></span><br><span class="line"></span><br><span class="line">  <span class="attr">nameserver:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">https://doh.pub/dns-query</span>        <span class="comment"># 腾讯 DoH</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">https://dns.alidns.com/dns-query</span>  <span class="comment"># 阿里 DoH</span></span><br><span class="line"></span><br><span class="line">  <span class="attr">fake-ip-filter:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&#x27;*.lan&#x27;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&#x27;*.local&#x27;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&#x27;*.localhost&#x27;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&#x27;dns.msftncsi.com&#x27;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&#x27;www.msftncsi.com&#x27;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&#x27;*.msftconnecttest.com&#x27;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&#x27;time.*.com&#x27;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&#x27;ntp.*.com&#x27;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&#x27;+.stun.*.*&#x27;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&#x27;+.stun.*.*.*&#x27;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&#x27;localhost.ptlogin2.qq.com&#x27;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&#x27;lens.l.google.com&#x27;</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># 不需要 fallback</span></span><br><span class="line">  <span class="comment"># 不需要 fallback-filter</span></span><br></pre></td></tr></table></figure><p>这个配置的逻辑非常清晰：</p><ul><li><code>enhanced-mode: fake-ip</code>：使用 Fake-IP 模式</li><li><code>nameserver</code> 只配置国内 DNS，因为只有直连域名会用到它</li><li><code>fake-ip-filter</code> 列出需要真实 IP 的域名</li><li>没有 fallback，因为 Fake-IP 模式不需要它</li></ul><blockquote><p>更多客户端的具体配置方法，参见 <a href="./dns-best-practices.md">各客户端 DNS 配置最佳实践</a>。</p></blockquote><h2 id="Fake-IP-的技术细节"><a href="#Fake-IP-的技术细节" class="headerlink" title="Fake-IP 的技术细节"></a>Fake-IP 的技术细节</h2><p>如果你对 Fake-IP 的内部实现感兴趣，这一节提供更深入的技术解释。</p><h3 id="映射表的工作方式"><a href="#映射表的工作方式" class="headerlink" title="映射表的工作方式"></a>映射表的工作方式</h3><p>代理客户端内部维护了一张双向映射表：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">198.18.0.1 ↔ google.com</span><br><span class="line">198.18.0.2 ↔ baidu.com</span><br><span class="line">198.18.0.3 ↔ youtube.com</span><br><span class="line">198.18.0.4 ↔ taobao.com</span><br><span class="line">...</span><br></pre></td></tr></table></figure><p>这张表的大小受限于 fake-ip-range 的地址空间。以 <code>198.18.0.1/16</code> 为例，可用的地址数量约为 65,534 个。当地址用完后，客户端会采用 LRU（Least Recently Used）策略回收最久未使用的地址并重新分配。</p><p>对于绝大多数用户来说，65,534 个地址绰绰有余。一个重度互联网用户一天内访问的不同域名数量通常在几百到几千之间，远低于这个上限。</p><h3 id="TTL-与缓存"><a href="#TTL-与缓存" class="headerlink" title="TTL 与缓存"></a>TTL 与缓存</h3><p>Fake-IP 模式下，客户端返回给应用的 DNS 应答通常设置一个非常短的 TTL（如 1 秒）。这意味着应用不会长期缓存这个假 IP，下次访问同一域名时会重新向客户端发起 DNS 查询。</p><p>之所以这样设计，是因为如果应用长期缓存了假 IP，当用户关闭代理后，应用仍然会尝试连接这个不存在的 198.18.x.x 地址，导致连接失败。短 TTL 可以减少这种问题发生的概率。</p><p>但问题不能完全消除——某些应用（尤其是一些桌面客户端和游戏）会忽略 TTL，在进程存活期间一直缓存 DNS 结果。这就是为什么关闭代理后有时候需要重启应用或清除系统 DNS 缓存。</p><h3 id="与-TUN-模式的配合"><a href="#与-TUN-模式的配合" class="headerlink" title="与 TUN 模式的配合"></a>与 TUN 模式的配合</h3><p>Fake-IP 模式通常与 TUN 模式配合使用效果最佳。TUN 模式在系统中创建一个虚拟网卡，所有网络流量都经过这个虚拟网卡，代理客户端可以完整地拦截和处理每一个连接请求。</p><p>在系统代理模式下，只有通过 HTTP&#x2F;SOCKS 代理的流量才会被处理。某些应用不遵循系统代理设置，可能直接发起网络连接，绕过代理。TUN 模式可以解决这个问题，确保所有应用的流量——包括 DNS 请求——都被代理客户端接管。</p><blockquote><p>关于 TUN 模式和系统代理的区别，参见 <a href="../software/tun-vs-system-proxy.md">TUN 模式 vs 系统代理</a>。</p></blockquote><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="Q-关掉代理后网页打不开，是-Fake-IP-的问题吗？"><a href="#Q-关掉代理后网页打不开，是-Fake-IP-的问题吗？" class="headerlink" title="Q: 关掉代理后网页打不开，是 Fake-IP 的问题吗？"></a>Q: 关掉代理后网页打不开，是 Fake-IP 的问题吗？</h3><p>很可能是。当代理开启时，浏览器访问某个域名获得了假 IP（如 198.18.0.5），并将这个结果缓存了起来。关闭代理后，代理客户端不再拦截流量，浏览器尝试连接 198.18.0.5——但这个地址在互联网上不存在，自然连不上。</p><p>解决方法有三种（从快到慢）：</p><ol><li><strong>清除浏览器 DNS 缓存</strong>：在 Chrome 中访问 <code>chrome://net-internals/#dns</code>，点击”Clear host cache”</li><li><strong>清除系统 DNS 缓存</strong>：打开命令提示符，运行 <code>ipconfig /flushdns</code></li><li><strong>重启浏览器</strong>：关闭所有浏览器窗口再重新打开</li></ol><p>如果你经常需要开关代理，养成关闭代理后清除 DNS 缓存的习惯会省去很多麻烦。</p><h3 id="Q-Fake-IP-会影响网速吗？"><a href="#Q-Fake-IP-会影响网速吗？" class="headerlink" title="Q: Fake-IP 会影响网速吗？"></a>Q: Fake-IP 会影响网速吗？</h3><p>不会。Fake-IP 只影响 DNS 环节——它改变的是 DNS 的解析方式和时机，不涉及实际的数据传输。当连接建立后，数据传输的路径和速度与没有 Fake-IP 时完全一样。</p><p>实际上，Fake-IP 反而会让连接建立更快——因为传统的 DNS 解析需要等待网络往返（通常几十毫秒），而 Fake-IP 在本地瞬间返回，省去了这部分等待时间。</p><h3 id="Q-游戏能用-Fake-IP-吗？"><a href="#Q-游戏能用-Fake-IP-吗？" class="headerlink" title="Q: 游戏能用 Fake-IP 吗？"></a>Q: 游戏能用 Fake-IP 吗？</h3><p>绝大多数在线游戏在 Fake-IP 模式下可以正常工作。但少数游戏可能出现问题，原因通常是：</p><ul><li><strong>P2P 联机游戏</strong>：需要通过 STUN 服务器发现自己的公网 IP 来建立玩家间的直接连接。解决方法：将游戏相关的 STUN 服务器域名加入 fake-ip-filter</li><li><strong>反作弊系统</strong>：某些游戏的反作弊系统会检查网络环境，发现 198.18.x.x 地址可能触发异常检测。解决方法：将游戏域名加入 fake-ip-filter</li><li><strong>游戏内置 DNS</strong>：少数游戏自己做 DNS 解析而不走系统 DNS，这种情况下 Fake-IP 无法拦截其 DNS 请求。解决方法：使用 TUN 模式确保所有流量被接管</li></ul><p>遇到游戏联机问题时，首先尝试将游戏相关域名加入 fake-ip-filter。如果问题依然存在，检查代理客户端的连接日志，确认游戏流量是否被正确路由。</p><h3 id="Q-为什么网上很多教程还在教-Redir-Host-fallback？"><a href="#Q-为什么网上很多教程还在教-Redir-Host-fallback？" class="headerlink" title="Q: 为什么网上很多教程还在教 Redir-Host + fallback？"></a>Q: 为什么网上很多教程还在教 Redir-Host + fallback？</h3><p>主要有三个原因：</p><ol><li><p><strong>教程过时。</strong> 这些教程大多写于 2020-2022 年，当时 Fake-IP 功能在部分客户端中还不够成熟，Redir-Host + fallback 是当时的主流方案。但到了 2026 年，Fake-IP 在 Clash Meta（<a href="https://github.com/MetaCubeX/mihomo">mihomo</a>）、Surge、Shadowrocket 等所有主流客户端中都已经非常成熟和稳定。更多信息可参考 <a href="https://wiki.metacubex.one/">Clash Wiki</a>。</p></li><li><p><strong>抄袭传播。</strong> 大量中文教程互相抄袭，一篇错误的教程会被复制到几十个不同的博客和论坛。很多作者并不真正理解 DNS 配置的原理，只是搬运了别人的配置文件。如果源头教程是 Redir-Host 时代的产物，所有下游都会继续传播错误信息。</p></li><li><p><strong>对 Fake-IP 的误解。</strong> 一些用户看到”假 IP”这个概念就心生疑虑，担心”假的 IP 能正常上网吗？”。这种顾虑完全不必要——Fake-IP 只是 DNS 环节的占位符，实际连接使用的要么是远端解析的真实 IP（代理域名），要么是本地解析的真实 IP（直连域名）。数据传输从来不经过假 IP。</p></li></ol><h3 id="Q-我用了-Fake-IP-但某个网站打不开，怎么排查？"><a href="#Q-我用了-Fake-IP-但某个网站打不开，怎么排查？" class="headerlink" title="Q: 我用了 Fake-IP 但某个网站打不开，怎么排查？"></a>Q: 我用了 Fake-IP 但某个网站打不开，怎么排查？</h3><p>按以下步骤排查：</p><ol><li><strong>检查连接日志</strong>：打开代理客户端的连接日志，找到该网站的域名。确认它匹配了哪条规则，走了代理还是直连</li><li><strong>如果走了代理</strong>：问题可能在代理节点本身（节点挂了、IP 被封了、节点网络异常），尝试切换到其他节点</li><li><strong>如果走了直连</strong>：问题可能在分流规则（一个应该代理的域名被误判为直连），检查你的规则配置</li><li><strong>如果该域名在 fake-ip-filter 中</strong>：它获得了真实 IP，但这个 IP 可能被 GFW 封锁了。考虑将它从 fake-ip-filter 中移除，让它走正常的 Fake-IP 流程</li><li><strong>清除缓存</strong>：清除浏览器缓存和系统 DNS 缓存，排除缓存导致的问题</li></ol><blockquote><p>更系统的排查方法，参见 <a href="../troubleshooting/fake-ip-dns-issues.md">Fake-IP 模式下的 DNS 问题排查</a>。</p></blockquote><h3 id="Q-Fake-IP-模式下-nameserver-应该配几个-DNS？"><a href="#Q-Fake-IP-模式下-nameserver-应该配几个-DNS？" class="headerlink" title="Q: Fake-IP 模式下 nameserver 应该配几个 DNS？"></a>Q: Fake-IP 模式下 nameserver 应该配几个 DNS？</h3><p>推荐配置 2 个国内 DNS 服务器，实现冗余。最常见的组合是腾讯 DoH（<code>https://doh.pub/dns-query</code>）和阿里 DoH（<code>https://dns.alidns.com/dns-query</code>）。</p><p>不建议配太多。每增加一个 DNS 服务器，客户端可能会并行发送查询到所有服务器，增加不必要的网络流量。2 个就足够保证可用性了——一个挂了还有另一个。</p><p>也不建议使用传统的明文 DNS（如 <code>114.114.114.114</code>）。虽然在 Fake-IP 模式下 nameserver 只解析国内域名，不存在被 GFW 污染的风险，但明文 DNS 查询可能被运营商劫持或篡改（比如将你重定向到运营商的广告页面）。DoH 加密了 DNS 请求本身，避免了运营商劫持。</p>]]></content>
      
      
      <categories>
          
          <category> DNS 专题 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> Clash </tag>
            
            <tag> 配置 </tag>
            
            <tag> DNS </tag>
            
            <tag> Fake-IP </tag>
            
            <tag> Redir-Host </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>Fake-IP 模式下的 DNS 问题排查</title>
      <link href="/posts/fake-ip-dns-issues/"/>
      <url>/posts/fake-ip-dns-issues/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：Fake-IP 是目前主流代理客户端推荐的 DNS 处理模式，它通过返回假 IP 地址来避免 DNS 泄漏和污染问题。然而，正因为”假 IP”的机制，它也会引入一些特有的问题——关闭代理后网页打不开、某些应用无法正常工作、局域网设备发现失败等。本文逐一分析这些问题的根因，并提供明确的解决方案。</p></blockquote><hr><h2 id="问题一：关闭代理后网页打不开"><a href="#问题一：关闭代理后网页打不开" class="headerlink" title="问题一：关闭代理后网页打不开"></a>问题一：关闭代理后网页打不开</h2><h3 id="症状"><a href="#症状" class="headerlink" title="症状"></a>症状</h3><p>使用 Fake-IP 模式的代理客户端（如 Clash、Mihomo 等）正常工作时一切正常，但关闭代理后，部分或全部网页无法加载，浏览器显示连接超时或 DNS 解析失败。重启浏览器后可能恢复，但有时需要等待较长时间才能正常上网。</p><h3 id="原因分析"><a href="#原因分析" class="headerlink" title="原因分析"></a>原因分析</h3><p>问题出在 DNS 缓存上。Fake-IP 模式下，代理客户端对 DNS 请求返回的是 <code>198.18.x.x</code> 段的假 IP 地址。操作系统和浏览器都会缓存 DNS 解析结果。当你关闭代理后：</p><ol><li>操作系统的 DNS 缓存中仍然保留着 <code>google.com → 198.18.0.5</code> 这样的假映射</li><li>浏览器尝试连接 <code>198.18.0.5</code>，但这个地址是代理客户端的虚拟地址段，代理关闭后不再有程序监听</li><li>连接超时，网页无法加载</li></ol><p>浏览器自身也有 DNS 缓存（Chrome 有独立的 DNS cache），这使得问题更加顽固——即使操作系统的 DNS 缓存被清除，浏览器缓存中的假 IP 仍可能导致连接失败。</p><h3 id="解决方案"><a href="#解决方案" class="headerlink" title="解决方案"></a>解决方案</h3><p><strong>方法一：清除系统 DNS 缓存</strong></p><p>关闭代理后，立即清除操作系统的 DNS 缓存：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Windows</span></span><br><span class="line">ipconfig /flushdns</span><br><span class="line"></span><br><span class="line"><span class="comment"># macOS</span></span><br><span class="line"><span class="built_in">sudo</span> dscacheutil -flushcache &amp;&amp; <span class="built_in">sudo</span> killall -HUP mDNSResponder</span><br><span class="line"></span><br><span class="line"><span class="comment"># Linux</span></span><br><span class="line"><span class="built_in">sudo</span> systemd-resolve --flush-caches</span><br></pre></td></tr></table></figure><p><strong>方法二：清除浏览器 DNS 缓存</strong></p><p>在 Chrome 中访问 <code>chrome://net-internals/#dns</code>，点击”Clear host cache”清除浏览器内部的 DNS 缓存。Firefox 等浏览器也有类似的内部页面。</p><p><strong>方法三：配置代理客户端在退出时自动清除缓存</strong></p><p>部分 Clash 客户端（如 Clash Verge Rev）支持在关闭时自动刷新系统 DNS 缓存。在客户端设置中查找相关选项并启用。</p><p><strong>方法四：使用 TUN 模式的 auto-redir 功能</strong></p><p>部分客户端在 TUN 模式下会在关闭时自动恢复系统网络配置，包括清理 DNS 缓存。确保使用 TUN 模式而非系统代理模式，可以减少此问题的发生。</p><hr><h2 id="问题二：部分应用无法正常工作"><a href="#问题二：部分应用无法正常工作" class="headerlink" title="问题二：部分应用无法正常工作"></a>问题二：部分应用无法正常工作</h2><h3 id="症状-1"><a href="#症状-1" class="headerlink" title="症状"></a>症状</h3><p>开启 Fake-IP 模式后，大多数应用正常，但某些特定应用出现异常：无法登录、功能不完整、或者直接报错。常见的问题应用包括：部分游戏客户端、某些企业 VPN、物联网设备配套 APP、部分银行类应用等。</p><h3 id="原因分析-1"><a href="#原因分析-1" class="headerlink" title="原因分析"></a>原因分析</h3><p>这些应用需要获取目标域名的<strong>真实 IP 地址</strong>才能正常工作。原因各异：</p><ul><li><strong>游戏客户端</strong>：某些游戏使用 IP 地址做连接验证或 P2P 匹配，假 IP 导致验证失败或无法匹配到玩家</li><li><strong>企业 VPN</strong>：VPN 客户端可能验证 DNS 解析结果与预期 IP 范围是否匹配，假 IP 不在预期范围内</li><li><strong>物联网 APP</strong>：设备发现协议依赖本地网络的真实 IP 通信</li><li><strong>银行 APP</strong>：安全检测机制可能检查 DNS 解析结果的合理性</li></ul><h3 id="解决方案-1"><a href="#解决方案-1" class="headerlink" title="解决方案"></a>解决方案</h3><p>将这些应用所使用的域名添加到 <code>fake-ip-filter</code> 列表中。被列入 <code>fake-ip-filter</code> 的域名不会返回假 IP，而是进行真实的 DNS 解析。</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Clash / Mihomo 配置</span></span><br><span class="line"><span class="attr">dns:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">enhanced-mode:</span> <span class="string">fake-ip</span></span><br><span class="line">  <span class="attr">fake-ip-range:</span> <span class="number">198.18</span><span class="number">.0</span><span class="number">.1</span><span class="string">/16</span></span><br><span class="line">  <span class="attr">fake-ip-filter:</span></span><br><span class="line">    <span class="comment"># 特定应用域名</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;*.battlenet.com&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;*.blizzard.com&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;+.stun.*.*&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;+.stun.*.*.*&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;lens.l.google.com&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;*.n]intendoserver.net&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;*.srv.nintendo.net&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;*.stun.playstation.net&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;+.sonyentertainmentnetwork.com&quot;</span></span><br></pre></td></tr></table></figure><p><strong>如何确定哪些域名需要加入 filter？</strong></p><ol><li>在代理客户端的日志中查找该应用的 DNS 请求记录</li><li>将该应用的相关域名逐一添加到 <code>fake-ip-filter</code></li><li>测试应用是否恢复正常</li></ol><hr><h2 id="问题三：局域网设备发现失败"><a href="#问题三：局域网设备发现失败" class="headerlink" title="问题三：局域网设备发现失败"></a>问题三：局域网设备发现失败</h2><h3 id="症状-2"><a href="#症状-2" class="headerlink" title="症状"></a>症状</h3><p>开启 Fake-IP 模式后，无法在局域网中发现其他设备。例如：AirPlay 找不到 Apple TV、Chromecast 投屏失败、NAS 无法在文件管理器中显示、打印机搜索不到等。</p><h3 id="原因分析-2"><a href="#原因分析-2" class="headerlink" title="原因分析"></a>原因分析</h3><p>局域网设备发现依赖的协议（如 mDNS&#x2F;Bonjour、SSDP&#x2F;UPnP）使用特定的域名后缀（<code>.local</code>、<code>.lan</code> 等）。在 Fake-IP 模式下，这些域名的 DNS 请求也被拦截并返回了假 IP，导致设备发现协议无法正常工作。</p><p>具体来说：</p><ul><li><strong>mDNS</strong>（多播 DNS）使用 <code>.local</code> 后缀进行局域网设备发现。当 <code>.local</code> 域名被返回假 IP 后，设备间的通信被破坏</li><li><strong>SSDP</strong> 使用组播地址 <code>239.255.255.250</code> 进行设备发现，虽然不直接走 DNS，但部分实现可能依赖 DNS 解析</li><li><strong>NetBIOS</strong> 和 <strong>LLMNR</strong> 是 Windows 环境下的局域网名称解析协议，同样受到 Fake-IP 干扰</li></ul><h3 id="解决方案-2"><a href="#解决方案-2" class="headerlink" title="解决方案"></a>解决方案</h3><p>将局域网相关的域名后缀添加到 <code>fake-ip-filter</code>：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">dns:</span></span><br><span class="line">  <span class="attr">fake-ip-filter:</span></span><br><span class="line">    <span class="comment"># 局域网设备发现</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;*.local&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;*.lan&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;*.home.arpa&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;*.localdomain&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;+.local&quot;</span></span><br></pre></td></tr></table></figure><hr><h2 id="问题四：Windows-显示”无-Internet-连接”"><a href="#问题四：Windows-显示”无-Internet-连接”" class="headerlink" title="问题四：Windows 显示”无 Internet 连接”"></a>问题四：Windows 显示”无 Internet 连接”</h2><h3 id="症状-3"><a href="#症状-3" class="headerlink" title="症状"></a>症状</h3><p>开启 Fake-IP 代理后，Windows 任务栏的网络图标显示”无 Internet 连接”（出现一个小地球或黄色感叹号），但实际上网页可以正常访问。部分应用因为检测到系统报告”无网络”而拒绝联网。</p><h3 id="原因分析-3"><a href="#原因分析-3" class="headerlink" title="原因分析"></a>原因分析</h3><p>Windows 通过 NCSI（Network Connectivity Status Indicator）机制检测网络连接状态。NCSI 会访问特定的微软域名来判断是否有 Internet 连接：</p><ul><li><code>www.msftconnecttest.com</code> — HTTP 连接测试</li><li><code>dns.msftncsi.com</code> — DNS 解析测试</li><li><code>ipv6.msftconnecttest.com</code> — IPv6 连接测试</li></ul><p>在 Fake-IP 模式下，这些域名被返回了假 IP。Windows 的 NCSI 模块尝试连接假 IP，连接失败或返回非预期内容，于是判定”没有 Internet 连接”。</p><h3 id="解决方案-3"><a href="#解决方案-3" class="headerlink" title="解决方案"></a>解决方案</h3><p>将微软的网络连接检测域名添加到 <code>fake-ip-filter</code>：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">dns:</span></span><br><span class="line">  <span class="attr">fake-ip-filter:</span></span><br><span class="line">    <span class="comment"># Windows 网络连接检测</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;*.msftconnecttest.com&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;*.msftncsi.com&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;www.msftconnecttest.com&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;www.msftncsi.com&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;ipv6.msftconnecttest.com&quot;</span></span><br><span class="line">    </span><br><span class="line">    <span class="comment"># macOS / iOS 网络连接检测</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;captive.apple.com&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;*.apple.com.cn&quot;</span></span><br><span class="line">    </span><br><span class="line">    <span class="comment"># Android 网络连接检测</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;connectivitycheck.gstatic.com&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;connectivitycheck.android.com&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;clients3.google.com&quot;</span></span><br></pre></td></tr></table></figure><p>同样的问题也会出现在 macOS（访问 <code>captive.apple.com</code> 检测）和 Android（访问 <code>connectivitycheck.gstatic.com</code> 检测）上，一并加入 filter 即可。</p><hr><h2 id="问题五：NTP-时间同步异常"><a href="#问题五：NTP-时间同步异常" class="headerlink" title="问题五：NTP 时间同步异常"></a>问题五：NTP 时间同步异常</h2><h3 id="症状-4"><a href="#症状-4" class="headerlink" title="症状"></a>症状</h3><p>系统时间出现偏差，或者手动触发时间同步时失败。在严重情况下，时间偏差可能导致 TLS 证书验证失败（证书的有效期基于时间判断），进而引发代理连接异常。</p><h3 id="原因分析-4"><a href="#原因分析-4" class="headerlink" title="原因分析"></a>原因分析</h3><p>NTP（Network Time Protocol）客户端通过域名解析来找到时间服务器的 IP 地址。常见的 NTP 域名如 <code>time.windows.com</code>、<code>ntp.aliyun.com</code> 等。Fake-IP 模式返回假 IP 后，NTP 客户端尝试与假 IP 同步时间，自然会失败。</p><p>更关键的是，NTP 使用 UDP 协议，而 Fake-IP 的假 IP 映射在 TUN 模式下主要处理 TCP 流量。UDP 到假 IP 的数据包通常会被直接丢弃。</p><h3 id="解决方案-4"><a href="#解决方案-4" class="headerlink" title="解决方案"></a>解决方案</h3><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">dns:</span></span><br><span class="line">  <span class="attr">fake-ip-filter:</span></span><br><span class="line">    <span class="comment"># NTP 时间同步</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;time.*.com&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;time.*.gov&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;time.*.edu.cn&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;time.*.apple.com&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;time-ios.apple.com&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;time-macos.apple.com&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;ntp.*.com&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;ntp.aliyun.com&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;pool.ntp.org&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;*.pool.ntp.org&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;time.windows.com&quot;</span></span><br></pre></td></tr></table></figure><hr><h2 id="问题六：游戏-P2P-联机问题"><a href="#问题六：游戏-P2P-联机问题" class="headerlink" title="问题六：游戏 P2P 联机问题"></a>问题六：游戏 P2P 联机问题</h2><h3 id="症状-5"><a href="#症状-5" class="headerlink" title="症状"></a>症状</h3><p>某些依赖 P2P（点对点）连接的在线游戏无法正常联机。玩家可能看到”NAT 类型严格”的提示，或者直接无法与其他玩家匹配。</p><h3 id="原因分析-5"><a href="#原因分析-5" class="headerlink" title="原因分析"></a>原因分析</h3><p>P2P 联机需要通过 STUN（Session Traversal Utilities for NAT）服务器来检测自身的 NAT 类型和公网地址。STUN 请求需要获取服务器的真实 IP 地址，并且使用 UDP 协议通信。Fake-IP 返回的假 IP 无法用于 STUN 协议。</p><p>此外，某些游戏平台（如任天堂在线服务）会验证 STUN 返回的 IP 地址与实际连接 IP 的一致性，假 IP 会导致验证失败。</p><h3 id="解决方案-5"><a href="#解决方案-5" class="headerlink" title="解决方案"></a>解决方案</h3><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">dns:</span></span><br><span class="line">  <span class="attr">fake-ip-filter:</span></span><br><span class="line">    <span class="comment"># STUN 服务器</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;+.stun.*.*&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;+.stun.*.*.*&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;+.stun.*.*.*.*&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;stun.*.*&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;stun.*.*.*&quot;</span></span><br><span class="line">    </span><br><span class="line">    <span class="comment"># 游戏平台</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;*.n]intendoserver.net&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;*.srv.nintendo.net&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;*.stun.playstation.net&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;+.sonyentertainmentnetwork.com&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;+.battlenet.com.cn&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;+.wargaming.net&quot;</span></span><br></pre></td></tr></table></figure><hr><h2 id="调试方法"><a href="#调试方法" class="headerlink" title="调试方法"></a>调试方法</h2><p>当遇到 Fake-IP 相关的未知问题时，以下调试方法可以帮助定位原因。</p><h3 id="启用-Clash-调试日志"><a href="#启用-Clash-调试日志" class="headerlink" title="启用 Clash 调试日志"></a>启用 Clash 调试日志</h3><p>在 Clash 配置文件中将日志级别设置为 <code>debug</code>：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">log-level:</span> <span class="string">debug</span></span><br></pre></td></tr></table></figure><p>然后在日志中搜索问题应用发起的 DNS 请求。如果看到某个域名被分配了 <code>198.18.x.x</code> 的地址，而该域名本应返回真实 IP，就找到了问题所在。</p><h3 id="检查-DNS-解析路径"><a href="#检查-DNS-解析路径" class="headerlink" title="检查 DNS 解析路径"></a>检查 DNS 解析路径</h3><p>使用 <code>nslookup</code> 或 <code>dig</code> 在代理开启和关闭时分别查询同一域名：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 代理开启时查询</span></span><br><span class="line">nslookup example.com 127.0.0.1</span><br><span class="line"></span><br><span class="line"><span class="comment"># 如果返回 198.18.x.x，说明这个域名走了 Fake-IP</span></span><br><span class="line"><span class="comment"># 如果需要真实 IP，就应该加入 fake-ip-filter</span></span><br></pre></td></tr></table></figure><h3 id="使用-Clash-Dashboard-查看"><a href="#使用-Clash-Dashboard-查看" class="headerlink" title="使用 Clash Dashboard 查看"></a>使用 Clash Dashboard 查看</h3><p>大多数 Clash 客户端都提供了 Dashboard（控制面板），其中可以查看实时的 DNS 查询记录和连接日志。通过 Dashboard 可以直观地看到哪些域名被分配了假 IP、哪些走了真实解析。</p><hr><h2 id="完整-fake-ip-filter-模板"><a href="#完整-fake-ip-filter-模板" class="headerlink" title="完整 fake-ip-filter 模板"></a>完整 fake-ip-filter 模板</h2><p>以下是一个经过实践验证的完整 <code>fake-ip-filter</code> 配置模板，涵盖了上述所有场景：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">dns:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">listen:</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span><span class="string">:1053</span></span><br><span class="line">  <span class="attr">enhanced-mode:</span> <span class="string">fake-ip</span></span><br><span class="line">  <span class="attr">fake-ip-range:</span> <span class="number">198.18</span><span class="number">.0</span><span class="number">.1</span><span class="string">/16</span></span><br><span class="line">  <span class="attr">fake-ip-filter:</span></span><br><span class="line">    <span class="comment"># === 局域网 / 设备发现 ===</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;*.local&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;*.lan&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;*.home.arpa&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;*.localdomain&quot;</span></span><br><span class="line">    </span><br><span class="line">    <span class="comment"># === 系统网络连接检测 ===</span></span><br><span class="line">    <span class="comment"># Windows</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;*.msftconnecttest.com&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;*.msftncsi.com&quot;</span></span><br><span class="line">    <span class="comment"># macOS / iOS</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;captive.apple.com&quot;</span></span><br><span class="line">    <span class="comment"># Android</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;connectivitycheck.gstatic.com&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;connectivitycheck.android.com&quot;</span></span><br><span class="line">    </span><br><span class="line">    <span class="comment"># === NTP 时间同步 ===</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;time.*.com&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;time.*.gov&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;time.*.edu.cn&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;time.*.apple.com&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;time-ios.apple.com&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;time-macos.apple.com&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;ntp.*.com&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;ntp.aliyun.com&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;pool.ntp.org&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;*.pool.ntp.org&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;time.windows.com&quot;</span></span><br><span class="line">    </span><br><span class="line">    <span class="comment"># === STUN / P2P ===</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;+.stun.*.*&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;+.stun.*.*.*&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;+.stun.*.*.*.*&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;stun.*.*&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;stun.*.*.*&quot;</span></span><br><span class="line">    </span><br><span class="line">    <span class="comment"># === 游戏平台 ===</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;*.srv.nintendo.net&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;*.stun.playstation.net&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;+.sonyentertainmentnetwork.com&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;+.battlenet.com.cn&quot;</span></span><br><span class="line">    </span><br><span class="line">    <span class="comment"># === 其他需要真实 IP 的服务 ===</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;lens.l.google.com&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;+.nflxvideo.net&quot;</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">&quot;*.mcdn.bilivideo.cn&quot;</span></span><br></pre></td></tr></table></figure><hr><h2 id="常见问题（FAQ）"><a href="#常见问题（FAQ）" class="headerlink" title="常见问题（FAQ）"></a>常见问题（FAQ）</h2><h3 id="Fake-IP-模式和-Redir-Host-模式该选哪个？"><a href="#Fake-IP-模式和-Redir-Host-模式该选哪个？" class="headerlink" title="Fake-IP 模式和 Redir-Host 模式该选哪个？"></a>Fake-IP 模式和 Redir-Host 模式该选哪个？</h3><p>绝大多数场景推荐 Fake-IP。它速度更快（DNS 请求本地即返回，无需等待上游解析）、更安全（走代理的域名不会在本地做 DNS 解析，避免 DNS 泄漏）、规则匹配更准确。Redir-Host 只在极少数对真实 IP 有强依赖且 fake-ip-filter 无法覆盖的场景中才需要考虑。详见 <a href="/posts/fake-ip-vs-redir-host/">Fake-IP vs Redir-Host 详解</a>。</p><h3 id="fake-ip-filter-加太多条目会影响性能吗？"><a href="#fake-ip-filter-加太多条目会影响性能吗？" class="headerlink" title="fake-ip-filter 加太多条目会影响性能吗？"></a>fake-ip-filter 加太多条目会影响性能吗？</h3><p>不会有明显影响。filter 列表的匹配是高效的字符串匹配操作，即使有几百条规则，对性能的影响也可以忽略不计。但 filter 中的域名会走真实 DNS 解析，增加这些域名的首次访问延迟。</p><h3 id="198-18-0-0-16-这个地址段会和我的网络冲突吗？"><a href="#198-18-0-0-16-这个地址段会和我的网络冲突吗？" class="headerlink" title="198.18.0.0&#x2F;16 这个地址段会和我的网络冲突吗？"></a>198.18.0.0&#x2F;16 这个地址段会和我的网络冲突吗？</h3><p>通常不会。<code>198.18.0.0/15</code> 是 RFC 2544 定义的基准测试保留地址段，正常网络不会使用。但如果你的环境中确实使用了这个地址段（极少见），可以在配置中修改 <code>fake-ip-range</code> 为其他未使用的私有地址段，如 <code>28.0.0.1/8</code>。</p><h3 id="为什么加入-filter-后某些域名还是返回假-IP？"><a href="#为什么加入-filter-后某些域名还是返回假-IP？" class="headerlink" title="为什么加入 filter 后某些域名还是返回假 IP？"></a>为什么加入 filter 后某些域名还是返回假 IP？</h3><p>可能的原因：配置文件中 filter 的通配符写法不正确（注意 <code>*</code> 和 <code>+</code> 的区别：<code>*</code> 匹配任意字符，<code>+</code> 在 Clash 中匹配一级或多级子域名）；配置修改后没有重启客户端或重新加载配置；浏览器或系统的 DNS 缓存中仍然保留了旧的假 IP 记录。</p><h3 id="可以对所有域名都不使用-Fake-IP-吗？"><a href="#可以对所有域名都不使用-Fake-IP-吗？" class="headerlink" title="可以对所有域名都不使用 Fake-IP 吗？"></a>可以对所有域名都不使用 Fake-IP 吗？</h3><p>技术上可以——把 enhanced-mode 设为 redir-host 就是这个效果。但这样做会失去 Fake-IP 的所有优势。更合理的做法是保持 Fake-IP 模式，只把确实需要真实 IP 的域名加入 filter。</p><h3 id="TUN-模式和-Fake-IP-必须一起使用吗？"><a href="#TUN-模式和-Fake-IP-必须一起使用吗？" class="headerlink" title="TUN 模式和 Fake-IP 必须一起使用吗？"></a>TUN 模式和 Fake-IP 必须一起使用吗？</h3><p>不是必须的，但推荐一起使用。TUN 模式接管系统全部流量，配合 Fake-IP 可以实现最完善的 DNS 防泄漏。如果使用系统代理模式，部分应用可能绕过代理直接发起 DNS 查询，Fake-IP 对这些查询不生效。详见 <a href="/posts/dns-best-practices/">DNS 最佳实践</a>。</p><hr><h2 id="外部参考"><a href="#外部参考" class="headerlink" title="外部参考"></a>外部参考</h2><ul><li><a href="/posts/fake-ip-vs-redir-host/">Fake-IP vs Redir-Host 详解</a> — 两种 DNS 模式的深入对比</li><li><a href="/posts/dns-best-practices/">DNS 配置最佳实践</a> — 各客户端的 DNS 推荐配置</li><li><a href="https://wiki.metacubex.one/">Clash Meta Wiki</a> — Clash Meta 官方文档</li><li><a href="https://datatracker.ietf.org/doc/html/rfc2544">RFC 2544</a> — 198.18.0.0&#x2F;15 地址段的定义</li></ul>]]></content>
      
      
      <categories>
          
          <category> 排障手册 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> Clash </tag>
            
            <tag> 配置 </tag>
            
            <tag> 排障 </tag>
            
            <tag> DNS </tag>
            
            <tag> Fake-IP </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>第一次使用代理：从零开始的配置指南</title>
      <link href="/posts/first-time-setup/"/>
      <url>/posts/first-time-setup/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：这是一篇手把手的入门指南。假设你已经有了一个机场订阅链接，本文将带你完成从下载客户端到成功科学上网的全过程。覆盖 Windows、macOS、iOS 和 Android 四个平台。</p></blockquote><hr><h2 id="在开始之前"><a href="#在开始之前" class="headerlink" title="在开始之前"></a>在开始之前</h2><p>这篇文章写给从未接触过代理工具的人。如果你已经知道什么是订阅链接、什么是客户端，可以直接跳到你的平台对应的章节。如果这些概念对你来说还很陌生，建议先读一下 <a href="./terminology.md">术语科普</a> 那篇文章，再回来跟着操作。</p><p>本文不涉及自建服务器，也不讨论协议选择。目标只有一个：<strong>让你在最短时间内成功连上 Google</strong>。</p><hr><h2 id="你需要准备什么"><a href="#你需要准备什么" class="headerlink" title="你需要准备什么"></a>你需要准备什么</h2><p>整个过程只需要两样东西：</p><ol><li><strong>一个机场的订阅链接</strong>。你在机场服务商注册账号、购买套餐后就能获得。</li><li><strong>几分钟的时间</strong>。</li></ol><p>就这些。客户端软件是免费的（iOS 上的 Shadowrocket 除外），代理协议什么的你暂时不需要懂。后续每一步我都会解释在做什么，跟着操作就行。</p><hr><h2 id="第一步：获取订阅链接"><a href="#第一步：获取订阅链接" class="headerlink" title="第一步：获取订阅链接"></a>第一步：获取订阅链接</h2><p>订阅链接是机场给你的一串网址。它里面包含了你可以使用的所有代理服务器（也叫”节点”）的配置信息。客户端拿到这个链接后，就知道该连哪台服务器、用什么方式连接。</p><h3 id="在哪里找到订阅链接"><a href="#在哪里找到订阅链接" class="headerlink" title="在哪里找到订阅链接"></a>在哪里找到订阅链接</h3><ol><li>登录你的机场服务商官网（注册时的那个网站）。</li><li>在用户中心或仪表盘（Dashboard）里找到”订阅”或”Subscription”相关的入口。</li><li>你会看到一个或多个链接，通常长这样：<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https://example.com/api/v1/client/subscribe?token=xxxxxxxxxxxx</span><br></pre></td></tr></table></figure></li><li><strong>复制这个链接</strong>。后面每个平台的配置都要用到它。</li></ol><p>有些机场会提供多种格式的订阅链接（Clash 格式、V2Ray 格式、SIP008 格式等）。如果有选择，按照下面的建议：</p><ul><li>用 Clash Verge Rev（Windows&#x2F;macOS）→ 选 <strong>Clash</strong> 格式</li><li>用 Shadowrocket（iOS）→ 选<strong>通用</strong>格式或 V2Ray 格式都行</li><li>用 v2rayNG（Android）→ 选 <strong>V2Ray&#x2F;base64</strong> 格式</li><li>如果只有一个链接没得选，也没关系——大部分客户端都能自动识别</li></ul><h3 id="重要提醒"><a href="#重要提醒" class="headerlink" title="重要提醒"></a>重要提醒</h3><p><strong>订阅链接是你的私人凭证，效果等同于账号密码。</strong> 不要发到群里、截图分享或贴到任何公开的地方。别人拿到你的订阅链接就能使用你的流量配额。</p><hr><h2 id="Windows-配置（Clash-Verge-Rev）"><a href="#Windows-配置（Clash-Verge-Rev）" class="headerlink" title="Windows 配置（Clash Verge Rev）"></a>Windows 配置（Clash Verge Rev）</h2><p>Clash Verge Rev 是目前 Windows 上最推荐的代理客户端之一。界面清晰，功能完善，对新手友好。</p><h3 id="Step-1：下载安装"><a href="#Step-1：下载安装" class="headerlink" title="Step 1：下载安装"></a>Step 1：下载安装</h3><ol><li>打开 <a href="https://github.com/clash-verge-rev/clash-verge-rev/releases">Clash Verge Rev 的 GitHub 发布页面</a>：<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https://github.com/clash-verge-rev/clash-verge-rev/releases</span><br></pre></td></tr></table></figure></li><li>在最新版本（Latest）的 Assets 列表里，找到文件名包含 <code>x64-setup.exe</code> 或 <code>x64.msi</code> 的安装包。大多数 Windows 电脑选 <code>x64</code> 版本即可。</li><li>下载完成后，双击运行安装程序，一路点”下一步”就行。</li><li>安装过程中如果提示需要安装 <strong>WebView2 Runtime</strong>，点击同意安装即可——这是微软的一个运行时组件，很多软件都在用，安全无害。</li></ol><p>安装完成后，桌面或开始菜单里会出现 Clash Verge Rev 的图标。</p><h3 id="Step-2：导入订阅"><a href="#Step-2：导入订阅" class="headerlink" title="Step 2：导入订阅"></a>Step 2：导入订阅</h3><ol><li>打开 Clash Verge Rev。</li><li>点击左侧菜单栏的 <strong>Profiles</strong>（配置）标签。</li><li>在页面顶部你会看到一个输入框，旁边有一个下载按钮。</li><li><strong>把你的订阅链接粘贴到输入框里</strong>，然后点击下载按钮（或按回车）。</li><li>等几秒钟，程序会从你的机场拉取所有节点配置。</li></ol><p>成功后，你会在下方看到一个新出现的配置项，显示了配置名称和节点数量。<strong>确保这个配置项被选中</strong>（高亮状态）。</p><p>如果出现错误提示：</p><ul><li>检查订阅链接是否复制完整（最常见的问题是链接末尾被截断）</li><li>确认你的机场账号状态正常、套餐已生效</li><li>尝试在浏览器里直接打开订阅链接，看看是否有内容返回。如果浏览器也打不开，说明是链接本身或机场服务的问题</li></ul><h3 id="Step-3：开启代理"><a href="#Step-3：开启代理" class="headerlink" title="Step 3：开启代理"></a>Step 3：开启代理</h3><ol><li>点击左侧菜单栏的 <strong>Settings</strong>（设置）标签。</li><li>找到 <strong>System Proxy</strong>（系统代理）开关，<strong>打开它</strong>。</li></ol><p>打开系统代理后，Clash Verge Rev 会告诉你的操作系统：”所有网络请求先经过我”。这样浏览器里的流量就会被代理接管。</p><p>你也可以选择开启 <strong>TUN 模式</strong>，它比系统代理更彻底——会接管系统层面的所有网络流量，包括那些不走系统代理设置的应用。但 TUN 模式需要管理员权限，第一次开启时会弹出授权窗口。</p><p><strong>新手建议先用系统代理</strong>，够用了。TUN 模式以后需要时再开。两种模式的详细区别参见 <a href="/posts/tun-vs-system-proxy/">TUN 模式 vs 系统代理</a>。</p><p><img src="/images/inline/clash-verge-settings.webp" alt="Clash Verge Rev 设置界面"><br><em>图片来源：<a href="https://clashverge.net/">Clash Verge</a></em></p><h3 id="Step-4：验证是否成功"><a href="#Step-4：验证是否成功" class="headerlink" title="Step 4：验证是否成功"></a>Step 4：验证是否成功</h3><ol><li>打开浏览器（Chrome、Edge 等都行）。</li><li>在地址栏输入 <code>google.com</code>，按回车。</li><li>如果 Google 搜索页面正常加载出来了——<strong>恭喜你，配置完成了</strong>。</li></ol><p>如果打不开，按以下顺序排查：</p><ol><li><strong>确认订阅已导入且被选中</strong>：回到 Profiles 页面，检查你的配置是否是激活状态。</li><li><strong>确认代理已开启</strong>：Settings 页面的 System Proxy 开关是否为打开状态。</li><li><strong>换一个节点试试</strong>：当前选中的节点可能刚好不可用，试试其他的（见下一节”选择节点”）。</li><li><strong>检查浏览器代理设置</strong>：某些浏览器扩展（如 Proxy SwitchyOmega）可能会覆盖系统代理设置。暂时禁用这类扩展试试。</li></ol><h3 id="选择节点"><a href="#选择节点" class="headerlink" title="选择节点"></a>选择节点</h3><p>导入订阅后，你可能会看到几十甚至上百个节点。怎么选？</p><ol><li>点击左侧菜单栏的 <strong>Proxies</strong>（代理）标签。</li><li>你会看到一个或多个<strong>策略组</strong>（比如”节点选择”、”Overseas”、”Streaming”等）。这些是你的机场按用途分好的节点分组。</li><li>点击策略组旁边的<strong>闪电图标</strong>（延迟测试按钮），对所有节点进行测速。</li><li>等待测速完成后，每个节点后面会显示延迟数值（单位毫秒，ms）：<ul><li><strong>绿色 &#x2F; 数值较低</strong>（&lt; 200ms）：连接质量好</li><li><strong>黄色 &#x2F; 数值中等</strong>（200-500ms）：可用但可能偶尔卡顿</li><li><strong>红色或超时</strong>：不可用，不要选</li></ul></li><li><strong>点击一个绿色的、延迟低的节点</strong>将其选中。</li></ol><p>从中国大陆出发，一般来说：</p><ul><li><strong>香港（HK）</strong> 节点延迟最低，适合日常浏览</li><li><strong>日本（JP）</strong> 和 <strong>新加坡（SG）</strong> 节点延迟也不错，速度稳定</li><li><strong>美国（US）</strong> 节点延迟较高，但访问美区服务（ChatGPT、Netflix 美区等）时可能需要</li></ul><p>不确定选哪个？先选延迟最低的那个就行。</p><hr><h2 id="macOS-配置（Clash-Verge-Rev）"><a href="#macOS-配置（Clash-Verge-Rev）" class="headerlink" title="macOS 配置（Clash Verge Rev）"></a>macOS 配置（Clash Verge Rev）</h2><p>macOS 上同样推荐 Clash Verge Rev，界面和功能跟 Windows 版几乎一模一样。</p><h3 id="Step-1：下载安装-1"><a href="#Step-1：下载安装-1" class="headerlink" title="Step 1：下载安装"></a>Step 1：下载安装</h3><ol><li>同样去 GitHub 发布页面：<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https://github.com/clash-verge-rev/clash-verge-rev/releases</span><br></pre></td></tr></table></figure></li><li>下载 <code>.dmg</code> 文件。如果你的 Mac 是 M 系列芯片（M1&#x2F;M2&#x2F;M3&#x2F;M4），选 <code>aarch64.dmg</code>；如果是 Intel 芯片，选 <code>x64.dmg</code>。不确定的话，点左上角苹果菜单 →”关于本机”查看。</li><li>打开下载的 <code>.dmg</code> 文件，把 Clash Verge Rev 拖到 Applications（应用程序）文件夹。</li><li>第一次打开时，macOS 可能会提示”无法验证开发者”。这时需要去 <strong>系统设置 → 隐私与安全性</strong>，找到 Clash Verge Rev 的提示，点击”仍要打开”。</li></ol><h3 id="Step-2-4：与-Windows-完全相同"><a href="#Step-2-4：与-Windows-完全相同" class="headerlink" title="Step 2-4：与 Windows 完全相同"></a>Step 2-4：与 Windows 完全相同</h3><p>打开 Clash Verge Rev 后，你会发现界面跟 Windows 版一模一样：</p><ul><li><strong>Profiles</strong> 标签 → 粘贴订阅链接 → 下载配置</li><li><strong>Settings</strong> 标签 → 打开 System Proxy</li><li>浏览器打开 google.com 验证</li></ul><p>TUN 模式在 macOS 上同样需要管理员密码授权。操作方式一样，效果一样。</p><p>节点选择方式也完全相同。</p><hr><h2 id="iOS-配置（Shadowrocket）"><a href="#iOS-配置（Shadowrocket）" class="headerlink" title="iOS 配置（Shadowrocket）"></a>iOS 配置（Shadowrocket）</h2><p>iOS 上最主流的代理客户端是 Shadowrocket（俗称”小火箭”）。它体积小、速度快、配置简单，适合绝大部分用户。</p><h3 id="前提：你需要一个非中国大陆的-Apple-ID"><a href="#前提：你需要一个非中国大陆的-Apple-ID" class="headerlink" title="前提：你需要一个非中国大陆的 Apple ID"></a>前提：你需要一个非中国大陆的 Apple ID</h3><p>Shadowrocket 没有上架中国区 App Store，所以你需要一个<strong>美区、港区或其他海外地区</strong>的 Apple ID 才能下载。</p><p>获取海外 Apple ID 的方法：</p><ul><li><strong>自己注册</strong>：用一个没有注册过 Apple ID 的邮箱，在 Apple 官网（appleid.apple.com）注册时选择美国或香港地区。地址可以填当地任意地址（网上搜一个即可），付款方式选”无”。</li><li><strong>问机场服务商</strong>：有些机场会提供共享的海外 Apple ID，或者代购渠道。</li></ul><p>拿到海外 Apple ID 后，<strong>在 App Store 里退出你当前的 Apple ID，登录海外的那个</strong>，然后搜索 Shadowrocket 购买下载。Shadowrocket 售价 $2.99，属于一次性购买。</p><p>下载完成后，<strong>记得切换回你自己的 Apple ID</strong>。Shadowrocket 已经安装在手机里了，不会消失。</p><h3 id="Step-1：添加订阅"><a href="#Step-1：添加订阅" class="headerlink" title="Step 1：添加订阅"></a>Step 1：添加订阅</h3><ol><li>打开 Shadowrocket。</li><li>点击右上角的 <strong>+</strong> 按钮。</li><li>在弹出的页面中：<ul><li><strong>类型（Type）</strong> 选择 <strong>Subscribe</strong></li><li><strong>URL</strong> 栏里粘贴你的订阅链接</li><li>备注（Remark）可以填你机场的名字，方便识别</li></ul></li><li>点击右上角 <strong>完成（Done）</strong>。</li><li>回到主界面，<strong>下拉刷新</strong>以更新订阅，节点列表就会加载出来。</li></ol><h3 id="Step-2：选择节点并连接"><a href="#Step-2：选择节点并连接" class="headerlink" title="Step 2：选择节点并连接"></a>Step 2：选择节点并连接</h3><ol><li>在节点列表中，点击选中一个节点（同样建议选香港、日本或新加坡）。</li><li>点击页面顶部的<strong>总开关</strong>，将其打开。</li><li>第一次连接时，系统会弹出提示：”Shadowrocket 想要添加 VPN 配置”。点击 <strong>允许</strong>，然后输入你的 iPhone 密码或使用 Face ID 确认。</li></ol><p>这里说的”VPN 配置”不代表你在用 VPN。iOS 和 Android 的代理客户端都是通过系统的 VPN 接口来接管网络流量的，所以系统会显示 VPN 图标。这只是技术实现方式，不影响你实际使用的是代理协议。</p><h3 id="Step-3：验证"><a href="#Step-3：验证" class="headerlink" title="Step 3：验证"></a>Step 3：验证</h3><ol><li>打开 Safari 浏览器。</li><li>访问 <code>google.com</code>。</li><li>能正常加载，就说明配置成功了。</li></ol><p><img src="/images/inline/shadowrocket-ui.webp" alt="Shadowrocket 节点列表界面"><br><em>图片来源：<a href="https://anyip.io/">anyIP</a></em></p><h3 id="小技巧"><a href="#小技巧" class="headerlink" title="小技巧"></a>小技巧</h3><ul><li>Shadowrocket 支持<strong>延迟测试</strong>：在节点列表页面，点击”连通性测试”即可看到每个节点的延迟。</li><li>建议开启<strong>按需连接</strong>（Settings → On Demand）：这样在某些条件下会自动连接代理，不用每次手动开关。</li><li>Shadowrocket 也支持<strong>规则模式</strong>（Settings → Global Routing → Config）：在这个模式下，访问国内网站不走代理，只有国外网站才走代理，省流量也更快。</li></ul><hr><h2 id="Android-配置"><a href="#Android-配置" class="headerlink" title="Android 配置"></a>Android 配置</h2><p>Android 上有两个主流选择：v2rayNG 和 <a href="https://github.com/MetaCubeX/ClashMetaForAndroid">Clash Meta for Android</a>。两个都好用，选一个就行。</p><h3 id="方案-A：v2rayNG（推荐新手使用）"><a href="#方案-A：v2rayNG（推荐新手使用）" class="headerlink" title="方案 A：v2rayNG（推荐新手使用）"></a>方案 A：v2rayNG（推荐新手使用）</h3><p>v2rayNG 是 Android 上历史最悠久、用户最多的代理客户端之一，基于 xray-core 内核，支持所有主流协议。</p><h4 id="Step-1：下载安装-2"><a href="#Step-1：下载安装-2" class="headerlink" title="Step 1：下载安装"></a>Step 1：下载安装</h4><ol><li>打开 <a href="https://github.com/2dust/v2rayNG/releases">v2rayNG 的 GitHub 发布页面</a>：<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https://github.com/2dust/v2rayNG/releases</span><br></pre></td></tr></table></figure></li><li>下载最新版本的 <code>.apk</code> 文件。大多数手机选 <code>universal</code> 版本即可。</li><li>下载完成后打开安装。如果系统提示”不允许安装未知来源应用”，按照提示去设置里允许即可。</li></ol><h4 id="Step-2：导入订阅-1"><a href="#Step-2：导入订阅-1" class="headerlink" title="Step 2：导入订阅"></a>Step 2：导入订阅</h4><ol><li>打开 v2rayNG。</li><li>点击左上角的<strong>菜单按钮</strong>（三条横线）。</li><li>选择 <strong>订阅分组设置</strong>（Subscription group setting）。</li><li>点击右上角的 <strong>+</strong> 按钮添加订阅。</li><li>在弹出页面中：<ul><li><strong>备注</strong>：填一个名字（比如你机场的名字）</li><li><strong>订阅链接（URL）</strong>：粘贴你的订阅链接</li></ul></li><li>点击右上角的 <strong>√</strong> 保存。</li><li>回到主界面，点击右上角的菜单（三个点）→ <strong>更新订阅</strong>。</li><li>等待几秒，节点列表就会加载出来。</li></ol><p><img src="/images/inline/v2rayng-ui.jpg" alt="v2rayNG 界面"><br><em>图片来源：<a href="https://celovpn.com/">Celo VPN</a></em></p><h4 id="Step-3：连接"><a href="#Step-3：连接" class="headerlink" title="Step 3：连接"></a>Step 3：连接</h4><ol><li>在节点列表中，点击选中一个节点。</li><li>点击右下角的 <strong>V 形按钮</strong>（连接按钮）。</li><li>第一次连接时，系统会提示建立 VPN 连接，点击确定。</li><li>状态栏出现一个钥匙图标（或 VPN 图标），表示已连接。</li></ol><h4 id="Step-4：验证"><a href="#Step-4：验证" class="headerlink" title="Step 4：验证"></a>Step 4：验证</h4><p>打开浏览器，访问 <code>google.com</code>，能加载说明成功。</p><h3 id="方案-B：Clash-Meta-for-Android"><a href="#方案-B：Clash-Meta-for-Android" class="headerlink" title="方案 B：Clash Meta for Android"></a>方案 B：Clash Meta for Android</h3><p>如果你在 Windows&#x2F;macOS 上已经在用 Clash Verge Rev，Clash Meta for Android 的体验会更统一——配置格式兼容，逻辑类似。</p><ol><li>从 GitHub 下载安装 Clash Meta for Android。</li><li>打开后，找到 <strong>Profile</strong>（配置文件）页面。</li><li>点击 <strong>+</strong> 号，选择从 URL 导入，粘贴你的订阅链接。</li><li>下载完成后，回到主页，点击开启代理。</li><li>选择节点，验证连接。</li></ol><p>操作逻辑与桌面版 Clash Verge Rev 非常相似，如果你已经在电脑上用过了，手机上应该也能快速上手。</p><hr><h2 id="配置完成后的建议"><a href="#配置完成后的建议" class="headerlink" title="配置完成后的建议"></a>配置完成后的建议</h2><p>你已经成功连上代理了。以下是一些日常使用的实用建议：</p><h3 id="1-找到-2-3-个常用节点"><a href="#1-找到-2-3-个常用节点" class="headerlink" title="1. 找到 2-3 个常用节点"></a>1. 找到 2-3 个常用节点</h3><p>不要只依赖一个节点。节点可能因为维护、过载或其他原因暂时不可用。建议做一次延迟测试，记住 2-3 个延迟低、连接稳定的节点。一个不行就切另一个。</p><h3 id="2-定期更新订阅"><a href="#2-定期更新订阅" class="headerlink" title="2. 定期更新订阅"></a>2. 定期更新订阅</h3><p>机场服务商会不时增减节点、更换服务器。如果你发现很多节点突然都连不上了，<strong>先更新一下订阅</strong>——新的节点信息可能已经推送了。</p><p>建议频率：每周更新一次，或者遇到连接问题时手动更新。</p><h3 id="3-使用规则模式（重要）"><a href="#3-使用规则模式（重要）" class="headerlink" title="3. 使用规则模式（重要）"></a>3. 使用规则模式（重要）</h3><p>大多数客户端都支持”规则模式”（Rule Mode）。在这个模式下，客户端会根据你访问的网址自动判断：国外网站走代理，国内网站直连。</p><p>这比”全局代理”好得多：</p><ul><li><strong>省流量</strong>：国内网站不消耗代理流量配额</li><li><strong>更快</strong>：访问国内网站不需要绕道代理服务器</li><li><strong>更稳定</strong>：减少不必要的代理负载</li></ul><p>在 Clash Verge Rev 中，打开 Proxies 页面，顶部可以切换模式。选择 <strong>Rule</strong>（规则）模式即可。在 Shadowrocket 中，对应的设置是 Settings → Global Routing → <strong>Config</strong>。</p><h3 id="4-不需要时可以关闭代理"><a href="#4-不需要时可以关闭代理" class="headerlink" title="4. 不需要时可以关闭代理"></a>4. 不需要时可以关闭代理</h3><p>代理不需要 24 小时开着。如果你只是刷国内的 App（微信、淘宝、抖音），关掉代理完全没问题。需要访问 Google、YouTube 时再打开就行。</p><h3 id="5-妥善保管你的订阅链接"><a href="#5-妥善保管你的订阅链接" class="headerlink" title="5. 妥善保管你的订阅链接"></a>5. 妥善保管你的订阅链接</h3><p>把订阅链接保存到一个安全的地方（备忘录、密码管理器等）。换手机或重装系统后，你需要用这个链接重新导入配置。</p><hr><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="Q：导入订阅后没有节点怎么办？"><a href="#Q：导入订阅后没有节点怎么办？" class="headerlink" title="Q：导入订阅后没有节点怎么办？"></a>Q：导入订阅后没有节点怎么办？</h3><p>可能的原因：</p><ul><li><strong>订阅链接复制不完整</strong>：这是最常见的原因。回去重新复制，确保整个链接被完整选中，末尾没有被截断或多了空格。</li><li><strong>套餐还没有生效</strong>：刚购买的套餐可能需要几分钟才能激活。检查机场官网上的账号状态。</li><li><strong>机场服务器暂时故障</strong>：尝试在浏览器里直接打开订阅链接，如果浏览器也显示错误，说明是机场那边的问题，等一会儿再试。</li><li><strong>订阅格式不匹配</strong>：如果你的机场提供多种格式的订阅链接，确保你选了当前客户端对应的格式。</li></ul><h3 id="Q：连上代理了但打不开-Google-怎么办？"><a href="#Q：连上代理了但打不开-Google-怎么办？" class="headerlink" title="Q：连上代理了但打不开 Google 怎么办？"></a>Q：连上代理了但打不开 Google 怎么办？</h3><p>按以下步骤逐一排查：</p><ol><li><strong>换一个节点</strong>：当前节点可能不可用。先做一次延迟测试，选一个延迟低的节点试试。</li><li><strong>更新订阅</strong>：节点可能已经更换，更新订阅拿到最新的节点列表。</li><li><strong>检查代理模式</strong>：如果是”直连”模式（Direct），所有流量都不走代理。确保模式是”规则”（Rule）或”全局”（Global）。</li><li><strong>查看机场公告</strong>：如果所有节点都不行，可能是机场整体出了问题。登录机场官网看看有没有维护通知或公告。</li></ol><h3 id="Q：需要一直开着代理吗？"><a href="#Q：需要一直开着代理吗？" class="headerlink" title="Q：需要一直开着代理吗？"></a>Q：需要一直开着代理吗？</h3><p>不需要。代理只在你要访问被屏蔽网站时才需要开启。平时不用 Google、YouTube 这些的话，关掉代理完全没问题。</p><p>更好的做法是使用<strong>规则模式</strong>——客户端会自动判断哪些网站需要走代理，哪些直连。这样你不需要频繁手动开关，代理一直开着也不会影响国内网站的访问速度。</p><h3 id="Q：代理会让网速变慢吗？"><a href="#Q：代理会让网速变慢吗？" class="headerlink" title="Q：代理会让网速变慢吗？"></a>Q：代理会让网速变慢吗？</h3><p>分情况：</p><ul><li><strong>访问国外网站</strong>：通常会<strong>更快</strong>。因为从中国直连国外网站会受到 GFW 的干扰和限速，走代理反而绕开了这些干扰。</li><li><strong>访问国内网站</strong>：如果流量走了代理，确实可能变慢——数据需要绕到代理服务器再回来。所以建议使用规则模式，让国内流量直连，避免不必要的绕路。</li></ul><h3 id="Q：手机上的-VPN-图标是什么意思？"><a href="#Q：手机上的-VPN-图标是什么意思？" class="headerlink" title="Q：手机上的 VPN 图标是什么意思？"></a>Q：手机上的 VPN 图标是什么意思？</h3><p>iOS 和 Android 上，代理客户端需要通过系统的 VPN 接口来接管网络流量，所以会在状态栏显示一个 VPN 图标。这<strong>不代表</strong>你在使用传统意义上的 VPN 服务，只是操作系统的一种显示方式。你实际使用的仍然是代理协议（VMess、VLESS、Trojan 等）。</p><h3 id="Q：多个设备可以用同一个订阅链接吗？"><a href="#Q：多个设备可以用同一个订阅链接吗？" class="headerlink" title="Q：多个设备可以用同一个订阅链接吗？"></a>Q：多个设备可以用同一个订阅链接吗？</h3><p>可以。大多数机场允许在多个设备上使用同一个订阅链接（通常有同时在线设备数限制，比如 3-5 台）。你只需要在每台设备上分别导入同一个订阅链接即可。</p><h3 id="Q：订阅链接过期了怎么办？"><a href="#Q：订阅链接过期了怎么办？" class="headerlink" title="Q：订阅链接过期了怎么办？"></a>Q：订阅链接过期了怎么办？</h3><p>订阅链接本身通常不会过期。但如果你的机场套餐到期了，订阅链接虽然还能导入，里面的节点会全部无法连接。续费套餐后，更新一下订阅就能恢复正常。</p><hr><h2 id="下一步"><a href="#下一步" class="headerlink" title="下一步"></a>下一步</h2><p>你已经完成了代理的基础配置。如果一切顺利，现在可以正常访问 Google、YouTube 等网站了。</p><p>接下来你可以了解的内容：</p><ul><li><a href="./software-overview.md">各平台客户端详细介绍</a> — 深入了解你正在使用的客户端有哪些高级功能</li><li>协议和传输方式 — 了解 VLESS、Reality 等这些名词背后的技术原理</li><li><a href="/posts/what-are-rules/">什么是分流规则</a> — 自定义哪些网站走代理、哪些直连，甚至精确到某个 App</li><li>DNS 配置优化 — 解决 DNS 泄漏、DNS 污染等进阶问题</li></ul><p>不着急，<strong>先用起来，等遇到具体问题再深入研究</strong>。</p>]]></content>
      
      
      <categories>
          
          <category> 入门指南 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> Clash Verge </tag>
            
            <tag> 配置 </tag>
            
            <tag> 教程 </tag>
            
            <tag> Shadowrocket </tag>
            
            <tag> v2rayNG </tag>
            
            <tag> 新手入门 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>GeoIP / GeoSite 数据库：原理与更新</title>
      <link href="/posts/geoip-geosite/"/>
      <url>/posts/geoip-geosite/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：GeoIP 和 GeoSite 是代理客户端用于分流判断的核心数据库。GeoIP 将 IP 地址映射到国家&#x2F;地区，GeoSite 将域名分类到不同类别（如 cn、google、netflix）。理解它们的原理和更新方式，有助于你解决分流不准确的问题。</p></blockquote><h2 id="GeoIP-是什么"><a href="#GeoIP-是什么" class="headerlink" title="GeoIP 是什么"></a>GeoIP 是什么</h2><h3 id="定义"><a href="#定义" class="headerlink" title="定义"></a>定义</h3><p>GeoIP 数据库的作用很直观：给定一个 IP 地址，告诉你这个 IP 属于哪个国家或地区。</p><p>代理客户端利用这个能力来做分流。最典型的规则就是：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">GEOIP,CN,DIRECT</span><br></pre></td></tr></table></figure><p>含义是：当客户端拦截到一个网络请求，解析出目标 IP 地址后，在 GeoIP 数据库中查询这个 IP 的归属地。如果结果是 CN（中国），则走直连；否则继续匹配后续规则。</p><p>举个例子：你访问百度，客户端拿到目标 IP <code>39.156.66.10</code>，查 GeoIP 数据库，结果是 CN。命中 <code>GEOIP,CN,DIRECT</code>，走直连。你访问 Google，目标 IP <code>142.250.80.46</code>，查 GeoIP，结果是 US。不命中 CN 规则，继续匹配后面的规则，最终走代理。</p><p>在整套分流逻辑中，<code>GEOIP,CN,DIRECT</code> 通常放在规则列表的倒数第二条（最后一条是 <code>MATCH</code> 兜底），充当”所有中国 IP 一律直连”的安全网。即使某个国内网站没有被任何域名规则命中，只要它的服务器 IP 在 GeoIP 数据库中标记为中国，就会被这条规则拦下来走直连。</p><p><img src="/images/inline/geoip-map.jpg" alt="GeoIP 全球 IP 地理位置分布"><br><em>图片来源：<a href="https://stackoverflow.com/">Stack Overflow</a></em></p><h3 id="数据来源"><a href="#数据来源" class="headerlink" title="数据来源"></a>数据来源</h3><p>GeoIP 数据库不是凭空造的，它的数据来源有几个层面。</p><p><strong>MaxMind GeoLite2</strong> 是最知名的 GeoIP 数据提供商。MaxMind 的商业版 GeoIP2 数据库被大量企业和安全服务使用，GeoLite2 是其免费版本，精度略低但对代理分流来说完全够用。MaxMind 通过收集各级互联网注册机构（RIR）公开的 IP 分配数据，结合自身的网络探测和用户反馈，构建出全球 IP 地理位置数据库。注册后即可免费下载，每周更新一次。</p><p><strong>DB-IP</strong> 是另一家 IP 地理位置数据提供商，同样提供免费版本。覆盖范围和 MaxMind 类似，两者数据互为补充。</p><p>但对于科学上网用户来说，更重要的是<strong>社区维护的专用版本</strong>。原版 MaxMind 数据虽然通用，但并非针对代理场景优化。社区项目对数据做了以下改进：</p><ul><li><strong><a href="https://github.com/Loyalsoldier/geoip">Loyalsoldier&#x2F;geoip</a></strong>：最流行的社区 GeoIP 项目。它在 MaxMind 和 DB-IP 数据的基础上，合并了中国大陆的 CIDR 数据（来自 IPIP.net 等更精准的国内 IP 数据源），移除了不可达的 IP 段，增强了 CN 数据的准确性。对于代理使用场景，这个项目的数据比原版 MaxMind 更可靠。</li><li><strong><a href="https://github.com/MetaCubeX/meta-rules-dat">MetaCubeX&#x2F;meta-rules-dat</a></strong>：mihomo（原 Clash Meta）官方维护的规则数据项目。它打包了适用于 mihomo 内核的 GeoIP 数据，和 mihomo 的兼容性最好。如果你使用 <a href="https://github.com/clash-verge-rev/clash-verge-rev">Clash Verge Rev</a> 等基于 mihomo 的客户端，优先使用这个项目的数据。</li></ul><h3 id="数据格式"><a href="#数据格式" class="headerlink" title="数据格式"></a>数据格式</h3><p>不同的代理内核使用不同的 GeoIP 数据格式，这是很多人踩坑的地方——下载了错误格式的文件，客户端根本无法读取。</p><p><strong><code>.mmdb</code>（MaxMind Database）</strong>：最通用的格式。MaxMind 设计的二进制数据库格式，查询速度快，文件体积适中。Clash、mihomo、Surge、Shadowrocket 等主流客户端都支持这个格式。文件名通常是 <code>Country.mmdb</code>。mihomo 还支持一种优化的变体 <code>geoip.metadb</code>，加载速度更快。</p><p><strong><code>.dat</code></strong>：V2Ray 和 Xray 使用的 Protobuf 格式。文件名为 <code>geoip.dat</code>。只有 V2Ray 系客户端（v2rayN、Xray 等）使用这个格式。</p><p><strong><code>.db</code></strong>：sing-box 使用的专有格式。如果你使用 sing-box 内核的客户端，需要这个格式的文件。</p><p>选择格式的原则很简单：<strong>你用什么客户端，就下载对应格式的文件。</strong> 如果搞不清，去客户端的文档或 GitHub 仓库看一下它需要什么文件名和格式。</p><h3 id="准确性"><a href="#准确性" class="headerlink" title="准确性"></a>准确性</h3><p>GeoIP 数据库不是百分之百准确的，这是由 IP 地址分配的性质决定的。</p><p><strong>IP 段会被重新分配。</strong> 一个 IP 段今天属于中国的运营商，过几个月可能被交易到了其他国家的运营商手中。数据库需要追踪这些变化，但总有一定的延迟。</p><p><strong>新分配的 IP 段可能没有及时收录。</strong> 当一个新的 IP 段被分配给某个国家的运营商时，GeoIP 数据库可能还没有来得及更新。在这段空窗期，这些 IP 可能被标记为”未知”或被归到错误的国家。</p><p><strong>Anycast 和 CDN 地址比较特殊。</strong> Anycast IP（如 Cloudflare 的 <code>1.1.1.1</code>）在全球多个数据中心同时使用同一个 IP，严格来说它不属于任何单一国家。CDN 的边缘节点也类似——同一个域名在不同地区解析到不同的 IP，这些 IP 分布在全球各地。GeoIP 数据库对这类 IP 的归属判断可能不稳定。</p><p>不过，对于代理分流来说，这些不准确的情况影响很小。绝大多数国内网站的服务器 IP 都能被正确识别为 CN，绝大多数境外网站的 IP 也能被正确识别为非 CN。偶尔有一两个 IP 判断失误，不会影响整体体验。如果你发现某个特定网站的路由不正确，可以用域名规则（<code>DOMAIN-SUFFIX</code>）单独处理它，不需要依赖 GeoIP。</p><h2 id="GeoSite-是什么"><a href="#GeoSite-是什么" class="headerlink" title="GeoSite 是什么"></a>GeoSite 是什么</h2><h3 id="定义-1"><a href="#定义-1" class="headerlink" title="定义"></a>定义</h3><p>GeoSite 数据库做的事情和 GeoIP 互补：GeoIP 按 IP 地址分类，GeoSite 按域名分类。</p><p>GeoSite 将互联网上的域名按照用途和属性分组，每个组有一个标签名称。代理客户端通过查询 GeoSite 数据库，判断某个域名属于哪个类别，从而决定路由策略。</p><p>常见的类别包括：</p><ul><li><strong><code>cn</code></strong>：中国网站的域名。baidu.com、taobao.com、bilibili.com 等。</li><li><strong><code>google</code></strong>：所有 Google 相关的域名。google.com、googleapis.com、youtube.com 等。</li><li><strong><code>netflix</code></strong>：Netflix 相关域名。</li><li><strong><code>category-ads-all</code></strong>：广告和追踪器域名的汇总。</li><li><strong><code>geolocation-cn</code></strong>：需要使用中国 DNS 解析的域名集合。</li><li><strong><code>geolocation-!cn</code></strong>：不应该使用中国 DNS 解析的域名集合。</li><li><strong><code>tld-cn</code></strong>：使用 <code>.cn</code> 顶级域名的所有域名。</li></ul><p>这些类别不是随意命名的。它们来自社区维护的域名列表项目，经过大量贡献者的持续更新和审核。</p><h3 id="用法示例"><a href="#用法示例" class="headerlink" title="用法示例"></a>用法示例</h3><p>在 Clash（mihomo）的配置中，GeoSite 通过 <code>GEOSITE</code> 规则类型使用：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">rules:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOSITE,category-ads-all,REJECT</span>        <span class="comment"># 屏蔽广告域名</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOSITE,cn,DIRECT</span>                       <span class="comment"># 中国网站直连</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOSITE,google,Proxy</span>                    <span class="comment"># Google 走代理</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOSITE,netflix,Streaming</span>               <span class="comment"># Netflix 走流媒体节点组</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOSITE,telegram,Proxy</span>                  <span class="comment"># Telegram 走代理</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOIP,CN,DIRECT</span>                         <span class="comment"># 中国 IP 直连（兜底）</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">MATCH,Proxy</span>                             <span class="comment"># 其余走代理（最终兜底）</span></span><br></pre></td></tr></table></figure><p>这套规则的工作流程是：客户端拦截到一个网络请求后，提取目标域名，先在 GeoSite 数据库中查找这个域名属于哪个类别。从上到下逐条匹配——如果域名在 <code>category-ads-all</code> 里，REJECT；如果在 <code>cn</code> 里，DIRECT；如果在 <code>google</code> 里，走 Proxy。如果所有 GeoSite 规则都没命中，继续检查 GeoIP（基于 IP 地址），最后由 MATCH 兜底。</p><p>在 V2Ray&#x2F;Xray 的配置中，用法类似但语法不同：</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;routing&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;rules&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;field&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;domain&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;geosite:category-ads-all&quot;</span><span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;outboundTag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;block&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;field&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;domain&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;geosite:cn&quot;</span><span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;outboundTag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;direct&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">]</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h3 id="数据来源-1"><a href="#数据来源-1" class="headerlink" title="数据来源"></a>数据来源</h3><p>GeoSite 数据的上游主要来自以下项目：</p><p><strong><a href="https://github.com/v2fly/domain-list-community">v2fly&#x2F;domain-list-community</a></strong>：这是 GeoSite 数据的”源头”项目。V2Ray 社区维护，任何人都可以通过 Pull Request 添加新域名或新类别。项目的数据以纯文本格式存储，每个类别一个文件，内容就是属于这个类别的域名列表。编译工具将这些文本文件打包成二进制的 <code>geosite.dat</code> 文件。</p><p><strong>Loyalsoldier 的增强版本</strong>：在 v2fly&#x2F;domain-list-community 的基础上，Loyalsoldier 合并了额外的数据源，增加了更多域名覆盖，改善了分类的准确性。很多社区用户使用的实际上是这个增强版。</p><p><strong>MetaCubeX&#x2F;meta-rules-dat</strong>：mihomo 官方的数据项目，将上游数据编译为 mihomo 内核可用的格式。如果你用的是 Clash Verge Rev 等基于 mihomo 的客户端，GeoSite 数据通常来自这个项目。</p><h2 id="GeoIP-vs-GeoSite-vs-Rule-Provider"><a href="#GeoIP-vs-GeoSite-vs-Rule-Provider" class="headerlink" title="GeoIP vs GeoSite vs Rule-Provider"></a>GeoIP vs GeoSite vs Rule-Provider</h2><p>这三种机制都用于分流，但工作方式和适用场景不同。</p><table><thead><tr><th>特性</th><th>GeoIP</th><th>GeoSite</th><th>Rule-Provider</th></tr></thead><tbody><tr><td>匹配对象</td><td>IP 地址</td><td>域名</td><td>IP 或域名（取决于 behavior）</td></tr><tr><td>数据格式</td><td>二进制数据库（.mmdb&#x2F;.dat&#x2F;.db）</td><td>二进制数据库（.dat&#x2F;.db）</td><td>文本&#x2F;YAML&#x2F;MRS 文件</td></tr><tr><td>更新方式</td><td>需替换整个文件</td><td>需替换整个文件</td><td>客户端自动通过 URL 定期更新</td></tr><tr><td>粒度</td><td>按国家&#x2F;地区（CN、US、JP 等）</td><td>按类别（cn、google、netflix 等）</td><td>完全自定义，可以是任意域名&#x2F;IP 组合</td></tr><tr><td>加载速度</td><td>快（预编译的二进制数据结构）</td><td>快（预编译的二进制数据结构）</td><td>中等（需运行时解析文本文件）</td></tr><tr><td>自定义难度</td><td>难（需重新编译整个数据库）</td><td>难（需重新编译整个数据库）</td><td>简单（文本编辑器修改即可）</td></tr><tr><td>典型文件大小</td><td>5-15 MB</td><td>3-10 MB</td><td>单个文件通常 10-500 KB</td></tr></tbody></table><h3 id="什么时候用哪个"><a href="#什么时候用哪个" class="headerlink" title="什么时候用哪个"></a>什么时候用哪个</h3><p><strong>GeoIP</strong> 适合做国家级别的 IP 路由。最经典的用法就是 <code>GEOIP,CN,DIRECT</code>——把所有中国 IP 一律直连。你不需要也不可能把所有中国 IP 段逐条列出来，GeoIP 数据库帮你搞定了这件事。</p><p><strong>GeoSite</strong> 适合做域名类别路由。比如 <code>GEOSITE,google,Proxy</code> 会把所有 Google 相关域名（google.com、googleapis.com、gstatic.com、youtube.com 等几百个域名）一次性路由到代理。你不需要知道 Google 具体有多少个域名，GeoSite 数据库帮你维护这个列表。</p><p><strong>Rule-Provider</strong> 适合精细控制特定服务的路由。比如你想单独控制 Netflix 走专用流媒体节点、AI 服务走特定地区节点，或者自定义一组公司内网域名直连。Rule-Provider 的优势是灵活性——你可以随意编辑文本文件添加或删除域名，客户端还能自动从 URL 更新。</p><p><strong>实际配置中三者同时使用。</strong> 一个典型的分流方案是：Rule-Provider 处理需要精细控制的特定服务（Netflix、Telegram、AI 等），GeoSite 处理大类域名（cn 直连、广告屏蔽），GeoIP 作为 IP 层面的兜底（CN 直连），最后 MATCH 兜底一切。</p><h2 id="如何更新-GeoIP-GeoSite-数据库"><a href="#如何更新-GeoIP-GeoSite-数据库" class="headerlink" title="如何更新 GeoIP&#x2F;GeoSite 数据库"></a>如何更新 GeoIP&#x2F;GeoSite 数据库</h2><p>数据库文件不会自动更新（这一点和 rule-provider 不同）。你需要主动获取新版本并替换旧文件。</p><h3 id="Clash-Verge-Rev"><a href="#Clash-Verge-Rev" class="headerlink" title="Clash Verge Rev"></a>Clash Verge Rev</h3><p>Clash Verge Rev 通常在客户端版本更新时一并更新 GeoIP 和 GeoSite 数据库。如果你想手动更新：</p><ol><li>打开 Clash Verge Rev，进入”设置”页面。</li><li>找到 GeoIP&#x2F;GeoSite 相关的数据库设置区域（具体位置因版本而异）。</li><li>部分版本提供了直接更新数据库的按钮。</li></ol><p>如果客户端没有内置更新功能，可以手动下载文件并放置到配置目录：</p><ul><li>Windows 配置目录：<code>%USERPROFILE%\.config\clash-verge-rev\</code>（mihomo 子目录下）</li><li>macOS 配置目录：<code>~/.config/clash-verge-rev/</code></li><li>Linux 配置目录：<code>~/.config/clash-verge-rev/</code></li></ul><h3 id="手动更新"><a href="#手动更新" class="headerlink" title="手动更新"></a>手动更新</h3><p><strong>mihomo &#x2F; Clash 系列客户端：</strong></p><p>需要下载的文件：</p><ul><li>GeoIP：<code>Country.mmdb</code> 或 <code>geoip.metadb</code></li><li>GeoSite：<code>geosite.dat</code> 或 <code>GeoSite.dat</code></li></ul><p>下载来源：<code>github.com/MetaCubeX/meta-rules-dat/releases</code></p><p>将下载的文件放到 mihomo 的配置目录，覆盖同名旧文件，重启客户端生效。</p><p><strong>V2Ray &#x2F; Xray 系列客户端：</strong></p><p>需要下载的文件：</p><ul><li>GeoIP：<code>geoip.dat</code></li><li>GeoSite：<code>geosite.dat</code></li></ul><p>下载来源：<code>github.com/Loyalsoldier/v2ray-rules-dat/releases</code></p><p>将文件放到 V2Ray&#x2F;Xray 的资源目录（通常和可执行文件同目录），覆盖旧文件，重启生效。</p><p><strong>sing-box 客户端：</strong></p><p>需要下载的文件：</p><ul><li>GeoIP：<code>geoip.db</code></li><li>GeoSite：<code>geosite.db</code></li></ul><p>下载来源：<code>github.com/SagerNet/sing-geoip/releases</code> 和 <code>github.com/SagerNet/sing-geosite/releases</code></p><p>sing-box 较新版本推荐使用 rule-set 替代 GeoIP&#x2F;GeoSite，具体参考 sing-box 官方文档。</p><h3 id="更新频率"><a href="#更新频率" class="headerlink" title="更新频率"></a>更新频率</h3><p>GeoIP 和 GeoSite 数据库的上游项目通常每周或每月发布新版本。对于普通用户，没有必要每天更新。</p><p><strong>建议的更新节奏</strong>：</p><ul><li><strong>正常使用</strong>：每 1-3 个月更新一次。IP 分配和域名归属的变化并不频繁。</li><li><strong>遇到问题时</strong>：如果你发现某个网站的分流不正确（比如一个新开的中国网站走了代理，或者某个境外服务没有正确路由），先尝试更新数据库文件，很可能新版本已经修复了这个问题。</li><li><strong>客户端更新时</strong>：更新代理客户端版本时，顺带检查一下数据库文件是否也需要更新。</li></ul><p>不需要追求”实时最新”。数据库的变化是渐进式的，隔几周更新一次不会错过什么关键变化。</p><h2 id="GeoSite-类别速查"><a href="#GeoSite-类别速查" class="headerlink" title="GeoSite 类别速查"></a>GeoSite 类别速查</h2><p>以下是 GeoSite 数据库中常用的类别名称及其含义，方便你写分流规则时参考：</p><table><thead><tr><th>类别名称</th><th>包含内容</th><th>典型用法</th></tr></thead><tbody><tr><td><code>cn</code></td><td>中国网站域名</td><td><code>GEOSITE,cn,DIRECT</code></td></tr><tr><td><code>geolocation-cn</code></td><td>需要用中国 DNS 解析的域名</td><td>DNS 分流规则</td></tr><tr><td><code>geolocation-!cn</code></td><td>不应用中国 DNS 解析的域名</td><td>DNS 分流规则</td></tr><tr><td><code>google</code></td><td>Google 全系服务</td><td><code>GEOSITE,google,Proxy</code></td></tr><tr><td><code>youtube</code></td><td>YouTube 相关域名</td><td><code>GEOSITE,youtube,Proxy</code></td></tr><tr><td><code>facebook</code></td><td>Facebook&#x2F;Meta 服务</td><td><code>GEOSITE,facebook,Proxy</code></td></tr><tr><td><code>twitter</code></td><td>Twitter&#x2F;X 服务</td><td><code>GEOSITE,twitter,Proxy</code></td></tr><tr><td><code>telegram</code></td><td>Telegram 相关域名</td><td><code>GEOSITE,telegram,Proxy</code></td></tr><tr><td><code>netflix</code></td><td>Netflix 域名</td><td><code>GEOSITE,netflix,Streaming</code></td></tr><tr><td><code>openai</code></td><td>OpenAI&#x2F;ChatGPT 域名</td><td><code>GEOSITE,openai,AI</code></td></tr><tr><td><code>apple</code></td><td>Apple 服务</td><td><code>GEOSITE,apple,Apple</code></td></tr><tr><td><code>microsoft</code></td><td>Microsoft 服务</td><td><code>GEOSITE,microsoft,Proxy</code></td></tr><tr><td><code>category-ads-all</code></td><td>广告和追踪器域名汇总</td><td><code>GEOSITE,category-ads-all,REJECT</code></td></tr><tr><td><code>tld-cn</code></td><td><code>.cn</code> 顶级域名</td><td><code>GEOSITE,tld-cn,DIRECT</code></td></tr><tr><td><code>private</code></td><td>私有域名（localhost 等）</td><td><code>GEOSITE,private,DIRECT</code></td></tr></tbody></table><p>注意：不同数据源支持的类别可能略有差异。以你实际使用的 GeoSite 数据文件所含的类别为准。如果你不确定某个类别是否存在，可以查看对应项目的 GitHub 仓库中的目录结构。</p><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="为什么某个中国网站走了代理？"><a href="#为什么某个中国网站走了代理？" class="headerlink" title="为什么某个中国网站走了代理？"></a>为什么某个中国网站走了代理？</h3><p>这种情况通常有两个原因：</p><ol><li><strong>域名不在 GeoSite 的 cn 列表中。</strong> GeoSite 数据库虽然覆盖面广，但不可能收录每一个中国网站的域名。一些新建的网站、小众的网站、或者使用非常规域名的网站可能没有被收录。</li><li><strong>IP 不在 GeoIP 的 CN 范围内。</strong> 部分中国服务使用了境外的 CDN 或服务器（比如用 Cloudflare 加速的中国网站），其 IP 被 GeoIP 标记为非 CN。</li></ol><p><strong>解决方法</strong>：手动添加一条 <code>DOMAIN-SUFFIX</code> 或 <code>DOMAIN</code> 规则，将这个网站设为 DIRECT。把这条规则放在 GEOSITE 和 GEOIP 规则之前。或者等待数据库更新——如果这个网站有一定知名度，社区贡献者迟早会把它加入列表。</p><h3 id="GeoIP-和-GeoSite-需要同时用吗？"><a href="#GeoIP-和-GeoSite-需要同时用吗？" class="headerlink" title="GeoIP 和 GeoSite 需要同时用吗？"></a>GeoIP 和 GeoSite 需要同时用吗？</h3><p><strong>推荐同时使用。</strong> 两者的匹配维度不同，互为补充：</p><ul><li>GeoSite 匹配域名，在 DNS 解析之前就能判断路由。速度更快，精度更高（域名是确定性的，一个域名只属于一个网站）。</li><li>GeoIP 匹配 IP 地址，在域名规则未命中时作为兜底。它能覆盖那些没有被 GeoSite 收录的域名——只要服务器 IP 在中国，就走直连。</li></ul><p>只用 GeoSite 不用 GeoIP：可能漏掉一些没被收录到 cn 类别的国内域名，它们的流量会走代理。</p><p>只用 GeoIP 不用 GeoSite：所有域名都需要先进行 DNS 解析拿到 IP 才能判断路由，效率较低。而且某些使用境外 CDN 的国内网站可能被错误地代理。</p><p>两者配合是最稳妥的方案。</p><h3 id="数据库文件存放在哪里？"><a href="#数据库文件存放在哪里？" class="headerlink" title="数据库文件存放在哪里？"></a>数据库文件存放在哪里？</h3><p>不同客户端的存放位置不同：</p><ul><li><strong>Clash Verge Rev (Windows)</strong>：<code>%USERPROFILE%\.config\clash-verge-rev\</code>（查看其 mihomo 工作目录）</li><li><strong>Clash Verge Rev (macOS&#x2F;Linux)</strong>：<code>~/.config/clash-verge-rev/</code></li><li><strong>v2rayN (Windows)</strong>：与 v2rayN.exe 同目录，或在 <code>bin/xray/</code> 子目录中</li><li><strong>sing-box</strong>：配置文件中 <code>experimental.cache_file</code> 指定的目录</li></ul><p>具体路径可以在客户端的设置界面中找到。大多数客户端都提供了”打开配置目录”或类似功能的入口。</p><h3 id="用了-rule-provider-还需要-GEOIP-GEOSITE-吗？"><a href="#用了-rule-provider-还需要-GEOIP-GEOSITE-吗？" class="headerlink" title="用了 rule-provider 还需要 GEOIP&#x2F;GEOSITE 吗？"></a>用了 rule-provider 还需要 GEOIP&#x2F;GEOSITE 吗？</h3><p><strong>可以共存，推荐共存。</strong></p><p>Rule-provider 提供对特定服务的精细控制——你可以用它单独管理 Netflix、Telegram、AI 服务等流量的路由策略。</p><p>GEOSITE 和 GEOIP 提供宏观的”大网”路由——确保所有中国域名和中国 IP 直连，所有广告域名被屏蔽。</p><p>典型的配置结构是：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">rules:</span></span><br><span class="line">  <span class="comment"># rule-provider 处理特定服务（精细控制）</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,reject,REJECT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,netflix,Streaming</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,openai,AI</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,telegram,Proxy</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># GEOSITE 处理大类（宏观路由）</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOSITE,cn,DIRECT</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># GEOIP 兜底（IP 层面）</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOIP,CN,DIRECT</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># 最终兜底</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">MATCH,Proxy</span></span><br></pre></td></tr></table></figure><p>这种分层结构让你既有精细控制的灵活性，又有宏观路由的安全网。</p><h3 id="GeoSite-和-rule-provider-的-domain-behavior-有什么区别？"><a href="#GeoSite-和-rule-provider-的-domain-behavior-有什么区别？" class="headerlink" title="GeoSite 和 rule-provider 的 domain behavior 有什么区别？"></a>GeoSite 和 rule-provider 的 domain behavior 有什么区别？</h3><p>功能上几乎等价——都是根据域名来匹配流量。区别在于：</p><ul><li><strong>GeoSite</strong> 是预编译的二进制数据库，所有类别打包在一个文件中（<code>geosite.dat</code>），加载速度极快，但修改困难（需要重新编译）。</li><li><strong>Rule-Provider（domain behavior）</strong> 是纯文本文件，每个类别一个独立文件，客户端可以自动从 URL 更新，修改简单（文本编辑器即可）。</li></ul><p>如果你不需要自定义域名列表，两者都能用。如果你需要经常修改或添加域名，rule-provider 更方便。如果你追求极致的加载速度，GeoSite 略有优势。</p><p>实际上，很多配置模板混合使用两者：GeoSite 处理基础的 CN 直连和广告屏蔽，rule-provider 处理需要精细控制的特定服务。</p>]]></content>
      
      
      <categories>
          
          <category> 规则与分流 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> Clash </tag>
            
            <tag> GeoIP </tag>
            
            <tag> GeoSite </tag>
            
            <tag> 规则 </tag>
            
            <tag> 数据库 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>Clash Verge Rev 使用指南</title>
      <link href="/posts/clash-verge-guide/"/>
      <url>/posts/clash-verge-guide/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：Clash Verge Rev 是当前桌面平台上最受欢迎的代理客户端之一，基于 <a href="https://github.com/MetaCubeX/mihomo">mihomo</a> 内核，提供直观的图形界面和强大的规则分流能力。本文将从安装到进阶配置，系统地讲解它的核心功能和使用方法，帮助你充分发挥这个工具的能力。</p></blockquote><hr><h2 id="Clash-Verge-Rev-是什么"><a href="#Clash-Verge-Rev-是什么" class="headerlink" title="Clash Verge Rev 是什么"></a>Clash Verge Rev 是什么</h2><p>Clash Verge Rev 是一个跨平台的代理客户端，支持 Windows、macOS 和 Linux。它的前身是 Clash Verge，在原项目停止维护后由社区接手继续开发，加上了”Rev”后缀以示区别。</p><p>它的底层使用的是 <a href="https://github.com/MetaCubeX/mihomo">mihomo</a>（原 Clash Meta）内核。mihomo 是目前 Clash 生态中功能最全面的内核，支持 VLESS、Reality、Hysteria 2、TUIC 等新一代协议——这意味着 Clash Verge Rev 不仅能用于传统的 Shadowsocks 和 VMess，也能跟上最新的协议发展。</p><p>项目地址：<a href="https://github.com/clash-verge-rev/clash-verge-rev">https://github.com/clash-verge-rev/clash-verge-rev</a></p><hr><h2 id="安装"><a href="#安装" class="headerlink" title="安装"></a>安装</h2><h3 id="Windows"><a href="#Windows" class="headerlink" title="Windows"></a>Windows</h3><ol><li>打开 <a href="https://github.com/clash-verge-rev/clash-verge-rev/releases">Clash Verge Rev 的 GitHub Releases 页面</a>。</li><li>在最新版本的 Assets 列表中，找到文件名包含 <code>x64-setup.exe</code> 或 <code>x64.msi</code> 的安装包。绝大多数现代 Windows 电脑选 <code>x64</code> 版本即可；如果你的设备使用 ARM 处理器（部分高通骁龙笔记本），选 <code>arm64</code> 版本。</li><li>下载后双击运行，按向导提示安装。安装过程可能会提示安装 <strong>WebView2 Runtime</strong>，同意即可。</li><li>安装完成后，在桌面或开始菜单找到 Clash Verge Rev 图标，双击打开。</li></ol><h3 id="macOS"><a href="#macOS" class="headerlink" title="macOS"></a>macOS</h3><ol><li>同样在 <a href="https://github.com/clash-verge-rev/clash-verge-rev/releases">Releases 页面</a> 下载 <code>.dmg</code> 文件。Apple Silicon（M1&#x2F;M2&#x2F;M3&#x2F;M4）芯片选 <code>aarch64.dmg</code>，Intel 芯片选 <code>x64.dmg</code>。不确定芯片型号的话，点左上角苹果菜单 →”关于本机”查看。</li><li>打开 <code>.dmg</code>，将应用拖入 Applications 文件夹。</li><li>首次打开时 macOS 可能会拦截，提示”无法验证开发者”。前往 <strong>系统设置 → 隐私与安全性</strong>，在底部找到 Clash Verge Rev 的提示，点击”仍要打开”。</li></ol><h3 id="Linux"><a href="#Linux" class="headerlink" title="Linux"></a>Linux</h3><p>Linux 用户可以根据发行版选择对应的包格式：</p><ul><li>Debian&#x2F;Ubuntu 系：下载 <code>.deb</code> 包，运行 <code>sudo dpkg -i xxx.deb</code></li><li>Fedora&#x2F;RHEL 系：下载 <code>.rpm</code> 包</li><li>通用方案：下载 <code>.AppImage</code>，添加执行权限后直接运行</li></ul><p>注意 Linux 下 TUN 模式需要额外的权限配置，后面会讲到。</p><hr><h2 id="导入订阅"><a href="#导入订阅" class="headerlink" title="导入订阅"></a>导入订阅</h2><p>安装完成并打开客户端后，第一件事是导入你的机场订阅。</p><ol><li>点击左侧菜单栏的 <strong>Profiles</strong>（配置）标签。</li><li>页面顶部有一个输入框和一个下载按钮。</li><li>将你从机场获取的<strong>订阅链接</strong>粘贴进输入框，点击下载按钮或按回车。</li><li>等待几秒钟，客户端会拉取订阅内容并解析出所有节点。</li><li>成功后下方会出现一个新的配置项卡片，显示配置名称、节点数量和更新时间。<strong>确保该配置项被选中</strong>（高亮状态）。</li></ol><h3 id="订阅格式"><a href="#订阅格式" class="headerlink" title="订阅格式"></a>订阅格式</h3><p>Clash Verge Rev 使用的是 Clash（YAML）格式的订阅。大多数机场都提供这种格式，有些会标注为”Clash”或”Clash Meta”订阅。如果你的机场只提供通用订阅链接，客户端通常也能自动识别并转换——mihomo 内核对多种格式都有兼容处理。</p><h3 id="定时更新"><a href="#定时更新" class="headerlink" title="定时更新"></a>定时更新</h3><p>配置项卡片的右侧有一个菜单按钮，点击可以设置<strong>自动更新间隔</strong>。建议设为每 12 小时或每 24 小时自动更新一次，这样机场新增或调整节点后你不需要手动刷新。</p><hr><h2 id="代理模式选择：系统代理-vs-TUN"><a href="#代理模式选择：系统代理-vs-TUN" class="headerlink" title="代理模式选择：系统代理 vs TUN"></a>代理模式选择：系统代理 vs TUN</h2><p>导入订阅后，你需要选择一种方式让系统流量经过代理。Clash Verge Rev 提供两种核心工作模式。</p><h3 id="系统代理"><a href="#系统代理" class="headerlink" title="系统代理"></a>系统代理</h3><p>点击 <strong>Settings</strong>（设置）标签，找到 <strong>System Proxy</strong> 开关并打开。</p><p>系统代理的原理是在本地启动一个 HTTP&#x2F;SOCKS5 代理服务器，然后修改操作系统的代理设置，让支持系统代理的应用（主要是浏览器）把流量转发到这个端口。</p><ul><li><strong>优点</strong>：配置简单，无需管理员权限，对系统侵入性低</li><li><strong>缺点</strong>：只能捕获部分应用的流量，游戏、部分命令行工具、UDP 流量等不走系统代理</li></ul><p>对于大多数只需要浏览器翻墙的用户，系统代理已经够用。</p><h3 id="TUN-模式"><a href="#TUN-模式" class="headerlink" title="TUN 模式"></a>TUN 模式</h3><p>在 Settings 标签中找到 <strong>TUN Mode</strong> 开关并打开。首次开启会弹出管理员权限请求，需要同意。</p><p>TUN 模式通过创建一个虚拟网卡并修改系统路由表，让<strong>所有网络流量</strong>都经过代理客户端处理。游戏、原生应用、UDP 流量——全部都会被捕获。</p><ul><li><strong>优点</strong>：全局生效，无遗漏，DNS 查询也能被接管</li><li><strong>缺点</strong>：需要管理员权限，可能与 VPN 或虚拟机软件冲突</li></ul><p>关于两种模式的详细对比，参见 <a href="/posts/tun-vs-system-proxy/">TUN 模式 vs 系统代理</a>。</p><h3 id="TUN-模式下的协议栈选择"><a href="#TUN-模式下的协议栈选择" class="headerlink" title="TUN 模式下的协议栈选择"></a>TUN 模式下的协议栈选择</h3><p>在 TUN 设置区域，你会看到 <strong>Stack</strong> 选项，通常有三个选项：</p><table><thead><tr><th>协议栈</th><th>特点</th></tr></thead><tbody><tr><td><strong>system</strong></td><td>使用系统原生网络栈，性能最好，但兼容性略低</td></tr><tr><td><strong>gVisor</strong></td><td>用户态网络栈，兼容性最好，但高带宽下 CPU 占用较高</td></tr><tr><td><strong>mixed</strong></td><td>结合两者优点，推荐选择</td></tr></tbody></table><p>新用户建议选 <strong>mixed</strong> 或 <strong>gVisor</strong>，遇到性能问题再切换到 <strong>system</strong> 尝试。</p><hr><h2 id="节点选择与延迟测试"><a href="#节点选择与延迟测试" class="headerlink" title="节点选择与延迟测试"></a>节点选择与延迟测试</h2><p>点击左侧菜单栏的 <strong>Proxies</strong>（代理）标签，你会看到机场配置好的<strong>策略组</strong>。</p><h3 id="延迟测试"><a href="#延迟测试" class="headerlink" title="延迟测试"></a>延迟测试</h3><p>每个策略组旁边有一个闪电图标，点击它可以对组内所有节点进行延迟测试。测试完成后，每个节点后面会显示延迟数值（单位 ms）：</p><ul><li><strong>&lt; 150ms</strong>（通常显示绿色）：延迟很低，体验好</li><li><strong>150~300ms</strong>（通常显示黄色）：可用，日常浏览没问题</li><li><strong>&gt; 300ms 或超时</strong>：延迟过高或不可用，建议跳过</li></ul><h3 id="选择策略"><a href="#选择策略" class="headerlink" title="选择策略"></a>选择策略</h3><p>策略组里除了具体节点外，通常还有一些自动策略可选：</p><ul><li><strong>auto &#x2F; url-test</strong>：自动选择延迟最低的节点，定期重测。适合懒人，交给程序选就行</li><li><strong>fallback</strong>：按顺序尝试节点，第一个不可用时自动切换到下一个。适合追求稳定性</li><li><strong>load-balance</strong>：在多个节点间做负载均衡。适合需要高吞吐的场景</li><li><strong>select</strong>：手动选择。你自己点哪个就用哪个</li></ul><p>如果你不想操心，把主策略组设成 <strong>auto</strong> 就行。如果你有特定需求（比如需要某个地区的 IP），就用 <strong>select</strong> 手动指定。</p><hr><h2 id="配置管理：Override-与-Merge"><a href="#配置管理：Override-与-Merge" class="headerlink" title="配置管理：Override 与 Merge"></a>配置管理：Override 与 Merge</h2><p>Clash Verge Rev 提供了一套强大的配置管理系统，允许你在不修改原始订阅的情况下自定义行为。这在订阅更新时特别有用——你的自定义规则不会被覆盖。</p><h3 id="Script（脚本覆写）"><a href="#Script（脚本覆写）" class="headerlink" title="Script（脚本覆写）"></a>Script（脚本覆写）</h3><p>在 Profiles 页面，点击底部的 <strong>Script</strong> 标签，可以编写 JavaScript 脚本来动态修改配置。比如：</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 在所有规则最前面插入一条自定义规则</span></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">default</span> <span class="keyword">function</span> <span class="title function_">main</span>(<span class="params">config</span>) &#123;</span><br><span class="line">  config.<span class="property">rules</span>.<span class="title function_">unshift</span>(<span class="string">&quot;DOMAIN-SUFFIX,openai.com,美国节点&quot;</span>);</span><br><span class="line">  <span class="keyword">return</span> config;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>这种方式灵活性最高，但需要一点编程基础。</p><h3 id="Merge（合并配置）"><a href="#Merge（合并配置）" class="headerlink" title="Merge（合并配置）"></a>Merge（合并配置）</h3><p>如果你不想写脚本，可以用 Merge 功能。它允许你用 YAML 格式来追加或覆盖配置项。比如你想修改 DNS 设置或添加自定义规则，写在 Merge 配置里就行，每次订阅更新后会自动与原始配置合并。</p><p>这两种方式的核心目的是一样的：<strong>让你的个性化配置与订阅解耦</strong>。你可以放心地更新订阅，自定义的部分不会丢失。</p><hr><h2 id="代理组与分流规则"><a href="#代理组与分流规则" class="headerlink" title="代理组与分流规则"></a>代理组与分流规则</h2><p>Clash 系客户端的核心优势之一就是强大的规则分流系统。如果你想深入了解规则的工作原理，建议阅读 <a href="/posts/what-are-rules/">什么是规则分流</a>。</p><h3 id="代理组的作用"><a href="#代理组的作用" class="headerlink" title="代理组的作用"></a>代理组的作用</h3><p>策略组不仅是节点的容器，更是分流规则的执行单元。一个典型的机场订阅可能包含这样的策略组结构：</p><ul><li><strong>节点选择</strong>：主策略组，大部分流量经过这里</li><li><strong>流媒体</strong>：Netflix、Disney+、YouTube 等流媒体服务走这个组</li><li><strong>AI 服务</strong>：ChatGPT、Claude、Gemini 等 AI 服务走这个组</li><li><strong>国内直连</strong>：匹配到国内域名和 IP 的流量直连，不走代理</li></ul><p>每个策略组可以独立选择不同的节点或自动策略，实现精细的流量控制。</p><h3 id="查看连接日志"><a href="#查看连接日志" class="headerlink" title="查看连接日志"></a>查看连接日志</h3><p>在 <strong>Connections</strong>（连接）标签页中，你可以实时查看当前所有活跃连接的详细信息：</p><ul><li>目标域名 &#x2F; IP</li><li>匹配到的规则</li><li>走的哪个策略组和节点</li><li>上传 &#x2F; 下载速度</li><li>连接持续时间</li></ul><p>这是排查”某个网站为什么打不开”最有用的工具。你可以清楚地看到请求被哪条规则匹配、走了哪个节点，从而判断是节点问题还是规则问题。</p><hr><h2 id="日志查看"><a href="#日志查看" class="headerlink" title="日志查看"></a>日志查看</h2><p><strong>Logs</strong>（日志）标签页记录了 mihomo 内核运行过程中的各种事件。当遇到问题时，日志是最重要的诊断工具。</p><p>常见的日志级别：</p><ul><li><strong>info</strong>：正常运行信息</li><li><strong>warning</strong>：警告信息，不一定影响使用但值得关注</li><li><strong>error</strong>：错误信息，通常意味着某个功能出了问题</li></ul><p>你可以在 Settings 中调整日志级别。日常使用设为 <strong>info</strong> 即可；排查问题时可以切换到 <strong>debug</strong> 获取更详细的信息。</p><hr><h2 id="常用设置"><a href="#常用设置" class="headerlink" title="常用设置"></a>常用设置</h2><h3 id="开机自启"><a href="#开机自启" class="headerlink" title="开机自启"></a>开机自启</h3><p>Settings 标签中找到 <strong>Auto Launch</strong>（开机自启）选项，打开即可。这样每次开机后代理自动生效，不需要手动打开客户端。</p><h3 id="允许局域网连接"><a href="#允许局域网连接" class="headerlink" title="允许局域网连接"></a>允许局域网连接</h3><p>打开 <strong>Allow LAN</strong> 选项后，局域网内的其他设备（手机、平板等）可以通过你的电脑来使用代理。配置方法是在其他设备的 Wi-Fi 设置中，将代理服务器设为你电脑的局域网 IP，端口设为 Clash Verge Rev 的混合端口（默认 7890）。</p><h3 id="混合端口"><a href="#混合端口" class="headerlink" title="混合端口"></a>混合端口</h3><p><strong>Mixed Port</strong> 是客户端监听的本地代理端口，默认 7890。同时支持 HTTP 和 SOCKS5 协议。通常不需要修改，但如果端口被占用可以换一个。</p><h3 id="外部控制"><a href="#外部控制" class="headerlink" title="外部控制"></a>外部控制</h3><p>Clash Verge Rev 支持通过 RESTful API 进行外部控制，这意味着你可以用其他工具（比如 Yacd 面板或命令行）来管理代理。外部控制的端口和密钥在 Settings 中可以查看和修改。</p><h3 id="服务模式"><a href="#服务模式" class="headerlink" title="服务模式"></a>服务模式</h3><p>在 Windows 上，Clash Verge Rev 支持以系统服务的方式运行。开启服务模式后，TUN 模式不需要每次都弹出管理员权限请求，而且在用户注销后代理依然保持运行。这对需要 TUN 模式的用户来说很方便。</p><p>安装服务模式：Settings → 找到 Clash Verge Service → 点击安装。</p><hr><h2 id="Linux-上的额外注意事项"><a href="#Linux-上的额外注意事项" class="headerlink" title="Linux 上的额外注意事项"></a>Linux 上的额外注意事项</h2><p>Linux 用户使用 TUN 模式需要额外设置权限。通常需要给二进制文件 <code>setcap</code> 权限：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> <span class="built_in">setcap</span> cap_net_admin,cap_net_bind_service=ep /path/to/clash-verge</span><br></pre></td></tr></table></figure><p>或者以 root 身份运行。具体取决于你的发行版和桌面环境。</p><p>此外，Linux 上系统代理的行为因桌面环境而异。GNOME 和 KDE 对系统代理的支持较好，其他窗口管理器可能需要手动配置环境变量。</p><hr><h2 id="与其他客户端的比较"><a href="#与其他客户端的比较" class="headerlink" title="与其他客户端的比较"></a>与其他客户端的比较</h2><table><thead><tr><th>特性</th><th>Clash Verge Rev</th><th>Clash for Windows（已停更）</th><th>Clash Nyanpasu</th></tr></thead><tbody><tr><td>内核</td><td>mihomo</td><td>Clash Premium</td><td>mihomo &#x2F; sing-box</td></tr><tr><td>当前维护状态</td><td>活跃</td><td>已停止</td><td>活跃</td></tr><tr><td>平台</td><td>Win &#x2F; macOS &#x2F; Linux</td><td>Win &#x2F; macOS &#x2F; Linux</td><td>Win &#x2F; macOS &#x2F; Linux</td></tr><tr><td>TUN 模式</td><td>支持</td><td>支持</td><td>支持</td></tr><tr><td>服务模式</td><td>支持</td><td>支持</td><td>支持</td></tr><tr><td>配置覆写</td><td>Script &#x2F; Merge</td><td>Parsers &#x2F; Mixin</td><td>Script &#x2F; Merge</td></tr></tbody></table><p>简单来说，如果你之前用的是 Clash for Windows，Clash Verge Rev 是最自然的迁移目标。功能更强，而且在持续更新。</p><hr><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="Q-Clash-Verge-Rev-和-Clash-Verge-有什么关系？"><a href="#Q-Clash-Verge-Rev-和-Clash-Verge-有什么关系？" class="headerlink" title="Q: Clash Verge Rev 和 Clash Verge 有什么关系？"></a>Q: Clash Verge Rev 和 Clash Verge 有什么关系？</h3><p>Clash Verge Rev 是 Clash Verge 的社区延续版本。原版 Clash Verge 在 2023 年底停止维护后，社区开发者 fork 了项目并继续开发，加上了”Rev”（Revolution）后缀。功能上完全兼容原版并有大量改进。</p><h3 id="Q-导入订阅失败怎么办？"><a href="#Q-导入订阅失败怎么办？" class="headerlink" title="Q: 导入订阅失败怎么办？"></a>Q: 导入订阅失败怎么办？</h3><p>按以下顺序排查：</p><ol><li>确认订阅链接复制完整，末尾没有被截断或多出空格</li><li>确认网络连通——如果你连基本的网络都不通，自然无法下载订阅</li><li>尝试在浏览器中直接打开订阅链接，看看是否有内容返回</li><li>确认机场账号状态正常、套餐已生效</li><li>如果以上都没问题，可能是机场订阅接口暂时故障，稍后重试</li></ol><h3 id="Q-开启代理后浏览器能翻墙但某些应用不行？"><a href="#Q-开启代理后浏览器能翻墙但某些应用不行？" class="headerlink" title="Q: 开启代理后浏览器能翻墙但某些应用不行？"></a>Q: 开启代理后浏览器能翻墙但某些应用不行？</h3><p>这是系统代理模式的正常现象。系统代理只能捕获读取系统代理设置的应用的流量，很多原生应用和游戏不会读取系统代理。解决方案是切换到 TUN 模式。详见 <a href="/posts/tun-vs-system-proxy/">TUN 模式 vs 系统代理</a>。</p><h3 id="Q-TUN-模式开了但没效果，所有网页都打不开？"><a href="#Q-TUN-模式开了但没效果，所有网页都打不开？" class="headerlink" title="Q: TUN 模式开了但没效果，所有网页都打不开？"></a>Q: TUN 模式开了但没效果，所有网页都打不开？</h3><p>首先检查是否以管理员身份运行。Windows 上可以在 Settings 中安装服务模式来解决权限问题。其次检查是否有其他 VPN 或虚拟机软件的网卡冲突。最后查看日志中是否有报错信息。</p><h3 id="Q-配置更新后我的自定义规则丢失了？"><a href="#Q-配置更新后我的自定义规则丢失了？" class="headerlink" title="Q: 配置更新后我的自定义规则丢失了？"></a>Q: 配置更新后我的自定义规则丢失了？</h3><p>使用 Override（脚本覆写）或 Merge（合并配置）功能来管理自定义规则，而不是直接修改订阅配置。这样每次订阅更新时，你的自定义部分会自动保留。</p><h3 id="Q-Clash-Verge-Rev-是免费的吗？"><a href="#Q-Clash-Verge-Rev-是免费的吗？" class="headerlink" title="Q: Clash Verge Rev 是免费的吗？"></a>Q: Clash Verge Rev 是免费的吗？</h3><p>是的，完全免费且开源。源代码在 <a href="https://github.com/clash-verge-rev/clash-verge-rev">GitHub</a> 上公开。你不需要为客户端付费——但代理服务（机场订阅）是另一回事。</p><hr><h2 id="相关资源"><a href="#相关资源" class="headerlink" title="相关资源"></a>相关资源</h2><ul><li><a href="https://github.com/clash-verge-rev/clash-verge-rev">Clash Verge Rev GitHub 仓库</a> —— 下载和问题反馈</li><li><a href="https://github.com/MetaCubeX/mihomo">mihomo GitHub 仓库</a> —— 内核项目</li><li><a href="https://wiki.metacubex.one/">Clash Wiki（MetaCubeX）</a> —— mihomo 的官方文档，包含完整的配置参考</li><li><a href="/posts/tun-vs-system-proxy/">TUN 模式 vs 系统代理</a> —— 深入理解两种工作模式</li><li><a href="/posts/what-are-rules/">什么是规则分流</a> —— 理解 Clash 规则的工作原理</li></ul>]]></content>
      
      
      <categories>
          
          <category> 代理软件 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> mihomo </tag>
            
            <tag> Clash Verge </tag>
            
            <tag> 配置 </tag>
            
            <tag> 教程 </tag>
            
            <tag> Windows </tag>
            
            <tag> macOS </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>如何评估一个机场的质量</title>
      <link href="/posts/how-to-evaluate/"/>
      <url>/posts/how-to-evaluate/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：机场（代理服务）的选择不能只看价格和节点数量。本文从协议安全性、线路质量、运维能力、稳定性四个维度提供一套系统的评估框架，帮助你做出理性选择。</p></blockquote><h2 id="评估前的心理建设"><a href="#评估前的心理建设" class="headerlink" title="评估前的心理建设"></a>评估前的心理建设</h2><p>在开始评估之前，先纠正两个最常见的误区。这两个误区会导致你在选择机场时做出错误判断。</p><h3 id="误区一：”贵的就是好的”"><a href="#误区一：”贵的就是好的”" class="headerlink" title="误区一：”贵的就是好的”"></a>误区一：”贵的就是好的”</h3><p>价格与质量有相关性，但不是因果关系。高价机场可能确实拥有更好的线路和更稳定的服务，但也有不少高价机场只是品牌溢价——用普通的线路收高端的价格。反过来，一些中等价位的机场在特定线路上反而有出色的表现，因为运营者把成本花在了刀刃上。</p><p>评估质量应该看实际表现，而不是价格标签。关于自建 vs 机场的系统决策框架，参见 <a href="/posts/decision-framework/">月付 vs 年付、自建 vs 机场：决策框架</a>。</p><h3 id="误区二：”节点多就是好的”"><a href="#误区二：”节点多就是好的”" class="headerlink" title="误区二：”节点多就是好的”"></a>误区二：”节点多就是好的”</h3><p>100 个节点如果都来自同一个上游供应商的转售，本质上和 10 个节点没有区别。一旦上游出问题，所有节点同时失效。相比之下，10 个自建节点分布在不同的机房和运营商，反而更加可靠。</p><p>节点数量要看的是<strong>有效多样性</strong>——不同地区、不同运营商、不同线路类型的覆盖程度，而不是单纯的数字。各参数的具体含义（倍率、流量、限速等）可参考 <a href="/posts/airport-parameters/">看懂机场参数</a>，线路类型的区别详见 <a href="/posts/line-types-explained/">机场线路类型详解</a>。</p><p>理解了这两点，你就可以用更理性的方式去评估一个机场了。</p><hr><h2 id="评估维度一：协议与安全性"><a href="#评估维度一：协议与安全性" class="headerlink" title="评估维度一：协议与安全性"></a>评估维度一：协议与安全性</h2><p>协议是代理服务的基础。一个机场使用什么协议，直接决定了你的连接安全性和抗干扰能力。</p><h3 id="协议安全性排序"><a href="#协议安全性排序" class="headerlink" title="协议安全性排序"></a>协议安全性排序</h3><p>目前主流协议的安全性大致排序如下：</p><p><strong>VLESS + Reality &gt; Trojan &gt; Shadowsocks 2022 &gt;&gt; VMess</strong></p><ul><li><strong>VLESS + Reality</strong>：目前最推荐的协议组合。Reality 通过伪装成正常的 HTTPS 网站流量来规避检测，不需要自己的 TLS 证书，安全性和隐蔽性都是最高的。</li><li><strong>Trojan</strong>：伪装为标准的 HTTPS 流量，检测难度较高。需要有效的 TLS 证书，配置得当的情况下安全性很好。</li><li><strong>Shadowsocks 2022（SS-2022）</strong>：相比旧版 Shadowsocks 有了显著的安全改进，采用了现代加密方案，但在协议层面的伪装能力不如 VLESS+Reality 和 Trojan。</li><li><strong>VMess</strong>：如果没有搭配 TLS 加密（即”裸 VMess”），它的流量特征已经可以被精准识别。仍然使用裸 VMess 的机场，要么是技术水平不足，要么是不重视安全性，基本可以直接排除。</li></ul><h3 id="是否支持新协议"><a href="#是否支持新协议" class="headerlink" title="是否支持新协议"></a>是否支持新协议</h3><p>一个持续更新的机场应该关注最新的协议发展。例如 AnyTLS 等新型协议的出现，代表了抗检测技术的新方向。如果一个机场能够及时跟进并部署新协议，说明其技术团队有足够的能力和积极性。</p><h3 id="如何检查"><a href="#如何检查" class="headerlink" title="如何检查"></a>如何检查</h3><p>判断一个机场使用的协议并不难：</p><ol><li><strong>查看订阅链接</strong>：将订阅链接导入客户端后，链接本身往往包含协议类型信息，如 <code>vless://</code>、<code>trojan://</code>、<code>ss://</code> 等前缀。</li><li><strong>导入客户端查看节点详情</strong>：在 Clash Verge、v2rayN、Shadowrocket 等客户端中导入订阅后，点击任意节点查看其详细配置，可以看到协议类型、传输方式、是否启用 TLS 等关键信息。</li><li><strong>注意传输层配置</strong>：除了协议本身，还要关注传输层（WebSocket、gRPC、HTTP&#x2F;2 等）和是否启用了 TLS 加密。</li></ol><hr><h2 id="评估维度二：线路质量"><a href="#评估维度二：线路质量" class="headerlink" title="评估维度二：线路质量"></a>评估维度二：线路质量</h2><p>线路质量是直接影响使用体验的核心因素。理解不同的线路类型以及如何测试它们，是评估机场的关键步骤。</p><h3 id="直连-vs-中转-vs-CDN"><a href="#直连-vs-中转-vs-CDN" class="headerlink" title="直连 vs 中转 vs CDN"></a>直连 vs 中转 vs CDN</h3><p>代理服务的线路大致可以分为三种类型，各有优劣：</p><p><strong>直连线路</strong></p><p>你的设备直接连接到境外的代理服务器，中间不经过任何额外节点。</p><ul><li>优势：延迟最低，链路最短</li><li>劣势：最容易被识别和封锁，IP 被封后需要更换服务器</li><li>适合：对延迟要求高且风险承受能力较强的场景</li></ul><p><strong>中转线路（Relay &#x2F; Transit）</strong></p><p>你的流量首先到达一台国内的入口服务器（通常是 BGP 多线或专线），再由这台服务器转发到境外的代理服务器。</p><ul><li>优势：稳定性最高，国内到入口服务器这一段走的是优质国内线路，不容易受到国际出口拥堵的影响</li><li>劣势：成本高，因为需要额外维护国内服务器，价格通常也更贵</li><li>常见类型：IPLC&#x2F;IEPL 专线中转、BGP 中转、普通中转等</li></ul><p><strong>CDN 线路</strong></p><p>流量通过 Cloudflare 等 CDN 服务中转，利用 CDN 的全球网络到达目标服务器。</p><ul><li>优势：抗封锁能力最强，CDN 的 IP 被大量正常网站使用，很难被针对性封锁</li><li>劣势：速度受 CDN 本身的限制，带宽通常不如直连和中转；延迟也相对较高</li><li>适合：作为备用线路，在其他线路失效时保障可用性</li></ul><h3 id="三种线路的对比"><a href="#三种线路的对比" class="headerlink" title="三种线路的对比"></a>三种线路的对比</h3><p>不同的使用场景，对线路的需求不同。以下是三种线路在不同维度上的一般规律：</p><table><thead><tr><th>维度</th><th>排序（优 → 劣）</th></tr></thead><tbody><tr><td>稳定性</td><td>中转 &gt; 直连 &gt; CDN</td></tr><tr><td>延迟</td><td>直连 &gt; 中转 &gt; CDN</td></tr><tr><td>抗封锁</td><td>CDN &gt; 中转 &gt; 直连</td></tr></tbody></table><p>一个优质的机场往往会同时提供多种线路类型，让用户根据自己的需求和当前网络环境灵活选择。</p><h3 id="怎么测试线路质量"><a href="#怎么测试线路质量" class="headerlink" title="怎么测试线路质量"></a>怎么测试线路质量</h3><p>光看宣传页面上的描述是不够的，你需要自己动手测试：</p><ol><li><p><strong>Ping &#x2F; TCPing 测延迟</strong>：使用 TCPing 工具测试到代理节点的延迟。注意区分 ICMP Ping 和 TCP Ping——有些服务器禁止 ICMP 响应，此时 Ping 不通不代表节点不可用，应以 TCPing 结果为准。一般来说，到日本&#x2F;香港节点的延迟在 50-150ms 属于正常范围。</p></li><li><p><strong>Speedtest 测带宽</strong>：连接代理节点后访问 <a href="https://www.speedtest.net/">Speedtest</a>.net 或 fast.com 进行测速。注意选择与代理节点同地区的测试服务器，这样测试结果更能反映代理线路的真实带宽。</p></li><li><p><strong>实际使用体验测试</strong>：</p><ul><li><strong>视频流媒体</strong>：YouTube 4K 视频能否流畅播放（观察统计信息中的连接速度，建议稳定在 35Mbps 以上）；Netflix 能否正常解锁并播放</li><li><strong>游戏</strong>：如果你有游戏需求，实际测试游戏延迟和丢包率</li><li><strong>日常使用</strong>：Google 搜索、ChatGPT 等常用服务的加载速度</li></ul></li><li><p><strong>重点关注晚高峰表现</strong>：每天 20:00 至 23:00 是国际出口流量最拥挤的时段。很多线路在白天表现良好，但到了晚高峰就明显降速甚至无法使用。一定要在晚高峰时段进行测试，这才是衡量线路质量的关键时刻。</p></li><li><p><strong>持续观察至少一周</strong>：单次测试结果可能受到当天网络状况的影响，不具备代表性。建议至少连续观察一周以上，覆盖工作日和周末的不同时段，才能对线路质量形成可靠的判断。</p></li></ol><hr><h2 id="评估维度三：运维能力"><a href="#评估维度三：运维能力" class="headerlink" title="评估维度三：运维能力"></a>评估维度三：运维能力</h2><p>这是最容易被忽视但最重要的维度。线路质量再好，如果运维跟不上，节点被封后长时间无法恢复，再好的线路也白搭。</p><h3 id="1-故障响应速度"><a href="#1-故障响应速度" class="headerlink" title="1. 故障响应速度"></a>1. 故障响应速度</h3><p>节点被封或出现故障后，运维团队的反应速度是核心指标：</p><ul><li><strong>优秀（小时级）</strong>：有自动化的检测和切换机制，节点被封后几小时内自动切换到备用 IP 或线路，用户几乎无感</li><li><strong>合格（当天处理）</strong>：虽然没有全自动化，但管理员在当天内手动完成 IP 更换和恢复</li><li><strong>差（数天无响应）</strong>：节点失效后几天都不处理，或者处理了但没有通知用户</li></ul><h3 id="2-IP-轮换策略"><a href="#2-IP-轮换策略" class="headerlink" title="2. IP 轮换策略"></a>2. IP 轮换策略</h3><p>好的机场会有主动的 IP 轮换策略——定期更换节点 IP，而不是等到 IP 被封锁了才被动更换。主动轮换可以大幅降低节点被封的概率，保持服务的连续性。</p><h3 id="3-客户端支持"><a href="#3-客户端支持" class="headerlink" title="3. 客户端支持"></a>3. 客户端支持</h3><p>一个成熟的机场应该提供清晰的配置指南，包括不同操作系统（Windows、macOS、Linux、iOS、Android）上推荐的客户端以及详细的配置教程。好的客户端支持可以大大降低新用户的上手门槛。</p><h3 id="4-沟通渠道"><a href="#4-沟通渠道" class="headerlink" title="4. 沟通渠道"></a>4. 沟通渠道</h3><p>出了问题能不能联系上人，这一点至关重要：</p><ul><li><strong>Telegram 群组</strong>：最常见的沟通渠道，可以看到其他用户的反馈和管理员的回复</li><li><strong>工单系统</strong>：更正式的问题反馈渠道，适合处理个人账户问题</li><li><strong>公告频道</strong>：是否有独立的公告频道，及时发布维护通知和故障公告</li></ul><h3 id="5-透明度"><a href="#5-透明度" class="headerlink" title="5. 透明度"></a>5. 透明度</h3><p>优质的机场会在故障发生时主动通知用户，说明故障原因、影响范围和预计恢复时间。如果一个机场出了问题总是悄无声息，用户只能靠自己猜测，这说明其运维态度有问题。</p><h3 id="如何判断运维能力"><a href="#如何判断运维能力" class="headerlink" title="如何判断运维能力"></a>如何判断运维能力</h3><ul><li><strong>加入 Telegram 群或 Discord 服务器</strong>：这是最直接的方式。观察群内用户反馈的问题是否能得到及时回应，管理员的态度是否专业，历史消息中故障处理的节奏如何。</li><li><strong>搜索用户评价</strong>：在相关社区搜索该机场的评测和用户反馈，了解其口碑。</li><li><strong>在敏感时期观察</strong>：每年的重要会议、国庆等敏感时期是对机场运维能力的真正考验。在这些时期关注其表现——能否保持可用，故障处理是否及时——可以很好地反映其真实运维水平。</li></ul><hr><h2 id="评估维度四：稳定性与可用性"><a href="#评估维度四：稳定性与可用性" class="headerlink" title="评估维度四：稳定性与可用性"></a>评估维度四：稳定性与可用性</h2><p>稳定性需要长期观察，是最难在短期内判断但又最影响长期体验的因素。</p><h3 id="1-SLA（服务可用性）"><a href="#1-SLA（服务可用性）" class="headerlink" title="1. SLA（服务可用性）"></a>1. SLA（服务可用性）</h3><p>SLA（Service Level Agreement）用月度不可用时间占比来衡量。虽然大多数机场不会公开承诺具体的 SLA 数值，但你可以通过自己的使用记录来跟踪。一个月内累计无法使用超过几个小时，就需要认真考虑是否继续使用。</p><h3 id="2-节点覆盖与分布"><a href="#2-节点覆盖与分布" class="headerlink" title="2. 节点覆盖与分布"></a>2. 节点覆盖与分布</h3><p>一个健康的节点部署应该覆盖多个地区和运营商，避免单点故障：</p><ul><li><strong>地区分布</strong>：至少应该包含东亚（日本、韩国、香港、台湾、新加坡）的节点，如果有美国、欧洲等地区的节点则更好</li><li><strong>运营商多样性</strong>：所有节点不要集中在同一家服务器供应商，否则一旦该供应商出现问题，所有节点同时失效</li></ul><h3 id="3-高峰期表现"><a href="#3-高峰期表现" class="headerlink" title="3. 高峰期表现"></a>3. 高峰期表现</h3><p>如前所述，晚高峰（20:00-23:00）是最关键的测试时段。如果一个机场在晚高峰时段速度明显下降，甚至无法正常使用，那它的日常宣传表现再好也意义不大。</p><h3 id="4-敏感时期表现"><a href="#4-敏感时期表现" class="headerlink" title="4. 敏感时期表现"></a>4. 敏感时期表现</h3><p>每年总有一些特殊时期，网络管控会明显加强。一个经验丰富的机场会提前做好准备，储备备用线路和 IP 资源，确保在这些时期依然保持基本可用。如果一到敏感时期就全线失效、恢复缓慢，说明其应对能力不足。</p><h3 id="5-运营历史"><a href="#5-运营历史" class="headerlink" title="5. 运营历史"></a>5. 运营历史</h3><ul><li><strong>运营时长</strong>：稳定运营超过 1-2 年的机场，跑路风险相对较低</li><li><strong>历史记录</strong>：是否有过突然关停、长时间无法使用、丢失用户数据等不良记录</li><li><strong>运营者信誉</strong>：虽然大多数机场运营者保持匿名，但其在社区中的口碑和互动记录也是参考</li></ul><hr><h2 id="一些额外的考量"><a href="#一些额外的考量" class="headerlink" title="一些额外的考量"></a>一些额外的考量</h2><h3 id="隐私"><a href="#隐私" class="headerlink" title="隐私"></a>隐私</h3><p>使用任何代理服务，你都需要理解一个事实：<strong>机场运营者理论上可以看到你的所有流量元数据</strong>，包括你访问了哪些域名。如果使用 TLS 类协议（如 VLESS+TLS、Trojan），运营者虽然看不到你传输的具体内容，但依然能看到你连接的目标域名（通过 SNI 信息）。</p><p>这意味着：</p><ul><li>选择信誉好、运营时间长的机场可以降低隐私风险</li><li>不要在代理下进行高度敏感的操作（比如涉及人身安全的活动）</li><li>如果你有极高的隐私需求，应该使用 <a href="https://www.torproject.org/">Tor</a> 网络，而非依赖机场</li></ul><h3 id="付款方式"><a href="#付款方式" class="headerlink" title="付款方式"></a>付款方式</h3><p>付款方式可以从侧面反映一个机场的运营思路：</p><ul><li><strong>支持加密货币支付</strong>：可能意味着运营者更注重用户隐私和自身的运营安全</li><li><strong>月付 vs 年付</strong>：年付通常有较大折扣，但也意味着更大的预付风险——如果机场跑路，损失更大</li><li><strong>推荐策略</strong>：先月付试用 1-2 个月，确认服务质量稳定后，再考虑季付或半年付。避免一上来就年付，除非是非常成熟、口碑极好的服务</li></ul><h3 id="价格参考区间"><a href="#价格参考区间" class="headerlink" title="价格参考区间"></a>价格参考区间</h3><p>以下是目前市场上大致的价格分布，仅作参考，不涉及具体机场名称：</p><table><thead><tr><th>档位</th><th>月费范围</th><th>通常特征</th></tr></thead><tbody><tr><td>入门级</td><td>10 - 25 元&#x2F;月</td><td>直连为主，节点数量有限，适合轻度使用</td></tr><tr><td>中端</td><td>25 - 50 元&#x2F;月</td><td>直连+部分中转线路，节点覆盖较全面</td></tr><tr><td>高端</td><td>50 - 100+ 元&#x2F;月</td><td>全中转甚至专线线路，高稳定性高可用性</td></tr></tbody></table><p><strong>注意</strong>：价格异常低的机场要格外警惕。低于市场成本的价格，要么是大规模转售赚差价（质量无保障），要么是短期捞一笔就跑的前兆。天下没有免费的午餐，过低的定价往往意味着不可持续的运营模式。</p><hr><h2 id="评估清单"><a href="#评估清单" class="headerlink" title="评估清单"></a>评估清单</h2><p>在决定订阅一个机场之前，逐项检查：</p><ul><li><input disabled="" type="checkbox"> 使用的协议是否安全（非裸 VMess）</li><li><input disabled="" type="checkbox"> 是否提供试用或短期订阅</li><li><input disabled="" type="checkbox"> 线路类型是否清楚标注（直连&#x2F;中转）</li><li><input disabled="" type="checkbox"> 晚高峰测试是否满意</li><li><input disabled="" type="checkbox"> TG 群&#x2F;客服是否活跃</li><li><input disabled="" type="checkbox"> 运营时间是否超过 1 年</li><li><input disabled="" type="checkbox"> 节点数量和地区分布是否合理</li><li><input disabled="" type="checkbox"> 有没有主要用户群体的口碑反馈</li></ul><p>建议打印或保存这份清单，在评估新机场时逐项对照。能通过大部分检查项的服务，至少在基本面上不会太差。</p><hr><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="Q-自建和机场选哪个？"><a href="#Q-自建和机场选哪个？" class="headerlink" title="Q: 自建和机场选哪个？"></a>Q: 自建和机场选哪个？</h3><p>这取决于你的技术水平和需求：</p><p><strong>自建的优势</strong>：你拥有完全的控制权，隐私保护最好，服务器只有你一个人使用，没有被其他用户拖累的风险。</p><p><strong>自建的劣势</strong>：需要自己承担全部运维工作——服务器购买、节点部署、IP 被封后的更换、协议升级等。更重要的是，自建节点是单点故障，一旦 IP 被封或服务器出问题，你就完全没有代理可用。而且自建通常只有一两条线路，无法像机场那样提供多地区多线路的覆盖。</p><p><strong>建议</strong>：对大多数用户来说，使用机场服务更省心、更可靠。如果你是技术用户，可以考虑自建作为主力，同时订阅一个机场作为备用，确保自建节点失效时不至于完全断连。</p><h3 id="Q-可以同时用多个机场吗？"><a href="#Q-可以同时用多个机场吗？" class="headerlink" title="Q: 可以同时用多个机场吗？"></a>Q: 可以同时用多个机场吗？</h3><p>可以，而且推荐。同时使用多个机场作为互相备份是一种很好的策略——当一个机场出现故障时，可以快速切换到另一个。</p><p>具体操作上，Clash 系列客户端（如 Clash Verge、mihomo 等）支持合并多个订阅，你可以把多个机场的订阅导入同一个客户端，在同一个策略组中管理。设置自动选择或者故障转移（fallback）策略，客户端会自动在多个机场的节点中选择最优的。</p><h3 id="Q-怎么判断一个机场是不是转售？"><a href="#Q-怎么判断一个机场是不是转售？" class="headerlink" title="Q: 怎么判断一个机场是不是转售？"></a>Q: 怎么判断一个机场是不是转售？</h3><p>转售机场本身不是原罪——有些转售商也能提供不错的服务。但你需要知道自己买的是不是转售，因为转售意味着你对服务的可控性更低。以下是一些判断迹象：</p><ul><li><strong>节点 IP 与其他机场重复</strong>：如果你同时使用多个机场，发现某些节点的 IP 地址完全相同，大概率是来自同一个上游</li><li><strong>所有节点的 AS 号（自治系统号）相同</strong>：可以通过 IP 查询工具查看节点 IP 的 AS 号。如果所有节点都归属同一个 AS，说明全部来自同一个服务商</li><li><strong>管理员无法回答技术问题</strong>：如果你在群里提问一些关于线路和协议的具体技术问题，管理员答不上来或者顾左右而言他，很可能他们只是在做转售，并不掌握底层技术</li></ul>]]></content>
      
      
      <categories>
          
          <category> 选择与评估 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> 机场 </tag>
            
            <tag> 评估 </tag>
            
            <tag> 选择 </tag>
            
            <tag> 质量 </tag>
            
            <tag> 指南 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>什么是原生 IP、广播 IP、住宅 IP</title>
      <link href="/posts/ip-types/"/>
      <url>/posts/ip-types/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：在选择代理节点时，经常会看到”原生 IP””广播 IP””住宅 IP”等术语。IP 的类型直接决定了节点的解锁能力、被封锁风险和使用体验。本文解释各种 IP 类型的含义、区别和实际影响。</p></blockquote><hr><h2 id="IP-地址不只是一串数字"><a href="#IP-地址不只是一串数字" class="headerlink" title="IP 地址不只是一串数字"></a>IP 地址不只是一串数字</h2><p>大多数人对 IP 地址的理解停留在”一串数字，代表一台电脑在网络上的位置”。但 IP 地址远不止这些。每一个 IP 地址背后都附带着一组<strong>元数据</strong>，记录着它属于谁、归哪个组织管理、是什么类型的网络。</p><p>这些信息通过以下渠道公开可查：</p><ul><li><strong>Whois 数据库</strong>：记录 IP 的注册者、注册机构、分配时间等信息。</li><li><strong>RDAP（Registration Data Access Protocol）</strong>：Whois 的现代化替代方案，提供结构化的 IP 归属数据。</li><li><strong>BGP 路由表</strong>：记录 IP 地址块的实际路由路径，显示哪个自治系统（AS）正在广播这些 IP。</li><li><strong>IP 情报数据库</strong>：MaxMind、IP2Location、<a href="https://ipinfo.io/">ipinfo.io</a> 等商业数据库，不仅记录 IP 的地理位置，还标注 IP 的使用类型——是住宅用户、数据中心、教育机构还是企业。</li></ul><p>Netflix、Disney+、ChatGPT、Claude 等服务在判断是否允许你访问时，查的不只是”这个 IP 在哪个国家”，更重要的是”这个 IP 是什么性质”。一个美国 IP 如果被标记为数据中心 IP，Netflix 会直接拒绝它，即使它确实位于美国。</p><p>GFW 同样利用 IP 元数据做决策。大量 VPN 和代理服务使用的 IP 段早已被标记，新开的服务器如果使用这些段的 IP，上线即封禁的概率很高。</p><p>理解 IP 类型，你才能理解为什么有些节点能解锁 Netflix 而有些不能，为什么有些节点上线一周就被封而有些能用一年，为什么有些机场的价格是别人的三倍但用户仍然愿意付费。</p><hr><h2 id="核心概念：ASN-与-IP-归属"><a href="#核心概念：ASN-与-IP-归属" class="headerlink" title="核心概念：ASN 与 IP 归属"></a>核心概念：ASN 与 IP 归属</h2><p>在深入各种 IP 类型之前，有两个关键概念必须搞清楚。</p><h3 id="ASN（Autonomous-System-Number，自治系统号）"><a href="#ASN（Autonomous-System-Number，自治系统号）" class="headerlink" title="ASN（Autonomous System Number，自治系统号）"></a>ASN（Autonomous System Number，自治系统号）</h3><p>互联网不是一台巨大的路由器连着所有电脑。它是由数万个独立管理的网络组成的——每个独立管理的网络被称为一个<strong>自治系统（AS）</strong>，每个 AS 都有一个唯一编号，叫做 ASN。</p><p>举几个例子：</p><ul><li>AS15169 &#x3D; Google LLC</li><li>AS13335 &#x3D; Cloudflare, Inc.</li><li>AS4134 &#x3D; 中国电信骨干网</li><li>AS2516 &#x3D; KDDI Corporation（日本）</li><li>AS7922 &#x3D; Comcast Cable Communications（美国）</li></ul><p>当你查询一个 IP 地址的 ASN 时，你就知道了<strong>这个 IP 属于哪个组织的网络</strong>。这是判断 IP 类型的核心依据。</p><h3 id="IP-类型标记"><a href="#IP-类型标记" class="headerlink" title="IP 类型标记"></a>IP 类型标记</h3><p>IP 情报数据库（如 ipinfo.io）会根据 ASN 和其他信息，为每个 IP 地址标记一个使用类型。常见的类型包括：</p><ul><li><strong>ISP</strong>：互联网服务提供商，面向终端用户提供网络接入。Comcast、NTT、中国电信都属于此类。</li><li><strong>Hosting</strong>：托管&#x2F;数据中心，提供服务器租用服务。AWS、Vultr、OVH 属于此类。</li><li><strong>Business</strong>：企业网络，通常是公司自有的 IP 段。</li><li><strong>Education</strong>：教育机构网络。</li></ul><p>流媒体平台和 AI 服务的判断逻辑很简单：<strong>ISP 类型的 IP → 可能是正常用户 → 放行。Hosting 类型的 IP → 大概率是代理&#x2F;VPN → 拦截。</strong></p><hr><h2 id="原生-IP（Native-IP）"><a href="#原生-IP（Native-IP）" class="headerlink" title="原生 IP（Native IP）"></a>原生 IP（Native IP）</h2><h3 id="定义"><a href="#定义" class="headerlink" title="定义"></a>定义</h3><p>原生 IP 是指一个 IP 地址被分配给了服务器所在国家的<strong>本地 ISP</strong>，并且该 IP 的 ASN 归属于这个本地 ISP。</p><p>核心判断标准只有一条：<strong>IP 的 ASN 归属与服务器的物理位置在同一个国家&#x2F;地区，且 ASN 属于一家面向终端用户的 ISP。</strong></p><p>具体例子：</p><ul><li>一台物理位于日本的服务器，使用的 IP 属于 AS2516（KDDI）→ <strong>原生日本 IP</strong></li><li>一台物理位于美国的服务器，使用的 IP 属于 AS7922（Comcast）→ <strong>原生美国 IP</strong></li><li>一台物理位于台湾的服务器，使用的 IP 属于 AS3462（中华电信&#x2F;HiNet）→ <strong>原生台湾 IP</strong></li><li>一台物理位于新加坡的服务器，使用的 IP 属于 AS9009（M247）→ <strong>不是原生 IP</strong>，M247 是托管商</li></ul><p>原生 IP 也被称为本地 IP、本土 IP、Native IP。</p><h3 id="为什么原生-IP-被信任"><a href="#为什么原生-IP-被信任" class="headerlink" title="为什么原生 IP 被信任"></a>为什么原生 IP 被信任</h3><p>流媒体平台的检测逻辑基于一个简单的假设：<strong>正常用户通过当地的 ISP 上网。如果一个 IP 属于当地 ISP，那它背后大概率是一个真实的本地用户。</strong></p><p>这个假设在绝大多数情况下是正确的。全世界数十亿的普通互联网用户，使用的都是当地 ISP 分配的 IP 地址。这些 IP 在 IP 情报数据库中被标记为”ISP”类型，流媒体平台对它们给予最高级别的信任。</p><h3 id="原生-IP-的特点"><a href="#原生-IP-的特点" class="headerlink" title="原生 IP 的特点"></a>原生 IP 的特点</h3><p><strong>优势：</strong></p><ul><li>解锁能力最强。几乎可以解锁所有流媒体服务和 AI 平台</li><li>信任度最高。被平台主动封锁的概率极低</li><li>稳定性好。只要 IP 不被大量代理用户共用，可以长期保持解锁能力</li><li>对 ChatGPT、Claude 等 AI 服务同样有效，这些服务同样会检测 IP 类型</li></ul><p><strong>劣势：</strong></p><ul><li>数量稀缺。ISP 的 IP 主要用于服务自己的宽带用户，能用于服务器托管的 IP 资源有限</li><li>价格昂贵。获取原生 IP 通常需要与当地 ISP 合作或使用特殊的托管方式，成本远高于普通数据中心</li><li>地区覆盖有限。不是每个国家都容易获取原生 IP 资源</li><li>可能被”用坏”。如果一个原生 IP 被太多代理用户同时使用，IP 情报数据库可能将其重新分类为 hosting</li></ul><h3 id="如何判断原生-IP"><a href="#如何判断原生-IP" class="headerlink" title="如何判断原生 IP"></a>如何判断原生 IP</h3><p>连上代理节点后，访问 <a href="https://ipinfo.io/">ipinfo.io</a> 查看以下信息：</p><ol><li><strong>org 字段</strong>：显示 ASN 和组织名称。如果组织名称是你认识的 ISP 名称（如 NTT、KDDI、Comcast、AT&amp;T、中华电信），大概率是原生 IP。</li><li><strong>type 字段</strong>（需要付费 API 或使用 ipinfo.io&#x2F;widget）：如果显示 <code>isp</code>，是原生 IP；如果显示 <code>hosting</code>，不是。</li><li><strong>交叉验证</strong>：在 <a href="https://bgp.tools/">bgp.tools</a> 查看 ASN 信息，确认该 AS 的业务描述是否为 ISP&#x2F;电信运营商。</li></ol><p>反面例子：如果 org 字段显示 <code>AS16276 OVH SAS</code>、<code>AS14061 DigitalOcean</code>、<code>AS63949 Akamai Connected Cloud</code>（Linode）、<code>AS20473 The Constant Company</code>（Vultr），这些全部是数据中心 IP。</p><hr><h2 id="数据中心-IP-机房-IP（Datacenter-IP）"><a href="#数据中心-IP-机房-IP（Datacenter-IP）" class="headerlink" title="数据中心 IP &#x2F; 机房 IP（Datacenter IP）"></a>数据中心 IP &#x2F; 机房 IP（Datacenter IP）</h2><h3 id="定义-1"><a href="#定义-1" class="headerlink" title="定义"></a>定义</h3><p>数据中心 IP 是指归属于云服务商或服务器托管提供商的 IP 地址。这类 IP 的 ASN 属于专门从事服务器托管、云计算业务的公司。</p><p>这是绝大多数代理服务器使用的 IP 类型——因为代理服务器本身就运行在数据中心的物理服务器或虚拟机上，使用数据中心分配的 IP 是最自然的选择。</p><h3 id="常见数据中心及其-ASN"><a href="#常见数据中心及其-ASN" class="headerlink" title="常见数据中心及其 ASN"></a>常见数据中心及其 ASN</h3><p><strong>国际大型云厂商：</strong></p><ul><li>AWS（Amazon）：AS16509</li><li>Google Cloud（GCP）：AS15169、AS396982</li><li>Microsoft Azure：AS8075</li><li>Oracle Cloud：AS31898</li></ul><p><strong>常见 VPS &#x2F; 托管商：</strong></p><ul><li>Vultr：AS20473</li><li>DigitalOcean：AS14061</li><li>Linode（Akamai）：AS63949</li><li>OVH：AS16276</li><li>Hetzner：AS24940</li></ul><p><strong>代理社区常用的供应商：</strong></p><ul><li>BandwagonHost（搬瓦工）：AS25820</li><li>DMIT：AS54574</li><li>GigsGigsCloud：AS55720</li><li>RackNerd：AS36352</li><li>CloudIPLC：多个 ASN</li></ul><h3 id="数据中心-IP-的特点"><a href="#数据中心-IP-的特点" class="headerlink" title="数据中心 IP 的特点"></a>数据中心 IP 的特点</h3><p><strong>优势：</strong></p><ul><li>价格低。一台 VPS 每月几美元，IP 成本几乎可以忽略</li><li>供应充足。全球数百家云服务商，IP 资源不是问题</li><li>部署简单。注册账号、创建实例、部署代理，半小时搞定</li><li>带宽充足。数据中心的网络基础设施远优于住宅网络</li></ul><p><strong>劣势：</strong></p><ul><li>IP 情报数据库将其明确分类为 <code>hosting</code></li><li>Netflix、Disney+、HBO Max 等流媒体平台积极封锁数据中心 IP 段</li><li>ChatGPT 封锁了大量数据中心 IP，尤其是 AWS、GCP 等大型云厂商的 IP 段</li><li>同一 IP 段可能已经被之前的 VPN&#x2F;代理用户”用脏”了，新分配到你手上时可能已在黑名单中</li><li>大型代理服务（机场）大量使用这些 IP，导致整个 IP 段被连坐封禁</li></ul><h3 id="数据中心-IP-不是完全没用"><a href="#数据中心-IP-不是完全没用" class="headerlink" title="数据中心 IP 不是完全没用"></a>数据中心 IP 不是完全没用</h3><p>需要澄清一个常见误解：<strong>数据中心 IP 只是不能解锁流媒体和部分 AI 服务，并不影响正常使用。</strong></p><p>以下场景数据中心 IP 完全够用：</p><ul><li>浏览被墙网站（Google、Twitter、Reddit 等）</li><li>观看 YouTube（不需要 Premium 特定地区内容的情况下）</li><li>使用 Google 全家桶（Gmail、Google Drive、Google Docs 等）</li><li>访问 GitHub、Stack Overflow 等技术网站</li><li>使用 Telegram、Discord 等即时通讯工具</li></ul><p>如果你不需要流媒体解锁和 AI 服务，数据中心 IP 的节点已经完全满足需求，而且通常速度更快、价格更低。</p><hr><h2 id="广播-IP（Broadcast-Announced-IP）"><a href="#广播-IP（Broadcast-Announced-IP）" class="headerlink" title="广播 IP（Broadcast &#x2F; Announced IP）"></a>广播 IP（Broadcast &#x2F; Announced IP）</h2><h3 id="定义-2"><a href="#定义-2" class="headerlink" title="定义"></a>定义</h3><p>广播 IP 是指通过 BGP（边界网关协议）从一个与原始分配不同的 ASN <strong>“广播”（宣告）</strong> 出去的 IP 地址。</p><p>为了理解这个概念，需要简要了解 BGP 的工作方式：互联网上的每个 IP 地址块都有一个原始的分配记录——ARIN、RIPE、APNIC 等地区互联网注册机构（RIR）将 IP 地址块分配给特定的组织。但 IP 地址块是可以转让和租赁的，拿到 IP 块的组织可以选择从自己的 AS 将这些 IP 广播出去。</p><p><strong>具体例子：</strong> 一段 IP 地址原本由美国某 ISP 注册和持有，IP 情报数据库中记录其类型为”ISP”。后来这段 IP 被卖给或租给了一家香港的托管商，托管商从自己在香港的 AS 将这些 IP 广播出去。于是出现了一种矛盾的状态：</p><ul><li>IP 的注册信息仍然显示归属于美国 ISP → IP 情报数据库可能仍然标记为 <code>isp</code> 类型</li><li>IP 的实际路由路径显示它从香港的数据中心出发 → 实际上是从数据中心发出的流量</li></ul><h3 id="为什么广播-IP-存在"><a href="#为什么广播-IP-存在" class="headerlink" title="为什么广播 IP 存在"></a>为什么广播 IP 存在</h3><p>广播 IP 的存在有其合理的技术和商业原因：</p><ol><li><strong>IP 资源的流动性</strong>：IPv4 地址已经耗尽，IP 地址块成为可交易的资产。组织可以购买、出售、租赁 IP 地址块。</li><li><strong>利用 IP 信誉</strong>：从 ISP 手中获取的 IP 块，在 IP 情报数据库中的初始分类通常是”ISP”或”住宅”。这种分类可能在 IP 被转让后的一段时间内保持不变。</li><li><strong>代理行业的需求</strong>：代理服务提供商需要具备解锁能力的 IP，但原生 IP 的供应有限。购买具有 ISP 历史记录的 IP 块，是一种扩大 IP 资源的方式。</li><li><strong>灵活的部署</strong>：通过 BGP 广播，同一段 IP 可以在不同的数据中心之间灵活迁移。</li></ol><h3 id="广播-IP-的特点"><a href="#广播-IP-的特点" class="headerlink" title="广播 IP 的特点"></a>广播 IP 的特点</h3><p><strong>优势：</strong></p><ul><li>部分广播 IP 在 IP 情报数据库中仍被归类为”ISP”，可能通过流媒体平台的检测</li><li>成本介于原生 IP 和纯数据中心 IP 之间</li><li>供应量比真正的原生 IP 大</li><li>可以在数据中心的基础设施上运行（带宽和稳定性有保障）</li></ul><p><strong>劣势：</strong></p><ul><li>质量参差不齐。有些广播 IP 与原生 IP 无异，有些很快就被检测出来</li><li>IP 情报数据库在持续进化。MaxMind、ipinfo.io 等服务商越来越擅长识别”宣告路径与注册信息不一致”的 IP</li><li>一旦被重新分类为 <code>hosting</code>，就与普通数据中心 IP 无异，解锁能力丧失</li><li>存在”有效窗口期”：一段广播 IP 可能一开始能解锁，用了几个月后被重新分类就不行了</li></ul><h3 id="如何识别广播-IP"><a href="#如何识别广播-IP" class="headerlink" title="如何识别广播 IP"></a>如何识别广播 IP</h3><p>判断一个 IP 是否为广播 IP，需要对比两个信息：</p><ol><li><strong>IP 的注册信息</strong>（Whois&#x2F;RDAP）：查看 IP 原始分配给了哪个组织。</li><li><strong>IP 的实际路由</strong>（BGP 路由表）：查看当前是哪个 AS 在广播这个 IP。</li></ol><p>如果两者不一致——注册归属是某个 ISP，但实际广播方是一家数据中心运营商——那很可能就是广播 IP。</p><p>在 <a href="https://bgp.tools/">bgp.tools</a> 上查询一个 IP 时，可以看到它的 AS 路径（AS Path）。如果路径的起点（origin AS）与 IP 注册信息中的 ASN 不一致，就是典型的广播 IP。</p><hr><h2 id="住宅-IP（Residential-IP）"><a href="#住宅-IP（Residential-IP）" class="headerlink" title="住宅 IP（Residential IP）"></a>住宅 IP（Residential IP）</h2><h3 id="定义-3"><a href="#定义-3" class="headerlink" title="定义"></a>定义</h3><p>住宅 IP 是指分配给真实家庭宽带连接的 IP 地址。这些 IP 归属于当地的 ISP，在 IP 情报数据库中被标记为 <code>isp</code> 或 <code>residential</code>。</p><p>在代理场景中，住宅 IP 通常通过<strong>住宅代理网络</strong>来使用。其原理是：你的流量从代理服务器出发，再经过一个真实的家庭网络出口，最终到达目标网站。目标网站看到的是这个家庭宽带的 IP 地址。</p><h3 id="住宅代理网络的工作原理"><a href="#住宅代理网络的工作原理" class="headerlink" title="住宅代理网络的工作原理"></a>住宅代理网络的工作原理</h3><p>住宅代理网络的典型架构：</p><ol><li><strong>代理提供商</strong>通过各种方式获取大量真实住宅设备的网络访问权（后文讨论合规性问题）</li><li>你的代理客户端 → 你的代理服务器 → <strong>住宅代理网络的入口</strong> → <strong>某个真实家庭的网络设备</strong> → 目标网站</li><li>目标网站看到的出口 IP 是这个家庭宽带的 IP，自然被判定为真实住宅用户</li></ol><p>常见的住宅代理服务商包括 Bright Data（前 Luminati）、Oxylabs、Smartproxy、IPRoyal 等。这些服务商号称拥有数千万甚至上亿的住宅 IP 资源。</p><h3 id="住宅-IP-在代理节点中的应用"><a href="#住宅-IP-在代理节点中的应用" class="headerlink" title="住宅 IP 在代理节点中的应用"></a>住宅 IP 在代理节点中的应用</h3><p>与上面提到的住宅代理网络不同，一些代理服务提供商（机场）通过特殊渠道获取住宅 IP 直接绑定到服务器上使用。这种方式不需要经过额外的家庭网络跳转，延迟和带宽都不受影响。</p><p>但这类资源极其稀缺。能够将住宅 ISP 的 IP 用于服务器托管的场景非常有限，通常需要与 ISP 建立特殊的合作关系。</p><h3 id="住宅-IP-的特点"><a href="#住宅-IP-的特点" class="headerlink" title="住宅 IP 的特点"></a>住宅 IP 的特点</h3><p><strong>优势：</strong></p><ul><li>信任度最高。在所有 IP 类型中，真实的住宅 IP 最不可能被流媒体平台和 AI 服务拦截</li><li>解锁能力与原生 IP 持平甚至更优</li><li>隐匿性最强。目标网站几乎无法区分你的流量和普通家庭用户的流量</li></ul><p><strong>劣势：</strong></p><ul><li>如果通过住宅代理网络使用，带宽受限于家庭宽带的上行速率（通常远低于数据中心）</li><li>延迟增加。流量需要多一跳经过住宅设备，响应时间更长</li><li>价格极高。住宅代理按流量计费，通常每 GB 数美元甚至更多</li><li>合规风险。部分住宅代理网络通过捆绑 SDK 的方式利用用户设备，用户可能并未完全了解自己的网络被用作代理出口</li><li>稳定性波动。住宅设备可能随时关机、断网、IP 变更</li></ul><h3 id="关于住宅代理的合规性"><a href="#关于住宅代理的合规性" class="headerlink" title="关于住宅代理的合规性"></a>关于住宅代理的合规性</h3><p>住宅代理网络的 IP 来源一直存在争议。主流的获取方式包括：</p><ul><li><strong>App SDK 集成</strong>：与免费 App（特别是免费 VPN）合作，在用户同意条款的前提下将其设备作为代理出口。用户获得免费服务，代价是共享部分带宽。</li><li><strong>直接招募</strong>：用户主动安装代理软件，出售自己的闲置带宽获取报酬。</li><li><strong>设备联盟</strong>：与 IoT 设备制造商合作。</li></ul><p>是否合规，关键在于用户是否被充分告知并自愿参与。一些代理网络因为用户知情同意不充分而受到批评。作为使用者，你需要意识到，你通过住宅代理发出的流量最终是从某个真人的家庭网络发出的。</p><hr><h2 id="各类-IP-对比"><a href="#各类-IP-对比" class="headerlink" title="各类 IP 对比"></a>各类 IP 对比</h2><table><thead><tr><th>特征</th><th>原生 IP</th><th>数据中心 IP</th><th>广播 IP</th><th>住宅 IP</th></tr></thead><tbody><tr><td><strong>解锁能力</strong></td><td>极强</td><td>极弱</td><td>中等（不稳定）</td><td>极强</td></tr><tr><td><strong>成本</strong></td><td>高</td><td>低</td><td>中</td><td>很高（按流量计费）</td></tr><tr><td><strong>稳定性</strong></td><td>高</td><td>高</td><td>中（可能被重分类）</td><td>中（设备可能离线）</td></tr><tr><td><strong>带宽</strong></td><td>中-高</td><td>高</td><td>高</td><td>低（家庭宽带上行）</td></tr><tr><td><strong>隐匿性</strong></td><td>高</td><td>低</td><td>中</td><td>最高</td></tr><tr><td><strong>被封锁风险</strong></td><td>低</td><td>高</td><td>中</td><td>极低</td></tr><tr><td><strong>可用供应</strong></td><td>有限</td><td>充足</td><td>有限</td><td>大量（但质量不一）</td></tr><tr><td><strong>适用场景</strong></td><td>流媒体&#x2F;AI 解锁</td><td>日常翻墙浏览</td><td>折中方案</td><td>高隐匿需求&#x2F;数据采集</td></tr></tbody></table><hr><h2 id="如何查询-IP-类型"><a href="#如何查询-IP-类型" class="headerlink" title="如何查询 IP 类型"></a>如何查询 IP 类型</h2><p>以下是常用的 IP 信息查询工具，从简单到深入排列。</p><h3 id="基础查询工具"><a href="#基础查询工具" class="headerlink" title="基础查询工具"></a>基础查询工具</h3><p><strong>1. <a href="https://ipinfo.io/">ipinfo.io</a></strong></p><p>最推荐的 IP 信息查询网站。直接在浏览器中访问即可查看当前 IP 的信息。也可以查询特定 IP，如 <code>ipinfo.io/8.8.8.8</code>。</p><p>关键字段：</p><ul><li><code>org</code>：显示 ASN 和组织名称。例如 <code>AS15169 Google LLC</code> 说明是 Google 的数据中心 IP</li><li><code>city</code>、<code>region</code>、<code>country</code>：地理位置信息</li><li>付费 API 还能获取 <code>type</code> 字段，明确标注 <code>isp</code>、<code>hosting</code>、<code>business</code> 等类型</li></ul><p><img src="/images/inline/ipinfo-result.jpg" alt="ipinfo.io IP 查询结果示例"><br><em>图片来源：<a href="https://ipinfo.io/">IPinfo</a></em></p><p><strong>2. <a href="https://ip.sb/">ip.sb</a></strong></p><p>简洁的 IP 查询工具，显示当前 IP 地址和基本地理位置信息。适合快速确认代理是否生效。</p><p><strong>3. <a href="https://whoer.net/">whoer.net</a></strong></p><p>综合检测工具，除了 IP 信息外，还检测浏览器指纹、WebRTC 泄漏、DNS 泄漏等。适合全面评估代理配置的安全性。</p><h3 id="进阶查询工具"><a href="#进阶查询工具" class="headerlink" title="进阶查询工具"></a>进阶查询工具</h3><p><strong>4. <a href="https://bgp.tools/">bgp.tools</a></strong></p><p>BGP 路由信息查询平台。可以查看一个 IP 的 AS 路径、ASN 详细信息、IP 前缀公告等。适合判断一个 IP 是否为广播 IP——对比 IP 的注册 ASN 和实际广播 ASN 是否一致。</p><p><strong>5. <a href="https://bgpview.io/">bgpview.io</a></strong></p><p>另一个 BGP 信息查询工具。提供 ASN 查询、IP 前缀查询、AS 上下游关系等功能。界面直观，适合查看一个 AS 拥有多少 IP 段、这些 IP 段的广播状态。</p><h3 id="实际操作示例"><a href="#实际操作示例" class="headerlink" title="实际操作示例"></a>实际操作示例</h3><p><strong>示例 1：判断一个 IP 是否为数据中心 IP</strong></p><p>连上代理节点后，访问 <code>ipinfo.io</code>。如果 <code>org</code> 字段显示以下任何一种，就是数据中心 IP：</p><ul><li><code>AS16509 Amazon.com, Inc.</code>（AWS）</li><li><code>AS14061 DigitalOcean, LLC</code></li><li><code>AS20473 The Constant Company, LLC</code>（Vultr）</li><li><code>AS24940 Hetzner Online GmbH</code></li><li><code>AS16276 OVH SAS</code></li></ul><p><strong>示例 2：判断一个 IP 是否为原生 IP</strong></p><p>假设你连接的是一个日本节点，<code>ipinfo.io</code> 显示：</p><ul><li><code>country</code>: JP</li><li><code>org</code>: AS2516 KDDI Corporation</li></ul><p>KDDI 是日本的主要电信运营商之一 → 这是原生日本 IP。</p><p>如果显示：</p><ul><li><code>country</code>: JP</li><li><code>org</code>: AS63949 Akamai Connected Cloud</li></ul><p>Akamai Connected Cloud（Linode）是托管商 → 这是数据中心 IP。</p><hr><h2 id="对用户的实际影响"><a href="#对用户的实际影响" class="headerlink" title="对用户的实际影响"></a>对用户的实际影响</h2><p>了解 IP 类型后，你可以根据自己的使用需求做出更明智的选择。</p><h3 id="场景一：需要流媒体解锁"><a href="#场景一：需要流媒体解锁" class="headerlink" title="场景一：需要流媒体解锁"></a>场景一：需要流媒体解锁</h3><p>如果你的核心需求是观看 Netflix、Disney+、HBO Max 等流媒体的特定地区内容，<strong>优先选择提供原生 IP 节点的代理服务</strong>。查看机场的节点列表，标注了”流媒体””解锁””Netflix”等字样的节点，通常使用的是原生 IP 或经过处理的广播 IP。</p><h3 id="场景二：需要使用-AI-服务"><a href="#场景二：需要使用-AI-服务" class="headerlink" title="场景二：需要使用 AI 服务"></a>场景二：需要使用 AI 服务</h3><p>ChatGPT 和 Claude 对 IP 类型也有检测。大量数据中心 IP 被 OpenAI 封禁，尤其是 AWS、GCP 等大型云厂商的 IP 段。如果你经常遇到”Access denied”或被要求进行额外验证，可能是因为你的节点使用的是数据中心 IP。切换到原生 IP 节点通常可以解决问题。</p><h3 id="场景三：日常翻墙浏览"><a href="#场景三：日常翻墙浏览" class="headerlink" title="场景三：日常翻墙浏览"></a>场景三：日常翻墙浏览</h3><p>如果你只需要访问 Google、YouTube（非特定地区内容）、Twitter、Telegram 等常见被墙网站，数据中心 IP 完全够用。这种情况下优先考虑速度、稳定性和价格，而不是 IP 类型。</p><h3 id="场景四：高隐私需求"><a href="#场景四：高隐私需求" class="headerlink" title="场景四：高隐私需求"></a>场景四：高隐私需求</h3><p>如果你需要极高的匿名性（如安全研究、敏感信息获取），住宅 IP 是最佳选择。住宅 IP 在目标网站看来与普通家庭用户无异，几乎不可能仅凭 IP 类型被识别为代理用户。</p><h3 id="价格与-IP-质量的关系"><a href="#价格与-IP-质量的关系" class="headerlink" title="价格与 IP 质量的关系"></a>价格与 IP 质量的关系</h3><p>一般来说：<strong>价格越高的代理服务，使用的 IP 质量越好。</strong> 这不是营销话术，而是成本结构决定的：</p><ul><li>数据中心 IP：VPS 月费 $3-10，IP 基本免费</li><li>广播 IP：需要购买或租赁 IP 块，成本中等</li><li>原生 IP：需要与 ISP 合作或使用特殊托管服务，成本最高</li><li>住宅 IP：按流量计费，每 GB 数美元</li></ul><p>机场的月费如果只有十几元，几乎可以确定全部是数据中心 IP。如果月费在几十到上百元，可能会提供部分原生 IP 节点。选择时根据自己的需求和预算做取舍。</p><hr><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="Q：怎么知道我的机场用的是什么类型的-IP？"><a href="#Q：怎么知道我的机场用的是什么类型的-IP？" class="headerlink" title="Q：怎么知道我的机场用的是什么类型的 IP？"></a>Q：怎么知道我的机场用的是什么类型的 IP？</h3><p>连上节点后访问 <a href="https://ipinfo.io/">ipinfo.io</a>，查看 <code>org</code> 字段。如果显示的是 AWS、Vultr、DigitalOcean 等云厂商名称，就是数据中心 IP。如果显示的是当地 ISP 的名称（如日本的 NTT、KDDI，美国的 Comcast、AT&amp;T，台湾的中华电信），是原生 IP。</p><p>你也可以在 <a href="https://bgp.tools/">bgp.tools</a> 上进一步确认 ASN 的业务性质。</p><h3 id="Q：数据中心-IP-完全不能用吗？"><a href="#Q：数据中心-IP-完全不能用吗？" class="headerlink" title="Q：数据中心 IP 完全不能用吗？"></a>Q：数据中心 IP 完全不能用吗？</h3><p>不是。数据中心 IP 只是不能解锁流媒体和部分 AI 服务。正常浏览被墙网站、看 YouTube（不需要特定地区内容）、使用 Google 全家桶、刷 Twitter、用 Telegram 等完全没问题。对于大多数用户的日常使用，数据中心 IP 足够了。</p><h3 id="Q：IP-类型会变吗？"><a href="#Q：IP-类型会变吗？" class="headerlink" title="Q：IP 类型会变吗？"></a>Q：IP 类型会变吗？</h3><p>会。IP 的分类不是永久不变的。IP 情报数据库会持续更新对 IP 的分类：</p><ul><li>一个曾经的原生 IP，如果被大量代理服务使用，可能被 IP 情报数据库重新标记为 <code>hosting</code>，从而失去解锁能力</li><li>一个曾被标记为 <code>hosting</code> 的 IP，如果长时间不再被代理使用，理论上也可能被重新分类为 <code>isp</code>（但这种情况较少发生）</li><li>广播 IP 最容易被重新分类，因为 IP 情报数据库越来越擅长检测路由路径与注册信息的不一致</li></ul><h3 id="Q：为什么同一个机场有的节点能解锁有的不能？"><a href="#Q：为什么同一个机场有的节点能解锁有的不能？" class="headerlink" title="Q：为什么同一个机场有的节点能解锁有的不能？"></a>Q：为什么同一个机场有的节点能解锁有的不能？</h3><p>因为不同节点使用的 IP 不同。同一个机场可能在同一个地区部署了多台服务器，其中一些使用原生 IP，一些使用数据中心 IP。通常节点名称中标注了”流媒体””解锁””Netflix”等字样的节点使用的是更好的 IP 类型（原生 IP 或广播 IP），而普通节点使用的是数据中心 IP。</p><p>这也是为什么一些机场会将节点分组为”常规节点”和”解锁节点”——两组使用不同类型的 IP 资源。</p><h3 id="Q：买了-VPS-自建节点，IP-是什么类型？"><a href="#Q：买了-VPS-自建节点，IP-是什么类型？" class="headerlink" title="Q：买了 VPS 自建节点，IP 是什么类型？"></a>Q：买了 VPS 自建节点，IP 是什么类型？</h3><p>几乎一定是数据中心 IP。无论你从 Vultr、DigitalOcean、Linode、BandwagonHost 还是任何常见 VPS 供应商购买，获得的 IP 都归属于该供应商的 AS，在 IP 情报数据库中被标记为 <code>hosting</code>。</p><p>如果你需要自建节点且具备解锁能力，需要寻找提供原生 IP 的特殊供应商。或者采取混合方案：自建节点处理日常流量，另外购买一个支持流媒体解锁的机场订阅，通过分流规则将流媒体流量导向机场节点。</p><h3 id="Q：一个-IP-同时属于”原生”和”住宅”吗？"><a href="#Q：一个-IP-同时属于”原生”和”住宅”吗？" class="headerlink" title="Q：一个 IP 同时属于”原生”和”住宅”吗？"></a>Q：一个 IP 同时属于”原生”和”住宅”吗？</h3><p>两个概念有重叠但不完全相同。”原生”强调的是 IP 归属与服务器物理位置的一致性（ASN 属于当地 ISP）。”住宅”强调的是 IP 的使用类型（分配给家庭宽带用户）。</p><p>一个原生 IP 通常也被标记为住宅&#x2F;ISP 类型，但不是所有原生 IP 都用于住宅场景——有些 ISP 也提供企业级服务。在代理场景中，两者的效果基本一致：都能通过流媒体平台的检测。</p>]]></content>
      
      
      <categories>
          
          <category> 网络知识 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> IP </tag>
            
            <tag> 原生IP </tag>
            
            <tag> 广播IP </tag>
            
            <tag> 住宅IP </tag>
            
            <tag> 数据中心 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>IPv4 与 IPv6 基础：为什么机场越来越多提到 IPv6</title>
      <link href="/posts/ipv4-vs-ipv6-basics/"/>
      <url>/posts/ipv4-vs-ipv6-basics/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：IPv4 地址已经基本耗尽，IPv6 地址空间几乎无限。这个差异不只是技术课本上的知识点——在代理使用场景中，IPv6 正变得越来越重要。从流媒体解锁到抗封锁能力，从 IP 信誉到隐私保护，IPv4 和 IPv6 的选择直接影响你的使用体验。本文从基础概念出发，解释两种协议的区别以及它们在代理场景中的实际意义。</p></blockquote><hr><h2 id="IPv4：互联网的地基"><a href="#IPv4：互联网的地基" class="headerlink" title="IPv4：互联网的地基"></a>IPv4：互联网的地基</h2><h3 id="基本概念"><a href="#基本概念" class="headerlink" title="基本概念"></a>基本概念</h3><p>IPv4（Internet Protocol version 4）是互联网最早广泛使用的网络层协议，定义于 1981 年的 RFC 791。它使用 <strong>32 位地址</strong>，通常以四个十进制数字表示，每个数字的范围是 0-255，用点号分隔：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">192.168.1.1</span><br><span class="line">203.0.113.45</span><br><span class="line">142.250.80.46</span><br></pre></td></tr></table></figure><p>32 位地址空间意味着 IPv4 的理论地址总量是 2^32 &#x3D; <strong>约 43 亿个</strong>。这个数字在互联网诞生初期看起来足够用——毕竟当时全球只有几千台联网设备。但互联网的爆炸式增长远超预期。</p><h3 id="地址耗尽的现实"><a href="#地址耗尽的现实" class="headerlink" title="地址耗尽的现实"></a>地址耗尽的现实</h3><p>IANA（互联网号码分配机构）在 2011 年将最后的 IPv4 地址块分配给五大地区注册机构（RIR）。此后，各 RIR 的可分配地址池也陆续见底：</p><ul><li>APNIC（亚太地区）：2011 年</li><li>RIPE NCC（欧洲&#x2F;中东）：2012 年</li><li>LACNIC（拉丁美洲）：2014 年</li><li>ARIN（北美）：2015 年</li><li>AFRINIC（非洲）：2017 年</li></ul><p>现在要获取新的 IPv4 地址，主要途径是通过<strong>二级市场购买</strong>——从不再需要大量地址的组织手中转让。IPv4 地址的交易价格在过去几年稳步上涨，单个地址的价格可以达到数十美元。这个成本最终会传导到 VPS 服务商和机场运营者的定价中。</p><h3 id="地址复用技术"><a href="#地址复用技术" class="headerlink" title="地址复用技术"></a>地址复用技术</h3><p>为了应对地址不足，互联网发展出了几种延缓耗尽的技术。</p><p><strong>NAT（网络地址转换）</strong> 是最核心的一个。你家里的路由器可能有几十台设备（手机、电脑、智能音箱、摄像头），但运营商只给你分配了一个公网 IPv4 地址。路由器通过 NAT 让所有内网设备共享这一个地址。进一步的，一些运营商甚至实行 <strong>CGNAT（运营商级 NAT）</strong>——多个用户家庭共享同一个公网 IPv4 地址。</p><p>NAT 解决了”地址不够分”的眼前问题，但也带来了很多副作用。端口映射复杂、P2P 连接困难、在线游戏联机受阻、某些应用无法正常工作——这些问题在使用 CGNAT 的网络环境中尤为突出。</p><p><strong>保留地址段</strong> 也是缓解方案的一部分。RFC 1918 定义了三个私有地址段（<code>10.0.0.0/8</code>、<code>172.16.0.0/12</code>、<code>192.168.0.0/16</code>），这些地址可以在内网中无限重复使用，但不能直接在公网上路由。你在家连接 Wi-Fi 后看到的 <code>192.168.1.x</code> 地址就属于此类。</p><hr><h2 id="IPv6：面向未来的答案"><a href="#IPv6：面向未来的答案" class="headerlink" title="IPv6：面向未来的答案"></a>IPv6：面向未来的答案</h2><h3 id="基本概念-1"><a href="#基本概念-1" class="headerlink" title="基本概念"></a>基本概念</h3><p>IPv6（Internet Protocol version 6）使用 <strong>128 位地址</strong>，是 IPv4 地址长度的四倍。但地址空间不是线性增长——128 位意味着 2^128 个可能的地址，这个数字约为 <strong>3.4 x 10^38</strong>。</p><p>为了直观感受这个数字有多大：如果把所有 IPv6 地址平均分配给地球上的每一粒沙子（估计约 7.5 x 10^18 粒），每粒沙子大约能分到 4.5 x 10^19 个地址。换句话说，IPv6 的地址永远不会用完。</p><p>IPv6 地址的表示方式和 IPv4 完全不同，使用八组四位十六进制数字，用冒号分隔：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">2001:0db8:85a3:0000:0000:8a2e:0370:7334</span><br></pre></td></tr></table></figure><p>为了简化书写，连续的零可以省略。上面的地址可以简写为：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">2001:db8:85a3::8a2e:370:7334</span><br></pre></td></tr></table></figure><p>其中 <code>::</code> 表示连续的全零段被省略了。</p><h3 id="IPv6-的地址分配逻辑"><a href="#IPv6-的地址分配逻辑" class="headerlink" title="IPv6 的地址分配逻辑"></a>IPv6 的地址分配逻辑</h3><p>IPv6 不只是”地址变长了”，它的分配逻辑也完全不同于 IPv4。</p><p>在 IPv4 中，一台服务器通常只有一个公网 IP 地址。在 IPv6 中，一个终端用户或服务器通常会被分配一整个<strong>前缀（prefix）</strong>——比如一个 &#x2F;64 的前缀包含 2^64 个地址（约 1.8 x 10^19 个），一个 &#x2F;48 的前缀包含 2^80 个地址。</p><p>这意味着一台 VPS 服务器可能拥有几千万乃至更多个可用的 IPv6 地址，随时可以切换使用其中的任何一个。这个特性在代理场景中有非常重要的意义——后文会详细说明。</p><h3 id="IPv6-的技术改进"><a href="#IPv6-的技术改进" class="headerlink" title="IPv6 的技术改进"></a>IPv6 的技术改进</h3><p>除了地址空间的飞跃外，IPv6 在协议设计上也做了多处改进：</p><p><strong>简化的报头结构。</strong> IPv4 的报头包含很多可选字段，路由器在处理每个数据包时都需要解析这些字段。IPv6 将报头简化为固定长度（40 字节），将可选信息移到扩展报头中。这使得路由器处理 IPv6 数据包的效率理论上更高。</p><p><strong>取消了 NAT 的需求。</strong> IPv6 地址足够多，每台设备都可以拥有全球唯一的公网地址，不再需要 NAT。这简化了网络架构，有利于端到端通信——P2P 应用、在线游戏、IoT 设备通信都能因此受益。</p><p><strong>内置 IPsec 支持。</strong> IPv6 协议栈原生支持 IPsec（网络层加密），虽然实际部署中这一点并不总是被启用。</p><p><strong>改进的多播和任播。</strong> IPv6 取消了广播（broadcast），改用更精细的多播（multicast）和任播（anycast）机制。</p><hr><h2 id="双栈：两个世界的桥梁"><a href="#双栈：两个世界的桥梁" class="headerlink" title="双栈：两个世界的桥梁"></a>双栈：两个世界的桥梁</h2><h3 id="什么是双栈"><a href="#什么是双栈" class="headerlink" title="什么是双栈"></a>什么是双栈</h3><p>由于 IPv4 和 IPv6 不能直接互通（它们是完全不同的协议），从 IPv4 到 IPv6 的过渡不可能一步完成。<strong>双栈（Dual Stack）</strong> 是当前最主流的过渡方案：一台设备或服务器同时配置 IPv4 和 IPv6 地址，两种协议栈并行运行。</p><p>当你访问一个网站时，你的设备会同时通过 DNS 查询 A 记录（IPv4 地址）和 AAAA 记录（IPv6 地址）。如果目标网站同时提供两种地址，你的操作系统会根据配置和网络条件选择使用哪一种协议进行连接。</p><h3 id="Happy-Eyeballs-算法"><a href="#Happy-Eyeballs-算法" class="headerlink" title="Happy Eyeballs 算法"></a>Happy Eyeballs 算法</h3><p>现代操作系统通常使用 <strong>Happy Eyeballs</strong>（RFC 6555 &#x2F; 8305）算法来选择协议。这个算法的核心思想是：同时发起 IPv4 和 IPv6 连接尝试，优先等待 IPv6 的结果（因为 IPv6 是未来方向），但如果 IPv6 连接在短时间内没有成功建立，就立刻使用 IPv4。</p><p>这样做的好处是：如果你的 ISP 支持 IPv6 且连接质量好，你会自动使用 IPv6；如果 IPv6 不通或太慢，你不会因此卡住，系统会很快切换到 IPv4。</p><h3 id="代理场景中的双栈"><a href="#代理场景中的双栈" class="headerlink" title="代理场景中的双栈"></a>代理场景中的双栈</h3><p>在代理场景中，”双栈”的含义有两层：</p><p><strong>你本地到代理服务器的连接</strong> 可以是 IPv4 或 IPv6。这取决于你的 ISP 是否提供 IPv6 以及代理客户端的配置。</p><p><strong>代理服务器到目标网站的连接（出口）</strong> 可以是 IPv4 或 IPv6。这取决于代理服务器是否有 IPv6 出口以及服务端的配置。</p><p>这两层是独立的。你和代理服务器之间用 IPv4 连接，但代理服务器可以通过 IPv6 出口访问目标网站——反过来也一样。在解锁场景中，出口使用 IPv4 还是 IPv6 往往直接决定了能不能访问特定内容。关于 IPv4&#x2F;IPv6 出口对解锁的影响，可以参考 <a href="/posts/ipv4-vs-ipv6-unlock/">IPv4 与 IPv6 在解锁中的作用</a>。</p><hr><h2 id="IPv6-在代理场景中为什么重要"><a href="#IPv6-在代理场景中为什么重要" class="headerlink" title="IPv6 在代理场景中为什么重要"></a>IPv6 在代理场景中为什么重要</h2><h3 id="IP-信誉与黑名单"><a href="#IP-信誉与黑名单" class="headerlink" title="IP 信誉与黑名单"></a>IP 信誉与黑名单</h3><p>前面提到，IPv4 地址数量有限，且数据中心常用的 IPv4 地址段已经被 IP 信誉数据库（如 MaxMind、IP2Location、ipinfo.io 等）详尽标注。流媒体平台、AI 服务、银行网站等可以轻松查询一个 IPv4 地址是来自住宅用户还是数据中心，从而决定是否允许访问。</p><p>IPv6 的情况完全不同。由于地址空间极其庞大，信誉数据库对 IPv6 的覆盖率远不如 IPv4。很多 IPv6 地址段尚未被准确分类，流媒体平台查询时可能得到不确定的结果——在不确定时，平台通常倾向于放行而非封锁，以避免误伤正常用户。</p><p>关于 IP 类型和信誉的更详细解释，可以参考 <a href="/posts/ip-types/">什么是原生 IP、广播 IP、住宅 IP</a>。</p><h3 id="抗封锁能力"><a href="#抗封锁能力" class="headerlink" title="抗封锁能力"></a>抗封锁能力</h3><p>从 GFW 的角度看，IPv6 也增加了封锁的难度。</p><p>IPv4 地址总量有限，GFW 可以建立完整的 IPv4 地址信誉库，并对可疑的 IP 段实施精准封锁。封一个 &#x2F;24 段（256 个地址）的代价很小，因为这个范围内基本都是同类用途的服务器。</p><p>但封锁 IPv6 段面临不同的挑战。一个 &#x2F;48 前缀包含的地址数量是天文数字，代理运营者可以在同一前缀内轻松轮换出口地址。而如果 GFW 选择封锁整个 &#x2F;48 甚至 &#x2F;32 前缀，可能会连带影响大量无关的正常服务和用户——这种”连坐”效应使得大范围封锁 IPv6 的成本和风险显著高于 IPv4。</p><h3 id="解锁潜力"><a href="#解锁潜力" class="headerlink" title="解锁潜力"></a>解锁潜力</h3><p>在流媒体解锁场景中，IPv6 的优势已经在实践中被反复验证。同一台服务器的 IPv4 出口被 Netflix 封锁，但 IPv6 出口能正常解锁——这种情况非常常见。</p><p>原因综合了上面提到的几个因素：IPv6 地址的信誉数据不完善、ISP 分配的 IPv6 段自带”住宅”属性、以及地址轮换的便利性使得平台难以维持持久有效的封锁。</p><p>关于 IPv4&#x2F;IPv6 在解锁中的具体表现差异和配置方法，参见 <a href="/posts/ipv4-vs-ipv6-unlock/">IPv4 与 IPv6 在解锁中的作用</a>。</p><hr><h2 id="代理客户端如何处理-IPv4-IPv6"><a href="#代理客户端如何处理-IPv4-IPv6" class="headerlink" title="代理客户端如何处理 IPv4&#x2F;IPv6"></a>代理客户端如何处理 IPv4&#x2F;IPv6</h2><h3 id="客户端配置选项"><a href="#客户端配置选项" class="headerlink" title="客户端配置选项"></a>客户端配置选项</h3><p>主流代理客户端（mihomo、Sing-box、Xray 等）都提供了 IPv4&#x2F;IPv6 相关的配置选项。以 mihomo 为例，核心配置项包括：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># mihomo 配置示例</span></span><br><span class="line"><span class="attr">ipv6:</span> <span class="literal">true</span>                    <span class="comment"># 是否启用 IPv6 支持</span></span><br><span class="line"><span class="attr">dns:</span></span><br><span class="line">  <span class="attr">ipv6:</span> <span class="literal">true</span>                  <span class="comment"># DNS 是否查询 AAAA 记录</span></span><br><span class="line">  <span class="attr">prefer-h3:</span> <span class="literal">false</span>            <span class="comment"># 是否优先使用 HTTP/3 (QUIC)</span></span><br></pre></td></tr></table></figure><p><code>ipv6: true</code> 表示客户端允许使用 IPv6 协议。如果设为 <code>false</code>，客户端会忽略所有 IPv6 相关的 DNS 结果和连接。</p><h3 id="DNS-解析与协议选择"><a href="#DNS-解析与协议选择" class="headerlink" title="DNS 解析与协议选择"></a>DNS 解析与协议选择</h3><p>当你的客户端访问一个网站时，DNS 解析会同时查询 A 记录（IPv4）和 AAAA 记录（IPv6）。如果目标网站同时提供两种记录，客户端需要决定使用哪一个。</p><p>这个决定受到多个因素影响：</p><ol><li><strong>客户端配置</strong>：是否启用了 IPv6 支持</li><li><strong>代理服务器能力</strong>：服务器是否有 IPv6 出口</li><li><strong>DNS 返回结果</strong>：目标网站是否有 AAAA 记录</li><li><strong>IP 优先级设置</strong>：某些客户端允许设置”优先 IPv4”或”优先 IPv6”</li></ol><p>如果你使用 fake-ip 模式（关于 fake-ip 的详细说明，参见 <a href="/posts/fake-ip-vs-redir-host/">Fake-IP 与 Redir-Host 模式</a>），DNS 解析的协议选择实际上发生在代理服务器端，而非客户端本地。客户端只负责将请求转发给代理服务器，由服务器决定使用 IPv4 还是 IPv6 出口连接目标。</p><h3 id="常见配置建议"><a href="#常见配置建议" class="headerlink" title="常见配置建议"></a>常见配置建议</h3><p><strong>如果你的 ISP 和代理服务器都支持 IPv6</strong>，建议在客户端配置中启用 IPv6 支持。这能让你享受到 IPv6 出口在解锁方面的潜在优势。</p><p><strong>如果你的 ISP 不支持 IPv6</strong>，也不一定需要禁用客户端的 IPv6 选项。因为你到代理服务器的连接可以走 IPv4，而代理服务器仍然可以通过 IPv6 出口访问目标网站——前提是服务器端配置了 IPv6 出口。</p><p><strong>如果你遇到连接问题</strong>，尝试切换 IPv6 的启用状态是一个有效的排查手段。某些情况下，IPv6 配置不当会导致连接超时或路由异常。</p><hr><h2 id="检查你的-IPv6-支持状态"><a href="#检查你的-IPv6-支持状态" class="headerlink" title="检查你的 IPv6 支持状态"></a>检查你的 IPv6 支持状态</h2><h3 id="本地-ISP-的-IPv6-支持"><a href="#本地-ISP-的-IPv6-支持" class="headerlink" title="本地 ISP 的 IPv6 支持"></a>本地 ISP 的 IPv6 支持</h3><p>想知道你的网络是否支持 IPv6，最简单的方法是访问以下测试网站：</p><ul><li><strong><a href="https://test-ipv6.com/">test-ipv6.com</a></strong>：综合 IPv6 连通性测试</li><li><strong><a href="https://ipv6-test.com/">ipv6-test.com</a></strong>：IPv6 支持检测和得分评估</li></ul><p>如果测试结果显示你的网络同时拥有 IPv4 和 IPv6 地址，那么你的 ISP 提供了双栈接入。如果只有 IPv4 地址，说明你的 ISP 尚未为你启用 IPv6。</p><p>在中国大陆，主要运营商（电信、联通、移动）在过去几年已经大规模部署了 IPv6。如果你使用的是比较新的宽带套餐，大概率已经有 IPv6 支持。但需要注意的是，你的路由器也需要支持 IPv6 并正确配置——有些老旧路由器可能默认关闭了 IPv6 功能。</p><h3 id="代理节点的-IPv6-支持"><a href="#代理节点的-IPv6-支持" class="headerlink" title="代理节点的 IPv6 支持"></a>代理节点的 IPv6 支持</h3><p>要确认你的代理节点是否支持 IPv6 出口，可以在连接代理后访问 <a href="https://test-ipv6.com/">test-ipv6.com</a> 或 <a href="https://ipv6-test.com/">ipv6-test.com</a>。如果测试结果显示有 IPv6 地址，说明代理服务器提供了 IPv6 出口。</p><p>并非所有代理节点都支持 IPv6 出口。这取决于机场运营者是否在服务器上配置了 IPv6。如果你对 IPv6 出口有需求（特别是为了流媒体解锁），可以在选择机场时关注它是否提供 IPv6 出口节点。</p><hr><h2 id="常见问题与陷阱"><a href="#常见问题与陷阱" class="headerlink" title="常见问题与陷阱"></a>常见问题与陷阱</h2><h3 id="IPv6-泄露"><a href="#IPv6-泄露" class="headerlink" title="IPv6 泄露"></a>IPv6 泄露</h3><p><strong>IPv6 泄露</strong> 是代理使用中一个常见但容易被忽视的问题。</p><p>场景是这样的：你的代理客户端配置了 IPv4 代理，但没有处理 IPv6 流量。当你访问一个同时提供 A 和 AAAA 记录的网站时，操作系统可能选择通过 IPv6 直接连接（绕过代理），而 IPv4 流量走代理。结果是：你以为自己在使用代理，但部分流量实际上直接暴露了你的真实 IPv6 地址。</p><p><strong>解决方案：</strong></p><ul><li>使用 TUN 模式接管系统全部流量（包括 IPv4 和 IPv6），确保没有流量能绕过代理。关于 TUN 模式的详细说明，参见 <a href="/posts/tun-vs-system-proxy/">TUN 模式与系统代理</a>。</li><li>在客户端中明确启用或禁用 IPv6：如果你的代理不支持 IPv6，最安全的做法是在客户端中禁用 IPv6（<code>ipv6: false</code>），这样所有流量都走 IPv4 通道。</li><li>在操作系统层面禁用 IPv6（不推荐，因为可能影响其他应用）。</li></ul><h3 id="IPv6-路由问题"><a href="#IPv6-路由问题" class="headerlink" title="IPv6 路由问题"></a>IPv6 路由问题</h3><p>某些网络环境中，IPv6 虽然”存在”但路由质量很差——延迟高、丢包多、速度慢。这时候系统的 Happy Eyeballs 算法可能仍然偶尔选择 IPv6，导致体验不佳。</p><p>如果你发现开启 IPv6 后网速反而变慢了，可以尝试在代理客户端中设置”优先 IPv4”（<code>prefer-h3: false</code> 配合适当的 DNS 配置），或在测试确认 IPv6 路由质量不佳后暂时关闭 IPv6 支持。</p><h3 id="IPv6-与分流规则"><a href="#IPv6-与分流规则" class="headerlink" title="IPv6 与分流规则"></a>IPv6 与分流规则</h3><p>如果你在分流规则中使用了 <code>IP-CIDR</code> 规则匹配 IPv4 地址段，这些规则不会匹配 IPv6 地址。你需要使用 <code>IP-CIDR6</code> 规则来匹配 IPv6 地址段。</p><p>同样，<code>GEOIP</code> 规则对 IPv4 和 IPv6 都有效——GeoIP 数据库同时包含 IPv4 和 IPv6 的地理归属信息。但在某些旧版本的 GeoIP 数据库中，IPv6 的覆盖率可能不如 IPv4 完整，导致部分 IPv6 地址无法被正确归类。</p><h3 id="运营商的-IPv6-限制"><a href="#运营商的-IPv6-限制" class="headerlink" title="运营商的 IPv6 限制"></a>运营商的 IPv6 限制</h3><p>部分 ISP 虽然提供了 IPv6 接入，但在 IPv6 的国际出口带宽上限制较多。也就是说，即使你能用 IPv6，但出境走 IPv6 的速度可能不如 IPv4。这种情况因地区和运营商而异，需要实际测试才能确定。</p><hr><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="IPv6-会完全取代-IPv4-吗？"><a href="#IPv6-会完全取代-IPv4-吗？" class="headerlink" title="IPv6 会完全取代 IPv4 吗？"></a>IPv6 会完全取代 IPv4 吗？</h3><p>理论上是的，但实际过渡需要很长时间。IPv4 和 IPv6 是不兼容的协议，全球还有大量只支持 IPv4 的设备和网络基础设施。在可预见的未来，双栈并存将是常态。对代理用户来说，两种协议都需要了解和考虑。</p><h3 id="我的-ISP-没有-IPv6，我还能使用-IPv6-出口的代理节点吗？"><a href="#我的-ISP-没有-IPv6，我还能使用-IPv6-出口的代理节点吗？" class="headerlink" title="我的 ISP 没有 IPv6，我还能使用 IPv6 出口的代理节点吗？"></a>我的 ISP 没有 IPv6，我还能使用 IPv6 出口的代理节点吗？</h3><p>可以。你本地到代理服务器的连接使用 IPv4，代理服务器到目标网站的连接使用 IPv6——这两段是独立的。只要代理服务器本身配置了 IPv6 出口，它就可以通过 IPv6 访问目标网站，而你不需要本地 IPv6 支持。</p><h3 id="启用-IPv6-会影响安全性吗？"><a href="#启用-IPv6-会影响安全性吗？" class="headerlink" title="启用 IPv6 会影响安全性吗？"></a>启用 IPv6 会影响安全性吗？</h3><p>如果代理客户端正确配置了 IPv6 流量的处理（特别是使用 TUN 模式），启用 IPv6 不会降低安全性。最大的风险是前面提到的 IPv6 泄露——部分流量绕过代理直接通过 IPv6 发出。使用 TUN 模式可以有效避免这个问题。</p><h3 id="机场节点标注的”IPv6”是什么意思？"><a href="#机场节点标注的”IPv6”是什么意思？" class="headerlink" title="机场节点标注的”IPv6”是什么意思？"></a>机场节点标注的”IPv6”是什么意思？</h3><p>通常有两种含义。第一种是节点服务器支持 IPv6 入站——你可以通过 IPv6 连接到这个代理服务器（前提是你的 ISP 支持 IPv6）。第二种是节点服务器支持 IPv6 出口——代理服务器可以通过 IPv6 出口访问目标网站。后者在流媒体解锁场景中更有价值。具体含义需要参考机场的文档说明。</p><h3 id="IPv6-比-IPv4-更快吗？"><a href="#IPv6-比-IPv4-更快吗？" class="headerlink" title="IPv6 比 IPv4 更快吗？"></a>IPv6 比 IPv4 更快吗？</h3><p>不一定。IPv6 在协议层面的开销略低（简化的报头），但实际速度取决于网络路由质量、ISP 的 IPv6 出口带宽、目标服务器的 IPv6 网络质量等因素。在某些线路上 IPv6 更快，在另一些线路上 IPv4 更快——没有一概而论的结论。</p>]]></content>
      
      
      <categories>
          
          <category> 网络知识 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> 网络 </tag>
            
            <tag> 基础 </tag>
            
            <tag> IPv4 </tag>
            
            <tag> IPv6 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>直连 vs 中转 vs CDN：线路类型与成本分析</title>
      <link href="/posts/line-types-explained/"/>
      <url>/posts/line-types-explained/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>: 机场节点有”直连””中转””IPLC””IEPL””CDN”等线路标注。不同线路在速度、稳定性、抗封锁和价格上差异显著。本文解释各线路的技术原理和表现。</p></blockquote><hr><h2 id="什么是”线路”"><a href="#什么是”线路”" class="headerlink" title="什么是”线路”"></a>什么是”线路”</h2><p>在代理使用场景中，”线路”指的是你的设备到代理服务器之间的网络路径。当你连接一个节点时，数据并非凭空传输，而是要经过一系列物理和逻辑上的网络设备。从你的电脑出发，数据先到达本地运营商（ISP），再经过国内骨干网，穿越国际出口，最终到达海外服务器。</p><p>这条路径的质量直接决定了你的使用体验：速度快不快、延迟高不高、晚高峰卡不卡、敏感时期能不能用。不同的机场服务商会选择不同的网络路径来承载流量，这就是所谓的”线路类型”。</p><p>理解线路类型，是选择机场和判断性价比的基础。下面我们逐一介绍各种主流线路。</p><hr><h2 id="直连线路"><a href="#直连线路" class="headerlink" title="直连线路"></a>直连线路</h2><p>直连线路是最基础、最简单的线路类型。数据的传输路径为：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">你的设备 → 本地ISP → 国内骨干网 → 国际出口 → 海外服务器</span><br></pre></td></tr></table></figure><p>这条路径没有任何额外的中继或优化，数据直接从国内出发，经过公共互联网到达海外目标服务器。</p><p><strong>优点：</strong></p><ul><li>成本最低，服务器租用费用即为主要开支</li><li>架构简单，部署方便</li><li>在网络空闲时段，速度可以接受</li></ul><p><strong>缺点：</strong></p><ul><li>高度依赖国际出口带宽，晚高峰（20:00-24:00）拥堵严重，速度显著下降</li><li>直接暴露在 GFW 的检测和干扰之下，敏感时期（如两会、国庆等）容易被封锁</li><li>路由不可控，可能绕路导致延迟飙升</li><li>丢包率在网络繁忙时段明显升高</li></ul><p>直连线路适合预算有限、对稳定性要求不高的用户，或者作为备用线路使用。大多数低价机场的节点本质上就是直连线路。</p><hr><h2 id="中转线路"><a href="#中转线路" class="headerlink" title="中转线路"></a>中转线路</h2><p>中转线路在你和海外服务器之间增加了一个或多个国内中继节点，用来优化网络路径。根据中继方式的不同，可以分为普通中转和专线两大类。</p><h3 id="普通中转（BGP-中转）"><a href="#普通中转（BGP-中转）" class="headerlink" title="普通中转（BGP 中转）"></a>普通中转（BGP 中转）</h3><p>BGP（Border Gateway Protocol，边界网关协议）中转的工作原理是在国内部署中继服务器，利用 BGP 协议选择最优路由，再将流量转发到海外。数据路径大致为：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">你的设备 → 本地ISP → 国内BGP中继服务器 → 优化路由 → 海外服务器</span><br></pre></td></tr></table></figure><p>BGP 中转服务器通常托管在国内优质机房（如广港、沪日等热门线路方向），接入多条运营商线路。通过 BGP 协议，中继服务器可以动态选择最优路径，避开拥堵的国际出口。</p><p><strong>优点：</strong></p><ul><li>相比直连，路由更优化，延迟更低</li><li>晚高峰表现明显优于直连</li><li>多线接入可以覆盖电信、联通、移动等不同运营商用户</li><li>价格适中，性价比较高</li></ul><p><strong>缺点：</strong></p><ul><li>仍然走公网国际出口，只是路由更优</li><li>敏感时期仍可能受到 GFW 干扰</li><li>中继服务器本身需要成本，价格高于直连</li><li>国内中继节点存在被封的风险</li></ul><p>普通中转是目前中端机场的主流选择，能在成本和体验之间取得较好的平衡。</p><p><img src="/images/inline/node-architecture.png" alt="中转架构示意图"><br><em>图片来源：<a href="https://www.ivanti.com/">Ivanti</a></em></p><h3 id="专线（IPLC-IEPL）"><a href="#专线（IPLC-IEPL）" class="headerlink" title="专线（IPLC &#x2F; IEPL）"></a>专线（IPLC &#x2F; IEPL）</h3><p>专线是高端线路的代表。IPLC（International Private Leased Circuit，国际私有租用线路）和 IEPL（International Ethernet Private Line，国际以太网专线）都是运营商提供的点对点专用线路，数据完全不经过公共互联网的国际出口。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">你的设备 → 本地ISP → 国内专线入口 → 专用物理链路 → 海外专线出口 → 海外服务器</span><br></pre></td></tr></table></figure><p><strong>核心特点：</strong></p><ul><li>数据在专用线路上传输，不经过 GFW 审查的公网国际出口</li><li>带宽独享或按需分配，不受公网拥堵影响</li><li>延迟极低且稳定，通常在 30-80ms 之间（取决于物理距离）</li><li>理论上不存在被 GFW 封锁协议的风险</li></ul><p><strong>IPLC 和 IEPL 的区别：</strong></p><p>从技术角度来看，IPLC 基于传统的 TDM（时分复用）技术，而 IEPL 基于以太网技术。IPLC 历史更悠久，IEPL 则更现代、更灵活。但对于终端用户而言，两者在实际使用中的体验差别极小，都能提供低延迟、高稳定、不受 GFW 干扰的连接。市面上很多标注”IPLC”的线路，实际可能是 IEPL 或其他形式的内网互联线路，不必过于纠结名称，重点关注实际表现即可。</p><p><strong>优点：</strong></p><ul><li>速度快、延迟低、稳定性极佳</li><li>完全绕过 GFW，敏感时期几乎不受影响</li><li>不存在晚高峰拥堵问题</li><li>丢包率极低</li></ul><p><strong>缺点：</strong></p><ul><li>价格昂贵，是所有线路类型中最贵的</li><li>带宽资源有限，通常有流量限制或限速</li><li>真正的专线资源稀缺，市场上存在虚假宣传</li></ul><hr><h2 id="CDN-线路"><a href="#CDN-线路" class="headerlink" title="CDN 线路"></a>CDN 线路</h2><p>CDN（Content Delivery Network，内容分发网络）线路是一种借助 Cloudflare 等 CDN 服务商进行流量中转的方案。其核心思路是将代理流量伪装为正常的 HTTPS 网站访问流量，通过 CDN 的全球网络进行传输。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">你的设备 → 本地ISP → Cloudflare CDN节点 → Cloudflare网络 → 海外服务器</span><br></pre></td></tr></table></figure><p><strong>优点：</strong></p><ul><li>抗封锁能力极强，因为 GFW 很难封锁 <a href="https://www.cloudflare.com/">Cloudflare</a> 的 IP 段（大量正常网站依赖 Cloudflare，封锁代价太大）</li><li>使用成本低，Cloudflare 的免费计划即可使用</li><li>IP 被封后可以通过切换 CDN 节点快速恢复</li><li>非常适合作为”保底”线路</li></ul><p><strong>缺点：</strong></p><ul><li>速度较慢，因为数据要经过额外的 CDN 中转</li><li>延迟较高，通常在 200-500ms 以上</li><li>免费 CDN 节点可能存在速度不稳定的情况</li><li>不适合对带宽和延迟要求高的场景（如 4K 视频、实时游戏）</li></ul><p>CDN 线路最大的价值在于”能用”，而非”好用”。在敏感时期其他线路全部失效时，CDN 线路往往是最后的生命线。因此，优秀的机场通常会在节点列表中保留若干 CDN 节点作为备用。</p><hr><h2 id="对比表"><a href="#对比表" class="headerlink" title="对比表"></a>对比表</h2><table><thead><tr><th>指标</th><th>直连</th><th>BGP 中转</th><th>IPLC&#x2F;IEPL 专线</th><th>CDN</th></tr></thead><tbody><tr><td><strong>速度</strong></td><td>中等（非高峰）&#x2F; 慢（高峰）</td><td>较快</td><td>快</td><td>慢</td></tr><tr><td><strong>延迟</strong></td><td>100-300ms</td><td>60-150ms</td><td>30-80ms</td><td>200-500ms+</td></tr><tr><td><strong>稳定性</strong></td><td>差</td><td>中等</td><td>优秀</td><td>中等</td></tr><tr><td><strong>抗封锁</strong></td><td>差</td><td>中等</td><td>强（不过公网）</td><td>极强</td></tr><tr><td><strong>价格</strong></td><td>低</td><td>中等</td><td>高</td><td>低</td></tr><tr><td><strong>晚高峰表现</strong></td><td>严重下降</td><td>有所下降</td><td>基本不受影响</td><td>本身速度有限</td></tr><tr><td><strong>敏感时期表现</strong></td><td>高概率中断</td><td>可能受影响</td><td>基本正常</td><td>几乎不受影响</td></tr></tbody></table><hr><h2 id="运营成本分析"><a href="#运营成本分析" class="headerlink" title="运营成本分析"></a>运营成本分析</h2><p>线路类型的价格差异是由其背后的实际运营成本决定的。</p><p><strong>直连线路：</strong> 成本主要来自海外 VPS 的租用费用，通常每月 3-10 美元即可获得一台基础配置的服务器。带宽成本低，部署简单，是成本最低的方案。</p><p><strong>BGP 中转：</strong> 除了海外服务器成本外，还需要租用国内中继服务器以及支付 BGP 带宽费用。国内优质机房的带宽并不便宜，综合下来每月成本在 20-100 美元以上，取决于中继节点数量和带宽规格。</p><p><strong>IPLC&#x2F;IEPL 专线：</strong> 专线带宽的定价通常按 Mbps 计费，价格范围大约在每 Mbps 每月 50-500 美元以上。一条 100Mbps 的专线月租可以达到数千甚至上万美元。这也是为什么专线机场的订阅价格远高于普通机场的原因。机场通常会在多个用户之间共享带宽来分摊成本。</p><p><strong>CDN 线路：</strong> Cloudflare 免费计划本身不收费，主要成本是后端服务器的费用，与直连相当。但如果使用付费 CDN 计划（如 Cloudflare Pro 或自选 IP 方案），会有额外成本。</p><p>这些成本差异直接反映在不同机场的订阅定价上。月费 10-20 元的机场大概率以直连为主；月费 30-60 元的可能包含 BGP 中转节点；月费 100 元以上的高端机场才可能提供真正的专线节点。</p><hr><h2 id="如何判断线路类型"><a href="#如何判断线路类型" class="headerlink" title="如何判断线路类型"></a>如何判断线路类型</h2><p>机场通常会在节点名称中标注线路类型，但标注不一定准确。以下方法可以帮助你辅助判断：</p><p><strong>1. 看节点命名</strong></p><p>常见命名规则：</p><ul><li>标注 <code>IPLC</code>、<code>IEPL</code>、<code>专线</code> 的通常是专线节点</li><li>标注 <code>中转</code>、<code>BGP</code>、<code>relay</code> 的是中转节点</li><li>标注 <code>CF</code>、<code>CDN</code>、<code>Cloudflare</code> 的是 CDN 节点</li><li>没有特殊标注的可能是直连节点</li></ul><p><strong>2. 延迟测试</strong></p><p>用 ping 或客户端内置的延迟测试功能：</p><ul><li>延迟 30-80ms 且极其稳定：很可能是专线</li><li>延迟 60-150ms、波动适中：可能是中转</li><li>延迟 200ms 以上：可能是 CDN 或绕路的直连</li><li>延迟波动很大：大概率是直连</li></ul><p><strong>3. 敏感时期表现</strong></p><p>最有效的判断方法往往是在特殊时期观察节点的表现：</p><ul><li>完全不受影响的：大概率是专线或 CDN</li><li>速度下降但仍可用的：可能是中转</li><li>完全不可用的：基本确定是直连</li></ul><p><strong>4. 路由追踪</strong></p><p>进阶用户可以使用 <code>traceroute</code> 或 <code>WinMTR</code> 等工具追踪路由路径。如果路径中出现明显的国内中继节点，说明是中转线路；如果跳数极少且延迟极低，可能是专线。不过专线的路由信息有时不完整或不公开。</p><hr><h2 id="选择建议"><a href="#选择建议" class="headerlink" title="选择建议"></a>选择建议</h2><p>根据不同的使用需求和预算，以下是推荐方案：</p><h3 id="预算有限型（月费-15-元以下）"><a href="#预算有限型（月费-15-元以下）" class="headerlink" title="预算有限型（月费 15 元以下）"></a>预算有限型（月费 15 元以下）</h3><ul><li>选择以直连或基础中转为主的机场</li><li>配合免费 CDN 节点作为备用</li><li>适合轻度浏览、社交媒体等非高带宽需求</li><li>需要接受晚高峰和敏感时期的体验下降</li></ul><h3 id="主流平衡型（月费-30-80-元）"><a href="#主流平衡型（月费-30-80-元）" class="headerlink" title="主流平衡型（月费 30-80 元）"></a>主流平衡型（月费 30-80 元）</h3><ul><li>选择包含 BGP 中转节点的机场</li><li>最好有多条线路方向（如广港、沪日、沪美等）</li><li>兼顾日常使用和晚高峰需求</li><li>适合视频观看、日常办公等大多数场景</li><li>这是大多数用户的最佳选择</li></ul><h3 id="高端体验型（月费-100-元以上）"><a href="#高端体验型（月费-100-元以上）" class="headerlink" title="高端体验型（月费 100 元以上）"></a>高端体验型（月费 100 元以上）</h3><ul><li>选择拥有 IPLC&#x2F;IEPL 专线节点的机场</li><li>追求低延迟、高稳定、全天候可用</li><li>适合游戏加速、远程办公、视频会议等对网络质量要求高的场景</li><li>敏感时期基本无感知</li><li>建议确认是否为真正的专线，而非虚假宣传</li></ul><p>不论选择哪个价位，都建议确保机场至少提供一两个 CDN 备用节点，以应对极端情况。</p><hr><h2 id="常见问题（FAQ）"><a href="#常见问题（FAQ）" class="headerlink" title="常见问题（FAQ）"></a>常见问题（FAQ）</h2><h3 id="Q1：如何判断机场宣传的-IPLC-是否是真的？"><a href="#Q1：如何判断机场宣传的-IPLC-是否是真的？" class="headerlink" title="Q1：如何判断机场宣传的 IPLC 是否是真的？"></a>Q1：如何判断机场宣传的 IPLC 是否是真的？</h3><p>真正的 IPLC&#x2F;IEPL 专线具有以下特征：延迟极低且几乎无波动、任何时段速度都稳定、敏感时期完全不受影响。如果一个标注”IPLC”的节点在晚高峰明显变慢，或者在敏感时期出现连接问题，那它很可能并非真正的专线，而是商家的营销手段。另外，真正的专线成本极高，如果机场价格很便宜却声称提供专线，也值得怀疑。可以在社区中寻找其他用户的实测反馈来辅助判断。</p><h3 id="Q2：为什么晚高峰（20-00-24-00）速度明显变慢？"><a href="#Q2：为什么晚高峰（20-00-24-00）速度明显变慢？" class="headerlink" title="Q2：为什么晚高峰（20:00-24:00）速度明显变慢？"></a>Q2：为什么晚高峰（20:00-24:00）速度明显变慢？</h3><p>晚高峰是中国互联网的流量高峰期，大量用户同时上网导致国际出口带宽严重拥堵。直连线路和普通中转线路都需要经过公共互联网的国际出口，因此不可避免地受到影响。带宽就像高速公路，车流量大的时候自然就堵了。只有使用专用线路（IPLC&#x2F;IEPL）才能真正避开公网拥堵，因为它们走的是独立的”专用车道”。如果晚高峰体验对你很重要，建议升级到包含专线节点的机场。</p><h3 id="Q3：CDN-线路能看-4K-视频吗？"><a href="#Q3：CDN-线路能看-4K-视频吗？" class="headerlink" title="Q3：CDN 线路能看 4K 视频吗？"></a>Q3：CDN 线路能看 4K 视频吗？</h3><p>一般来说比较困难。4K 视频流通常需要 25-50Mbps 的稳定带宽，而 CDN 线路（尤其是免费的 Cloudflare）的实际速度往往在 1-10Mbps 左右，远达不到 4K 的带宽要求。CDN 线路更适合基础的网页浏览、文字社交和标清&#x2F;高清视频。如果你需要流畅观看 4K 内容，建议使用 BGP 中转或专线节点。CDN 线路的核心价值在于抗封锁，而非提供高速体验，把它当作”保底”方案是最合理的定位。</p><h3 id="Q4：同一家机场不同线路节点的价格差距正常吗？"><a href="#Q4：同一家机场不同线路节点的价格差距正常吗？" class="headerlink" title="Q4：同一家机场不同线路节点的价格差距正常吗？"></a>Q4：同一家机场不同线路节点的价格差距正常吗？</h3><p>完全正常。不同线路类型的运营成本差异巨大。一台直连服务器每月可能只需几美元，而一条 IPLC 专线每月可能需要数百甚至上千美元。这些成本差异自然会反映到价格上。许多机场采用分级套餐制度：基础套餐包含直连和中转节点，高级套餐增加专线节点，顶级套餐提供更大的专线带宽配额。这种定价策略是合理的，因为背后的成本结构确实不同。选择时不要只看价格，也不要一味追求最贵的，关键是匹配自己的实际需求。</p>]]></content>
      
      
      <categories>
          
          <category> 运营与架构 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> CDN </tag>
            
            <tag> 直连 </tag>
            
            <tag> 中转 </tag>
            
            <tag> IPLC </tag>
            
            <tag> IEPL </tag>
            
            <tag> 线路 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>IPv4 与 IPv6 在解锁中的作用</title>
      <link href="/posts/ipv4-vs-ipv6-unlock/"/>
      <url>/posts/ipv4-vs-ipv6-unlock/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：随着 IPv6 的普及，越来越多的代理节点同时提供 IPv4 和 IPv6 出口。在流媒体解锁场景中，IPv4 和 IPv6 的表现可能完全不同——同一台服务器的 IPv4 被封锁而 IPv6 能解锁的情况很常见。本文解释为什么会出现这种差异，以及如何利用 IPv6 提升解锁成功率。</p></blockquote><hr><h2 id="IPv4-与-IPv6-基础回顾"><a href="#IPv4-与-IPv6-基础回顾" class="headerlink" title="IPv4 与 IPv6 基础回顾"></a>IPv4 与 IPv6 基础回顾</h2><p>在讨论解锁差异之前，先快速回顾两种协议的核心区别。更详细的网络基础知识可以参考 <a href="../network/ipv4-vs-ipv6-basics.md">IPv4 与 IPv6 基础</a>。关于 mihomo 配置的完整文档，参见 <a href="https://wiki.metacubex.one/">Clash Wiki</a>。</p><p><strong>IPv4</strong> 使用 32 位地址，格式为 <code>203.0.113.1</code> 这样的四段十进制数字，理论上提供约 43 亿个地址。这个数字听起来很大，但在全球数十亿联网设备的需求面前早已捉襟见肘——IANA 在 2011 年就将最后的 IPv4 地址块分配完毕，各地区注册机构也在此后数年内相继耗尽分配池。现在获取新的 IPv4 地址主要依赖二级市场交易，价格不菲。</p><p><strong>IPv6</strong> 使用 128 位地址，格式为 <code>2001:db8::1</code> 这样的十六进制表示，地址空间大到难以想象——理论上有 2^128 个地址，即约 3.4×10^38 个。每个人分配一个 &#x2F;48 的 IPv6 前缀，地球上所有人分完之后，剩余的地址仍然是天文数字。</p><p><strong>双栈（Dual Stack）</strong> 是当前最常见的部署模式：一台服务器同时拥有 IPv4 和 IPv6 地址。当你的代理客户端向目标网站发起连接时，使用 IPv4 还是 IPv6，取决于 DNS 解析返回的是 A 记录（IPv4）还是 AAAA 记录（IPv6），以及客户端本身的协议偏好设置。</p><p>这个”取决于”就是本文的核心——在解锁场景中，选择 IPv4 还是 IPv6 出口，可能直接决定你能不能看到想看的内容。</p><hr><h2 id="为什么-IPv6-在解锁中越来越重要"><a href="#为什么-IPv6-在解锁中越来越重要" class="headerlink" title="为什么 IPv6 在解锁中越来越重要"></a>为什么 IPv6 在解锁中越来越重要</h2><h3 id="IPv4-地址已被大量标记"><a href="#IPv4-地址已被大量标记" class="headerlink" title="IPv4 地址已被大量标记"></a>IPv4 地址已被大量标记</h3><p>流媒体平台（Netflix、Disney+、HBO Max 等）花了多年时间建立庞大的 IPv4 地址信誉数据库。这套系统的运作逻辑如下：</p><p><strong>数据中心 IP 段被批量标记。</strong> 全球主要云服务商——AWS、GCP、Azure、OVH、Hetzner、Vultr 等——的 IPv4 地址段早已被各大 IP 信誉数据库（如 IP2Location、MaxMind、IPinfo 等）清晰标注为”数据中心（Datacenter&#x2F;Hosting）”类型。流媒体平台直接接入这些数据库的 API，当检测到用户请求来自被标记为数据中心的 IP 时，就会触发地区限制或拒绝访问。</p><p><strong>地址复用导致连坐效应。</strong> IPv4 地址资源紧张意味着地址被频繁回收和再分配。一个 IP 地址可能上个月被某个 VPN 服务商使用，这个月被你租的 VPS 分到。但流媒体平台的黑名单不会因为 IP 更换了使用者就自动清除标记——一旦被标记为代理&#x2F;VPN 用途，这个污点可能长期存在。你什么都没做错，但分到的 IP 已经”有前科”了。</p><p><strong>商业 VPN 加速了污染过程。</strong> NordVPN、ExpressVPN、Surfshark 等主流商业 VPN 服务拥有大量用户，这些用户共享同一批 IPv4 地址。当数百甚至数千个用户同时从同一个 IP 地址访问 Netflix，平台的检测系统很容易识别出这种异常的共享模式，随即将整个 IP 段拉入黑名单。由于商业 VPN 的用户基数庞大，被它们使用过的 IPv4 段在各大平台的黑名单上基本已经”无一幸免”。</p><h3 id="IPv6-地址的天然优势"><a href="#IPv6-地址的天然优势" class="headerlink" title="IPv6 地址的天然优势"></a>IPv6 地址的天然优势</h3><p>相比之下，IPv6 在解锁场景中拥有几个结构性的优势：</p><p><strong>地址空间带来的反封锁韧性。</strong> 一个标准的 IPv6 &#x2F;48 分配就包含约 1.2×10^24 个地址（2^80 个）。即使平台封锁了某些 IPv6 地址，运营者可以轻松切换到同一分配段内的其他地址。而封锁整个 &#x2F;48 甚至 &#x2F;32 段的做法对平台来说风险极大——因为同一个前缀下可能同时服务着大量合法的普通用户。</p><p><strong>IP 信誉数据库覆盖不足。</strong> 前面提到的 IP2Location、MaxMind 等信誉数据库在 IPv4 领域已经非常成熟，几乎能对每一个 IPv4 地址给出准确的类型分类。但在 IPv6 领域，由于地址空间过于庞大，这些数据库的覆盖率远不如 IPv4 完善。许多 IPv6 地址段尚未被准确分类，或者干脆没有被收录。当平台查询一个 IPv6 地址的类型时，数据库可能返回”未知”或默认将其视为非数据中心地址——这对解锁是有利的。</p><p><strong>ISP 分配的 IPv6 天然具有”住宅”属性。</strong> 很多数据中心和 VPS 提供商从上游 ISP 获取 IPv6 地址分配。由于历史原因和分配策略的差异，这些 IPv6 段在 WHOIS 信息中可能注册在 ISP 名下，而非数据中心名下。当流媒体平台查询这些地址时，看到的归属信息是 ISP 而非托管商，因此更倾向于将其视为住宅&#x2F;正常用户的 IP 地址。</p><p><strong>部分提供商专门采购”干净”的 IPv6 资源。</strong> 一些专注于解锁业务的代理服务提供商，会特意从本地 ISP 购买住宅类型的 IPv6 前缀，或者通过与 ISP 合作获取 IPv6 地址分配。这些地址从注册信息到路由公告都指向正规 ISP，在信誉数据库中被归类为住宅 IP，解锁成功率因此显著高于数据中心 IPv4。</p><h3 id="实际中的典型场景"><a href="#实际中的典型场景" class="headerlink" title="实际中的典型场景"></a>实际中的典型场景</h3><p>这种差异在日常使用中非常常见。以下是几个典型的现实案例：</p><p><strong>日本节点场景。</strong> 一台部署在东京的 VPS 服务器，其 IPv4 地址来自某云服务商的数据中心段，Netflix 检测后直接封锁——显示代理&#x2F;VPN 错误页面。但同一台服务器的 IPv6 地址来自日本本地 ISP（如 NTT、KDDI）的分配段，Netflix 将其识别为日本本地用户的正常连接，完整的日本区内容库可以正常访问。</p><p><strong>新加坡节点场景。</strong> 新加坡的 IPv4 地址由于大量被代理服务使用，主要数据中心段几乎全部被 Disney+、Netflix 等平台标记。但部分提供商拥有来自 SingTel 或 StarHub 等本地 ISP 分配的 IPv6 段，这些地址目前仍然可以正常解锁。</p><p><strong>美国节点场景。</strong> 美国是 IPv6 部署最积极的国家之一，Comcast、AT&amp;T、Verizon 等大型 ISP 都已大规模分配 IPv6 给终端用户。一些机场运营者通过获取这些 ISP 分配的 IPv6 段来搭建解锁节点，成功率远高于使用 AWS 或 DigitalOcean 的 IPv4 地址。</p><p><strong>跨平台差异。</strong> 同一个 IPv6 地址可能在 Netflix 上能解锁、在 Disney+ 上被封锁，反之亦然。每个平台使用的 IP 信誉数据库和检测策略都不完全相同，IPv6 的”干净程度”在不同平台上的评价也有差异。</p><hr><h2 id="代理客户端中的-IPv4-IPv6-设置"><a href="#代理客户端中的-IPv4-IPv6-设置" class="headerlink" title="代理客户端中的 IPv4&#x2F;IPv6 设置"></a>代理客户端中的 IPv4&#x2F;IPv6 设置</h2><p>了解了原理之后，关键问题是：作为用户，你的代理客户端实际上是通过 IPv4 还是 IPv6 出口访问目标网站的？这取决于 DNS 解析结果和客户端配置。</p><h3 id="DNS-解析与协议选择的关系"><a href="#DNS-解析与协议选择的关系" class="headerlink" title="DNS 解析与协议选择的关系"></a>DNS 解析与协议选择的关系</h3><p>当你通过代理节点访问 <code>netflix.com</code> 时，流程大致如下：</p><ol><li>代理客户端（或远端节点）对 <code>netflix.com</code> 进行 DNS 查询</li><li>DNS 服务器返回 A 记录（IPv4 地址）和&#x2F;或 AAAA 记录（IPv6 地址）</li><li>客户端根据配置选择使用 A 还是 AAAA 记录</li><li>代理节点通过对应的 IPv4 或 IPv6 出口连接目标网站</li></ol><p>问题在于，大多数代理客户端默认只请求 A 记录（IPv4），不请求 AAAA 记录。这意味着即使你的节点服务器有 IPv6 出口、目标网站也支持 IPv6，流量仍然走的是 IPv4——你在无意中放弃了可能更好的 IPv6 解锁路径。</p><h3 id="Clash-mihomo-中的-IPv6-配置"><a href="#Clash-mihomo-中的-IPv6-配置" class="headerlink" title="Clash &#x2F; mihomo 中的 IPv6 配置"></a>Clash &#x2F; <a href="https://github.com/MetaCubeX/mihomo">mihomo</a> 中的 IPv6 配置</h3><p>在 Clash 或 mihomo 中，IPv6 相关的配置主要涉及两个层面：</p><p><strong>全局 DNS 层面</strong>——控制是否解析 AAAA 记录：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">dns:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">ipv6:</span> <span class="literal">true</span>  <span class="comment"># 允许解析 AAAA 记录，默认为 false</span></span><br><span class="line">  <span class="attr">enhanced-mode:</span> <span class="string">fake-ip</span></span><br><span class="line">  <span class="attr">nameserver:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">https://dns.google/dns-query</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">https://cloudflare-dns.com/dns-query</span></span><br></pre></td></tr></table></figure><p>将 <code>ipv6</code> 设置为 <code>true</code> 后，DNS 查询将同时请求 A 和 AAAA 记录。如果目标域名有 AAAA 记录且节点服务器支持 IPv6 出口，流量就有可能通过 IPv6 到达目标网站。</p><p><strong>节点级别</strong>——mihomo 提供了更精细的控制：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">proxies:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">&quot;JP-Node-IPv6&quot;</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">vless</span></span><br><span class="line">    <span class="attr">server:</span> <span class="string">jp-server.example.com</span></span><br><span class="line">    <span class="attr">port:</span> <span class="number">443</span></span><br><span class="line">    <span class="attr">uuid:</span> <span class="string">your-uuid-here</span></span><br><span class="line">    <span class="attr">network:</span> <span class="string">tcp</span></span><br><span class="line">    <span class="attr">tls:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">ip-version:</span> <span class="string">prefer-ipv6</span>  <span class="comment"># mihomo 特有选项</span></span><br><span class="line">    <span class="comment"># 可选值：dual（默认）、ipv4、ipv6、prefer-ipv4、prefer-ipv6</span></span><br><span class="line"></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">&quot;US-Node-IPv4-Only&quot;</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">vless</span></span><br><span class="line">    <span class="attr">server:</span> <span class="string">us-server.example.com</span></span><br><span class="line">    <span class="attr">port:</span> <span class="number">443</span></span><br><span class="line">    <span class="attr">uuid:</span> <span class="string">your-uuid-here</span></span><br><span class="line">    <span class="attr">network:</span> <span class="string">tcp</span></span><br><span class="line">    <span class="attr">tls:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">ip-version:</span> <span class="string">ipv4</span>  <span class="comment"># 强制 IPv4</span></span><br></pre></td></tr></table></figure><p><code>ip-version</code> 参数的含义：</p><table><thead><tr><th>值</th><th>行为</th></tr></thead><tbody><tr><td><code>dual</code></td><td>同时请求 A 和 AAAA 记录，使用先返回的结果（默认值）</td></tr><tr><td><code>ipv4</code></td><td>只请求 A 记录，强制使用 IPv4</td></tr><tr><td><code>ipv6</code></td><td>只请求 AAAA 记录，强制使用 IPv6</td></tr><tr><td><code>prefer-ipv4</code></td><td>同时请求，优先使用 A 记录</td></tr><tr><td><code>prefer-ipv6</code></td><td>同时请求，优先使用 AAAA 记录</td></tr></tbody></table><p><strong>推荐的分流策略</strong>——将 IPv6 解锁与 IPv4 默认路由结合：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">dns:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">ipv6:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">enhanced-mode:</span> <span class="string">fake-ip</span></span><br><span class="line"></span><br><span class="line"><span class="attr">proxy-groups:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">&quot;Streaming&quot;</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">select</span></span><br><span class="line">    <span class="attr">proxies:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">JP-IPv6-Unlock</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">US-IPv6-Unlock</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">SG-IPv6-Unlock</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">JP-IPv4-Fallback</span></span><br><span class="line"></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">&quot;General&quot;</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">select</span></span><br><span class="line">    <span class="attr">proxies:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">HK-Node</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">JP-Node</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">US-Node</span></span><br><span class="line"></span><br><span class="line"><span class="attr">rules:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,netflix.com,Streaming</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,nflxvideo.net,Streaming</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,disneyplus.com,Streaming</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,disney-plus.net,Streaming</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">MATCH,General</span></span><br></pre></td></tr></table></figure><p>这个思路的核心是：流媒体流量走专门配置了 <code>ip-version: prefer-ipv6</code> 的解锁节点，其他流量继续走默认的 IPv4 节点。这样既利用了 IPv6 的解锁优势，又不影响日常使用的稳定性。</p><h3 id="配置注意事项"><a href="#配置注意事项" class="headerlink" title="配置注意事项"></a>配置注意事项</h3><p><strong>不要盲目全局开启 IPv6。</strong> 如果你的节点列表中有些服务器不支持 IPv6（没有 AAAA 记录、没有 IPv6 出口、或者 IPv6 路由不通），全局开启 <code>ipv6: true</code> 可能导致这些节点的部分连接失败或超时。更稳妥的做法是在全局层面保持 <code>ipv6: false</code>，仅在确认支持 IPv6 的节点上通过 <code>ip-version</code> 参数单独启用。</p><p><strong>你的本地网络是否需要 IPv6？</strong> 严格来说不需要。代理的 IPv4&#x2F;IPv6 选择发生在节点服务器的出口端——你的设备通过 IPv4 连接到代理节点，代理节点再通过 IPv6 出口连接目标网站。你的本地网络只需要能连通代理节点即可，不需要自身具备 IPv6 连通性。</p><p><strong>Fake-IP 模式下的特殊考虑。</strong> 使用 Fake-IP 模式时，客户端为所有域名分配虚拟 IP，实际的 DNS 解析在远端完成。此时 <code>ipv6: true</code> 的作用是允许远端解析返回 AAAA 记录。如果你使用 Fake-IP 模式并希望利用 IPv6 解锁，确保 <code>fake-ip-filter</code> 中没有意外排除流媒体域名。</p><hr><h2 id="IPv6-解锁的局限性"><a href="#IPv6-解锁的局限性" class="headerlink" title="IPv6 解锁的局限性"></a>IPv6 解锁的局限性</h2><p>IPv6 不是万能的解锁方案，认清它的边界同样重要。</p><p><strong>并非所有平台都完整支持 IPv6。</strong> 虽然主流平台（Netflix、YouTube、Google 系服务）已经全面支持 IPv6，但部分地区性平台或较小的流媒体服务可能只有 A 记录（仅 IPv4）。对于这些平台，无论你的 IPv6 出口多干净都没有用——它们根本不接受 IPv6 连接。</p><p><strong>IPv6 黑名单正在增长。</strong> 流媒体平台不会永远忽视 IPv6。随着越来越多的代理服务开始利用 IPv6 进行解锁，平台也在加大 IPv6 地址的检测和标记力度。IP2Location 等信誉数据库每次更新都会扩大 IPv6 的覆盖范围。今天能解锁的 IPv6 地址，半年后可能就被标记了。</p><p><strong>数据中心的 IPv6 也会被封。</strong> IPv6 地址的来源同样重要。如果你的 IPv6 地址分配记录明确归属于 AWS、GCP 等云服务商，它们迟早也会被标记为数据中心 IP。IPv6 的优势主要体现在来自 ISP 分配的”干净”地址上，而不是所有 IPv6 地址都天然具备解锁能力。</p><p><strong>地址前缀封锁是潜在威胁。</strong> 虽然逐个封锁 IPv6 地址不现实，但平台可以选择封锁整个前缀（如封锁某个 &#x2F;48 或 &#x2F;32 段）。如果一个 IPv6 前缀下的多个地址被发现用于代理，平台可能会对整个前缀采取封锁。这虽然比 IPv4 的封锁粒度粗（可能误伤），但趋势上是可行的。</p><p>总结：IPv6 是当前阶段一个非常有用的解锁工具，但它是时间窗口型的优势，而非永久性的解决方案。</p><hr><h2 id="作为用户，如何利用-IPv6-提升解锁成功率"><a href="#作为用户，如何利用-IPv6-提升解锁成功率" class="headerlink" title="作为用户，如何利用 IPv6 提升解锁成功率"></a>作为用户，如何利用 IPv6 提升解锁成功率</h2><ol><li><p><strong>确认你的代理服务是否提供 IPv6 节点。</strong> 查看机场的节点列表或技术文档，部分服务商会明确标注”IPv6 解锁”或”Native IPv6”等字样。如果文档没有说明，可以联系客服或直接测试。</p></li><li><p><strong>当 IPv4 节点无法解锁时，尝试启用 IPv6。</strong> 在 Clash&#x2F;mihomo 配置中将对应节点的 <code>ip-version</code> 改为 <code>prefer-ipv6</code> 或 <code>ipv6</code>，然后重新访问流媒体网站，观察是否能成功解锁。</p></li><li><p><strong>优先使用标注了 IPv6 解锁的节点。</strong> 如果你的机场提供专门的流媒体解锁节点，并标注了 IPv6 支持，将流媒体规则指向这些节点通常是最简单有效的做法。</p></li><li><p><strong>验证 IPv6 连通性。</strong> 通过代理访问 <code>test-ipv6.com</code> 或 <code>ipv6-test.com</code>，确认你的流量确实在通过 IPv6 出口。如果测试显示没有 IPv6 连通性，说明节点配置可能有问题，或者该节点确实不支持 IPv6。</p></li><li><p><strong>保持 IPv4 作为后备。</strong> 不要完全放弃 IPv4 节点。IPv6 解锁存在平台差异和时效性问题，始终保留 IPv4 节点作为后备方案是稳妥的策略。在分流规则中设置自动故障转移（fallback）到 IPv4 节点是一个好选择。</p></li></ol><hr><h2 id="作为运营者的考量"><a href="#作为运营者的考量" class="headerlink" title="作为运营者的考量"></a>作为运营者的考量</h2><p>如果你在运营或自建代理节点，IPv6 是一个值得关注的解锁策略维度。</p><p><strong>IPv6 资源的获取。</strong> 从本地 ISP 获取住宅类型的 IPv6 前缀，是当前性价比最高的解锁方案之一。相比购买高价的”原生 IPv4 住宅 IP”，ISP 分配的 IPv6 前缀成本低得多，且地址空间充裕——一个 &#x2F;48 前缀就足以轮换使用很长时间。</p><p><strong>双栈部署策略。</strong> 推荐的做法是为节点服务器配置双栈网络：IPv4 出口用于一般流量，IPv6 出口专门用于流媒体解锁。通过节点端的路由策略或 DNS 配置，让流媒体域名优先走 IPv6 出口，其他流量走 IPv4。这种”分工明确”的架构既保证了解锁成功率，又不影响其他流量的稳定性。</p><p><strong>持续监控。</strong> IPv6 解锁的状态不是一成不变的。建议定期（如每天或每周）使用自动化脚本检测各平台的 IPv6 解锁状态。当某个 IPv6 前缀被标记时，需要有快速切换到备用前缀的能力。这种自动化监控和切换能力，才是解锁服务长期稳定运行的关键。</p><hr><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="Q-开了-IPv6-会不会影响速度？"><a href="#Q-开了-IPv6-会不会影响速度？" class="headerlink" title="Q: 开了 IPv6 会不会影响速度？"></a>Q: 开了 IPv6 会不会影响速度？</h3><p>通常不会产生明显影响。IPv6 和 IPv4 走的可能是不同的路由路径，理论上存在速度差异的可能，但实际中这种差异很少大到用户能感知的程度。在某些线路上 IPv6 的路由甚至可能更优（因为 IPv6 网络整体拥塞程度通常低于 IPv4），从而带来略快的速度。如果你发现开启 IPv6 后速度明显变慢，更可能的原因是该节点的 IPv6 路由质量不佳，而非 IPv6 协议本身的问题——此时切回 IPv4 即可。</p><h3 id="Q-我的本地网络不支持-IPv6-怎么办？"><a href="#Q-我的本地网络不支持-IPv6-怎么办？" class="headerlink" title="Q: 我的本地网络不支持 IPv6 怎么办？"></a>Q: 我的本地网络不支持 IPv6 怎么办？</h3><p>不影响使用。这里需要区分两个层面的 IPv6：你的本地网络（从你的设备到代理节点的连接）和代理节点的出口网络（从节点到目标网站的连接）。解锁所需的 IPv6 是后者——代理节点的出口端用 IPv6 去访问流媒体网站。你的设备到代理节点之间完全可以走 IPv4。所以即使你家的宽带运营商没有分配 IPv6、或者你的路由器不支持 IPv6，都不妨碍你通过支持 IPv6 出口的代理节点来实现解锁。</p><h3 id="Q-所有机场都支持-IPv6-吗？"><a href="#Q-所有机场都支持-IPv6-吗？" class="headerlink" title="Q: 所有机场都支持 IPv6 吗？"></a>Q: 所有机场都支持 IPv6 吗？</h3><p>不是。支持 IPv6 需要满足两个条件：一是节点服务器本身配置了 IPv6 网络（有 IPv6 地址和路由），二是代理软件正确配置了 IPv6 出口策略。并非所有 VPS 提供商默认开启 IPv6，有些甚至需要额外付费。在选择机场时，如果你对流媒体解锁有需求，可以将”是否提供 IPv6 解锁节点”作为评估维度之一。部分机场会在节点名称或说明中标注 IPv6 支持情况。</p><h3 id="Q-IPv6-解锁以后也会被封吗？"><a href="#Q-IPv6-解锁以后也会被封吗？" class="headerlink" title="Q: IPv6 解锁以后也会被封吗？"></a>Q: IPv6 解锁以后也会被封吗？</h3><p>趋势上是的。流媒体平台正在逐步完善 IPv6 地址的检测和分类系统。IP 信誉数据库每次更新都会覆盖更多的 IPv6 地址段。但由于 IPv6 地址空间极其庞大（是 IPv4 的 2^96 倍），平台要达到 IPv4 那样的覆盖率需要相当长的时间。目前来看，IPv6 的”窗口期”还远未关闭，但长期来看，单纯依赖地址类型来绕过检测的策略会越来越难。运营者需要持续关注 IP 信誉数据库的更新节奏，及时更换被标记的地址段。</p><h3 id="Q-怎么判断节点当前是通过-IPv4-还是-IPv6-访问目标网站？"><a href="#Q-怎么判断节点当前是通过-IPv4-还是-IPv6-访问目标网站？" class="headerlink" title="Q: 怎么判断节点当前是通过 IPv4 还是 IPv6 访问目标网站？"></a>Q: 怎么判断节点当前是通过 IPv4 还是 IPv6 访问目标网站？</h3><p>最直接的方法是通过代理访问检测网站。打开代理后访问 <code>test-ipv6.com</code>，它会显示你的出口 IPv4 和 IPv6 地址——如果只显示 IPv4 地址，说明当前连接没有通过 IPv6。你也可以访问 <code>ip.sb</code> 或 <a href="https://ipinfo.io/">ipinfo.io</a>，这些网站会显示当前连接的 IP 地址和类型。如果显示的是 IPv6 格式的地址（包含冒号分隔的十六进制数字），说明你正在通过 IPv6 出口访问。</p><h3 id="Q-IPv6-和”原生-IP”有什么关系？"><a href="#Q-IPv6-和”原生-IP”有什么关系？" class="headerlink" title="Q: IPv6 和”原生 IP”有什么关系？"></a>Q: IPv6 和”原生 IP”有什么关系？</h3><p>“原生 IP”指的是 IP 地址的注册地和服务器物理位置一致。比如一个 IP 注册在日本、服务器也在日本，就是日本原生 IP。原生 IP 的概念同时适用于 IPv4 和 IPv6。IPv6 的优势不在于它天然就是原生的，而在于它的信誉数据库覆盖率低、来自 ISP 分配的概率高。一个来自日本 ISP 的原生 IPv6 地址，在解锁效果上通常是最理想的——既是原生 IP，又是 ISP 住宅类型，同时还享有 IPv6 信誉数据库覆盖不足的时间窗口优势。</p>]]></content>
      
      
      <categories>
          
          <category> 流媒体与解锁 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> 解锁 </tag>
            
            <tag> IP </tag>
            
            <tag> 流媒体 </tag>
            
            <tag> IPv4 </tag>
            
            <tag> IPv6 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>GFW 工作原理全解：从 DNS 污染到主动探测的六层检测机制</title>
      <link href="/posts/gfw-detection-overview/"/>
      <url>/posts/gfw-detection-overview/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：GFW（Great Firewall）并非单一技术，而是一套由 DNS 污染、IP 封锁、深度包检测（DPI）、TLS 指纹识别、主动探测和流量行为分析共同构成的多层检测系统。本文逐层拆解这六种核心检测机制的工作原理，分析它们各自的能力边界与盲区，比较主流代理协议在每一层的抗检测表现，并给出对应的规避思路。理解这些机制，是选择和配置代理方案的前提。</p></blockquote><hr><h2 id="GFW-不是一堵”墙”"><a href="#GFW-不是一堵”墙”" class="headerlink" title="GFW 不是一堵”墙”"></a>GFW 不是一堵”墙”</h2><p>很多人把 GFW 想象成一个简单的黑名单过滤器——把被禁网站的域名或 IP 加入列表，然后拦截匹配的流量。实际上它是一个多层次、持续演进的流量分析系统，从网络层到应用层部署了多种检测手段，并且这些手段之间相互配合、交叉验证。</p><p>理解这一点很重要：<strong>没有一种协议能”永远安全”，因为检测侧也在持续迭代。</strong> 今天有效的规避方案，明天可能就被针对。反过来，今天被封锁的协议，通过改进也可能重新获得生存空间。封锁与反封锁本质上是一场持续的技术博弈。</p><p><img src="/images/inline/gfw-layers.png" alt="GFW 检测体系示意图"><br><em>图片来源：<a href="https://www.domaintools.com/">DomainTools</a></em></p><p>下面按检测复杂度从低到高，逐层拆解 GFW 的核心检测机制。</p><hr><h2 id="检测机制逐层拆解"><a href="#检测机制逐层拆解" class="headerlink" title="检测机制逐层拆解"></a>检测机制逐层拆解</h2><h3 id="第一层：DNS-污染"><a href="#第一层：DNS-污染" class="headerlink" title="第一层：DNS 污染"></a>第一层：DNS 污染</h3><p><strong>原理</strong>：</p><p>DNS 污染是 GFW 最古老的封锁手段，技术门槛最低但覆盖面极广。其工作方式如下：</p><ul><li>GFW 在骨干网节点上监听所有经过的 UDP 53 端口 DNS 查询报文。</li><li>当检测到查询的域名命中黑名单（如 google.com、youtube.com 等），GFW 会抢在真正的 DNS 服务器响应之前，伪造一个包含错误 IP 地址的 DNS 应答包返回给用户。</li><li>由于 DNS 协议本身没有验证机制（传统 UDP DNS），客户端无法区分真假应答，通常会接受先到达的那个——也就是 GFW 伪造的错误结果。</li><li>用户的浏览器拿到错误的 IP 后，要么连接到一个不存在的地址，要么被导向一个无关的服务器，从而无法访问目标网站。</li></ul><p><strong>绕过方式</strong>：</p><ul><li><strong>DoH（DNS over HTTPS）&#x2F; DoT（DNS over TLS）</strong>：将 DNS 查询加密传输，GFW 无法看到查询内容，也就无法进行针对性的污染。</li><li><strong>Fake-IP 模式</strong>：代理客户端（如 Clash）在本地为被代理的域名分配一个虚拟 IP，DNS 解析完全在远端代理服务器上完成，本地不产生真实的 DNS 查询。</li><li><strong>远端 DNS 解析</strong>：所有 DNS 请求通过代理隧道发送到海外 DNS 服务器解析，绕过国内骨干网的监听点。</li></ul><p><strong>为什么它仍然有效</strong>：</p><p>尽管绕过 DNS 污染的技术手段已经很成熟，但绝大多数普通用户不会主动配置 DNS 设置。他们使用的是运营商默认分配的 DNS 服务器，查询走的是未加密的 UDP 53 端口——这正是 GFW 的拦截范围。对于不使用任何代理工具的普通用户来说，DNS 污染依然是最有效的第一道封锁线。</p><hr><h3 id="第二层：IP-封锁"><a href="#第二层：IP-封锁" class="headerlink" title="第二层：IP 封锁"></a>第二层：IP 封锁</h3><p><strong>原理</strong>：</p><p>GFW 维护着一份持续更新的被封锁 IP 地址和 IP 段列表。当用户发起的 TCP 连接目标 IP 命中这份列表时，GFW 会采取两种干预措施之一：</p><ul><li><strong>发送 TCP RST 包</strong>：伪造一个 TCP 重置报文注入连接，强制中断双方的通信。</li><li><strong>静默丢包</strong>：直接丢弃所有发往该 IP 的数据包，连接超时而非被主动中断。</li></ul><p><strong>特点</strong>：</p><p>这种封锁方式简单粗暴但非常有效，尤其适用于封锁已知的商业 VPN 服务器 IP 段。一旦某个 VPN 提供商的服务器 IP 被识别并加入黑名单，该 IP 上所有端口的所有连接都会被阻断，与协议和加密方式无关。这也是为什么很多免费或廉价的 VPN 服务频繁失效——它们的服务器 IP 已被批量封锁。</p><p><strong>应对思路</strong>：</p><ul><li><strong>节点 IP 轮换</strong>：频繁更换服务器 IP 地址，使得 GFW 的 IP 黑名单无法长期跟踪。关于节点被封锁的常见原因和应对策略，参见 <a href="/posts/node-blocking-causes/">节点被封原因排查</a>。</li><li><strong>CDN 中转</strong>：利用 Cloudflare 等 CDN 服务作为前置代理，流量先经过 CDN 的 Anycast 网络再转发到实际服务器。由于 CDN 承载大量正常网站流量，GFW 不太可能封锁整个 CDN 的 IP 段。</li><li><strong>Anycast IP</strong>：使用具有全球 Anycast 地址的服务，这些 IP 同时服务大量合法业务，封锁代价过高。</li></ul><hr><h3 id="第三层：深度包检测（DPI）"><a href="#第三层：深度包检测（DPI）" class="headerlink" title="第三层：深度包检测（DPI）"></a>第三层：深度包检测（DPI）</h3><p><strong>原理</strong>：</p><p>深度包检测是 GFW 技术能力的核心跃升。与前两层只看 IP 地址和端口号不同，DPI 深入分析数据包的实际内容和格式，通过识别协议特征指纹来判断流量类型。</p><p>GFW 的 DPI 系统已知能够识别以下协议：</p><ul><li><strong>未加密的 Shadowsocks（旧版）</strong>：早期版本的 Shadowsocks 在流量特征上存在明显的可识别模式。</li><li><strong>裸 VMess 协议</strong>：未经 TLS 封装的 VMess 流量具有可被 DPI 捕捉的协议指纹。</li><li><strong>OpenVPN</strong>：无论使用 TCP 还是 UDP 模式，OpenVPN 的握手特征都非常明显。</li><li><strong>WireGuard</strong>：虽然协议设计精简高效，但其握手报文格式固定，容易被识别。</li></ul><p><strong>它能看到什么</strong>：</p><ul><li><strong>TLS 握手的明文部分</strong>：包括 Client Hello 和 Server Hello 阶段的数据。在 TLS 连接建立之前，这些握手信息以明文传输，其中包含了 SNI（Server Name Indication，服务器名称指示）、支持的加密套件列表、TLS 版本号等关键信息。</li><li><strong>数据包大小分布和时序特征</strong>：即使内容加密，数据包的长度分布、发送间隔等元数据仍然可以被 DPI 系统捕获并用于流量分类。</li><li><strong>协议握手的固定模式</strong>：每种协议都有其独特的握手流程和报文格式，这些固定模式就是 DPI 用来识别协议的指纹。</li></ul><p><strong>它看不到什么</strong>：</p><ul><li><strong>TLS 加密后的应用层数据</strong>：一旦 TLS 握手完成、加密信道建立，后续传输的应用层数据对 DPI 来说是不透明的。</li><li><strong>正确实现的加密协议内容</strong>：如 SS-2022、VLESS+Reality 等现代协议，在加密实现上消除了已知的流量特征，DPI 无法通过内容分析识别它们。</li></ul><hr><h3 id="第四层：TLS-指纹识别（JA3-JA4）"><a href="#第四层：TLS-指纹识别（JA3-JA4）" class="headerlink" title="第四层：TLS 指纹识别（JA3&#x2F;JA4）"></a>第四层：TLS 指纹识别（JA3&#x2F;JA4）</h3><p><strong>这是当前最关键的检测维度之一。</strong></p><p><strong>原理</strong>：</p><p>TLS 协议在握手阶段（Client Hello）会以明文发送大量元数据，包括：客户端支持的加密套件（Cipher Suites）列表、TLS 扩展（Extensions）列表、支持的椭圆曲线（Elliptic Curves）参数、签名算法列表等。</p><p>这些参数的具体组合因 TLS 实现库的不同而各异。JA3 和 JA4 算法正是利用这一点，将 Client Hello 中的这些参数提取并哈希成一个固定长度的指纹值。不同的 TLS 库——Go 标准库的 crypto&#x2F;tls、Rust 的 rustls、浏览器原生的 BoringSSL&#x2F;NSS、以及 uTLS 等模拟库——各自产生的指纹都不相同。</p><p>GFW 通过将观察到的 TLS 指纹与已知的浏览器指纹库进行比对，可以判断发起连接的客户端是否为真实的浏览器。关于 TLS 指纹识别的完整技术分析，参见 <a href="/posts/tls-fingerprinting/">TLS 指纹与 uTLS</a>。如果指纹不匹配任何已知浏览器，该连接就会被标记为可疑。</p><p><strong>为什么这对代理很致命</strong>：</p><ul><li><strong>Go 语言的指纹问题</strong>：绝大多数主流代理工具（<a href="https://github.com/XTLS/Xray-core">Xray-core</a>、sing-box 等）使用 Go 语言开发，而 Go 标准库 crypto&#x2F;tls 产生的 TLS 指纹与 Chrome、Firefox 等主流浏览器的指纹存在明显差异。这使得代理流量即使伪装成 HTTPS，在指纹层面仍然一眼可辨。</li><li><strong>uTLS 模拟的局限性</strong>：虽然 <a href="https://github.com/refraction-networking/utls">uTLS</a> 库试图模拟浏览器的 TLS 指纹，但模拟的完整度和对浏览器版本更新的跟进及时性始终是问题。浏览器每次更新都可能改变指纹参数，uTLS 的模拟总是存在滞后。</li><li><strong>Reality 协议的解决方案</strong>：Reality 从根本上解决了这个问题——它不模拟指纹，而是直接与一个真实的目标网站建立 TLS 连接，将该网站返回的真实 Server Hello 原样转发给 GFW。从 GFW 的视角看，这就是一个完全正常的、指向合法网站的 TLS 连接。</li></ul><p><strong>当前状态</strong>：</p><p>GFW 在 TLS 指纹识别上已具备实际执行能力。使用未经指纹伪装的 TLS 代理连接（如裸 Go TLS）在高审查时期被阻断的概率显著上升。指纹检测通常不会单独触发封锁，而是作为综合评分体系中的一个高权重维度——当 TLS 指纹异常与其他可疑特征叠加时，封锁概率大幅增加。</p><hr><h3 id="第五层：主动探测"><a href="#第五层：主动探测" class="headerlink" title="第五层：主动探测"></a>第五层：主动探测</h3><p><strong>原理</strong>：</p><p>GFW 不只是被动地坐在骨干网上监听流量——它还会主动出击。当被动检测系统标记某个服务器 IP 或端口为可疑后，GFW 会从位于中国境内的多个 IP 地址主动向该服务器发起连接，试图验证其是否运行着代理服务。</p><p>这种主动探测对早期的 Shadowsocks 和 V2Ray 部署造成了毁灭性打击，因为这些服务在收到无效请求时的响应行为与正常 Web 服务器存在明显差异。</p><p><strong>探测策略</strong>：</p><ul><li><strong>重放攻击</strong>：GFW 抓取用户与服务器之间的真实握手数据包，然后在稍后的时间从不同的 IP 重新发送这些包，观察服务器的响应。如果服务器接受了重放的握手并建立连接，就证明它运行着代理服务。</li><li><strong>随机数据探测</strong>：向可疑端口发送各种随机构造的数据，观察服务端返回的错误信息。不同的代理协议在处理非法输入时返回的错误类型和时序各不相同，这些差异本身就是识别特征。</li><li><strong>协议探测</strong>：以不同的已知协议格式尝试与服务端握手，逐一排查服务端可能运行的代理类型。</li></ul><p><strong>防御方式</strong>：</p><ul><li><strong>Reality 的设计哲学</strong>：Reality 协议从设计之初就以抗主动探测为核心目标。当探测者连接 Reality 服务端时，如果无法提供正确的认证信息，服务端会将连接透明地转发给一个预设的真实网站（如 <a href="http://www.microsoft.com).探测者看到的是一个完全正常的网站响应,无法判断该服务器是否运行代理./">www.microsoft.com）。探测者看到的是一个完全正常的网站响应，无法判断该服务器是否运行代理。</a></li><li><strong>SS-2022 的重放保护</strong>：Shadowsocks 2022 版本引入了基于时间戳的重放过滤机制，每个握手包都包含时间窗口校验，重放过去的握手包会被自动拒绝。</li><li><strong>正确的错误处理</strong>：优秀的代理服务端实现在收到任何无效请求时，其行为表现（响应内容、响应时间、连接断开方式）与正常的 Web 服务器完全一致，不泄露任何代理服务的存在。</li></ul><hr><h3 id="第六层：流量行为分析（统计分析）"><a href="#第六层：流量行为分析（统计分析）" class="headerlink" title="第六层：流量行为分析（统计分析）"></a>第六层：流量行为分析（统计分析）</h3><p><strong>原理</strong>：</p><p>这是 GFW 检测体系中最难对抗的一层。即使代理协议在协议层面做到了完美伪装——DPI 看不出破绽、TLS 指纹完美匹配、主动探测也无法验证——长期的流量行为模式本身仍然可能暴露代理使用。</p><p>GFW 的行为分析系统会关注以下维度：</p><ul><li><strong>连接频率</strong>：一个家庭宽带 IP 每天向同一个海外 IP 发起数百次加密连接，这种模式极其异常。</li><li><strong>数据包大小分布</strong>：代理流量的包大小分布与正常网页浏览存在统计差异。</li><li><strong>连接持续时间</strong>：代理连接（尤其是全局代理模式下）的持续时间特征与普通 HTTPS 请求不同。</li><li><strong>时段规律</strong>：流量集中在特定时段（如工作时间持续翻墙）也会被标记为异常模式。</li></ul><p>简而言之：一个 IP 长期与海外单一 IP 保持高频加密连接，无论协议如何伪装，这种行为模式本身就是一个强烈的异常信号。</p><p><strong>为什么这很难对抗</strong>：</p><ul><li>这是统计层面的检测，完全不依赖协议指纹。即使你的协议在逐个数据包层面无懈可击，宏观的流量模式仍然可以出卖你。</li><li>你可以完美伪装协议，但你无法伪装”一个用户每天 8 小时不间断地通过加密隧道传输大量数据”这种使用模式。</li><li>目前没有完美的解决方案，只能通过降低流量异常度来降低被标记的风险。</li></ul><p><strong>缓解策略</strong>：</p><ul><li><strong>多节点轮换</strong>：避免长期连接单一海外 IP。使用多个节点并定期切换，将流量分散到不同的目标 IP 上。</li><li><strong>中转节点</strong>：使用位于国内的中转服务器分散源 IP 特征，让 GFW 看到的是中转服务器到海外的连接，而非用户直连海外。</li><li><strong>混入正常流量</strong>：不要使用全局代理模式，采用分流规则让国内流量直连、仅代理需要翻墙的流量，使整体流量模式更接近正常用户。</li></ul><hr><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line">graph TD</span><br><span class="line">    A[网络流量] --&gt; B&#123;第一层: DNS 污染&#125;</span><br><span class="line">    B --&gt;|命中黑名单| C[返回错误 IP]</span><br><span class="line">    B --&gt;|未命中| D&#123;第二层: IP 封锁&#125;</span><br><span class="line">    D --&gt;|IP 在黑名单| E[RST / 丢包]</span><br><span class="line">    D --&gt;|IP 正常| F&#123;第三层: DPI 深度包检测&#125;</span><br><span class="line">    F --&gt;|协议特征匹配| G[标记为代理流量]</span><br><span class="line">    F --&gt;|未识别| H&#123;第四层: TLS 指纹&#125;</span><br><span class="line">    H --&gt;|指纹异常| I[标记可疑]</span><br><span class="line">    H --&gt;|指纹正常| J&#123;第五层: 主动探测&#125;</span><br><span class="line">    J --&gt;|探测确认| K[封锁 IP]</span><br><span class="line">    J --&gt;|探测失败| L&#123;第六层: 行为分析&#125;</span><br><span class="line">    L --&gt;|流量模式异常| M[降低阈值/封锁]</span><br><span class="line">    L --&gt;|正常| N[放行]</span><br><span class="line">    </span><br><span class="line">    style C fill:#f66,color:#fff</span><br><span class="line">    style E fill:#f66,color:#fff</span><br><span class="line">    style G fill:#f96,color:#fff</span><br><span class="line">    style I fill:#f96,color:#fff</span><br><span class="line">    style K fill:#f66,color:#fff</span><br><span class="line">    style M fill:#f96,color:#fff</span><br><span class="line">    style N fill:#6f6,color:#fff</span><br></pre></td></tr></table></figure><h2 id="各层检测-vs-主流协议"><a href="#各层检测-vs-主流协议" class="headerlink" title="各层检测 vs 主流协议"></a>各层检测 vs 主流协议</h2><table><thead><tr><th>检测层</th><th>SS-2022</th><th>VMess</th><th>VLESS+Reality</th><th>Trojan</th><th>Hysteria2</th></tr></thead><tbody><tr><td>DNS 污染</td><td>可绕过</td><td>可绕过</td><td>可绕过</td><td>可绕过</td><td>可绕过</td></tr><tr><td>IP 封锁</td><td>需轮换</td><td>需轮换</td><td>需轮换</td><td>需轮换</td><td>需轮换</td></tr><tr><td>DPI</td><td>✅ 抗性强</td><td>❌ 可识别</td><td>✅ 抗性强</td><td>✅ 抗性强</td><td>⚠️ 取决于环境</td></tr><tr><td>TLS 指纹</td><td>N&#x2F;A</td><td>⚠️ 可识别</td><td>✅ 完美伪装</td><td>⚠️ 取决于实现</td><td>N&#x2F;A (QUIC)</td></tr><tr><td>主动探测</td><td>✅ 2022 版已修复</td><td>❌ 易被探测</td><td>✅ 返回真实站点</td><td>⚠️ 取决于配置</td><td>⚠️ 中等</td></tr><tr><td>行为分析</td><td>⚠️</td><td>⚠️</td><td>⚠️</td><td>⚠️</td><td>⚠️</td></tr></tbody></table><p><strong>表格解读</strong>：</p><ul><li>DNS 污染层所有代理协议都可以绕过，因为代理客户端本身就承担了 DNS 解析的转发。</li><li>IP 封锁对所有协议一视同仁，唯一的应对是节点管理策略（轮换、CDN、中转）。</li><li>DPI 层是协议设计的分水岭：VMess 裸协议已被 GFW 标记，而 SS-2022 和 VLESS+Reality 在当前阶段具备较强的抗 DPI 能力。</li><li>TLS 指纹层是 VLESS+Reality 的最大优势所在：它是唯一在指纹层面做到”完美伪装”的方案。</li><li>行为分析层对所有协议都是威胁，没有任何协议能在统计层面完全隐身。</li></ul><hr><h2 id="核心结论"><a href="#核心结论" class="headerlink" title="核心结论"></a>核心结论</h2><p>经过以上六层分析，可以得出三个核心判断：</p><p><strong>1. 没有完美的协议，检测与反检测是持续的博弈。</strong></p><p>任何声称”绝对安全”的协议都在误导用户。GFW 的检测系统在持续升级——从最初的 DNS 污染到 DPI，再到 TLS 指纹和行为分析——每一次升级都淘汰了一批曾经有效的方案。今天的最优选择（如 VLESS+Reality），明天也可能面临新的检测维度。保持对技术动态的关注比盲目信任任何单一协议更重要。</p><p><strong>2. 运营敏捷性比协议选择更重要。</strong></p><p>在实际对抗中，快速切换节点、自动故障转移、多节点负载均衡等运营层面的能力，往往比底层协议的选择更能决定可用性。一个使用 VLESS+Reality 但只有单一节点的用户，在节点 IP 被封后会完全失去连接；而一个拥有自动故障转移和多节点池的用户，即使使用稍弱的协议，也能保持更高的可用性。</p><p><strong>3. 多层防御优于单点强化。</strong></p><p>只关注协议层安全而忽视 DNS 泄露、IP 暴露、流量模式等其他层面，等于在一扇门上装了五把锁却敞着窗户。有效的规避策略需要在每一层都有应对：加密 DNS、节点 IP 管理、协议指纹伪装、抗主动探测配置、流量行为分散——缺一不可。</p><hr><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="Q-用了-VLESS-Reality-就绝对安全了吗？"><a href="#Q-用了-VLESS-Reality-就绝对安全了吗？" class="headerlink" title="Q: 用了 VLESS+Reality 就绝对安全了吗？"></a>Q: 用了 VLESS+Reality 就绝对安全了吗？</h3><p>不是。VLESS+Reality 在协议层面确实做到了当前最优——完美的 TLS 指纹、强大的抗主动探测能力、DPI 不可识别。但它无法解决第六层的行为分析问题。如果你的使用模式表现出明显的异常特征（长时间高频连接单一海外 IP），即使 Reality 协议本身无懈可击，你的连接仍然可能被标记和干扰。此外，IP 封锁也与协议无关——服务器 IP 一旦进入黑名单，Reality 也救不了。协议是防线之一，不是全部。</p><h3 id="Q-GFW-会封锁所有-VPN-吗？"><a href="#Q-GFW-会封锁所有-VPN-吗？" class="headerlink" title="Q: GFW 会封锁所有 VPN 吗？"></a>Q: GFW 会封锁所有 VPN 吗？</h3><p>不会。GFW 的封锁策略具有选择性，这与政策和实际需求有关。部分商业 VPN 在特定时期仍然可用，这是因为大量外企、跨境电商、科研机构有合法的跨境网络需求。完全切断所有加密跨境连接会对经济活动造成严重影响。因此 GFW 在执行上是有弹性的：对明显的个人翻墙工具打击力度大，对面向企业的合规 VPN 方案相对宽容，但这种容忍度会随政策周期波动。</p><h3 id="Q-敏感时期为什么封锁会加强？"><a href="#Q-敏感时期为什么封锁会加强？" class="headerlink" title="Q: 敏感时期为什么封锁会加强？"></a>Q: 敏感时期为什么封锁会加强？</h3><p>敏感时期（如重大会议、特定纪念日等）GFW 会临时调整检测策略：降低触发封锁的阈值、启用更激进的检测规则、扩大主动探测的范围和频率。平时可能只是标记但不阻断的可疑连接，在敏感时期会被直接封锁。这是一种临时性的策略调整——通过短期内提高封锁力度来实现特定时段的信息管控，事后通常会回到常规检测水平。了解这种周期性规律有助于你在敏感时期提前做好备用节点和备用协议的准备，具体的时间节点和应对方案参见 <a href="/posts/sensitive-periods/">敏感时期封锁加强的规律与应对</a>。</p>]]></content>
      
      
      <categories>
          
          <category> GFW 与审查 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> GFW </tag>
            
            <tag> DPI </tag>
            
            <tag> TLS指纹 </tag>
            
            <tag> 主动探测 </tag>
            
            <tag> 流量分析 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>NaiveProxy：用 Chromium 网络栈做代理</title>
      <link href="/posts/naiveproxy/"/>
      <url>/posts/naiveproxy/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：在所有的代理抗检测方案中，NaiveProxy 采用了最”暴力”也最彻底的思路——直接使用 Chromium 浏览器的网络栈来传输代理流量。这意味着代理产生的 TLS 指纹、HTTP&#x2F;2 行为和连接特征与真实的 Chrome 浏览器完全一致。本文解析 NaiveProxy 的设计理念、工作原理、优劣势以及当前的实际地位。</p></blockquote><h2 id="设计哲学：不模拟，而是”就是”"><a href="#设计哲学：不模拟，而是”就是”" class="headerlink" title="设计哲学：不模拟，而是”就是”"></a>设计哲学：不模拟，而是”就是”</h2><p>大多数代理协议在面对 TLS 指纹检测时，采用的策略是<strong>模拟</strong>（simulate）。典型的做法是使用 <a href="https://github.com/refraction-networking/utls">uTLS</a> 库来伪造 TLS Client Hello，让代理的 TLS 握手看起来像是来自 Chrome、Firefox 等真实浏览器。</p><p>uTLS 的做法已经相当有效，但它本质上仍然是”模仿”——它复制了 Chrome 的 Client Hello 参数，但底层的网络栈仍然是 Go 语言的 <code>crypto/tls</code>。这意味着在 TLS 握手之外的行为（比如 HTTP&#x2F;2 的帧处理、TCP 参数、连接管理等方面）仍然可能暴露非浏览器的特征。</p><p>NaiveProxy 的创造者 klzgrad 提出了一个更激进的思路：<strong>与其模拟浏览器，不如直接使用浏览器本身的网络代码</strong>。</p><p>NaiveProxy 的客户端直接基于 Chromium 的网络栈（<code>net</code> 模块）构建。它不是在另一个 TLS 库上伪造 Chrome 的指纹，而是直接调用 Chrome 使用的那套网络代码。这样一来，NaiveProxy 产生的流量在以下所有层面都与真实的 Chrome 浏览器一致：</p><ul><li><strong>TLS 指纹</strong>（JA3&#x2F;JA4）：完全一致，因为使用的是同一套 TLS 代码（BoringSSL）</li><li><strong>HTTP&#x2F;2 行为</strong>：帧大小、流优先级、HPACK 压缩等行为完全一致</li><li><strong>TCP 参数</strong>：初始窗口大小、拥塞控制行为等由同一套代码控制</li><li><strong>ALPN 协商</strong>：协议协商过程与 Chrome 相同</li></ul><p>用一个类比来说明：uTLS 是”化妆”——戴上面具让外表看起来像另一个人；NaiveProxy 是”克隆”——直接使用那个人的身体。从理论上来说，后者当然更加完美，因为没有什么比”就是它本身”更能通过身份验证了。</p><h2 id="工作原理"><a href="#工作原理" class="headerlink" title="工作原理"></a>工作原理</h2><p>NaiveProxy 的架构分为客户端和服务端两部分。</p><h3 id="服务端：Caddy-forwardproxy"><a href="#服务端：Caddy-forwardproxy" class="headerlink" title="服务端：Caddy + forwardproxy"></a>服务端：Caddy + forwardproxy</h3><p>NaiveProxy 的服务端基于 <a href="https://caddyserver.com/">Caddy</a> Web 服务器，配合一个特殊的 <code>forwardproxy</code> 插件。Caddy 本身是一个功能完善的 Web 服务器，可以正常托管网站内容。<code>forwardproxy</code> 插件在 Caddy 的基础上添加了正向代理的功能——经过身份验证的客户端可以通过 Caddy 转发流量。</p><p>服务端的配置通过 Caddyfile 完成：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">:443, your-domain.com</span><br><span class="line">tls your@email.com</span><br><span class="line">route &#123;</span><br><span class="line">  forward_proxy &#123;</span><br><span class="line">    basic_auth user password</span><br><span class="line">    hide_ip</span><br><span class="line">    hide_via</span><br><span class="line">    probe_resistance</span><br><span class="line">  &#125;</span><br><span class="line">  reverse_proxy https://your-camouflage-site.com &#123;</span><br><span class="line">    header_up Host &#123;upstream_hostport&#125;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>这个配置做了以下事情：</p><ol><li><strong>Caddy 监听 443 端口</strong>，使用 Let’s Encrypt 自动获取 TLS 证书</li><li><strong>forward_proxy 插件</strong>提供正向代理功能，需要用户名密码认证</li><li><strong>probe_resistance</strong>：当没有正确认证时，返回看起来像普通网站的内容，抵抗主动探测</li><li><strong>reverse_proxy</strong>：对未认证的访问者，将请求反向代理到伪装站点</li></ol><p>从审查者的角度来看，这台服务器就是一个普通的 HTTPS 网站。只有持有正确凭证的 NaiveProxy 客户端才能激活代理功能。</p><h3 id="客户端：Chromium-网络栈"><a href="#客户端：Chromium-网络栈" class="headerlink" title="客户端：Chromium 网络栈"></a>客户端：Chromium 网络栈</h3><p>NaiveProxy 的客户端是一个经过修改的 Chromium 网络栈。客户端启动后，会在本地开放一个 SOCKS5 或 HTTP 代理端口，上层应用通过这个端口发送流量。客户端收到流量后，使用 Chromium 的网络代码与服务端建立 HTTPS 连接，通过 HTTP&#x2F;2 CONNECT 方法转发流量。</p><p>客户端配置极为简洁：</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;listen&quot;</span><span class="punctuation">:</span> <span class="string">&quot;socks://127.0.0.1:1080&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;proxy&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://user:password@your-domain.com&quot;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h3 id="流量路径"><a href="#流量路径" class="headerlink" title="流量路径"></a>流量路径</h3><p>完整的流量路径如下：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">应用程序 → 本地 SOCKS5 → NaiveProxy 客户端 → HTTPS (Chromium 网络栈) → Caddy 服务器 → forward_proxy → 目标网站</span><br></pre></td></tr></table></figure><p>从网络审查者的视角来看，客户端与服务器之间的通信就是一个普通的 HTTPS 连接——TLS 指纹是真正的 Chrome，HTTP&#x2F;2 行为是真正的 Chrome，连接模式也符合正常的浏览器访问。</p><h2 id="优势分析"><a href="#优势分析" class="headerlink" title="优势分析"></a>优势分析</h2><h3 id="完美的-TLS-指纹"><a href="#完美的-TLS-指纹" class="headerlink" title="完美的 TLS 指纹"></a>完美的 TLS 指纹</h3><p>这是 NaiveProxy 最核心的优势。由于直接使用 Chromium 的 BoringSSL，NaiveProxy 产生的 JA3&#x2F;JA4 指纹与真实的 Chrome 浏览器<strong>完全相同</strong>——不是”几乎相同”或”非常接近”，而是<strong>完全相同</strong>。</p><p>对于使用 JA3&#x2F;JA4 指纹进行流量分类的审查系统来说，NaiveProxy 的流量与正常的 Chrome HTTPS 流量无法区分。</p><h3 id="超越指纹的一致性"><a href="#超越指纹的一致性" class="headerlink" title="超越指纹的一致性"></a>超越指纹的一致性</h3><p>NaiveProxy 的优势不仅限于 TLS 指纹。由于使用了完整的 Chromium 网络栈，以下方面也与 Chrome 一致：</p><ul><li><strong>HTTP&#x2F;2 帧行为</strong>：SETTINGS 帧参数、流量控制、HPACK 动态表大小等</li><li><strong>TCP 行为</strong>：初始拥塞窗口、重传策略等</li><li><strong>证书验证</strong>：使用 Chromium 自带的证书验证逻辑</li><li><strong>OCSP 处理</strong>：在线证书状态协议的处理方式</li></ul><p>即使审查者开发了比 JA3 更高级的指纹技术（比如分析 HTTP&#x2F;2 帧序列或 TCP 行为模式），NaiveProxy 也能自然地通过检测。</p><h3 id="内置的抗主动探测"><a href="#内置的抗主动探测" class="headerlink" title="内置的抗主动探测"></a>内置的抗主动探测</h3><p>服务端的 <code>probe_resistance</code> 功能提供了对主动探测的防御。当审查者尝试直接连接服务器时，看到的是一个正常的 HTTPS 网站（通过 reverse_proxy 伪装）。只有携带正确认证信息的请求才会被 forward_proxy 处理。</p><h2 id="劣势与局限"><a href="#劣势与局限" class="headerlink" title="劣势与局限"></a>劣势与局限</h2><p>尽管 NaiveProxy 在理论上有着最强的抗检测能力，但它在实际部署中存在多个显著的短板。</p><h3 id="编译复杂度"><a href="#编译复杂度" class="headerlink" title="编译复杂度"></a>编译复杂度</h3><p>这是 NaiveProxy 最大的实际障碍。由于客户端基于 Chromium 网络栈，构建客户端需要编译 Chromium 的部分代码。这不是一个简单的 <code>go build</code> 或 <code>cargo build</code> 能解决的问题：</p><ul><li><strong>Chromium 代码库庞大</strong>：即使只编译网络栈部分，源码下载量也在 10GB 以上</li><li><strong>构建依赖复杂</strong>：需要特定版本的编译器、Python 脚本和系统库</li><li><strong>编译时间长</strong>：在普通硬件上编译可能需要数小时</li><li><strong>平台限制</strong>：交叉编译支持有限</li></ul><p>虽然 NaiveProxy 项目提供了预编译的二进制文件和 GitHub Actions 构建脚本，但如果 Chromium 更新导致构建失败，修复问题需要对 Chromium 构建系统有深入了解。</p><p>服务端同样需要编译一个特殊版本的 Caddy（包含 forwardproxy 插件），不过这比客户端的编译简单得多，可以使用 <code>xcaddy</code> 工具完成：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">xcaddy build --with github.com/caddyserver/forwardproxy=github.com/klzgrad/forwardproxy@naive</span><br></pre></td></tr></table></figure><h3 id="Chromium-更新的跟进压力"><a href="#Chromium-更新的跟进压力" class="headerlink" title="Chromium 更新的跟进压力"></a>Chromium 更新的跟进压力</h3><p>Chrome 大约每四周发布一个新的主要版本。每次更新都可能改变网络栈的行为，包括 TLS 参数、HTTP&#x2F;2 设置等。NaiveProxy 需要跟进这些更新，否则其 TLS 指纹会逐渐落后于真实的 Chrome 版本，反而可能成为特征。</p><p>这给项目维护者带来了持续的压力。如果 NaiveProxy 的 Chromium 版本落后太多，审查者甚至可以通过”这个 TLS 指纹来自一个过时版本的 Chrome”来识别它。</p><h3 id="资源占用较高"><a href="#资源占用较高" class="headerlink" title="资源占用较高"></a>资源占用较高</h3><p>由于嵌入了 Chromium 的网络栈，NaiveProxy 的二进制文件体积和内存占用都明显高于其他代理：</p><table><thead><tr><th>代理</th><th>二进制大小</th><th>运行内存</th></tr></thead><tbody><tr><td>NaiveProxy</td><td>~15 MB</td><td>~30-50 MB</td></tr><tr><td>Xray (VLESS)</td><td>~10 MB</td><td>~15-25 MB</td></tr><tr><td>sing-box</td><td>~15 MB</td><td>~20-35 MB</td></tr></tbody></table><p>虽然在现代设备上这些数字并不算大，但在路由器或低配 VPS 等资源受限的环境中，这可能是一个考虑因素。</p><h3 id="客户端支持有限"><a href="#客户端支持有限" class="headerlink" title="客户端支持有限"></a>客户端支持有限</h3><p>NaiveProxy 的客户端生态远不如 VLESS 或 Trojan 丰富：</p><ul><li><strong>独立客户端</strong>：只有官方的 naive 命令行工具</li><li><strong>GUI 客户端</strong>：几乎没有专门的图形化客户端</li><li><strong>移动端</strong>：Android 上有一些第三方集成，iOS 上支持非常有限</li><li><strong>代理平台集成</strong>：sing-box 支持 NaiveProxy 协议，但 Clash&#x2F;mihomo 不支持</li></ul><p>这意味着使用 NaiveProxy 通常需要搭配其他代理工具——比如在 sing-box 中配置 NaiveProxy 出站（outbound），或者在系统中设置 SOCKS5 代理指向 NaiveProxy 的本地端口。</p><h3 id="协议单一"><a href="#协议单一" class="headerlink" title="协议单一"></a>协议单一</h3><p>NaiveProxy 本质上就是 HTTPS 代理（HTTP&#x2F;2 CONNECT）。它不支持 WebSocket、gRPC、QUIC 等多种传输方式。虽然 HTTPS 本身已经足够隐蔽，但在某些需要特殊传输方式的场景（比如 CDN 中转）下，NaiveProxy 的灵活性不如 VLESS+WebSocket 等方案。</p><h2 id="NaiveProxy-vs-VLESS-Reality"><a href="#NaiveProxy-vs-VLESS-Reality" class="headerlink" title="NaiveProxy vs VLESS+Reality"></a>NaiveProxy vs VLESS+Reality</h2><p>这是一个很有意义的对比——两者都以抗检测为核心目标，但采取了完全不同的技术路线。</p><table><thead><tr><th>维度</th><th>NaiveProxy</th><th>VLESS+Reality</th></tr></thead><tbody><tr><td>抗指纹策略</td><td>使用真实 Chromium 网络栈</td><td>使用 uTLS 模拟指纹 + 伪装真实站点证书</td></tr><tr><td>指纹完美度</td><td>完美（就是 Chrome）</td><td>接近完美（uTLS 模拟，极难区分）</td></tr><tr><td>部署难度</td><td>高（需编译 Chromium 组件）</td><td>低（Xray&#x2F;sing-box 原生支持）</td></tr><tr><td>客户端支持</td><td>有限</td><td>极为丰富</td></tr><tr><td>维护成本</td><td>高（需跟进 Chromium 更新）</td><td>低（uTLS 库独立更新）</td></tr><tr><td>传输灵活性</td><td>低（仅 HTTPS）</td><td>高（支持多种传输）</td></tr><tr><td>CDN 兼容</td><td>不支持</td><td>不支持（但 VLESS+WS 可以）</td></tr><tr><td>社区活跃度</td><td>较低</td><td>很高</td></tr><tr><td>实际被封概率</td><td>极低</td><td>极低</td></tr></tbody></table><p><strong>关键结论</strong>：在理论的抗检测能力上，NaiveProxy 确实是最强的——没有什么比”就是 Chrome”更完美的伪装。但在实际使用中，VLESS+Reality 的 uTLS 方案已经足够强大，两者被检测到的概率都极低。考虑到 Reality 在部署、维护和客户端支持方面的巨大优势，<strong>对于绝大多数用户来说，Reality 是更实际的选择</strong>。</p><p>NaiveProxy 更像是一个”理论最优解”——它证明了”直接使用浏览器网络栈”这条路线是可行的，并且在安全性上确实达到了最高水平。但工程上的代价使得它难以在实际中广泛推广。</p><h2 id="当前状态与展望"><a href="#当前状态与展望" class="headerlink" title="当前状态与展望"></a>当前状态与展望</h2><p>截至 2026 年，NaiveProxy 仍然在活跃开发中，但更新频率和社区活跃度都不如 Xray 和 sing-box。它更多地被定位为一个<strong>小众但可靠的选择</strong>——适合那些对安全性有极致要求、且有能力处理部署复杂度的用户。</p><p>NaiveProxy 最大的贡献可能不是作为一个被广泛使用的代理工具，而是它提出的思路——“用真实的浏览器网络栈做代理”——影响了整个代理社区对抗检测技术的思考方式。uTLS 等模拟方案在不断进步，部分原因就是 NaiveProxy 展示了”完美伪装”应该是什么样子。</p><h2 id="常见问题（FAQ）"><a href="#常见问题（FAQ）" class="headerlink" title="常见问题（FAQ）"></a>常见问题（FAQ）</h2><h3 id="Q1：NaiveProxy-适合普通用户吗？"><a href="#Q1：NaiveProxy-适合普通用户吗？" class="headerlink" title="Q1：NaiveProxy 适合普通用户吗？"></a>Q1：NaiveProxy 适合普通用户吗？</h3><p>不太适合。部署和维护的复杂度远高于 VLESS+Reality 或 Trojan 等方案。除非你有特殊的安全需求且具备技术能力，否则建议使用 Reality。</p><h3 id="Q2：sing-box-支持-NaiveProxy-吗？"><a href="#Q2：sing-box-支持-NaiveProxy-吗？" class="headerlink" title="Q2：sing-box 支持 NaiveProxy 吗？"></a>Q2：sing-box 支持 NaiveProxy 吗？</h3><p>支持。sing-box 可以配置 NaiveProxy 类型的出站（outbound），这样你可以在 sing-box 的框架内使用 NaiveProxy 协议，同时享受 sing-box 的规则系统和 GUI 客户端。</p><h3 id="Q3：NaiveProxy-会被检测到吗？"><a href="#Q3：NaiveProxy-会被检测到吗？" class="headerlink" title="Q3：NaiveProxy 会被检测到吗？"></a>Q3：NaiveProxy 会被检测到吗？</h3><p>理论上极难检测。但要注意，任何代理都可能通过流量模式分析（而非指纹）被识别——比如长时间的大流量单一连接在统计上并不像正常的浏览行为。NaiveProxy 解决的是指纹问题，不能解决流量模式问题。</p><h3 id="Q4：为什么不直接用-Chrome-浏览器做代理？"><a href="#Q4：为什么不直接用-Chrome-浏览器做代理？" class="headerlink" title="Q4：为什么不直接用 Chrome 浏览器做代理？"></a>Q4：为什么不直接用 Chrome 浏览器做代理？</h3><p>因为 Chrome 浏览器本身不提供正向代理功能。NaiveProxy 提取了 Chromium 的网络栈，剥离了渲染引擎、JavaScript 引擎等不需要的部分，只保留了网络通信的核心代码。</p><h3 id="Q5：NaiveProxy-的服务端可以和其他服务共存吗？"><a href="#Q5：NaiveProxy-的服务端可以和其他服务共存吗？" class="headerlink" title="Q5：NaiveProxy 的服务端可以和其他服务共存吗？"></a>Q5：NaiveProxy 的服务端可以和其他服务共存吗？</h3><p>可以。由于服务端基于 Caddy，你可以在同一台服务器上同时托管网站和运行 NaiveProxy。Caddy 本身就是一个高性能的 Web 服务器，代理功能只是一个插件。</p><h3 id="Q6：forwardproxy-插件和标准-Caddy-的-forwardproxy-一样吗？"><a href="#Q6：forwardproxy-插件和标准-Caddy-的-forwardproxy-一样吗？" class="headerlink" title="Q6：forwardproxy 插件和标准 Caddy 的 forwardproxy 一样吗？"></a>Q6：forwardproxy 插件和标准 Caddy 的 forwardproxy 一样吗？</h3><p>不一样。NaiveProxy 使用的是 klzgrad 维护的一个特殊分支，增加了 <code>probe_resistance</code>、<code>hide_ip</code>、<code>hide_via</code> 等安全特性。标准 Caddy 的 forwardproxy 没有这些功能。</p><h2 id="外部链接"><a href="#外部链接" class="headerlink" title="外部链接"></a>外部链接</h2><ul><li><a href="https://github.com/klzgrad/naiveproxy">NaiveProxy GitHub 仓库</a></li><li><a href="https://caddyserver.com/">Caddy 官方网站</a></li><li><a href="https://github.com/refraction-networking/utls">uTLS 项目</a></li><li><a href="https://sing-box.sagernet.org/configuration/outbound/naive/">sing-box NaiveProxy 出站配置</a></li></ul><hr><p><em>NaiveProxy 代表了代理抗检测技术的理论上限。对于大多数用户来说，它更多的意义在于验证了一种思路，而不是作为日常使用的工具。</em></p>]]></content>
      
      
      <categories>
          
          <category> 协议与原理 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> 协议 </tag>
            
            <tag> 抗检测 </tag>
            
            <tag> NaiveProxy </tag>
            
            <tag> Chromium </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>为什么你的节点会被封：常见触发条件分析</title>
      <link href="/posts/node-blocking-causes/"/>
      <url>/posts/node-blocking-causes/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：节点被封是使用代理过程中最常遇到的问题。封锁并非随机——GFW 有一套检测逻辑和触发条件。理解这些触发条件，可以帮助你选择更稳定的节点，也能理解为什么某些节点比其他的更持久。</p></blockquote><hr><h2 id="封锁的基本逻辑"><a href="#封锁的基本逻辑" class="headerlink" title="封锁的基本逻辑"></a>封锁的基本逻辑</h2><p>很多人认为 GFW 封锁节点是一件随机的事——今天能用，明天突然不能用，看起来毫无规律。但实际上，GFW 有一套相对系统化的封锁流程，大致遵循<strong>检测 → 分析 → 执行</strong>的模式。</p><p><strong>检测阶段</strong>：GFW 通过部署在骨干网上的 DPI（深度包检测）设备、DNS 监控系统和主动探测器，持续扫描跨境流量中的异常信号。这些异常信号包括但不限于：协议特征不匹配、TLS 指纹异常、流量行为偏离正常模式等。</p><p><strong>分析阶段</strong>：单一维度的异常通常不会直接触发封锁。GFW 会对多个维度的异常进行综合评估。例如，一个 IP 同时表现出”TLS 指纹与浏览器不匹配”和”长时间持续加密连接”两个特征，其被封锁的概率远高于只有单一异常的 IP。这种综合评分机制解释了为什么有些配置不完美的节点仍然能用——它可能只触发了一两个低权重的检测维度，尚未达到封锁阈值。</p><p><strong>执行阶段</strong>：当综合评分超过阈值后，GFW 会对目标 IP 或端口采取封锁措施。执行手段包括 IP 级别的全端口封锁、特定端口封锁，或者临时性的流量干扰（如丢包、限速）。</p><p>理解这三个阶段的一个关键含义是：<strong>GFW 并不追求百分之百消灭所有翻墙行为。</strong> 完全阻断所有加密跨境连接在技术上不可行，在经济上也不可接受——大量外贸企业、跨国公司、科研机构依赖加密跨境连接开展正常业务。GFW 的实际目标是让翻墙行为对普通用户来说”足够麻烦”，使得大多数人因为门槛过高而放弃，同时不影响合法的跨境商业活动。</p><p>另一个需要理解的规律是：<strong>封锁阈值会随政治周期波动。</strong> 在敏感时期（如重大会议、特定纪念日），检测系统的阈值会显著降低——平时不会触发封锁的轻微异常，在敏感时期可能直接导致 IP 被封。反过来，日常时段的检测相对宽松，给代理工具留出了更多生存空间。</p><hr><h2 id="触发条件一：协议特征被识别"><a href="#触发条件一：协议特征被识别" class="headerlink" title="触发条件一：协议特征被识别"></a>触发条件一：协议特征被识别</h2><p>这是最直接的触发条件。如果你使用的代理协议本身就有明显的流量特征，GFW 的 DPI 系统可以直接在数据包层面识别出”这是代理流量”，然后采取封锁措施。</p><p><strong>已被有效识别的协议</strong>：</p><ul><li><p><strong>裸 VMess 协议</strong>：VMess 是 V2Ray 最早支持的协议。未经 TLS 封装的 VMess 流量在包头结构和加密模式上具有可被 DPI 捕捉的特征。GFW 自 2020 年左右开始对裸 VMess 进行大规模检测和封锁。在当前环境下，直接使用裸 VMess 的节点存活时间通常以小时到天为单位计算。</p></li><li><p><strong>旧版 Shadowsocks（非 AEAD-2022）</strong>：早期版本的 Shadowsocks 使用 stream cipher（如 aes-256-cfb），存在已知的流量特征。更关键的是，旧版 Shadowsocks 在错误处理上存在可被主动探测利用的行为差异——对合法连接和非法连接的响应模式不同，这为 GFW 的主动探测提供了明确的识别依据。</p></li><li><p><strong>OpenVPN</strong>：无论使用 TCP 还是 UDP 模式，OpenVPN 的握手过程都有非常明确的协议指纹。其 opcode 字段和密钥交换模式是公开的标准协议，GFW 可以轻松识别并阻断。在中国大陆，OpenVPN 几乎可以认为已经被完全封锁。</p></li><li><p><strong>WireGuard</strong>：尽管 WireGuard 在性能和代码简洁性上优于传统 VPN，但其握手报文使用固定的消息类型标识（Type 1&#x2F;2&#x2F;3&#x2F;4），包大小分布也非常特征化。GFW 可以通过这些固定模式快速识别 WireGuard 流量。</p></li><li><p><strong>L2TP&#x2F;PPTP</strong>：这些老旧的 VPN 协议几乎没有任何伪装能力，被封锁已久。</p></li></ul><p><strong>影响范围</strong>：当 GFW 通过 DPI 识别出代理协议后，可能采取两种措施——封锁该 IP 上的特定端口（如果判定代理只运行在某个端口上），或者封锁整个 IP（如果多个端口都表现出代理特征）。</p><p><strong>防范措施</strong>：使用 GFW 当前无法有效识别的现代协议。在 2026 年的技术环境下，<strong>VLESS+Reality</strong> 和 <strong>Shadowsocks-2022</strong>（使用 2022-blake3-aes-128-gcm 或 2022-blake3-aes-256-gcm 方法）是抗 DPI 检测能力最强的两个方案。前者通过借用真实网站的 TLS 连接来隐藏代理特征，后者通过全新设计的加密格式消除了旧版 Shadowsocks 的所有已知特征。这两种协议均已在 <a href="https://github.com/XTLS/Xray-core">Xray-core</a> 中得到完善支持。</p><hr><h2 id="触发条件二：TLS-指纹异常"><a href="#触发条件二：TLS-指纹异常" class="headerlink" title="触发条件二：TLS 指纹异常"></a>触发条件二：TLS 指纹异常</h2><p>即使你的代理流量被 TLS 加密包裹，TLS 握手阶段的明文信息仍然可以暴露你使用的客户端类型。这就是 TLS 指纹检测的原理。</p><p><strong>问题的本质</strong>：当代理客户端发起 TLS 连接时，它发送的 Client Hello 消息包含了加密套件列表、扩展列表、椭圆曲线偏好等参数。这些参数的具体组合因 TLS 实现库的不同而各异。大多数代理工具使用 Go 语言开发，而 Go 标准库 crypto&#x2F;tls 产生的 TLS 指纹与 Chrome、Firefox 等主流浏览器截然不同。</p><p><strong>GFW 如何利用这一点</strong>：假设你的代理连接 SNI 指向 apple.com，但 TLS 指纹显示客户端是一个 Go 程序而非浏览器。正常用户不会用 Go 程序访问 apple.com。这种 SNI 与客户端指纹之间的矛盾是一个非常强的代理特征。GFW 可以据此将这条连接标记为可疑，甚至直接阻断。</p><p><strong>Go&#x2F;Rust TLS 库的指纹问题</strong>：Go 语言的 crypto&#x2F;tls 和 Rust 语言的 rustls 库各自有独特的 TLS 指纹，两者都与主流浏览器明显不同。由于这些编程语言在代理开发领域的广泛使用，它们的 TLS 指纹已经被 GFW 熟知并纳入检测规则。</p><p><strong>防范措施</strong>：</p><ul><li><p><strong>使用 Reality 协议</strong>：这是最彻底的解决方案。Reality 不尝试模拟浏览器指纹，而是直接与真实目标网站交互，让 GFW 看到的 Server Hello 和证书来自真实网站。即使 Client Hello 使用 uTLS 模拟的指纹存在微小偏差，Reality 的整体握手行为仍然与真实 TLS 连接高度一致。</p></li><li><p><strong>使用 <a href="https://github.com/refraction-networking/utls">uTLS</a> 配置 Chrome 指纹</strong>：如果不使用 Reality，至少应当在代理客户端配置中启用 uTLS 并选择 Chrome 指纹。在 Xray 或 Sing-box 的配置中设置 <code>&quot;fingerprint&quot;: &quot;chrome&quot;</code> 可以显著降低 TLS 指纹层面的检测风险。Chrome 是全球市场份额最高的浏览器，模拟 Chrome 指纹在统计上最”普通”。</p></li></ul><hr><h2 id="触发条件三：流量模式异常"><a href="#触发条件三：流量模式异常" class="headerlink" title="触发条件三：流量模式异常"></a>触发条件三：流量模式异常</h2><p>即使你的协议伪装完美、TLS 指纹无懈可击，长期的流量行为模式仍然可能暴露代理使用。这是 GFW 检测体系中最难对抗的一个维度，因为它不依赖协议层面的任何特征，而是从宏观的统计角度分析流量行为。</p><p><strong>GFW 关注的流量行为特征</strong>：</p><ul><li><p><strong>单一源 IP 到单一海外 IP 的持续加密连接</strong>：正常用户的上网行为是分散的——浏览不同的网站、连接不同的服务器，连接频繁建立和断开。但一个代理用户的流量模式是：所有加密流量都指向同一个海外 IP，且连接长时间保持活跃。这种”一对一长连接”模式在宏观上非常显眼。</p></li><li><p><strong>异常时段的大流量传输</strong>：凌晨 2 点到 5 点之间，一个家庭宽带 IP 持续向海外传输大量加密数据——这种时间和流量的组合不符合正常用户的行为特征。</p></li><li><p><strong>流量模式与声称的协议不匹配</strong>：你的连接 SNI 指向 apple.com，但流量特征表现为长时间的流媒体传输（如持续稳定的高码率数据流），而不是正常网页浏览的短突发模式。SNI 与流量行为之间的矛盾是一个可疑信号。</p></li><li><p><strong>单一 IP 的高带宽利用率</strong>：一个家庭宽带 IP 长期占满其上行带宽，且所有高带宽流量都指向同一个海外 IP。这种模式在正常上网行为中极为罕见。</p></li></ul><p><strong>防范措施</strong>：</p><ul><li><p><strong>多节点轮换</strong>：将流量分散到多个海外 IP 上，避免长期连接单一节点。大多数代理客户端（如 Clash、Sing-box）都支持负载均衡或自动选择功能，可以在多个节点之间自动切换。</p></li><li><p><strong>避免 24&#x2F;7 全天候高带宽使用</strong>：如果你需要长时间使用代理（如远程办公），尽量使用分流规则将国内流量直连，只代理必要的跨境流量。这样你的整体流量模式更接近正常用户。</p></li><li><p><strong>使用中转线路</strong>：中转线路通过国内的中转服务器将流量转发到海外节点。从 GFW 的视角看，它观察到的是中转服务器到海外的连接，而非你的家庭 IP 直连海外。中转服务器通常是数据中心 IP，其上有大量合法业务流量混杂，你的代理流量更容易被”淹没”在正常流量中。</p></li></ul><hr><h2 id="触发条件四：主动探测失败"><a href="#触发条件四：主动探测失败" class="headerlink" title="触发条件四：主动探测失败"></a>触发条件四：主动探测失败</h2><p>GFW 不仅被动地监听流量——它还会主动出击。当被动检测系统将某个 IP 或端口标记为可疑后，GFW 会从中国境内的多个 IP 地址主动向该服务器发起连接，尝试验证其是否运行着代理服务。</p><p><strong>主动探测的工作方式</strong>：</p><ul><li><p><strong>重放攻击</strong>：GFW 捕获用户与服务器之间的真实握手数据包，稍后从不同的 IP 重放这些数据包。如果服务器接受了重放的握手并建立连接，就可以确认其运行着代理服务。旧版 Shadowsocks 对重放攻击几乎没有防御能力，因此在主动探测面前非常脆弱。</p></li><li><p><strong>协议嗅探</strong>：GFW 以不同的协议格式尝试与服务器握手，例如发送疑似 Shadowsocks、VMess 等协议的探测包，观察服务器的响应。代理服务和正常 Web 服务器对这些非标准请求的响应行为存在差异。</p></li><li><p><strong>行为差异检测</strong>：旧版 Shadowsocks 的一个致命问题是——对合法客户端连接和非法探测连接的响应行为不同。例如，合法连接被正常处理，非法连接被静默断开。这种差异性行为本身就是一个识别特征。GFW 通过发送大量合法和非法请求并对比服务器的响应差异，可以高概率判断服务器是否运行代理。</p></li></ul><p><strong>防范措施</strong>：</p><ul><li><p><strong>Reality 协议</strong>：当探测者连接 Reality 服务端时，如果无法提供正确的认证信息（短 ID 和私钥），服务端会将连接无缝代理到预设的真实目标网站。探测者看到的是一个完全正常的网站，无法判断背后是否运行代理。这种”无差别响应”的设计哲学是 Reality 抗主动探测的核心优势。</p></li><li><p><strong>SS-2022 的重放保护</strong>：Shadowsocks 2022 引入了基于时间戳的会话过滤机制。每个握手包都包含时间窗口校验，过期的或重放的握手包会被自动拒绝，且拒绝行为与普通连接超时无法区分。</p></li></ul><hr><h2 id="触发条件五：IP-信誉"><a href="#触发条件五：IP-信誉" class="headerlink" title="触发条件五：IP 信誉"></a>触发条件五：IP 信誉</h2><p>并非所有 IP 地址在 GFW 眼中都是平等的。IP 的历史记录和关联信息构成了它的”信誉评分”，信誉越低的 IP 受到的审查越严格。</p><p><strong>影响 IP 信誉的因素</strong>：</p><ul><li><p><strong>历史使用记录</strong>：如果一个 IP 地址曾经被用于运行代理服务并被封锁过，即使后来换了用户和用途，GFW 可能仍然对这个 IP 保持更高的监控等级。很多便宜的 VPS 提供商会将被释放的 IP 重新分配给新用户，而这些 IP 可能已经带着”前科”。</p></li><li><p><strong>VPN 提供商的 IP 段</strong>：知名 VPN 服务（如 NordVPN、ExpressVPN、Surfshark 等）使用的 IP 段已经被 GFW 广泛收录。即使这些 VPN 频繁更换服务器 IP，GFW 也会通过 AS 号和 IP 段归属关系追踪它们的新 IP。</p></li><li><p><strong>共享主机的连坐效应</strong>：如果你使用的 VPS 所在的 IP 段中有大量其他用户也在运行代理，整个 IP 段可能会被 GFW 标记为高风险。即使你的节点配置完美，你也可能因为”邻居”的行为而被牵连。这在某些以代理用户为主要客户群的廉价 VPS 提供商中特别常见。</p></li><li><p><strong>数据中心 IP 的天然劣势</strong>：GFW 知道哪些 IP 段属于知名数据中心（如 AWS、GCP、Azure、DigitalOcean、Vultr、Bandwagon 等）。这些 IP 段中运行代理的比例远高于普通住宅 IP，因此它们受到的监控力度也更大。</p></li></ul><p><strong>防范措施</strong>：</p><ul><li>选择 IP 历史相对干净的 VPS 提供商。可以使用 IP 查询工具检查新获取的 IP 是否在各种黑名单中。</li><li>避免使用代理用户过度集中的提供商。如果一个提供商在中文技术论坛上因”适合做代理”而广为人知，那么它的 IP 段很可能已经被重点监控。</li><li>如果条件允许，选择非数据中心 IP（如住宅 IP 或商业宽带 IP），这些 IP 的基础信誉通常更好。</li></ul><hr><h2 id="触发条件六：端口特征"><a href="#触发条件六：端口特征" class="headerlink" title="触发条件六：端口特征"></a>触发条件六：端口特征</h2><p>代理服务使用的端口号也是 GFW 分析的维度之一。虽然端口本身不足以直接触发封锁，但不当的端口选择可能增加被标记的风险。</p><p><strong>端口相关的风险因素</strong>：</p><ul><li><p><strong>非标准高端口</strong>：如果你的代理运行在如 23456、54321 这样的非标准高端口上，而该端口上的流量全部是加密连接，这种模式不符合正常 Web 服务的特征。正常的 HTTPS 网站运行在 443 端口，正常的 HTTP 运行在 80 端口，其他端口上的大量加密流量更容易被标记为异常。</p></li><li><p><strong>同一 IP 多端口多服务</strong>：在一个 IP 上同时运行多个不同端口的代理服务（如 443 跑 VLESS、8443 跑 Trojan、9000 跑 Shadowsocks），从外部看就像一台”代理服务器农场”。这种多端口多协议的模式几乎可以确认该服务器的主要用途是代理。</p></li></ul><p><strong>防范措施</strong>：</p><ul><li><strong>使用 443 端口</strong>：443 是标准 HTTPS 端口。你的代理流量混在全球海量的正常 HTTPS 流量中，从端口层面来看完全正常。</li><li><strong>一个 IP 只运行一个代理协议</strong>：避免在同一 IP 上叠加多种代理服务。如果需要多种协议，使用不同的服务器 IP。</li></ul><hr><h2 id="触发条件七：DNS-关联"><a href="#触发条件七：DNS-关联" class="headerlink" title="触发条件七：DNS 关联"></a>触发条件七：DNS 关联</h2><p>DNS 查询行为可以间接暴露你的代理使用。虽然 DNS 关联不会直接导致节点被封，但它可能将你标记为”翻墙用户”，从而使你的 IP 受到更严格的监控。</p><p><strong>DNS 泄露的风险</strong>：</p><ul><li><p><strong>明文 DNS 查询暴露访问目标</strong>：如果你在连接代理之前（或在代理之外）通过未加密的 DNS 查询解析了被墙域名（如 google.com、youtube.com），你的 ISP（运营商）和 GFW 都能看到这些查询记录。这些记录表明你在尝试访问被封锁的网站，你的 IP 会被标记为”可能的翻墙用户”。</p></li><li><p><strong>DNS 查询模式分析</strong>：即使单次 DNS 查询不足以触发什么，长期的 DNS 查询日志可以揭示你的上网模式。频繁解析大量被封锁域名的 IP 显然更可能在使用代理。</p></li><li><p><strong>ISP 级别的 DNS 监控</strong>：中国的主要运营商对用户的 DNS 查询有全面的日志记录能力。这些日志可能与 GFW 的流量分析系统联动——如果一个 IP 既有大量被封锁域名的 DNS 查询记录，又有指向海外 IP 的持续加密连接，两者关联后的判定准确度会大幅提高。</p></li></ul><p><strong>防范措施</strong>：</p><ul><li><p><strong>使用加密 DNS</strong>：配置 DoH（DNS over HTTPS）或 DoT（DNS over TLS）来加密 DNS 查询，防止 ISP 和 GFW 窥探你的 DNS 请求内容。</p></li><li><p><strong>使用 Fake-IP 模式</strong>：在支持 Fake-IP 的代理客户端（如 Clash、Sing-box）中启用该模式。Fake-IP 会在本地为被代理的域名分配虚拟 IP，真正的 DNS 解析在远端服务器上完成，本地不产生任何真实的 DNS 查询。这从根本上消除了 DNS 泄露的可能性。</p></li><li><p><strong>确保代理客户端接管了所有 DNS 查询</strong>：检查你的代理配置，确保没有 DNS 请求在代理隧道之外泄露。特别注意系统级 DNS 配置和浏览器的安全 DNS 设置可能造成的旁路。</p></li></ul><hr><h2 id="敏感时期的特殊情况"><a href="#敏感时期的特殊情况" class="headerlink" title="敏感时期的特殊情况"></a>敏感时期的特殊情况</h2><p>GFW 的封锁力度并非一成不变——它随政治周期明显波动。理解这种周期性规律，有助于提前做好准备。</p><p><strong>典型的敏感时期</strong>：</p><ul><li><strong>全国两会（每年 3 月）</strong>：人大和政协会议期间，网络管控力度通常会显著提升。</li><li><strong>国庆节前后（每年 10 月）</strong>：特别是逢十周年大庆，封锁力度更强。</li><li><strong>特定历史纪念日</strong>：某些日期前后 GFW 会提前加强检测。</li><li><strong>突发公共事件</strong>：重大社会事件发生时，GFW 可能临时加强封锁以控制信息传播。</li></ul><p><strong>敏感时期的变化</strong>：</p><ul><li><strong>检测阈值大幅降低</strong>：平时不会触发封锁的轻微异常（如偶尔的 TLS 指纹不匹配）在敏感时期可能直接导致 IP 被封。</li><li><strong>主动探测频率增加</strong>：GFW 的主动探测系统在敏感时期会更频繁地扫描可疑 IP。</li><li><strong>封锁执行更快</strong>：从检测到异常到执行封锁的时间窗口显著缩短。</li><li><strong>预防性封锁</strong>：GFW 可能根据已有的 IP 信誉数据库，预先封锁一批”高概率代理服务器”的 IP，甚至在这些服务器表现出任何异常之前。</li></ul><p><strong>应对策略</strong>：</p><ul><li>优质的机场（代理服务提供商）会为敏感时期提前准备备用 IP 和快速轮换机制。</li><li>如果你自建节点，建议在敏感时期前准备至少一个备用服务器 IP。</li><li>在敏感时期适当降低代理使用强度，减少触发行为分析检测的概率。</li><li>即使配置完美的节点在敏感时期也可能被临时封锁。这通常不是永久性的——大多数因敏感时期而被封锁的 IP 会在事件结束后数天到数周内自动恢复。</li></ul><hr><h2 id="封锁类型"><a href="#封锁类型" class="headerlink" title="封锁类型"></a>封锁类型</h2><p>GFW 的封锁措施并非只有一种。了解不同的封锁类型，有助于你准确判断情况并采取正确的应对措施。</p><h3 id="IP-封锁"><a href="#IP-封锁" class="headerlink" title="IP 封锁"></a>IP 封锁</h3><p>最严厉的封锁方式。整个 IP 地址在所有端口上都被阻断，该服务器上的任何服务都无法从中国大陆访问。</p><ul><li>表现为：ping 不通、TCP 连接超时、traceroute 在国际出口处中断。</li><li>通常发生在 GFW 高度确认该 IP 运行代理服务之后。</li><li>恢复可能性低。唯一可靠的解决方案是更换服务器 IP。</li><li>部分 VPS 提供商允许免费更换 IP，但次数通常有限。</li></ul><h3 id="端口封锁"><a href="#端口封锁" class="headerlink" title="端口封锁"></a>端口封锁</h3><p>相对温和的封锁方式。GFW 只阻断特定 IP 上的特定端口，服务器在其他端口上仍然可达。</p><ul><li>表现为：代理连接失败，但可以通过其他端口 SSH 登录服务器。</li><li>通常发生在 GFW 识别到某个端口上的代理流量但尚未确认整个 IP 都用于代理时。</li><li>应对方式：将代理服务迁移到另一个端口。但要注意，频繁切换端口本身也可能被视为可疑行为。</li></ul><h3 id="临时封锁-vs-永久封锁"><a href="#临时封锁-vs-永久封锁" class="headerlink" title="临时封锁 vs 永久封锁"></a>临时封锁 vs 永久封锁</h3><ul><li><strong>临时封锁</strong>：持续数小时到数天，常见于敏感时期的大规模封锁。GFW 在特殊时段临时降低封锁阈值，事后恢复常规水平，被封锁的 IP 随之自动解除。没有明确的解封时间表——可能几小时就恢复，也可能持续数周。</li><li><strong>永久封锁</strong>：IP 被加入长期黑名单，不会自动恢复。通常发生在 IP 被反复确认用于代理服务之后。唯一的解决方案是更换 IP。</li><li><strong>无法预判类型</strong>：当你的 IP 被封时，无法提前知道这是临时还是永久封锁。一般建议等待 24-48 小时观察，如果仍未恢复则考虑更换 IP。</li></ul><h3 id="精准封锁-vs-范围封锁"><a href="#精准封锁-vs-范围封锁" class="headerlink" title="精准封锁 vs 范围封锁"></a>精准封锁 vs 范围封锁</h3><ul><li><strong>精准封锁</strong>：只封锁特定的单个 IP 地址。这是最常见的封锁方式，影响范围最小。</li><li><strong>范围封锁（子网封锁）</strong>：封锁整个 IP 子网段（如 &#x2F;24 段，即同一 C 段的 256 个 IP）。这种封锁方式影响范围更大，会殃及同一子网中与代理无关的 IP 地址。范围封锁通常发生在 GFW 判定某个 IP 段被代理用户大量使用时——与其逐个封锁，不如直接封锁整个段。这也是为什么选择代理用户过度集中的 VPS 提供商风险更高的原因之一。</li></ul><hr><h2 id="如何减少被封风险"><a href="#如何减少被封风险" class="headerlink" title="如何减少被封风险"></a>如何减少被封风险</h2><p>综合以上所有触发条件，以下是降低节点被封概率的实践建议：</p><p><strong>1. 使用 VLESS+Reality 并正确配置</strong></p><p>这是当前抗检测能力最强的协议组合。Reality 同时解决了 DPI 识别、TLS 指纹暴露和主动探测三个核心问题。配置时需要注意选择合适的目标网站（dest），确保其支持 TLS 1.3 和 HTTP&#x2F;2。</p><p><strong>2. 使用 443 端口</strong></p><p>443 是全球 HTTPS 流量的标准端口。你的代理流量在端口层面与海量正常 HTTPS 流量无法区分。使用非标准端口是不必要的风险。</p><p><strong>3. 选择信誉良好的服务器提供商</strong></p><p>避免使用以代理用户为主要客户群的提供商——如果一个提供商在中文社区以”适合翻墙”闻名，它的 IP 段大概率已被重点监控。选择面向正常业务的主流提供商（如部分非热门区域的 AWS、GCP 节点），虽然价格可能略高，但 IP 信誉更好。</p><p><strong>4. 不要裸跑协议</strong></p><p>任何代理协议都不应在没有适当伪装的情况下直接暴露在公网上。裸 VMess、旧版 Shadowsocks、未加密的 SOCKS5 等在当前环境下几乎等于直接告诉 GFW”请封我”。</p><p><strong>5. 控制单节点的带宽和使用时长</strong></p><p>避免长时间在单一节点上保持极高的带宽利用率。这种模式在流量行为分析中是强异常信号。如果需要高带宽使用（如下载大文件、长时间观看高清视频），尽量使用多节点轮换或中转线路来分散流量。</p><p><strong>6. 使用中转&#x2F;接入线路</strong></p><p>中转线路在你的设备和海外节点之间增加一个国内中转节点。从 GFW 的角度看，它只能观察到中转节点与海外节点之间的连接，而无法直接关联到你的家庭 IP。此外，中转节点通常是数据中心 IP，其上混杂着大量其他业务流量，代理流量更容易被”稀释”。</p><p><strong>7. 保持备用节点</strong></p><p>永远不要只依赖单一节点。准备至少一到两个备用节点（最好位于不同 IP 段、不同提供商、甚至不同国家），在主节点被封时可以立即切换。对于机场用户来说，这通常不是问题，因为机场本身会提供多个节点；对于自建用户，需要自己维护备用节点。</p><p><strong>8. 敏感时期降低使用强度</strong></p><p>在已知的敏感时期，适当降低代理使用的频率和带宽。如果不是必须，可以暂时减少不必要的跨境流量。这不是因为某个特定的操作会触发封锁，而是敏感时期的检测阈值整体偏低，任何轻微的异常都可能被放大。</p><hr><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="Q-被封了能解封吗？"><a href="#Q-被封了能解封吗？" class="headerlink" title="Q: 被封了能解封吗？"></a>Q: 被封了能解封吗？</h3><p>没有任何”申请解封”的途径。GFW 的封锁是由自动系统执行的，不存在人工审核或申诉渠道。唯一可靠的解决方案是更换 IP 地址。部分临时性封锁（特别是敏感时期的大范围封锁）会在数天到数周后自动解除。如果你的 IP 被封超过两周仍未恢复，基本可以判断为永久封锁，应当更换 IP。</p><h3 id="Q-自建节点和机场哪个更容易被封？"><a href="#Q-自建节点和机场哪个更容易被封？" class="headerlink" title="Q: 自建节点和机场哪个更容易被封？"></a>Q: 自建节点和机场哪个更容易被封？</h3><p>各有优劣，不能简单地说哪个更好。<strong>自建节点</strong>的优势在于只有你一个人使用，流量特征不明显，不存在因其他用户行为而被连坐的风险。劣势在于一旦被封，你需要自己处理——更换 IP、重新配置、重新部署，这需要技术能力和时间。<strong>机场</strong>的优势在于拥有大量节点和快速的 IP 轮换能力，单个节点被封不影响整体可用性。劣势在于共享 IP 的连坐风险——如果其他用户的不当行为（如大量 BT 下载、大流量视频）触发了 GFW 的检测，你的节点也会受到影响。</p><h3 id="Q-用了-Reality-就不会被封吗？"><a href="#Q-用了-Reality-就不会被封吗？" class="headerlink" title="Q: 用了 Reality 就不会被封吗？"></a>Q: 用了 Reality 就不会被封吗？</h3><p>Reality 极大降低了在协议层面被检测的风险——它解决了 DPI 识别、TLS 指纹异常和主动探测这三个最主要的技术层面触发条件。但它<strong>无法解决</strong>流量行为分析和 IP 信誉这两个维度的问题。如果你在一个已经被标记的 IP 上部署 Reality，或者你的使用模式表现出明显的异常特征（如长期高带宽连接单一海外 IP），仍然可能触发封锁。<strong>没有任何方案能提供百分之百的抗封锁保证</strong>——这是一场持续的攻防博弈，而非一劳永逸的技术方案。</p><h3 id="Q-为什么别人能用我不能用？"><a href="#Q-为什么别人能用我不能用？" class="headerlink" title="Q: 为什么别人能用我不能用？"></a>Q: 为什么别人能用我不能用？</h3><p>这种情况有多种可能的原因：</p><ul><li><strong>ISP 差异</strong>：不同运营商（中国电信、中国联通、中国移动）的检测力度和策略存在差异。某些运营商在某些地区的审查可能更严格。</li><li><strong>地区差异</strong>：不同省份和城市的 GFW 执行力度不同。一线城市和敏感地区的检测通常更严格。</li><li><strong>精准封锁</strong>：你的 IP 或端口被精准封锁，而不是该节点的所有用户都被封。不同用户经过的骨干网路径不同，可能只有经过特定路由节点的连接被阻断。</li><li><strong>DNS 差异</strong>：你的 DNS 配置可能存在泄露，而其他用户的配置没有这个问题。</li><li><strong>时间差异</strong>：GFW 的封锁不是瞬间全国生效的，可能存在地区性的时间差。你可能正好在封锁生效的窗口期，而其他用户还未受影响。</li></ul>]]></content>
      
      
      <categories>
          
          <category> GFW 与审查 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> IP </tag>
            
            <tag> 运维 </tag>
            
            <tag> 封锁 </tag>
            
            <tag> 协议检测 </tag>
            
            <tag> 触发条件 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>节点部署自动化：从手动到批量管理</title>
      <link href="/posts/node-deployment-automation/"/>
      <url>/posts/node-deployment-automation/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：当你的节点数量从 3 台增长到 30 台，手动 SSH 到每一台服务器上安装和配置后端的方式就不再可行。自动化部署不仅节省时间，更保证了一致性和快速恢复能力。本文从最简单的 Shell 脚本开始，逐步介绍 Docker、Ansible 和 cloud-init 等自动化方案，帮助你构建可维护的节点管理体系。</p></blockquote><hr><h2 id="为什么需要自动化部署"><a href="#为什么需要自动化部署" class="headerlink" title="为什么需要自动化部署"></a>为什么需要自动化部署</h2><h3 id="手动部署的致命缺陷"><a href="#手动部署的致命缺陷" class="headerlink" title="手动部署的致命缺陷"></a>手动部署的致命缺陷</h3><p>在只有两三个节点的时候，手动部署看似可以接受：SSH 登录服务器，执行一系列命令安装后端，编辑配置文件，然后启动服务。但随着节点数量增长，手动部署的问题会迅速暴露。</p><p><strong>一致性无法保证</strong>。当你手动操作 20 台服务器时，几乎不可能确保每一台的配置完全相同。一个遗漏的参数、一个版本差异，都可能导致特定节点行为异常。更糟糕的是，这些细微差异往往在出问题时才被发现，排查起来极其耗时。</p><p><strong>恢复速度慢</strong>。节点被封是常态——IP 被 GFW 封锁后，你需要更换 IP 并重新部署服务。如果每次恢复都需要手动操作 30 分钟到一个小时，那么在大规模封锁期间，你的服务恢复速度将严重滞后。</p><p><strong>人为错误风险高</strong>。重复性操作是人为错误的温床。在深夜维护时打错一个配置参数，可能导致整批节点无法使用，甚至暴露安全隐患。</p><p><strong>扩展困难</strong>。手动部署意味着每增加一台节点，就需要投入相同的时间成本。这使得快速扩容变得不现实——比如在特殊时期需要临时增加 50 个节点来分散风险时。</p><h3 id="自动化部署的核心价值"><a href="#自动化部署的核心价值" class="headerlink" title="自动化部署的核心价值"></a>自动化部署的核心价值</h3><p>自动化部署解决的不只是”省时间”的问题，它带来的核心价值包括：</p><ul><li><strong>可重复性</strong>：同一套脚本或配置，无论执行多少次、在多少台机器上执行，结果完全一致</li><li><strong>速度</strong>：批量部署 50 台节点的时间可以从一整天缩短到几分钟</li><li><strong>可审计性</strong>：所有配置变更都有记录，出问题时能快速定位原因</li><li><strong>快速恢复</strong>：节点被封后，更换 IP 再运行一次部署脚本即可，恢复时间从小时级缩短到分钟级</li></ul><hr><h2 id="方案一：Shell-脚本（最简单的起步）"><a href="#方案一：Shell-脚本（最简单的起步）" class="headerlink" title="方案一：Shell 脚本（最简单的起步）"></a>方案一：Shell 脚本（最简单的起步）</h2><p>Shell 脚本是自动化部署的最低门槛方案。它不需要额外学习任何工具，只需要把手动操作的命令串成一个脚本。</p><h3 id="基本思路"><a href="#基本思路" class="headerlink" title="基本思路"></a>基本思路</h3><p>将部署步骤编写为一个 Bash 脚本，然后通过 SSH 在远程服务器上执行。核心流程是：准备一个服务器 IP 列表，用循环逐一连接并执行部署脚本。</p><h3 id="实践示例：一键部署-Xray-XrayR"><a href="#实践示例：一键部署-Xray-XrayR" class="headerlink" title="实践示例：一键部署 Xray + XrayR"></a>实践示例：一键部署 Xray + XrayR</h3><p>以下是一个在全新 Debian&#x2F;Ubuntu 服务器上部署 Xray 和 <a href="https://github.com/XrayR-project/XrayR">XrayR</a> 后端的脚本框架：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/bash</span></span><br><span class="line"><span class="comment"># deploy.sh - 单台服务器部署脚本</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">set</span> -e</span><br><span class="line"></span><br><span class="line"><span class="comment"># 基础环境</span></span><br><span class="line">apt update &amp;&amp; apt install -y curl wget unzip socat</span><br><span class="line"></span><br><span class="line"><span class="comment"># 安装 Xray-core</span></span><br><span class="line">bash -c <span class="string">&quot;<span class="subst">$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)</span>&quot;</span> @ install</span><br><span class="line"></span><br><span class="line"><span class="comment"># 安装 XrayR</span></span><br><span class="line">wget -N https://github.com/XrayR-project/XrayR/releases/latest/download/XrayR-linux-64.zip</span><br><span class="line">unzip -o XrayR-linux-64.zip -d /usr/local/XrayR</span><br><span class="line"><span class="built_in">chmod</span> +x /usr/local/XrayR/XrayR</span><br><span class="line"></span><br><span class="line"><span class="comment"># 写入配置文件（从环境变量或参数获取面板地址和密钥）</span></span><br><span class="line"><span class="built_in">cat</span> &gt; /usr/local/XrayR/config.yml &lt;&lt;<span class="string">EOF</span></span><br><span class="line"><span class="string">Log:</span></span><br><span class="line"><span class="string">  Level: warning</span></span><br><span class="line"><span class="string">Nodes:</span></span><br><span class="line"><span class="string">  - PanelType: &quot;V2board&quot;</span></span><br><span class="line"><span class="string">    ApiHost: &quot;$&#123;PANEL_URL&#125;&quot;</span></span><br><span class="line"><span class="string">    ApiKey: &quot;$&#123;API_KEY&#125;&quot;</span></span><br><span class="line"><span class="string">    NodeID: $&#123;NODE_ID&#125;</span></span><br><span class="line"><span class="string">    NodeType: V2ray</span></span><br><span class="line"><span class="string">EOF</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 创建 systemd 服务</span></span><br><span class="line"><span class="built_in">cat</span> &gt; /etc/systemd/system/xrayr.service &lt;&lt;<span class="string">EOF</span></span><br><span class="line"><span class="string">[Unit]</span></span><br><span class="line"><span class="string">Description=XrayR Service</span></span><br><span class="line"><span class="string">After=network.target</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">[Service]</span></span><br><span class="line"><span class="string">Type=simple</span></span><br><span class="line"><span class="string">ExecStart=/usr/local/XrayR/XrayR -config /usr/local/XrayR/config.yml</span></span><br><span class="line"><span class="string">Restart=on-failure</span></span><br><span class="line"><span class="string">RestartSec=5s</span></span><br><span class="line"><span class="string"></span></span><br><span class="line"><span class="string">[Install]</span></span><br><span class="line"><span class="string">WantedBy=multi-user.target</span></span><br><span class="line"><span class="string">EOF</span></span><br><span class="line"></span><br><span class="line">systemctl daemon-reload</span><br><span class="line">systemctl <span class="built_in">enable</span> xrayr</span><br><span class="line">systemctl start xrayr</span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;部署完成，XrayR 已启动&quot;</span></span><br></pre></td></tr></table></figure><h3 id="批量执行"><a href="#批量执行" class="headerlink" title="批量执行"></a>批量执行</h3><p>配合一个 IP 列表文件，用简单的循环批量部署：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/bash</span></span><br><span class="line"><span class="comment"># batch_deploy.sh</span></span><br><span class="line"></span><br><span class="line">SERVER_LIST=<span class="string">&quot;servers.txt&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">while</span> IFS=<span class="string">&#x27;,&#x27;</span> <span class="built_in">read</span> -r ip node_id; <span class="keyword">do</span></span><br><span class="line">    <span class="built_in">echo</span> <span class="string">&quot;=== 正在部署 <span class="variable">$ip</span> (节点 <span class="variable">$node_id</span>) ===&quot;</span></span><br><span class="line">    scp deploy.sh root@<span class="variable">$ip</span>:/tmp/</span><br><span class="line">    ssh root@<span class="variable">$ip</span> <span class="string">&quot;PANEL_URL=&#x27;https://panel.example.com&#x27; \</span></span><br><span class="line"><span class="string">                   API_KEY=&#x27;your_api_key&#x27; \</span></span><br><span class="line"><span class="string">                   NODE_ID=<span class="variable">$node_id</span> \</span></span><br><span class="line"><span class="string">                   bash /tmp/deploy.sh&quot;</span></span><br><span class="line"><span class="keyword">done</span> &lt; <span class="string">&quot;<span class="variable">$SERVER_LIST</span>&quot;</span></span><br></pre></td></tr></table></figure><p>其中 <code>servers.txt</code> 的格式为：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">1.2.3.4,1</span><br><span class="line">5.6.7.8,2</span><br><span class="line">9.10.11.12,3</span><br></pre></td></tr></table></figure><h3 id="Shell-脚本方案的优缺点"><a href="#Shell-脚本方案的优缺点" class="headerlink" title="Shell 脚本方案的优缺点"></a>Shell 脚本方案的优缺点</h3><p><strong>优点</strong>：零学习成本，Linux 运维人员都能读懂和修改。</p><p><strong>缺点</strong>：没有幂等性保证（重复执行可能出错）；错误处理粗糙；不适合复杂的多环境配置管理；随着逻辑增多，脚本变得难以维护。</p><hr><h2 id="方案二：Docker（容器化部署）"><a href="#方案二：Docker（容器化部署）" class="headerlink" title="方案二：Docker（容器化部署）"></a>方案二：Docker（容器化部署）</h2><p>Docker 将应用及其依赖打包成容器镜像，确保在任何服务器上运行的结果完全一致。对于代理后端部署来说，Docker 的价值在于：环境隔离、版本管理清晰、更新回滚方便。</p><h3 id="使用-Docker-Compose-部署后端"><a href="#使用-Docker-Compose-部署后端" class="headerlink" title="使用 Docker Compose 部署后端"></a>使用 Docker Compose 部署后端</h3><p><a href="https://www.docker.com/">Docker</a> 容器化部署的核心是编写 <code>docker-compose.yml</code> 文件。以下是一个 <a href="https://github.com/InazumaV/V2bX">V2bX</a> 后端的 Docker Compose 示例：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">version:</span> <span class="string">&#x27;3.8&#x27;</span></span><br><span class="line"><span class="attr">services:</span></span><br><span class="line">  <span class="attr">v2bx:</span></span><br><span class="line">    <span class="attr">image:</span> <span class="string">ghcr.io/inazumav/v2bx:latest</span></span><br><span class="line">    <span class="attr">container_name:</span> <span class="string">v2bx</span></span><br><span class="line">    <span class="attr">restart:</span> <span class="string">always</span></span><br><span class="line">    <span class="attr">network_mode:</span> <span class="string">host</span></span><br><span class="line">    <span class="attr">volumes:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">./config.json:/etc/V2bX/config.json</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">./cert:/etc/V2bX/cert</span></span><br><span class="line">    <span class="attr">logging:</span></span><br><span class="line">      <span class="attr">driver:</span> <span class="string">json-file</span></span><br><span class="line">      <span class="attr">options:</span></span><br><span class="line">        <span class="attr">max-size:</span> <span class="string">&quot;10m&quot;</span></span><br><span class="line">        <span class="attr">max-file:</span> <span class="string">&quot;3&quot;</span></span><br></pre></td></tr></table></figure><h3 id="更新流程"><a href="#更新流程" class="headerlink" title="更新流程"></a>更新流程</h3><p>使用 Docker 后，节点更新变得极其简单：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 拉取最新镜像</span></span><br><span class="line">docker compose pull</span><br><span class="line"></span><br><span class="line"><span class="comment"># 重启服务（自动使用新镜像）</span></span><br><span class="line">docker compose up -d</span><br><span class="line"></span><br><span class="line"><span class="comment"># 如果新版本有问题，回滚到指定版本</span></span><br><span class="line">docker compose down</span><br><span class="line"><span class="comment"># 修改 docker-compose.yml 中的 image tag</span></span><br><span class="line">docker compose up -d</span><br></pre></td></tr></table></figure><h3 id="Docker-方案的优缺点"><a href="#Docker-方案的优缺点" class="headerlink" title="Docker 方案的优缺点"></a>Docker 方案的优缺点</h3><p><strong>优点</strong>：环境隔离彻底，不同后端互不干扰；版本管理清晰，镜像 tag 就是版本号；更新和回滚操作简洁；跨操作系统一致性好。</p><p><strong>缺点</strong>：需要先在每台服务器上安装 Docker（额外一步）；对网络模式有要求（代理后端通常需要 <code>network_mode: host</code>）；调试时需要了解 Docker 的日志查看和进入容器的方法。</p><hr><h2 id="方案三：Ansible（基础设施即代码）"><a href="#方案三：Ansible（基础设施即代码）" class="headerlink" title="方案三：Ansible（基础设施即代码）"></a>方案三：Ansible（基础设施即代码）</h2><p>当节点规模达到几十台以上，Ansible 成为最推荐的自动化方案。Ansible 是一个无代理（agentless）的 IT 自动化工具——它通过 SSH 连接到远程服务器执行操作，不需要在目标服务器上预装任何软件。</p><h3 id="核心概念"><a href="#核心概念" class="headerlink" title="核心概念"></a>核心概念</h3><ul><li><strong>Inventory（清单）</strong>：定义你的所有服务器及其分组</li><li><strong>Playbook（剧本）</strong>：用 YAML 描述要在服务器上执行的操作步骤</li><li><strong>Role（角色）</strong>：可复用的任务集合，比如”安装 Docker”、”部署 XrayR”各是一个角色</li><li><strong>Handler（处理器）</strong>：当配置变更时自动触发的动作，比如重启服务</li></ul><h3 id="Playbook-示例"><a href="#Playbook-示例" class="headerlink" title="Playbook 示例"></a>Playbook 示例</h3><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># deploy_node.yml</span></span><br><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="bullet">-</span> <span class="attr">name:</span> <span class="string">部署代理节点</span></span><br><span class="line">  <span class="attr">hosts:</span> <span class="string">proxy_nodes</span></span><br><span class="line">  <span class="attr">become:</span> <span class="literal">yes</span></span><br><span class="line">  <span class="attr">vars:</span></span><br><span class="line">    <span class="attr">panel_url:</span> <span class="string">&quot;https://panel.example.com&quot;</span></span><br><span class="line">    <span class="attr">api_key:</span> <span class="string">&quot;your_api_key&quot;</span></span><br><span class="line"></span><br><span class="line">  <span class="attr">tasks:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">更新系统包</span></span><br><span class="line">      <span class="attr">apt:</span></span><br><span class="line">        <span class="attr">update_cache:</span> <span class="literal">yes</span></span><br><span class="line">        <span class="attr">upgrade:</span> <span class="string">safe</span></span><br><span class="line"></span><br><span class="line">    <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">安装</span> <span class="string">Docker</span></span><br><span class="line">      <span class="attr">apt:</span></span><br><span class="line">        <span class="attr">name:</span></span><br><span class="line">          <span class="bullet">-</span> <span class="string">docker.io</span></span><br><span class="line">          <span class="bullet">-</span> <span class="string">docker-compose-plugin</span></span><br><span class="line">        <span class="attr">state:</span> <span class="string">present</span></span><br><span class="line"></span><br><span class="line">    <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">启动</span> <span class="string">Docker</span> <span class="string">服务</span></span><br><span class="line">      <span class="attr">systemd:</span></span><br><span class="line">        <span class="attr">name:</span> <span class="string">docker</span></span><br><span class="line">        <span class="attr">state:</span> <span class="string">started</span></span><br><span class="line">        <span class="attr">enabled:</span> <span class="literal">yes</span></span><br><span class="line"></span><br><span class="line">    <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">创建后端配置目录</span></span><br><span class="line">      <span class="attr">file:</span></span><br><span class="line">        <span class="attr">path:</span> <span class="string">/opt/proxy-backend</span></span><br><span class="line">        <span class="attr">state:</span> <span class="string">directory</span></span><br><span class="line">        <span class="attr">mode:</span> <span class="string">&#x27;0755&#x27;</span></span><br><span class="line"></span><br><span class="line">    <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">部署配置文件</span></span><br><span class="line">      <span class="attr">template:</span></span><br><span class="line">        <span class="attr">src:</span> <span class="string">templates/config.json.j2</span></span><br><span class="line">        <span class="attr">dest:</span> <span class="string">/opt/proxy-backend/config.json</span></span><br><span class="line">      <span class="attr">notify:</span> <span class="string">重启后端服务</span></span><br><span class="line"></span><br><span class="line">    <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">部署</span> <span class="string">docker-compose</span> <span class="string">文件</span></span><br><span class="line">      <span class="attr">template:</span></span><br><span class="line">        <span class="attr">src:</span> <span class="string">templates/docker-compose.yml.j2</span></span><br><span class="line">        <span class="attr">dest:</span> <span class="string">/opt/proxy-backend/docker-compose.yml</span></span><br><span class="line">      <span class="attr">notify:</span> <span class="string">重启后端服务</span></span><br><span class="line"></span><br><span class="line">  <span class="attr">handlers:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">重启后端服务</span></span><br><span class="line">      <span class="attr">shell:</span> <span class="string">cd</span> <span class="string">/opt/proxy-backend</span> <span class="string">&amp;&amp;</span> <span class="string">docker</span> <span class="string">compose</span> <span class="string">up</span> <span class="string">-d</span></span><br></pre></td></tr></table></figure><h3 id="Inventory-文件"><a href="#Inventory-文件" class="headerlink" title="Inventory 文件"></a>Inventory 文件</h3><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># inventory.ini</span></span><br><span class="line"><span class="section">[proxy_nodes]</span></span><br><span class="line">node-hk-1 <span class="attr">ansible_host</span>=<span class="number">1.2</span>.<span class="number">3.4</span> node_id=<span class="number">1</span></span><br><span class="line">node-hk-2 <span class="attr">ansible_host</span>=<span class="number">5.6</span>.<span class="number">7.8</span> node_id=<span class="number">2</span></span><br><span class="line">node-jp-1 <span class="attr">ansible_host</span>=<span class="number">9.10</span>.<span class="number">11.12</span> node_id=<span class="number">3</span></span><br><span class="line">node-sg-1 <span class="attr">ansible_host</span>=<span class="number">13.14</span>.<span class="number">15.16</span> node_id=<span class="number">4</span></span><br><span class="line"></span><br><span class="line"><span class="section">[proxy_nodes:vars]</span></span><br><span class="line"><span class="attr">ansible_user</span>=root</span><br><span class="line"><span class="attr">ansible_python_interpreter</span>=/usr/bin/python3</span><br></pre></td></tr></table></figure><h3 id="Ansible-方案的优缺点"><a href="#Ansible-方案的优缺点" class="headerlink" title="Ansible 方案的优缺点"></a>Ansible 方案的优缺点</h3><p><strong>优点</strong>：幂等性（重复执行不会产生副作用）；声明式配置，可读性高；支持变量、模板、条件判断等复杂逻辑；天然适合批量操作；版本控制友好（所有配置都是文本文件）。</p><p><strong>缺点</strong>：有学习曲线，需要理解 Ansible 的概念模型；对于只有几台节点的小规模场景可能显得过于复杂。</p><hr><h2 id="方案四：Cloud-Init-User-Data（创建即就绪）"><a href="#方案四：Cloud-Init-User-Data（创建即就绪）" class="headerlink" title="方案四：Cloud-Init &#x2F; User-Data（创建即就绪）"></a>方案四：Cloud-Init &#x2F; User-Data（创建即就绪）</h2><p>许多云服务商（如 DigitalOcean、Vultr、AWS 等）支持在创建 VPS 时通过 User-Data 脚本自动执行初始化操作。这意味着 VPS 创建完成时，代理后端已经部署好并运行。</p><h3 id="User-Data-脚本示例"><a href="#User-Data-脚本示例" class="headerlink" title="User-Data 脚本示例"></a>User-Data 脚本示例</h3><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#cloud-config</span></span><br><span class="line"><span class="attr">package_update:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr">packages:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">docker.io</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">docker-compose-plugin</span></span><br><span class="line"></span><br><span class="line"><span class="attr">runcmd:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">systemctl</span> <span class="string">enable</span> <span class="string">docker</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">systemctl</span> <span class="string">start</span> <span class="string">docker</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">mkdir</span> <span class="string">-p</span> <span class="string">/opt/proxy-backend</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">|</span></span><br><span class="line"><span class="string">    cat &gt; /opt/proxy-backend/docker-compose.yml &lt;&lt;&#x27;COMPOSE&#x27;</span></span><br><span class="line"><span class="string">    version: &#x27;3.8&#x27;</span></span><br><span class="line"><span class="string">    services:</span></span><br><span class="line"><span class="string">      v2bx:</span></span><br><span class="line"><span class="string">        image: ghcr.io/inazumav/v2bx:latest</span></span><br><span class="line"><span class="string">        restart: always</span></span><br><span class="line"><span class="string">        network_mode: host</span></span><br><span class="line"><span class="string">        volumes:</span></span><br><span class="line"><span class="string">          - ./config.json:/etc/V2bX/config.json</span></span><br><span class="line"><span class="string">    COMPOSE</span></span><br><span class="line"><span class="string"></span>  <span class="bullet">-</span> <span class="string">cd</span> <span class="string">/opt/proxy-backend</span> <span class="string">&amp;&amp;</span> <span class="string">docker</span> <span class="string">compose</span> <span class="string">up</span> <span class="string">-d</span></span><br></pre></td></tr></table></figure><p>这种方式特别适合与云服务商的 API 结合使用——通过 API 批量创建 VPS 时附带 User-Data，实现”一键开机即可用”的效果。</p><hr><h2 id="监控与运维保障"><a href="#监控与运维保障" class="headerlink" title="监控与运维保障"></a>监控与运维保障</h2><p>自动化部署只是第一步。部署完成后，持续的监控同样重要。</p><h3 id="存活检测"><a href="#存活检测" class="headerlink" title="存活检测"></a>存活检测</h3><p>最基本的监控是检查节点是否在线。可以通过以下几种方式实现：</p><ul><li><strong>TCP 端口检测</strong>：定期尝试连接节点的服务端口，确认端口可达</li><li><strong>HTTP 健康检查</strong>：如果后端提供了 API 接口，定期调用获取状态</li><li><strong>外部监控服务</strong>：使用 UptimeRobot 等第三方服务从多个地理位置检测节点可达性</li></ul><h3 id="流量监控"><a href="#流量监控" class="headerlink" title="流量监控"></a>流量监控</h3><p>通过面板（如 V2Board、AirGo 等）自带的流量统计功能，可以观察每个节点的流量趋势。流量突然下降可能意味着节点被封或线路出现问题，应及时排查。</p><h3 id="自动告警"><a href="#自动告警" class="headerlink" title="自动告警"></a>自动告警</h3><p>将监控与 Telegram Bot 结合，在节点离线或流量异常时自动发送告警通知，能大幅缩短问题发现时间。一个简单的告警脚本可以每分钟检查节点状态，异常时通过 Telegram API 发送消息。</p><hr><h2 id="方案选择建议"><a href="#方案选择建议" class="headerlink" title="方案选择建议"></a>方案选择建议</h2><p>不同规模的运营场景适合不同的自动化方案：</p><table><thead><tr><th>节点规模</th><th>推荐方案</th><th>理由</th></tr></thead><tbody><tr><td>1-5 台</td><td>Shell 脚本</td><td>简单直接，足够应对</td></tr><tr><td>5-20 台</td><td>Docker + Shell 脚本</td><td>Docker 确保一致性，脚本批量操作</td></tr><tr><td>20-100 台</td><td>Ansible + Docker</td><td>专业的配置管理，可维护性高</td></tr><tr><td>100+ 台</td><td>Ansible + Docker + CI&#x2F;CD</td><td>加入持续集成流水线，全面自动化</td></tr></tbody></table><hr><h2 id="常见问题（FAQ）"><a href="#常见问题（FAQ）" class="headerlink" title="常见问题（FAQ）"></a>常见问题（FAQ）</h2><h3 id="自动化部署是否意味着不需要了解手动部署？"><a href="#自动化部署是否意味着不需要了解手动部署？" class="headerlink" title="自动化部署是否意味着不需要了解手动部署？"></a>自动化部署是否意味着不需要了解手动部署？</h3><p>不是。自动化是手动流程的抽象和封装。编写自动化脚本之前，你必须完全理解手动部署的每一步——包括依赖安装、配置文件参数、服务管理方式等。只有在手动部署足够熟练后，才能写出可靠的自动化脚本。</p><h3 id="Docker-部署和裸机部署性能有差异吗？"><a href="#Docker-部署和裸机部署性能有差异吗？" class="headerlink" title="Docker 部署和裸机部署性能有差异吗？"></a>Docker 部署和裸机部署性能有差异吗？</h3><p>Docker 使用宿主机内核，网络使用 host 模式时几乎没有额外开销。对于代理后端来说，Docker 与裸机部署的性能差异在实际使用中基本不可感知。</p><h3 id="Ansible-需要在目标服务器上安装什么？"><a href="#Ansible-需要在目标服务器上安装什么？" class="headerlink" title="Ansible 需要在目标服务器上安装什么？"></a>Ansible 需要在目标服务器上安装什么？</h3><p>几乎不需要。Ansible 通过 SSH 连接到目标服务器，唯一的要求是目标服务器上有 Python 环境（大多数 Linux 发行版默认自带）。这也是 Ansible 被称为”无代理”（agentless）工具的原因。</p><h3 id="多个方案可以组合使用吗？"><a href="#多个方案可以组合使用吗？" class="headerlink" title="多个方案可以组合使用吗？"></a>多个方案可以组合使用吗？</h3><p>可以，而且推荐组合使用。典型的组合是：用 Ansible 管理服务器的基础环境和 Docker 安装，用 Docker Compose 管理后端应用的容器化部署。Ansible 负责”把服务器准备好”，Docker 负责”把应用跑起来”。</p><h3 id="自动化部署如何处理不同云服务商的差异？"><a href="#自动化部署如何处理不同云服务商的差异？" class="headerlink" title="自动化部署如何处理不同云服务商的差异？"></a>自动化部署如何处理不同云服务商的差异？</h3><p>Ansible 的 Inventory 文件可以按云服务商分组，不同组使用不同的变量。例如，某些云服务商的 VPS 默认使用 Ubuntu，另一些使用 Debian，可以通过条件判断适配。</p><h3 id="部署脚本中如何安全管理密钥和密码？"><a href="#部署脚本中如何安全管理密钥和密码？" class="headerlink" title="部署脚本中如何安全管理密钥和密码？"></a>部署脚本中如何安全管理密钥和密码？</h3><p>不要将 API Key、面板密码等敏感信息硬编码在脚本中。推荐做法是：使用环境变量传递敏感信息；或使用 Ansible Vault 加密存储；或使用独立的密钥管理服务。</p><hr><h2 id="外部参考"><a href="#外部参考" class="headerlink" title="外部参考"></a>外部参考</h2><ul><li><a href="https://github.com/XrayR-project/XrayR">XrayR - 开源代理后端</a></li><li><a href="https://github.com/InazumaV/V2bX">V2bX - 多协议代理后端</a></li><li><a href="https://www.docker.com/">Docker 官方文档</a></li><li><a href="https://docs.ansible.com/">Ansible 官方文档</a></li><li><a href="https://github.com/XTLS/Xray-core">Xray-core 项目</a></li></ul>]]></content>
      
      
      <categories>
          
          <category> 运营与架构 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> 运维 </tag>
            
            <tag> 部署 </tag>
            
            <tag> 自动化 </tag>
            
            <tag> Ansible </tag>
            
            <tag> Docker </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>机场面板系统对比：V2Board / Xboard / SSPanel</title>
      <link href="/posts/panel-comparison/"/>
      <url>/posts/panel-comparison/</url>
      
        <content type="html"><![CDATA[<h2 id="什么是机场面板"><a href="#什么是机场面板" class="headerlink" title="什么是机场面板"></a>什么是机场面板</h2><p>如果你计划搭建一个代理服务（俗称”机场”），那你面对的第一个核心问题就是：<strong>选择哪个面板系统</strong>。</p><p>所谓面板（Panel），就是整个代理服务的<strong>管理后台系统</strong>。它不是代理协议本身，也不是节点上跑的后端程序，而是把一堆分散的代理服务器组织成一个<strong>可用的、可运营的服务</strong>的那个中枢。</p><p>一个面板系统通常需要处理以下核心功能：</p><ul><li><strong>用户注册与认证</strong>：用户通过网页注册、登录，管理自己的账号。</li><li><strong>订阅管理</strong>：用户购买套餐后获取订阅链接，客户端通过订阅链接自动获取节点配置。</li><li><strong>支付系统</strong>：集成支付宝、微信支付、USDT 等支付方式，处理订单和续费。</li><li><strong>节点管理</strong>：管理员在面板中添加、编辑、上下线代理节点，配置协议和参数。</li><li><strong>流量统计</strong>：记录每个用户的流量使用情况，按套餐进行限额。</li><li><strong>工单系统</strong>：用户遇到问题可以提交工单，管理员在后台处理。</li><li><strong>公告与通知</strong>：向用户发布维护公告、促销信息等。</li></ul><p>简而言之，用户看到的那个网站界面——注册、购买套餐、获取订阅链接、查看流量用量——背后就是面板系统在运作。没有面板，你就只有一堆裸的代理服务器，用户无法自助使用，你也无法规模化运营。</p><hr><h2 id="主流面板对比"><a href="#主流面板对比" class="headerlink" title="主流面板对比"></a>主流面板对比</h2><p>当前市面上最主流的面板系统有三个：<strong>V2Board</strong>、<strong>Xboard</strong> 和 <strong>SSPanel-UIM</strong>。它们都是开源项目，基于 PHP 开发，但在设计理念、维护状态和功能细节上有着明显的差异。</p><h3 id="V2Board"><a href="#V2Board" class="headerlink" title="V2Board"></a>V2Board</h3><p>V2Board 是过去几年中<strong>最流行的机场面板</strong>之一，由开发者 Tobe 创建。它基于 <strong>PHP + Laravel</strong> 框架开发，凭借清晰的架构和相对完善的功能，迅速成为大量机场主的首选。</p><p><strong>核心功能：</strong></p><ul><li>完整的用户管理系统（注册、登录、个人中心）</li><li>订单与支付系统（支持支付宝、微信、USDT 等）</li><li>节点管理（支持 Shadowsocks、VMess、Trojan、VLESS 等协议）</li><li>流量统计与限额</li><li>工单系统</li><li>邀请返利机制</li><li>公告系统</li></ul><p><strong>优势：</strong></p><ul><li>成熟度高，经过大量实际部署验证</li><li>社区庞大，网上教程和部署指南非常丰富</li><li>第三方主题和插件较多</li><li>学习成本相对较低，新手容易上手</li></ul><p><strong>劣势：</strong></p><ul><li>原版开发已基本停滞，Tobe 不再活跃维护</li><li>PHP 在高并发场景下性能存在瓶颈</li><li>部分版本存在已知的安全漏洞</li><li>缺乏持续的功能更新和 bug 修复</li><li>出现过多个分支版本，生态碎片化</li></ul><p>V2Board 的历史地位毋庸置疑，但由于原版开发停滞，<strong>不建议新项目继续使用原版 V2Board</strong>。</p><h3 id="Xboard"><a href="#Xboard" class="headerlink" title="Xboard"></a>Xboard</h3><p>Xboard 是 V2Board 的<strong>社区分支和演进版本</strong>，由 cedar2025 等社区开发者基于 V2Board 进行大幅改进后推出。它同样基于 <strong>PHP + Laravel</strong>，但在多个维度上进行了显著的提升。</p><p><strong>相较于 V2Board 的关键改进：</strong></p><ul><li><strong>性能优化</strong>：对数据库查询、缓存策略进行了优化，在用户量较大时表现更好。</li><li><strong>安全加固</strong>：修复了 V2Board 中已知的安全问题，加强了 API 安全性。</li><li><strong>现代化 UI</strong>：前端界面重新设计，视觉体验更好，操作更直观。</li><li><strong>API 改进</strong>：后端 API 设计更规范，方便对接第三方工具和自动化。</li><li><strong>协议支持</strong>：除了 Shadowsocks、VMess、Trojan、VLESS 之外，还增加了对 <strong>Hysteria2</strong> 等新协议的支持。</li><li><strong>活跃维护</strong>：社区持续提交代码、修复 bug、发布更新。</li></ul><p><strong>优势：</strong></p><ul><li>当前最活跃的面板项目，功能持续迭代</li><li>继承了 V2Board 的社区知识和生态，迁移成本低</li><li>文档和教程逐步完善</li><li>Docker 部署支持良好</li><li>支持更多支付方式和协议</li></ul><p><strong>劣势：</strong></p><ul><li>作为社区分支项目，长期维护的可持续性取决于社区活跃度</li><li>部分高级功能的文档仍在完善中</li></ul><p><strong><a href="https://github.com/cedar2025/Xboard">Xboard</a> 是当前新建机场的首选面板</strong>，也是从 V2Board 迁移的最佳目标。</p><p><img src="/images/inline/xboard-dashboard.webp" alt="Xboard 面板管理界面"><br><em>图片来源：<a href="https://www.mubea.com/">Mubea</a></em></p><p><img src="/images/inline/xboard-admin.png" alt="Xboard 管理后台界面"><br><em>图片来源：<a href="https://github.com/cedar2025/Xboard">Xboard GitHub</a></em></p><p><img src="/images/inline/xboard-user.png" alt="Xboard 用户界面"><br><em>图片来源：<a href="https://github.com/cedar2025/Xboard">Xboard GitHub</a></em></p><h3 id="SSPanel-UIM"><a href="#SSPanel-UIM" class="headerlink" title="SSPanel-UIM"></a>SSPanel-UIM</h3><p><a href="https://github.com/anankke/sspanel-uim">SSPanel-UIM</a> 是另一个历史悠久的机场面板系统，与 V2Board 属于<strong>完全不同的代码库</strong>。它同样基于 PHP 开发，拥有自己独立的生态系统。</p><p><strong>核心功能：</strong></p><p>SSPanel-UIM 的核心功能与 V2Board&#x2F;Xboard 类似，包括用户管理、订阅系统、支付集成、节点管理、流量统计、工单系统等。它的功能覆盖面同样全面，能满足机场运营的基本需求。</p><p><strong>优势：</strong></p><ul><li>项目历史悠久，代码经过长期迭代，核心功能稳定</li><li>拥有独立的插件生态系统</li><li>社区有一定规模</li></ul><p><strong>劣势：</strong></p><ul><li>UI 设计相对老旧，与 Xboard 的现代界面相比有差距</li><li>开发节奏不稳定，时而活跃时而沉寂</li><li>新协议支持速度相对较慢</li><li>如果你之前没有用过 SSPanel，从零开始的学习成本不比 Xboard 低</li></ul><p>SSPanel-UIM 更适合<strong>已经在使用它的运营者继续使用</strong>，对于新项目来说，Xboard 通常是更好的选择。</p><h3 id="其他值得关注的面板"><a href="#其他值得关注的面板" class="headerlink" title="其他值得关注的面板"></a>其他值得关注的面板</h3><p>除了上述三个主流面板，近年来还涌现了一批新的面板项目：</p><p><strong><a href="https://github.com/ppoonk/AirGo">AirGo</a></strong>：基于 Go 语言开发的轻量级面板，前后端分离架构，部署简单，适合小型机场。支持 Xray、Hysteria2 等协议，界面简洁现代。</p><p><strong><a href="https://github.com/gozargah/marzban">Marzban</a></strong>：基于 Python 的代理面板，支持 Xray-core 后端，提供 REST API 和 Web UI。对 Docker 支持良好，适合个人和小团队使用。</p><p><strong><a href="https://github.com/hiddify/hiddifypanel">Hiddify</a></strong>：面向伊朗和中东用户的代理面板，支持多种协议，提供一键安装脚本，国际化做得较好。</p><p><strong><a href="https://github.com/The-NeXT-Project/NeXT-Panel">NeXT Panel</a></strong>：新一代面板项目，尝试用更现代的技术栈重构面板体验。</p><p><strong><a href="https://github.com/perfect-panel">PPPanel</a></strong>：另一个新兴面板项目，关注度逐步上升。</p><blockquote><p>面板生态变化很快，选择时优先考虑：开发活跃度、社区支持、文档完善程度。不要追新——一个维护了两年的面板比一个上线一个月的”更好的”面板可靠得多。</p></blockquote><p>需要注意的是，<strong><a href="https://github.com/InazumaV/V2bX">V2bX</a></strong> 并不是一个面板，而是一个<strong>节点后端程序</strong>，用于在代理服务器上运行，通过 API 与面板（V2Board &#x2F; Xboard）通信。后文会详细说明面板与节点后端的关系。</p><hr><h2 id="功能对比表"><a href="#功能对比表" class="headerlink" title="功能对比表"></a>功能对比表</h2><p>下表对三大主流面板的关键功能进行横向对比：</p><table><thead><tr><th>功能</th><th>V2Board</th><th>Xboard</th><th>SSPanel-UIM</th></tr></thead><tbody><tr><td>用户管理</td><td>✅</td><td>✅</td><td>✅</td></tr><tr><td>订阅系统</td><td>✅</td><td>✅</td><td>✅</td></tr><tr><td>支付集成</td><td>支付宝&#x2F;微信&#x2F;USDT</td><td>支付宝&#x2F;微信&#x2F;USDT&#x2F;更多</td><td>支付宝&#x2F;微信&#x2F;USDT</td></tr><tr><td>节点管理</td><td>✅</td><td>✅ 增强</td><td>✅</td></tr><tr><td>流量统计</td><td>✅</td><td>✅ 更详细</td><td>✅</td></tr><tr><td>工单系统</td><td>✅</td><td>✅</td><td>✅</td></tr><tr><td>多协议支持</td><td>SS&#x2F;VMess&#x2F;Trojan&#x2F;VLESS</td><td>SS&#x2F;VMess&#x2F;Trojan&#x2F;VLESS&#x2F;Hysteria2</td><td>SS&#x2F;VMess&#x2F;Trojan&#x2F;VLESS</td></tr><tr><td>公告系统</td><td>✅</td><td>✅</td><td>✅</td></tr><tr><td>邀请返利</td><td>✅</td><td>✅</td><td>✅</td></tr><tr><td>API 接口</td><td>✅</td><td>✅ 改进</td><td>✅</td></tr><tr><td>主题&#x2F;UI</td><td>中等</td><td>较好</td><td>中等</td></tr><tr><td>开发活跃度</td><td>低</td><td>高</td><td>中</td></tr><tr><td>部署难度</td><td>中</td><td>中</td><td>中</td></tr></tbody></table><p>从表中可以看出，三者的核心功能高度重合，差异主要体现在<strong>开发活跃度、UI 现代化程度、新协议支持速度</strong>这些方面。Xboard 在综合维度上领先。</p><hr><h2 id="节点后端"><a href="#节点后端" class="headerlink" title="节点后端"></a>节点后端</h2><p>面板负责用户管理和业务逻辑，但实际处理代理流量的是运行在每台节点服务器上的<strong>后端程序</strong>。后端通过 API 与面板通信，获取用户列表、上报流量数据。</p><h3 id="主流后端"><a href="#主流后端" class="headerlink" title="主流后端"></a>主流后端</h3><p><strong><a href="https://github.com/XrayR-project/XrayR">XrayR</a></strong>：目前最流行的节点后端，支持 V2Board、Xboard、SSPanel 等多种面板。基于 Xray-core，支持 VLESS、VMess、Trojan、Shadowsocks 等协议。部署简单，社区活跃。</p><p><strong><a href="https://github.com/InazumaV/V2bX">V2bX</a></strong>：新一代后端，同样支持多面板对接。相比 XrayR，V2bX 支持更多协议（包括 Hysteria2），架构更现代。</p><p><strong><a href="https://github.com/vaxilu/soga">soga</a></strong>：高性能后端，用 Go 编写。支持 SSPanel 和 V2Board，以性能优化著称，但部分功能需要付费授权。</p><p><strong><a href="https://github.com/RuruuKo/Air-Universe">Air-Universe</a></strong>：支持多种面板的后端，特点是支持 Xray 和 sing-box 双核心切换。</p><p><strong><a href="https://github.com/cedar2025/Xboard-Node">Xboard-Node</a></strong>：Xboard 官方配套的节点后端，与 Xboard 面板集成度最高。</p><h3 id="后端选择建议"><a href="#后端选择建议" class="headerlink" title="后端选择建议"></a>后端选择建议</h3><table><thead><tr><th>后端</th><th>支持面板</th><th>协议支持</th><th>特点</th></tr></thead><tbody><tr><td><a href="https://github.com/XrayR-project/XrayR">XrayR</a></td><td>Xboard&#x2F;V2Board&#x2F;SSPanel</td><td>VLESS&#x2F;VMess&#x2F;Trojan&#x2F;SS</td><td>最成熟，社区最大</td></tr><tr><td><a href="https://github.com/InazumaV/V2bX">V2bX</a></td><td>Xboard&#x2F;V2Board&#x2F;SSPanel</td><td>+Hysteria2</td><td>更新更全</td></tr><tr><td><a href="https://github.com/vaxilu/soga">soga</a></td><td>V2Board&#x2F;SSPanel</td><td>VLESS&#x2F;VMess&#x2F;Trojan&#x2F;SS</td><td>高性能，部分付费</td></tr><tr><td><a href="https://github.com/RuruuKo/Air-Universe">Air-Universe</a></td><td>多面板</td><td>Xray+sing-box</td><td>双核心</td></tr><tr><td><a href="https://github.com/cedar2025/Xboard-Node">Xboard-Node</a></td><td>Xboard</td><td>跟随Xboard</td><td>官方配套</td></tr></tbody></table><p>新手推荐 <strong>XrayR</strong>（最多教程和社区支持），追求新协议支持选 <strong>V2bX</strong>。</p><hr><h2 id="如何选择"><a href="#如何选择" class="headerlink" title="如何选择"></a>如何选择</h2><h3 id="新手首次搭建"><a href="#新手首次搭建" class="headerlink" title="新手首次搭建"></a>新手首次搭建</h3><p>如果你是第一次搭建机场，<strong>推荐选择 Xboard</strong>。理由：</p><ul><li>开发最活跃，遇到 bug 能更快得到修复</li><li>继承了 V2Board 的庞大社区知识，网上的 V2Board 教程大部分可以参考</li><li>Docker 部署方案成熟，降低了运维难度</li><li>对新协议的支持最快</li></ul><h3 id="从-V2Board-迁移"><a href="#从-V2Board-迁移" class="headerlink" title="从 V2Board 迁移"></a>从 V2Board 迁移</h3><p>如果你当前使用的是 V2Board，<strong>强烈建议迁移到 Xboard</strong>。Xboard 本身就是 V2Board 的继任者，提供了迁移路径，数据库结构兼容性好，迁移成本相对较低。继续使用已停止维护的原版 V2Board 会面临安全风险和功能停滞。</p><h3 id="已有-SSPanel-运营"><a href="#已有-SSPanel-运营" class="headerlink" title="已有 SSPanel 运营"></a>已有 SSPanel 运营</h3><p>如果你已经在稳定运营 SSPanel-UIM，且没有遇到严重的功能限制，可以<strong>继续使用</strong>。SSPanel 的核心功能是完善的，没有必要为了追新而承担迁移风险。但如果你遇到了 SSPanel 的瓶颈（比如对新协议的需求、UI 改进的需求），那么下一步可以考虑 Xboard。</p><hr><h2 id="搭建简要流程（以-Xboard-为例）"><a href="#搭建简要流程（以-Xboard-为例）" class="headerlink" title="搭建简要流程（以 Xboard 为例）"></a>搭建简要流程（以 Xboard 为例）</h2><p>以下是使用 Xboard 搭建一个完整机场服务的简要流程：</p><h3 id="1-准备工作"><a href="#1-准备工作" class="headerlink" title="1. 准备工作"></a>1. 准备工作</h3><ul><li>一台 VPS 用于运行面板（建议 1 核 1G 以上，安装 Docker）</li><li>一个域名（用于面板的 Web 访问地址）</li><li>域名解析到面板服务器 IP</li><li>准备 SSL 证书（可用 Certbot 自动获取 Let’s Encrypt 证书）</li></ul><h3 id="2-部署-Xboard"><a href="#2-部署-Xboard" class="headerlink" title="2. 部署 Xboard"></a>2. 部署 Xboard</h3><p>推荐使用 Docker Compose 方式部署。大致步骤：</p><ul><li>克隆 Xboard 仓库</li><li>编辑 <code>.env</code> 文件，配置数据库、Redis、站点域名等参数</li><li>运行 <code>docker compose up -d</code> 启动服务</li><li>访问域名，按照向导完成初始化设置（创建管理员账号等）</li></ul><h3 id="3-配置支付网关"><a href="#3-配置支付网关" class="headerlink" title="3. 配置支付网关"></a>3. 配置支付网关</h3><p>在面板后台配置支付方式。常见选择：</p><ul><li>支付宝（通过第三方支付接口，如易支付）</li><li>微信支付</li><li>USDT（加密货币支付）</li><li>其他第三方支付平台</li></ul><h3 id="4-添加代理节点"><a href="#4-添加代理节点" class="headerlink" title="4. 添加代理节点"></a>4. 添加代理节点</h3><ul><li>在另外的 VPS 上安装节点后端（如 XrayR）</li><li>在面板后台添加节点，获取 API 对接信息</li><li>在节点服务器上配置 XrayR，填入 API 地址和密钥</li><li>验证节点与面板的连接是否正常</li></ul><h3 id="5-配置订阅模板"><a href="#5-配置订阅模板" class="headerlink" title="5. 配置订阅模板"></a>5. 配置订阅模板</h3><p>设置订阅链接的格式和内容，确保各种客户端能正确解析。</p><h3 id="6-设置套餐和定价"><a href="#6-设置套餐和定价" class="headerlink" title="6. 设置套餐和定价"></a>6. 设置套餐和定价</h3><p>在面板后台创建不同等级的套餐计划，设定价格、流量限额、可用节点范围等。</p><h3 id="7-全流程测试"><a href="#7-全流程测试" class="headerlink" title="7. 全流程测试"></a>7. 全流程测试</h3><p>完成一个完整的用户流程测试：注册账号 → 购买套餐 → 获取订阅链接 → 在客户端导入订阅 → 连接节点 → 验证可以正常上网。</p><hr><h2 id="选择面板后的关键决策"><a href="#选择面板后的关键决策" class="headerlink" title="选择面板后的关键决策"></a>选择面板后的关键决策</h2><p>面板只是第一步。选定面板之后，你需要做出另一个至关重要的架构决策：<strong>直连还是中转</strong>。这两种架构代表着完全不同的运营策略、成本结构和用户体验。</p><p>关于线路类型（直连、中转、IPLC）的详细对比，参见 <a href="/posts/line-types-explained/">机场线路类型详解</a>。关于节点池架构的设计思路，参见 <a href="/posts/node-pool-architecture/">节点池架构与负载均衡</a>。</p><h3 id="直连-vs-中转：两种完全不同的策略"><a href="#直连-vs-中转：两种完全不同的策略" class="headerlink" title="直连 vs 中转：两种完全不同的策略"></a>直连 vs 中转：两种完全不同的策略</h3><h4 id="直连架构"><a href="#直连架构" class="headerlink" title="直连架构"></a>直连架构</h4><p>直连架构的数据流是：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">用户设备 → 海外代理服务器（落地服务器）</span><br></pre></td></tr></table></figure><p>在直连架构下：</p><ul><li>用户直接连接到海外的代理服务器，中间没有任何中继</li><li>节点服务器就是落地服务器，用户直连它的 IP</li><li><strong>服务器选择的核心指标是线路质量</strong>——即从中国大陆到该服务器的网络路由是否优化</li><li>需要选择提供优质回国线路的 VPS 供应商，例如 DMIT（CN2 GIA 线路）、BandwagonHost（CN2 GIA）、Akile 等</li><li>如果 IP 被封，用户就无法连接，需要更换服务器 IP 或换一台新服务器</li><li>相对成本较低，但 IP 管理的运维成本较高</li></ul><p><strong>适合场景</strong>：小型服务、预算有限的运营者、个人自用。</p><h4 id="中转架构"><a href="#中转架构" class="headerlink" title="中转架构"></a>中转架构</h4><p>中转架构的数据流是：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">用户设备 → 国内/近端中转服务器 → 海外落地服务器</span><br></pre></td></tr></table></figure><p>在中转架构下：</p><ul><li>用户连接的是中转服务器（入口服务器），而不是直接连接海外落地服务器</li><li>入口服务器和落地服务器是<strong>分离的两台服务器</strong></li><li><strong>落地服务器不需要优质线路</strong>，因为线路质量由中转链路决定。所以落地可以选择任何便宜的大带宽 VPS，如 OVH、Hetzner、Contabo 等</li><li>中转&#x2F;入口服务器负责保证线路质量，通常使用国内服务器或优质近端线路</li><li><strong>抗封锁能力强</strong>：落地 IP 被封？换一台便宜落地就行，用户侧的入口 IP 不变，用户无感知</li><li>成本更高（同时需要中转服务器和落地服务器）</li></ul><p><strong>适合场景</strong>：中大型服务、追求稳定性的运营者。</p><h4 id="成本对比"><a href="#成本对比" class="headerlink" title="成本对比"></a>成本对比</h4><table><thead><tr><th>项目</th><th>直连</th><th>中转</th></tr></thead><tbody><tr><td>落地服务器选择</td><td>需要好线路（贵）</td><td>随意（便宜大流量即可）</td></tr><tr><td>中转服务器</td><td>不需要</td><td>需要（国内或近端）</td></tr><tr><td>单节点月成本</td><td>$5-30</td><td>$3-10（落地）+ $20-100（中转）</td></tr><tr><td>IP 被封影响</td><td>用户需更新订阅</td><td>对用户透明</td></tr><tr><td>扩展难度</td><td>每加一个地区需好线路</td><td>落地随意加，共用中转</td></tr></tbody></table><p>实际运营中，<strong>两者可以混合使用</strong>。很多机场同时提供直连节点和中转节点，通过<strong>倍率</strong>来区分：直连节点设低倍率（价格便宜但线路不稳定），中转节点设高倍率（价格贵但稳定快速）。用户可以根据自己的需求选择。</p><h3 id="国外中转的可能性"><a href="#国外中转的可能性" class="headerlink" title="国外中转的可能性"></a>国外中转的可能性</h3><p>除了传统的国内中转方案之外，一些运营者也在探索使用国外云服务商作为中转的可能性。</p><h4 id="使用-AWS-GCP-Azure-作为中转"><a href="#使用-AWS-GCP-Azure-作为中转" class="headerlink" title="使用 AWS &#x2F; GCP &#x2F; Azure 作为中转"></a>使用 AWS &#x2F; GCP &#x2F; Azure 作为中转</h4><p>大型云服务商拥有企业级的全球骨干网络：</p><ul><li><strong><a href="https://aws.amazon.com/">AWS</a> Global Accelerator</strong>、<strong><a href="https://cloud.google.com/">GCP</a> Premium Tier</strong> 等产品提供了优化的全球路由</li><li>理论上可以作为用户和落地服务器之间的中继层</li><li><strong>优点</strong>：网络质量极高，全球覆盖，企业级稳定性</li><li><strong>缺点</strong>：带宽成本非常昂贵。AWS 的出站流量大约 $0.09&#x2F;GB，GCP 大约 $0.08&#x2F;GB，大规模使用成本极高</li><li>可能违反云服务商的使用条款（ToS），存在账号被封的风险</li><li>部署和配置的复杂度也较高</li></ul><p><strong>实际适用场景</strong>：小规模个人使用、紧急备用线路。在规模化运营中，专用的中转服务器或 IPLC 专线方案的性价比远高于云服务商。</p><h4 id="使用-Cloudflare-作为中转"><a href="#使用-Cloudflare-作为中转" class="headerlink" title="使用 Cloudflare 作为中转"></a>使用 Cloudflare 作为中转</h4><p><a href="https://www.cloudflare.com/">Cloudflare</a> 的 CDN 和 Workers 可以通过 WebSocket 协议中转代理流量：</p><ul><li><strong>优点</strong>：免费层即可使用，抗封锁能力极强（Cloudflare 的 IP 范围极大，很难被整体封锁）</li><li><strong>缺点</strong>：速度受限、延迟较高、分配到的 IP 质量参差不齐</li><li>免费层有请求数和带宽的隐性限制</li></ul><p><strong>实际定位</strong>：适合作为<strong>紧急备用通道</strong>，而非主力线路。当其他所有线路都不可用时，Cloudflare 中转可以保证基本的连通性，但用户体验（速度、延迟）通常不如专用线路。</p><hr><h2 id="FAQ"><a href="#FAQ" class="headerlink" title="FAQ"></a>FAQ</h2><h3 id="Q：从零搭建一个机场大概需要多少投入？"><a href="#Q：从零搭建一个机场大概需要多少投入？" class="headerlink" title="Q：从零搭建一个机场大概需要多少投入？"></a>Q：从零搭建一个机场大概需要多少投入？</h3><p><strong>最低投入：</strong></p><ul><li>面板服务器：约 $5&#x2F;月（1 核 1G VPS 即可）</li><li>落地服务器：1-3 台，每台约 $5-15&#x2F;月</li><li>域名：约 $10&#x2F;年</li></ul><p>总计最低约 <strong>$20-30&#x2F;月</strong> 即可启动一个基本的直连架构机场。</p><p>如果采用中转架构，需要额外增加中转服务器的成本，大约 <strong>$20-100&#x2F;月</strong>，具体取决于中转线路的类型和带宽。</p><h3 id="Q：面板可以自己开发吗？"><a href="#Q：面板可以自己开发吗？" class="headerlink" title="Q：面板可以自己开发吗？"></a>Q：面板可以自己开发吗？</h3><p>技术上当然可以，但<strong>强烈不推荐</strong>。一个面板系统涉及支付安全、用户认证、数据保护、API 设计、前端交互等多个复杂领域，自研的开发成本和维护成本极高。使用成熟的开源面板是更理性的选择——它们已经经过大量实际部署的验证，社区也在持续修复安全漏洞。把精力花在运营、线路优化和用户服务上，远比重复造轮子有价值。</p><h3 id="Q：运营机场有法律风险吗？"><a href="#Q：运营机场有法律风险吗？" class="headerlink" title="Q：运营机场有法律风险吗？"></a>Q：运营机场有法律风险吗？</h3><p>在中国大陆，未经电信主管部门批准，擅自经营 VPN 或代理服务属于<strong>违法行为</strong>，可能面临行政处罚甚至刑事责任。这是一个严肃的法律问题，不是技术问题可以绕过的。任何人在决定是否运营此类服务前，都需要充分了解并自行评估相关的法律风险。本文仅从技术角度讨论面板系统的选择，不构成任何法律建议或鼓励。</p><h3 id="Q：直连和中转可以混合使用吗？"><a href="#Q：直连和中转可以混合使用吗？" class="headerlink" title="Q：直连和中转可以混合使用吗？"></a>Q：直连和中转可以混合使用吗？</h3><p>完全可以，而且这是很多机场的常见做法。典型的策略是：</p><ul><li><strong>直连节点</strong>设置低倍率（如 0.5x 或 1x），用的是相对便宜的线路，速度和稳定性一般</li><li><strong>中转节点</strong>设置高倍率（如 2x 或 3x），使用优质中转线路，速度快、延迟低、稳定性好</li><li>用户根据自己的需求和套餐余量自由选择</li></ul><p>这种混合模式既降低了运营成本，又为愿意多付费的用户提供了更好的体验。</p><h3 id="Q：面板部署后如何保障安全？"><a href="#Q：面板部署后如何保障安全？" class="headerlink" title="Q：面板部署后如何保障安全？"></a>Q：面板部署后如何保障安全？</h3><p>几个基本的安全实践：</p><ul><li>面板服务器开启防火墙，仅开放必要端口</li><li>使用 HTTPS（SSL 证书）加密面板访问</li><li>定期更新面板和系统组件，修补已知漏洞</li><li>数据库定期备份</li><li>管理员密码使用强密码</li><li>如有条件，面板服务器与节点服务器网络隔离</li></ul><hr><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>选择面板系统是搭建机场的第一步，也是决定后续运维体验的关键决策。综合来看：</p><ul><li><strong>新项目首选 Xboard</strong>——活跃开发、功能完善、社区支持好</li><li><strong>V2Board 用户应迁移至 Xboard</strong>——继承兼容、原版已停止维护</li><li><strong>SSPanel 用户按需决定</strong>——稳定运行则继续，遇到瓶颈则考虑切换</li></ul><p>面板之外，直连与中转的架构选择同样重要。小规模可以从直连起步，随着用户量增长再逐步引入中转。两种模式也可以并存，用倍率机制让用户自行选择。</p><p>技术选型没有绝对的对错，关键是根据你的实际情况——预算、技术能力、预期规模——做出最适合自己的选择。</p>]]></content>
      
      
      <categories>
          
          <category> 运营与架构 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> 面板 </tag>
            
            <tag> V2Board </tag>
            
            <tag> Xboard </tag>
            
            <tag> SSPanel </tag>
            
            <tag> 机场搭建 </tag>
            
            <tag> 运营 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>代理节点池是什么：架构设计与负载均衡</title>
      <link href="/posts/node-pool-architecture/"/>
      <url>/posts/node-pool-architecture/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：成熟的代理服务不是简单地部署几台服务器——它们背后是一套节点池架构，包含负载均衡、健康检查、自动故障转移和容量规划。本文解释节点池的概念、典型架构和关键技术决策，适合对代理服务后端感兴趣的技术用户和运营者。</p></blockquote><hr><h2 id="什么是节点池"><a href="#什么是节点池" class="headerlink" title="什么是节点池"></a>什么是节点池</h2><p>当你在代理客户端的节点列表里看到”香港-1、香港-2、日本-3”这样的选项时，你很可能以为每个名字对应一台固定的服务器。对于小型服务来说确实如此。但在规模较大的代理服务中，每个你看到的”节点”背后可能是一组服务器——这组服务器就构成了一个<strong>节点池（Node Pool）</strong>。</p><p>节点池是代理服务器实例的托管集合。用户不直接连接到某台固定的服务器，而是连接到一个池。池负责处理以下核心职责：</p><ul><li><strong>服务器选择</strong>：从池中选择一台健康且负载较低的服务器来处理用户请求</li><li><strong>负载分配</strong>：将流量均匀分布到多台服务器上，避免单台过载</li><li><strong>故障转移</strong>：当某台服务器宕机时，自动将流量切换到其他可用服务器</li><li><strong>IP 轮换</strong>：当某个 IP 被封锁时，自动切换到池中其他 IP 或更换新 IP</li></ul><p>这个概念并不是代理服务独有的。Web 服务领域的 Nginx 反向代理、云计算中的负载均衡器、CDN 的边缘节点调度，本质上都是同一思路——用一组资源代替单个资源，通过调度策略来提供更高的可用性和性能。</p><hr><h2 id="为什么需要节点池"><a href="#为什么需要节点池" class="headerlink" title="为什么需要节点池"></a>为什么需要节点池</h2><h3 id="单节点模式的问题"><a href="#单节点模式的问题" class="headerlink" title="单节点模式的问题"></a>单节点模式的问题</h3><p>最简单的部署方式是每个地区一台服务器：一台香港 VPS 跑一个 Xray 进程，配好证书，把连接信息发给用户。这种方式在个人使用或少量用户时完全可行，但在面向多用户的服务中会暴露一系列结构性问题。</p><p><strong>单点故障</strong>：服务器宕机等于服务中断。VPS 提供商的维护窗口、硬件故障、网络抖动——任何一个环节出问题，该地区的所有用户同时受影响。凌晨三点收到用户投诉”香港节点全挂了”，运维者只能爬起来手动处理。</p><p><strong>IP 封锁响应慢</strong>：代理服务的 IP 被封锁是常态而非例外。GFW 的主动探测、流媒体平台的 IP 黑名单、云厂商 IP 段被批量标记——这些都会导致节点 IP 失效。单节点模式下，更换 IP 意味着手动操作：购买新 IP 或新服务器、重新部署、更新配置、通知用户。整个过程可能耗时数小时。</p><p><strong>带宽瓶颈</strong>：一台服务器的带宽是有上限的。一台典型的 VPS 提供 1-10 Gbps 端口带宽，当在线用户数增长到一定规模，单台服务器的带宽会被打满。用户体验表现为速度变慢、延迟增高、视频缓冲。</p><p><strong>IP 聚合风险</strong>：所有用户共享同一个出口 IP。这意味着流媒体平台更容易检测到”一个 IP 上有大量不同设备在同时观看”的异常模式，进而封锁该 IP。用户密度越高，IP 被标记和封锁的概率越大。</p><h3 id="节点池解决了什么"><a href="#节点池解决了什么" class="headerlink" title="节点池解决了什么"></a>节点池解决了什么</h3><p>节点池架构从根本上改变了这些约束：</p><ul><li><strong>冗余</strong>：池中有多台服务器，任何一台故障不影响整体服务。故障服务器被自动移出池，用户流量无缝切换到其他服务器</li><li><strong>快速 IP 轮换</strong>：IP 被封锁时，可以在分钟级别内从池中移除受影响节点并替换新节点，无需人工干预</li><li><strong>水平扩展</strong>：需要更多带宽时，向池中添加服务器即可。池的总带宽等于所有成员服务器的带宽之和</li><li><strong>IP 分散</strong>：用户分散在多个不同的出口 IP 上，单个 IP 的用户密度下降，被检测和封锁的概率降低</li><li><strong>地理多样性</strong>：池中的服务器可以分布在不同的数据中心甚至不同的 ISP，进一步提高容灾能力</li></ul><hr><h2 id="典型架构"><a href="#典型架构" class="headerlink" title="典型架构"></a>典型架构</h2><p>代理服务的架构复杂度随规模递增。下面从最简单到最完整，拆解三种典型架构。</p><h3 id="最简架构：单实例模式"><a href="#最简架构：单实例模式" class="headerlink" title="最简架构：单实例模式"></a>最简架构：单实例模式</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">用户 → 代理服务器（每个地区一台）</span><br></pre></td></tr></table></figure><p>这是个人自建或小型服务的标准做法。每个地区部署一台 VPS，运行 Xray 或 Sing-box，用户直接连接到这台服务器的 IP 和端口。</p><p>特点：</p><ul><li>部署和维护成本最低，一台服务器从购买到上线可以在 30 分钟内完成</li><li>没有冗余——服务器故障或 IP 被封即服务中断</li><li>适合个人使用或用户数在个位数的超小型服务</li><li>维护完全依赖人工操作</li></ul><h3 id="入口与落地分离架构：中转模式"><a href="#入口与落地分离架构：中转模式" class="headerlink" title="入口与落地分离架构：中转模式"></a>入口与落地分离架构：中转模式</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">用户 → 入口服务器（中转/中继） → 落地服务器（目标地区）</span><br><span class="line">       Entry / Relay Server        Landing Server</span><br></pre></td></tr></table></figure><p>这是中型代理服务最常见的架构，也是所谓”中转线路”的技术实现。架构将代理链路拆分为两段：</p><p><strong>入口服务器（Entry Server）</strong>：部署在距离用户较近的位置。对于面向中国大陆用户的服务，入口服务器通常位于中国境内或香港、日本等低延迟地区。入口服务器的主要职责是接收用户连接并转发流量，它本身不是最终的代理出口。</p><p><strong>落地服务器（Landing Server）</strong>：部署在目标地区（如美国、日本、新加坡等），是用户流量的实际出口。落地服务器的 IP 是外部网站看到的来源 IP。</p><p>这种分离带来几个关键好处：</p><ul><li><strong>入口 IP 更稳定</strong>：入口服务器位于境内或近距离地区，其 IP 通常不在 GFW 的封锁目标范围内（尤其是境内 IP），不容易被 IP 封锁</li><li><strong>落地服务器可独立更换</strong>：当落地 IP 被流媒体平台封锁时，只需更换落地服务器，入口服务器和用户配置均无需变动</li><li><strong>线路优化</strong>：入口服务器到落地服务器之间可以走优化线路（如 IPLC、IEPL 专线或 CN2 GIA），绕开拥堵的国际出口，获得更低的延迟和更高的带宽</li></ul><p>这里的”中转”就是代理行业经常提到的概念。你在服务商描述中看到的”IPLC 中转””BGP 中转””三网优化”等术语，本质上都是在描述入口到落地这段链路的网络质量。</p><h3 id="完整节点池架构：大规模服务"><a href="#完整节点池架构：大规模服务" class="headerlink" title="完整节点池架构：大规模服务"></a>完整节点池架构：大规模服务</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">用户 → 负载均衡器 → 入口池 → [Entry-1, Entry-2, Entry-3]</span><br><span class="line">                                     ↓</span><br><span class="line">                    落地池 → [Land-1, Land-2, Land-3]</span><br><span class="line">                                     ↓</span><br><span class="line">                    健康检查 → 自动移除/替换不健康节点</span><br><span class="line">                    IP 池    → 自动 IP 轮换</span><br><span class="line">                    DNS 管理 → 更新 DNS 记录</span><br><span class="line">                    面板 API → 与用户管理面板（如 Xboard）对接</span><br></pre></td></tr></table></figure><p>大型服务在中转架构的基础上引入了池化管理和自动化运维。每一层都不再是单台服务器，而是一组可管理、可替换的资源池。</p><p>核心组件：</p><p><strong>负载均衡器（Load Balancer）</strong>：用户连接的第一个接触点。负载均衡器根据预设策略（轮询、最少连接、地理就近等）将用户分配到不同的入口服务器。常见实现方式包括 DNS 负载均衡、Nginx&#x2F;HAProxy 四层代理、云厂商的 LB 服务等。</p><p><strong>入口池（Entry Pool）</strong>：一组入口&#x2F;中转服务器。池化管理意味着可以在不中断服务的情况下添加、移除或替换入口服务器。入口池通常跨多个数据中心部署以提高容灾能力。</p><p><strong>落地池（Landing Pool）</strong>：每个目标地区维护一组落地服务器。池中的服务器可能使用不同的 IP 段、不同的 ISP，以分散被封锁的风险。</p><p><strong>健康监控器（Health Monitor）</strong>：持续检查池中每个节点的运行状态。检查维度包括基础连通性（TCP 握手是否成功）、协议层健康（代理握手是否正常）、业务层健康（流媒体解锁是否有效）等。检测到异常节点后自动从池中移除并触发告警。</p><p><strong>IP 管理器（IP Manager）</strong>：管理 IP 资源的生命周期。当 IP 被封锁时自动调度更换，维护 IP 池的库存水位，跟踪每个 IP 的使用历史和健康状态。</p><p><strong>面板集成（Panel API）</strong>：与前端用户管理面板（如 <a href="https://github.com/cedar2025/Xboard">Xboard</a>、SSPanel 等）对接。节点池中的变更需要实时同步到面板，确保用户订阅链接中的节点信息是最新的。</p><hr><h2 id="负载均衡策略"><a href="#负载均衡策略" class="headerlink" title="负载均衡策略"></a>负载均衡策略</h2><p>负载均衡器是节点池的调度中枢。选择什么策略，直接影响用户体验和资源利用率。以下是代理服务中常用的几种策略。</p><h3 id="轮询（Round-Robin）"><a href="#轮询（Round-Robin）" class="headerlink" title="轮询（Round Robin）"></a>轮询（Round Robin）</h3><p>最简单的策略：按顺序将新连接分配给池中的下一台服务器。如果池里有三台服务器，第一个用户去 Server-1，第二个去 Server-2，第三个去 Server-3，第四个又回到 Server-1。</p><ul><li><strong>优点</strong>：实现极其简单，几乎不需要维护状态信息</li><li><strong>缺点</strong>：完全不考虑服务器的当前负载。如果一台服务器已经满载而另一台空闲，轮询仍然会向两者均匀分配流量。对于服务器配置不一致的池（比如有的机器 1Gbps、有的 10Gbps），轮询会导致资源浪费</li><li><strong>适用场景</strong>：池中所有服务器配置相同、流量模式稳定的情况</li></ul><h3 id="最少连接（Least-Connections）"><a href="#最少连接（Least-Connections）" class="headerlink" title="最少连接（Least Connections）"></a>最少连接（Least Connections）</h3><p>将新连接分配给当前活跃连接数最少的服务器。负载均衡器需要实时跟踪每台服务器的连接数。</p><ul><li><strong>优点</strong>：在流量不均匀的情况下比轮询更合理。如果某些用户占用了大量长连接（比如视频流），这些连接集中的服务器会自然地少接新用户</li><li><strong>缺点</strong>：需要负载均衡器维护更多状态信息，实现复杂度更高。另外，连接数不等于负载——一个正在传输 4K 视频的连接和一个闲置的 SSH 连接对服务器的压力完全不同</li><li><strong>适用场景</strong>：用户行为差异较大的服务（有人看视频、有人刷网页、有人挂在线）</li></ul><h3 id="地理路由（Geographic-Routing）"><a href="#地理路由（Geographic-Routing）" class="headerlink" title="地理路由（Geographic Routing）"></a>地理路由（Geographic Routing）</h3><p>根据用户的地理位置，将其路由到最近的入口服务器。通常通过 DNS 解析实现——不同地区的用户解析同一个域名得到不同的入口服务器 IP。</p><ul><li><strong>优点</strong>：最直接地降低用户延迟。对于覆盖多个地区的大型服务，地理路由能确保广东的用户连接广州的入口、北京的用户连接北京的入口</li><li><strong>缺点</strong>：依赖 DNS 服务商的地理 IP 数据库准确性。另外，用户使用的 DNS 解析器位置可能与用户本身的位置不一致（比如使用了公共 DNS 如 8.8.8.8），导致路由偏差</li><li><strong>适用场景</strong>：入口服务器分布在多个地理区域的服务</li></ul><h3 id="加权分配（Weighted-Distribution）"><a href="#加权分配（Weighted-Distribution）" class="headerlink" title="加权分配（Weighted Distribution）"></a>加权分配（Weighted Distribution）</h3><p>为池中每台服务器分配权重，权重与其处理能力成正比。一台 10Gbps 带宽的服务器可以分配 5 倍于 2Gbps 服务器的权重，从而接收 5 倍的流量。</p><ul><li><strong>优点</strong>：能够充分利用异构资源。在实际运营中，池里的服务器往往不是同一批次采购的，配置参差不齐，加权分配可以让高性能机器承担更多工作</li><li><strong>缺点</strong>：权重需要手动设定或通过监控系统动态调整，增加了运维复杂度</li><li><strong>适用场景</strong>：服务器配置不统一的池</li></ul><h3 id="实际中的组合策略"><a href="#实际中的组合策略" class="headerlink" title="实际中的组合策略"></a>实际中的组合策略</h3><p>真实的生产环境通常不会只用单一策略，而是组合使用。一种常见的做法是：<strong>地理路由 + 加权最少连接</strong>。先根据用户位置选择最近的入口池，然后在该池内按加权最少连接分配到具体服务器。这样既优化了延迟，又实现了合理的负载分布。</p><p><img src="/images/inline/load-balancer.jpg" alt="负载均衡架构图"><br><em>图片来源：<a href="https://www.edrawmax.com/">EdrawMax</a></em></p><hr><h2 id="健康检查与故障转移"><a href="#健康检查与故障转移" class="headerlink" title="健康检查与故障转移"></a>健康检查与故障转移</h2><p>节点池的核心价值在于自动化的故障处理能力。而这一切的基础是健康检查——持续监控池中每个节点的状态。</p><h3 id="健康检查类型"><a href="#健康检查类型" class="headerlink" title="健康检查类型"></a>健康检查类型</h3><p>按检查深度从浅到深排列：</p><p><strong>TCP 连通性检查</strong>：最基础的检查。尝试与节点建立 TCP 连接，如果在超时时间内完成三次握手，则认为节点存活。这只能检测”服务器是否开机且网络通畅”，无法判断代理服务本身是否正常运行。</p><p><strong>协议层检查</strong>：在 TCP 连通的基础上，进一步尝试完成代理协议的握手流程（例如发起一个 VLESS 连接并成功认证）。这可以检测到代理进程崩溃、配置错误、证书过期等服务层面的故障。</p><p><strong>业务层检查（解锁检查）</strong>：最深层的检查。通过节点实际访问特定网站或 API，验证业务功能是否正常。最典型的场景是检查流媒体解锁：通过节点访问 Netflix 的检测 API，确认返回的是目标地区的内容而非”代理被识别”的错误。这一层检查能发现 IP 被流媒体平台黑名单的情况——此时 TCP 和协议层都正常，但业务已失效。</p><p><strong>延迟检查</strong>：监控节点的响应延迟。即使节点存活且功能正常，如果延迟飙升到不可接受的水平（例如从 50ms 突然升到 500ms），同样应该被视为异常并降低其优先级或从池中临时移除。</p><h3 id="故障转移流程"><a href="#故障转移流程" class="headerlink" title="故障转移流程"></a>故障转移流程</h3><p>一个完整的故障转移流程如下：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">健康检查失败（连续 N 次）</span><br><span class="line">  → 标记节点为不健康（unhealthy）</span><br><span class="line">  → 从负载均衡池中移除，不再分配新连接</span><br><span class="line">  → 现有连接超时后自然断开，用户客户端自动重连到其他健康节点</span><br><span class="line">  → 触发告警通知运维人员</span><br><span class="line">  → 自动化系统尝试恢复（重启服务、切换 IP 等）</span><br><span class="line">  → 如果自动恢复失败，启动新服务器替换</span><br><span class="line">  → 新节点通过健康检查后加入池</span><br></pre></td></tr></table></figure><p>关键设计细节：</p><ul><li><strong>避免误判</strong>：不能因为一次检查失败就立即移除节点。网络抖动可能导致偶发的检查失败，因此通常设定连续失败阈值（如连续 3 次检查失败才标记为不健康）</li><li><strong>优雅退出</strong>：节点被移除时，不应立即切断现有连接。已建立的连接允许自然完成或超时，只是不再接受新连接</li><li><strong>恢复验证</strong>：节点恢复后不能立即满负荷投入使用。通常先以较低权重加入池，观察一段时间确认稳定后再恢复正常权重</li></ul><hr><h2 id="IP-轮换策略"><a href="#IP-轮换策略" class="headerlink" title="IP 轮换策略"></a>IP 轮换策略</h2><p>IP 封锁是代理服务面对的最常态化威胁。IP 轮换策略决定了服务在面对封锁时的恢复速度。</p><h3 id="被动轮换（Reactive）"><a href="#被动轮换（Reactive）" class="headerlink" title="被动轮换（Reactive）"></a>被动轮换（Reactive）</h3><p>只在 IP 被封锁后才进行更换。运营流程是：健康检查检测到 IP 被封锁 → 从池中移除 → 申请新 IP 或启动备用服务器 → 部署并加入池。</p><ul><li>优点：IP 消耗最少，运营成本最低</li><li>缺点：从检测到恢复存在时间窗口（分钟到小时级别），在此期间该节点不可用</li><li>适用场景：IP 封锁频率较低的地区和时期</li></ul><h3 id="主动轮换（Proactive）"><a href="#主动轮换（Proactive）" class="headerlink" title="主动轮换（Proactive）"></a>主动轮换（Proactive）</h3><p>按固定周期定期更换 IP，不等 IP 被封锁就预防性替换。例如每 7 天更换一次所有落地 IP，或每天轮换一定比例的 IP。</p><ul><li>优点：用户几乎感知不到 IP 封锁的影响，因为 IP 在被封锁之前就已经被替换</li><li>缺点：IP 消耗量大，运营成本显著提高。如果轮换频率过高，部分完全健康的 IP 也会被提前退役</li><li>适用场景：敏感时期或高价值地区（如 GFW 检测强度升级期间的港日节点）</li></ul><h3 id="混合策略（Hybrid）"><a href="#混合策略（Hybrid）" class="headerlink" title="混合策略（Hybrid）"></a>混合策略（Hybrid）</h3><p>实际运营中最常用的做法。对高价值、高风险地区采用主动轮换，对低风险地区采用被动轮换。</p><p>例如：香港和日本节点（使用频率高、检测压力大）每 3-5 天主动轮换一次；冷门地区的节点（如土耳其、阿根廷）只在 IP 被封后才更换。这种差异化策略在成本和稳定性之间取得了平衡。</p><h3 id="IP-来源"><a href="#IP-来源" class="headerlink" title="IP 来源"></a>IP 来源</h3><p>IP 的来源直接影响其质量和”干净”程度：</p><ul><li><strong>云厂商（AWS、GCP、Azure、国内云）</strong>：最容易获取，成本最低，但 IP 段被广泛标记为数据中心 IP，流媒体平台的识别率较高</li><li><strong>独立服务器&#x2F;专用 IP</strong>：从 IDC 直接租用，IP 段相对干净，但成本更高且更换速度受限于 IDC 的流程</li><li><strong>住宅 IP &#x2F; ISP IP</strong>：通过与 ISP 合作获取的非数据中心 IP，流媒体解锁效果最好，但价格最高且供应有限</li></ul><hr><h2 id="对用户意味着什么"><a href="#对用户意味着什么" class="headerlink" title="对用户意味着什么"></a>对用户意味着什么</h2><p>作为普通用户，你不需要关心节点池的内部实现。但理解这些概念有助于你判断一个代理服务的技术成熟度，以及在出现问题时做出更合理的决策。</p><h3 id="节点池架构良好的服务有哪些表现"><a href="#节点池架构良好的服务有哪些表现" class="headerlink" title="节点池架构良好的服务有哪些表现"></a>节点池架构良好的服务有哪些表现</h3><ul><li><strong>敏感时期恢复速度快</strong>：每年特定时段 GFW 检测强度会升级，大量节点 IP 被封锁。有完善节点池的服务通常能在数小时内恢复，因为它们有自动化的 IP 轮换和节点替换机制。而依赖手动运维的服务可能需要数天才能恢复正常</li><li><strong>每个地区有多个节点</strong>：如果一个地区只有一个节点，大概率是单服务器模式。多个节点（如”香港-1、香港-2、香港-3”）至少说明有基础的冗余配置</li><li><strong>节点按功能标注</strong>：成熟的服务会将节点按用途分类（流媒体节点、游戏节点、通用节点），这通常意味着后端有针对不同业务需求的独立节点池</li><li><strong>客户端配置支持自动切换</strong>：如果服务提供的订阅配置中包含 <code>url-test</code> 或 <code>fallback</code> 类型的策略组，说明它预期了节点故障的场景并做了客户端侧的容错设计</li></ul><h3 id="用户侧的配合"><a href="#用户侧的配合" class="headerlink" title="用户侧的配合"></a>用户侧的配合</h3><p>即使服务后端有完善的节点池，用户侧的客户端配置也很重要：</p><ul><li><strong>使用自动测速&#x2F;故障转移策略组</strong>：在 Clash&#x2F;Mihomo 中配置 <code>url-test</code> 策略组，让客户端自动选择延迟最低的节点。在节点故障时自动切换到下一个可用节点</li><li><strong>定期更新订阅</strong>：节点池中的变更（新增节点、移除节点、更换 IP）通过订阅链接同步到用户。如果长时间不更新订阅，你的客户端可能还在尝试连接已经不存在的节点</li><li><strong>不要只固定使用一个节点</strong>：把流量集中在单个节点上会增大该节点被检测的风险，也无法享受节点池的容错能力</li></ul><hr><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><p><strong>用户能看出某个节点背后是不是节点池吗？</strong></p><p>通常看不出来。你连接”香港-1”，不知道它背后是一台服务器还是一个池。但有一些间接信号可以推测：服务在 IP 被封后恢复很快（说明有自动化替换）、同一个节点名称在不同时间段解析到不同 IP（说明有 IP 轮换）、节点的性能在高峰期仍然稳定（说明有负载分散）。</p><p><strong>节点池和 CDN 有什么区别？</strong></p><p>CDN（内容分发网络）的核心是把静态内容缓存到离用户最近的边缘节点，减少回源请求。节点池处理的是代理流量的动态路由和转发。两者有相似之处——都是分布式架构、都涉及负载均衡和就近调度——但目的不同。不过在实践中两者会有交集：一些代理服务使用 CDN（如 Cloudflare）作为流量入口来隐藏真实服务器 IP，这时 CDN 实际上充当了入口层的角色。</p><p><strong>自建节点也需要节点池吗？</strong></p><p>个人使用或几个人共享，通常不需要。每个地区一台服务器就够了，节点池带来的复杂度远大于收益。节点池架构在用户规模达到数十人以上、且对服务可用性有较高要求时才变得有意义。如果你只是自己用，把精力放在选好 VPS 和配置好协议上，比折腾池化架构更实际。</p><p><strong>节点池的技术门槛高吗？</strong></p><p>取决于自动化程度。最基础的池化可以用 Nginx 做四层负载均衡实现，配合简单的健康检查脚本，技术门槛不算高。但要做到全自动的 IP 轮换、弹性扩缩容、多云调度等，需要相当的运维工程能力和基础设施投入。这也是为什么大型代理服务的运营成本远超你想象——你看到的月费里，相当一部分是在为这套自动化体系买单。</p><hr><h2 id="写在最后"><a href="#写在最后" class="headerlink" title="写在最后"></a>写在最后</h2><p>节点池架构是代理服务从”能用”到”稳定可用”的关键技术跃迁。它解决的核心问题是：在 IP 封锁常态化、流量规模持续增长的环境下，如何以自动化手段维持服务的可用性和性能。</p><p>对于用户来说，不需要理解节点池的每一个技术细节，但知道这些概念的存在，有助于你理解为什么某些服务在敏感时期仍然稳定、为什么服务商的定价差异如此之大、以及为什么”自建一台 VPS”和”运营一个代理服务”之间的差距远不止那一台服务器。</p><p>代理技术的竞争，早已从单纯的协议层面延伸到了后端基础设施的较量。节点池、自动化运维、智能调度——这些看不见的工程能力，才是决定服务体验上限的关键因素。</p>]]></content>
      
      
      <categories>
          
          <category> 运营与架构 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> 进阶 </tag>
            
            <tag> 运营 </tag>
            
            <tag> 节点池 </tag>
            
            <tag> 负载均衡 </tag>
            
            <tag> 架构 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>常用规则集推荐与对比（Loyalsoldier / MetaCubeX / ACL4SSR）</title>
      <link href="/posts/popular-rulesets/"/>
      <url>/posts/popular-rulesets/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：规则集是代理分流的核心资源，决定了哪些流量走代理、哪些直连、哪些被拦截。当前社区中最主流的三套规则集分别是 Loyalsoldier&#x2F;clash-rules、MetaCubeX&#x2F;meta-rules-dat 和 ACL4SSR。它们各有侧重——Loyalsoldier 最流行且兼容性好，MetaCubeX 是 mihomo 官方配套且加载速度最快，ACL4SSR 分类最细粒度且提供完整的预制配置。本文逐一介绍它们的特点并给出选择建议。</p></blockquote><hr><h2 id="什么是规则集（快速回顾）"><a href="#什么是规则集（快速回顾）" class="headerlink" title="什么是规则集（快速回顾）"></a>什么是规则集（快速回顾）</h2><p>如果你已经读过 <a href="/posts/what-are-rules/">什么是分流规则</a> 和 <a href="/posts/clash-rule-providers/">Clash 的 Rule Provider 详解</a>，可以跳过这一节。</p><p>代理客户端的分流逻辑很简单：每一个网络请求进来后，客户端拿着请求的目标信息（域名或 IP）从第一条规则开始逐条匹配，命中哪条就按那条规则指定的策略处理。但实际使用中，你不可能自己手写几千条规则来覆盖所有常见网站。</p><p><strong>规则集（Rule Set &#x2F; Rule Provider）</strong> 就是社区维护的、预先整理好的大量规则的集合。你只需要在配置文件中引用规则集的 URL，客户端会自动下载并定期更新这些规则。社区开发者帮你做了”哪些域名该直连、哪些该代理、哪些该拦截”这件繁琐的事情。</p><p>目前最主流的三套规则集分别来自三个项目。它们的定位、格式和覆盖范围各不相同，下面逐一展开。</p><hr><h2 id="Loyalsoldier-clash-rules"><a href="#Loyalsoldier-clash-rules" class="headerlink" title="Loyalsoldier&#x2F;clash-rules"></a>Loyalsoldier&#x2F;clash-rules</h2><p><strong>项目地址</strong>：<a href="https://github.com/Loyalsoldier/clash-rules">https://github.com/Loyalsoldier/clash-rules</a></p><h3 id="项目概况"><a href="#项目概况" class="headerlink" title="项目概况"></a>项目概况</h3><p>Loyalsoldier&#x2F;clash-rules 是目前中文社区中使用最广泛的 Clash 规则集项目。它从 v2ray-rules-dat（同一作者维护的 V2Ray 规则数据）衍生而来，专门为 Clash 系列客户端（包括 mihomo）打包成 YAML 格式的 Rule Provider 文件。</p><p>这个项目的数据源经过多层整合：域名列表来自 v2fly&#x2F;domain-list-community（V2Fly 社区维护的域名分类数据库），IP 数据则综合了 GeoLite2、APNIC 统计数据等多个来源。最终产出的规则文件按功能分为多个类别，每天自动更新。</p><h3 id="分类与文件"><a href="#分类与文件" class="headerlink" title="分类与文件"></a>分类与文件</h3><p>Loyalsoldier 提供的主要规则文件包括：</p><table><thead><tr><th>文件名</th><th>用途</th><th>典型策略</th></tr></thead><tbody><tr><td><code>reject</code></td><td>广告域名、追踪器、恶意网站</td><td>REJECT</td></tr><tr><td><code>proxy</code></td><td>需要代理的域名（被墙或国外常用服务）</td><td>Proxy</td></tr><tr><td><code>direct</code></td><td>国内域名，应该直连</td><td>DIRECT</td></tr><tr><td><code>gfw</code></td><td>GFW 封锁的域名列表</td><td>Proxy</td></tr><tr><td><code>google</code></td><td>Google 全系列服务的域名</td><td>Proxy</td></tr><tr><td><code>apple</code></td><td>Apple 服务域名</td><td>DIRECT 或 Proxy</td></tr><tr><td><code>icloud</code></td><td>iCloud 相关域名</td><td>DIRECT 或 Proxy</td></tr><tr><td><code>private</code></td><td>局域网、保留地址等私有域名</td><td>DIRECT</td></tr><tr><td><code>cncidr</code></td><td>中国大陆的 IP 段</td><td>DIRECT</td></tr><tr><td><code>telegramcidr</code></td><td>Telegram 使用的 IP 段</td><td>Proxy</td></tr><tr><td><code>lancidr</code></td><td>局域网 IP 段</td><td>DIRECT</td></tr></tbody></table><h3 id="使用方式"><a href="#使用方式" class="headerlink" title="使用方式"></a>使用方式</h3><p>在 Clash &#x2F; mihomo 配置文件中，通过 <code>rule-providers</code> 引用这些文件：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">rule-providers:</span></span><br><span class="line">  <span class="attr">reject:</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">http</span></span><br><span class="line">    <span class="attr">behavior:</span> <span class="string">domain</span></span><br><span class="line">    <span class="attr">url:</span> <span class="string">&quot;https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/reject.txt&quot;</span></span><br><span class="line">    <span class="attr">path:</span> <span class="string">./ruleset/reject.yaml</span></span><br><span class="line">    <span class="attr">interval:</span> <span class="number">86400</span></span><br><span class="line"></span><br><span class="line">  <span class="attr">proxy:</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">http</span></span><br><span class="line">    <span class="attr">behavior:</span> <span class="string">domain</span></span><br><span class="line">    <span class="attr">url:</span> <span class="string">&quot;https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/proxy.txt&quot;</span></span><br><span class="line">    <span class="attr">path:</span> <span class="string">./ruleset/proxy.yaml</span></span><br><span class="line">    <span class="attr">interval:</span> <span class="number">86400</span></span><br><span class="line"></span><br><span class="line">  <span class="attr">direct:</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">http</span></span><br><span class="line">    <span class="attr">behavior:</span> <span class="string">domain</span></span><br><span class="line">    <span class="attr">url:</span> <span class="string">&quot;https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/direct.txt&quot;</span></span><br><span class="line">    <span class="attr">path:</span> <span class="string">./ruleset/direct.yaml</span></span><br><span class="line">    <span class="attr">interval:</span> <span class="number">86400</span></span><br></pre></td></tr></table></figure><p>然后在 <code>rules</code> 中引用：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">rules:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,reject,REJECT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,proxy,Proxy</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,direct,DIRECT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOIP,CN,DIRECT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">MATCH,Proxy</span></span><br></pre></td></tr></table></figure><h3 id="优势与不足"><a href="#优势与不足" class="headerlink" title="优势与不足"></a>优势与不足</h3><p><strong>优势：</strong></p><ul><li>社区认知度最高，中文教程和讨论最多，新手遇到问题容易找到解答</li><li>分类清晰直观，按用途划分易于理解</li><li>文本格式（YAML），人类可读可编辑，方便排查问题</li><li>数据源质量稳定，每日自动更新</li></ul><p><strong>不足：</strong></p><ul><li>文本格式加载速度不如二进制格式，规则数量多时初次加载稍慢</li><li>分类粒度相对较粗，Netflix、Disney+、Steam 等服务没有单独拆分</li><li>主要面向 Clash 系列，Sing-box 等其他内核需要转换</li></ul><hr><h2 id="MetaCubeX-meta-rules-dat"><a href="#MetaCubeX-meta-rules-dat" class="headerlink" title="MetaCubeX&#x2F;meta-rules-dat"></a>MetaCubeX&#x2F;meta-rules-dat</h2><p><strong>项目地址</strong>：<a href="https://github.com/MetaCubeX/meta-rules-dat">https://github.com/MetaCubeX/meta-rules-dat</a></p><h3 id="项目概况-1"><a href="#项目概况-1" class="headerlink" title="项目概况"></a>项目概况</h3><p>MetaCubeX&#x2F;meta-rules-dat 是 mihomo（原 Clash.Meta）团队的官方规则数据项目。作为 mihomo 的”亲儿子”，它和 mihomo 内核的兼容性是最好的，同时也是目前唯一提供 MRS（Meta Rule Set）二进制格式的规则集项目。</p><p>这个项目的数据同样来自 v2fly&#x2F;domain-list-community 和 GeoLite2 等上游源，但在打包格式上做了很多 mihomo 特有的优化。</p><h3 id="MRS-格式：二进制的速度优势"><a href="#MRS-格式：二进制的速度优势" class="headerlink" title="MRS 格式：二进制的速度优势"></a>MRS 格式：二进制的速度优势</h3><p>meta-rules-dat 项目最大的技术亮点是 <strong>MRS（Meta Rule Set）格式</strong>。传统的规则集文件是纯文本（YAML 或文本列表），客户端每次启动都需要逐行解析这些文本并构建内部数据结构。当规则数量达到数万条时，解析开销不可忽视。</p><p>MRS 是 mihomo 定义的二进制格式，规则在生成阶段就已经被编译为优化过的数据结构。客户端加载 MRS 文件时只需要直接读入内存，跳过了文本解析这一步。根据社区测试，MRS 格式的加载速度比纯文本快数倍，在低性能设备（如路由器、旧手机）上差异更加明显。</p><h3 id="GeoSite-GeoIP-集成"><a href="#GeoSite-GeoIP-集成" class="headerlink" title="GeoSite &#x2F; GeoIP 集成"></a>GeoSite &#x2F; GeoIP 集成</h3><p>除了 Rule Provider 格式的文件外，meta-rules-dat 还提供完整的 <code>geosite.dat</code> 和 <code>geoip.dat</code> 数据库文件。这些文件被 mihomo 内置的 <code>GEOSITE</code> 和 <code>GEOIP</code> 规则类型直接使用。关于 GeoIP 和 GeoSite 的详细说明，可以参考 <a href="/posts/geoip-geosite/">GeoIP &#x2F; GeoSite 数据库：原理与更新</a>。</p><p>使用 GeoSite 规则的配置示例：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">rules:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOSITE,category-ads-all,REJECT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOSITE,cn,DIRECT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOSITE,google,Proxy</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOSITE,netflix,Streaming</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOIP,CN,DIRECT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">MATCH,Proxy</span></span><br></pre></td></tr></table></figure><p>这种方式不需要单独配置 rule-providers，规则直接内嵌在配置文件中，写法更简洁。</p><h3 id="使用方式（Rule-Provider-格式）"><a href="#使用方式（Rule-Provider-格式）" class="headerlink" title="使用方式（Rule Provider 格式）"></a>使用方式（Rule Provider 格式）</h3><p>如果你更习惯 Rule Provider 的写法，meta-rules-dat 也提供了对应的文件：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">rule-providers:</span></span><br><span class="line">  <span class="attr">google:</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">http</span></span><br><span class="line">    <span class="attr">behavior:</span> <span class="string">domain</span></span><br><span class="line">    <span class="attr">format:</span> <span class="string">mrs</span></span><br><span class="line">    <span class="attr">url:</span> <span class="string">&quot;https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/google.mrs&quot;</span></span><br><span class="line">    <span class="attr">path:</span> <span class="string">./ruleset/google.mrs</span></span><br><span class="line">    <span class="attr">interval:</span> <span class="number">86400</span></span><br></pre></td></tr></table></figure><p>注意 <code>format: mrs</code> 这一行——这告诉 mihomo 按 MRS 二进制格式解析这个文件。</p><h3 id="优势与不足-1"><a href="#优势与不足-1" class="headerlink" title="优势与不足"></a>优势与不足</h3><p><strong>优势：</strong></p><ul><li>mihomo 官方出品，兼容性最佳，新功能第一时间支持</li><li>MRS 二进制格式加载速度最快，对低性能设备友好</li><li>同时提供 GeoSite&#x2F;GeoIP 数据库和 Rule Provider 文件，两种用法都支持</li><li>分类覆盖全面，包含上百个服务类别</li></ul><p><strong>不足：</strong></p><ul><li>MRS 格式是 mihomo 专用，其他 Clash 内核（如原版 Clash Premium）不支持</li><li>二进制文件无法直接查看和编辑，排查规则问题时不如文本格式方便</li><li>文档和使用教程相对较少，主要依赖 mihomo Wiki</li></ul><hr><h2 id="ACL4SSR"><a href="#ACL4SSR" class="headerlink" title="ACL4SSR"></a>ACL4SSR</h2><p><strong>项目地址</strong>：<a href="https://github.com/ACL4SSR/ACL4SSR">https://github.com/ACL4SSR/ACL4SSR</a></p><h3 id="项目概况-2"><a href="#项目概况-2" class="headerlink" title="项目概况"></a>项目概况</h3><p>ACL4SSR（Access Control List for SSR&#x2F;SS&#x2F;Clash）是老牌规则集项目，历史比前面两个项目都要悠久。它最初为 ShadowsocksR 设计，后来扩展支持了 Clash。ACL4SSR 的最大特点是<strong>分类极其细致</strong>，以及<strong>提供完整的预制配置文件</strong>。</p><h3 id="极细粒度的分类"><a href="#极细粒度的分类" class="headerlink" title="极细粒度的分类"></a>极细粒度的分类</h3><p>ACL4SSR 对流媒体和常用服务做了非常细的拆分，几乎每个主流服务都有独立的规则文件。例如：</p><table><thead><tr><th>服务</th><th>规则文件</th></tr></thead><tbody><tr><td>Netflix</td><td><code>Ruleset/Netflix.list</code></td></tr><tr><td>Disney+</td><td><code>Ruleset/DisneyPlus.list</code></td></tr><tr><td>YouTube</td><td><code>Ruleset/YouTube.list</code></td></tr><tr><td>Spotify</td><td><code>Ruleset/Spotify.list</code></td></tr><tr><td>Telegram</td><td><code>Ruleset/Telegram.list</code></td></tr><tr><td>Steam</td><td><code>Ruleset/Steam.list</code></td></tr><tr><td>Epic Games</td><td><code>Ruleset/Epic.list</code></td></tr><tr><td>PayPal</td><td><code>Ruleset/PayPal.list</code></td></tr><tr><td>Microsoft</td><td><code>Ruleset/Microsoft.list</code></td></tr><tr><td>Apple</td><td><code>Ruleset/Apple.list</code></td></tr><tr><td>Bahamut (巴哈姆特)</td><td><code>Ruleset/Bahamut.list</code></td></tr></tbody></table><p>这种细粒度分类的好处很明显：你可以为每个服务指定不同的策略组。比如 Netflix 走美国节点，Spotify 走日本节点，Telegram 走新加坡节点，Steam 走香港节点——每个服务都有最优的路由路径。</p><h3 id="预制配置"><a href="#预制配置" class="headerlink" title="预制配置"></a>预制配置</h3><p>ACL4SSR 不仅提供规则文件，还提供了多套<strong>即用型的完整 Clash 配置文件</strong>。这对新手来说非常友好——你不需要自己从零组装配置，直接选一套预制方案就能用。</p><p>主要的预制方案包括：</p><ul><li><strong>ACL4SSR_Online.ini</strong>：默认方案，国内直连 + 国外代理，适合大多数用户</li><li><strong>ACL4SSR_Online_Full.ini</strong>：完整方案，包含所有细分规则（Netflix&#x2F;Disney+&#x2F;Telegram 等单独分组）</li><li><strong>ACL4SSR_Online_Mini.ini</strong>：精简方案，只保留最基本的直连和代理分流</li><li><strong>ACL4SSR_Online_NoAuto.ini</strong>：无自动测速方案，所有策略组均为手动选择</li></ul><p>这些预制配置通常配合<strong>订阅转换服务</strong>使用。你把机场的订阅链接通过转换工具（如 subconverter）转换时，可以选择 ACL4SSR 的模板作为规则方案，输出的就是一份包含完整规则分组的 Clash 配置文件。</p><h3 id="优势与不足-2"><a href="#优势与不足-2" class="headerlink" title="优势与不足"></a>优势与不足</h3><p><strong>优势：</strong></p><ul><li>服务分类最细，支持逐服务精细路由</li><li>提供开箱即用的预制配置，新手友好</li><li>与订阅转换工具深度集成，使用流程简单</li><li>历史悠久，社区基础扎实</li></ul><p><strong>不足：</strong></p><ul><li>项目更新频率不如 Loyalsoldier 和 MetaCubeX 活跃</li><li>规则文件格式较老，不支持 MRS 等新格式</li><li>分类太细可能导致配置文件复杂，策略组数量多时管理成本上升</li><li>部分规则覆盖可能存在滞后</li></ul><hr><h2 id="三大规则集对比"><a href="#三大规则集对比" class="headerlink" title="三大规则集对比"></a>三大规则集对比</h2><table><thead><tr><th>对比维度</th><th>Loyalsoldier&#x2F;clash-rules</th><th>MetaCubeX&#x2F;meta-rules-dat</th><th>ACL4SSR</th></tr></thead><tbody><tr><td><strong>定位</strong></td><td>通用 Clash 规则集</td><td>mihomo 官方规则集</td><td>老牌全功能规则集</td></tr><tr><td><strong>文件格式</strong></td><td>YAML 文本</td><td>MRS 二进制 &#x2F; YAML &#x2F; dat</td><td>文本列表</td></tr><tr><td><strong>加载速度</strong></td><td>中等</td><td>最快（MRS 格式）</td><td>中等</td></tr><tr><td><strong>分类粒度</strong></td><td>中等（按大类）</td><td>全面（上百类别）</td><td>最细（逐服务）</td></tr><tr><td><strong>预制配置</strong></td><td>无</td><td>无</td><td>有多套方案</td></tr><tr><td><strong>更新频率</strong></td><td>每日</td><td>每日</td><td>不定期</td></tr><tr><td><strong>mihomo 兼容性</strong></td><td>好</td><td>最佳</td><td>好</td></tr><tr><td><strong>Sing-box 支持</strong></td><td>需转换</td><td>部分支持</td><td>需转换</td></tr><tr><td><strong>社区教程</strong></td><td>最多</td><td>较少</td><td>较多</td></tr><tr><td><strong>适合谁</strong></td><td>大多数用户</td><td>mihomo 用户 &#x2F; 路由器用户</td><td>需要精细分流的用户</td></tr></tbody></table><hr><h2 id="如何在它们之间切换"><a href="#如何在它们之间切换" class="headerlink" title="如何在它们之间切换"></a>如何在它们之间切换</h2><p>如果你当前使用某一套规则集，想切换到另一套，操作并不复杂。核心步骤是：</p><p><strong>第一步：替换 rule-providers 的 URL。</strong> 把配置文件中 <code>rule-providers</code> 下的 URL 从旧项目的地址换成新项目的地址。注意不同项目的文件命名和路径格式不同，需要对照新项目的文档查找对应的文件地址。</p><p><strong>第二步：调整 behavior 和 format。</strong> 不同规则集的文件行为类型可能不同。比如 Loyalsoldier 的域名规则用 <code>behavior: domain</code>，而切换到 meta-rules-dat 的 MRS 格式时需要加上 <code>format: mrs</code>。</p><p><strong>第三步：检查分类映射。</strong> 不同规则集的分类名称不完全一致。Loyalsoldier 的 <code>proxy</code> 在 ACL4SSR 中可能对应多个细分文件。你需要确保 <code>rules</code> 中引用的规则集名称和 <code>rule-providers</code> 中定义的名称一一对应。</p><p><strong>第四步：清理缓存。</strong> 切换后建议删除客户端缓存的旧规则文件（通常在配置目录的 <code>ruleset</code> 子目录下），让客户端重新下载新规则。</p><p>一个从 Loyalsoldier 切换到 MetaCubeX MRS 格式的示例对比：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 切换前（Loyalsoldier，YAML 文本格式）</span></span><br><span class="line"><span class="attr">rule-providers:</span></span><br><span class="line">  <span class="attr">proxy:</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">http</span></span><br><span class="line">    <span class="attr">behavior:</span> <span class="string">domain</span></span><br><span class="line">    <span class="attr">url:</span> <span class="string">&quot;https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/proxy.txt&quot;</span></span><br><span class="line">    <span class="attr">path:</span> <span class="string">./ruleset/proxy.yaml</span></span><br><span class="line">    <span class="attr">interval:</span> <span class="number">86400</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 切换后（MetaCubeX，MRS 二进制格式）</span></span><br><span class="line"><span class="attr">rule-providers:</span></span><br><span class="line">  <span class="attr">proxy:</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">http</span></span><br><span class="line">    <span class="attr">behavior:</span> <span class="string">domain</span></span><br><span class="line">    <span class="attr">format:</span> <span class="string">mrs</span></span><br><span class="line">    <span class="attr">url:</span> <span class="string">&quot;https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/geolocation-!cn.mrs&quot;</span></span><br><span class="line">    <span class="attr">path:</span> <span class="string">./ruleset/proxy.mrs</span></span><br><span class="line">    <span class="attr">interval:</span> <span class="number">86400</span></span><br></pre></td></tr></table></figure><hr><h2 id="实际选择建议"><a href="#实际选择建议" class="headerlink" title="实际选择建议"></a>实际选择建议</h2><p><strong>如果你是新手</strong>，选 Loyalsoldier。它的文档最全，社区教程最多，出了问题容易搜到解决方案。分类按大类划分，不会让你面对几十个策略组手足无措。</p><p><strong>如果你使用 mihomo 内核，且追求性能</strong>，选 MetaCubeX&#x2F;meta-rules-dat。MRS 格式在路由器等低性能设备上优势明显，而且作为官方项目与 mihomo 的兼容性永远是最好的。</p><p><strong>如果你需要对每个流媒体&#x2F;服务做独立路由</strong>，选 ACL4SSR。Netflix 走美国、Disney+ 走新加坡、Spotify 走日本——这种逐服务精细控制的需求，ACL4SSR 的细分类别最为匹配。</p><p><strong>如果你在多个内核间切换</strong>，优先考虑 Loyalsoldier 的文本格式，因为它的兼容性最广。MRS 是 mihomo 专用格式，切换到其他内核时无法直接使用。</p><p>当然，这三个项目并不互斥。你完全可以混合使用——大部分规则用 Loyalsoldier，流媒体细分部分用 ACL4SSR 的文件。只要在 <code>rule-providers</code> 中正确配置每个文件的来源，客户端不在乎它们来自不同的项目。</p><hr><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="规则集需要手动更新吗？"><a href="#规则集需要手动更新吗？" class="headerlink" title="规则集需要手动更新吗？"></a>规则集需要手动更新吗？</h3><p>不需要。配置中的 <code>interval</code> 参数指定了自动更新间隔（单位为秒）。设为 <code>86400</code> 表示每天更新一次。客户端会在后台自动下载最新版本的规则文件。你也可以在客户端界面中手动触发更新。</p><h3 id="规则集文件下载失败怎么办？"><a href="#规则集文件下载失败怎么办？" class="headerlink" title="规则集文件下载失败怎么办？"></a>规则集文件下载失败怎么办？</h3><p>最常见的原因是网络问题——规则文件通常托管在 GitHub 上，而 GitHub 在国内可能访问不畅。解决方案有两个：一是使用 CDN 加速地址（如 <code>cdn.jsdelivr.net</code>），二是确保代理已经启动后再更新规则（先手动连一个节点，再触发规则更新）。</p><h3 id="三个项目会互相冲突吗？"><a href="#三个项目会互相冲突吗？" class="headerlink" title="三个项目会互相冲突吗？"></a>三个项目会互相冲突吗？</h3><p>不会。它们只是规则的来源不同，最终在客户端中都是作为 Rule Provider 加载的。只要你在配置文件中给它们取不同的名字，客户端会分别下载和管理。但要注意避免同一个域名在不同规则集中被指向不同策略——先匹配到的规则会生效。</p><h3 id="用了规则集还需要-GeoIP-GeoSite-吗？"><a href="#用了规则集还需要-GeoIP-GeoSite-吗？" class="headerlink" title="用了规则集还需要 GeoIP&#x2F;GeoSite 吗？"></a>用了规则集还需要 GeoIP&#x2F;GeoSite 吗？</h3><p>规则集和 GeoIP&#x2F;GeoSite 可以互补使用。典型做法是规则集处理已知的域名，<code>GEOIP,CN,DIRECT</code> 作为兜底规则处理剩余的中国 IP 流量。如果你使用 MetaCubeX 的 GeoSite 规则，那它本身就替代了域名规则集的角色——两者选其一即可，不需要重复配置。</p><h3 id="Sing-box-能用这些规则集吗？"><a href="#Sing-box-能用这些规则集吗？" class="headerlink" title="Sing-box 能用这些规则集吗？"></a>Sing-box 能用这些规则集吗？</h3><p>不能直接使用。Clash 的规则集格式（YAML 文本或 MRS 二进制）和 Sing-box 的规则集格式（JSON &#x2F; SRS 二进制）是不同的。如果你使用 Sing-box，需要使用专门为 Sing-box 准备的规则集，或通过转换工具转换。关于两者的规则差异，可以参考 <a href="/posts/singbox-vs-clash-rules/">Sing-box 的路由规则与 Clash 规则的区别</a>。</p>]]></content>
      
      
      <categories>
          
          <category> 规则与分流 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> Clash </tag>
            
            <tag> 规则集 </tag>
            
            <tag> Loyalsoldier </tag>
            
            <tag> ACL4SSR </tag>
            
            <tag> MetaCubeX </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>代理能做什么、不能做什么（安全与隐私的边界）</title>
      <link href="/posts/privacy-boundaries/"/>
      <url>/posts/privacy-boundaries/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：很多人以为用了代理就”完全匿名”了，这是一个危险的误解。代理能帮你访问被封锁的网站，但它不是隐私的万能盾牌。本文明确代理在安全和隐私方面的能力边界，帮你建立正确的预期。</p></blockquote><hr><h2 id="代理能做什么"><a href="#代理能做什么" class="headerlink" title="代理能做什么"></a>代理能做什么</h2><p>先说清楚代理确实能帮你解决的问题。这些是代理的核心能力，也是大多数人使用代理的理由。</p><h3 id="访问被封锁的网站"><a href="#访问被封锁的网站" class="headerlink" title="访问被封锁的网站"></a>访问被封锁的网站</h3><p>这是最基本的功能。Google、YouTube、Twitter&#x2F;X、ChatGPT、Claude、Wikipedia——这些被 GFW 屏蔽的服务，通过代理都能正常访问。你的流量绕过了 GFW 的封锁，经由境外服务器到达目标网站，审查系统无法阻断这条路径。</p><h3 id="加密你和代理服务器之间的通信"><a href="#加密你和代理服务器之间的通信" class="headerlink" title="加密你和代理服务器之间的通信"></a>加密你和代理服务器之间的通信</h3><p>现代代理协议（VLESS+Reality、Trojan、Hysteria2 等）都会对你和代理服务器之间的流量进行加密。这意味着你的互联网服务提供商（ISP）无法看到你传输的具体内容。ISP 能看到你在和某个 IP 通信，但看不到你在干什么。</p><h3 id="隐藏你的真实-IP"><a href="#隐藏你的真实-IP" class="headerlink" title="隐藏你的真实 IP"></a>隐藏你的真实 IP</h3><p>目标网站看到的是代理服务器的 IP 地址，而不是你的真实 IP。Google 不知道你在北京还是上海，它只知道有个来自东京（或洛杉矶、新加坡）的连接在访问它。这对基本的隐私保护是有意义的。</p><h3 id="绕过-DNS-污染"><a href="#绕过-DNS-污染" class="headerlink" title="绕过 DNS 污染"></a>绕过 DNS 污染</h3><p>GFW 的一个重要封锁手段是 DNS 污染——当你查询被屏蔽域名时，返回一个错误的 IP 地址。代理客户端（特别是使用 Fake-IP 模式时）可以完全绕过这个问题，DNS 解析在代理服务器的远端进行，不受本地污染影响。</p><h3 id="防止-ISP-窥视你的访问目标"><a href="#防止-ISP-窥视你的访问目标" class="headerlink" title="防止 ISP 窥视你的访问目标"></a>防止 ISP 窥视你的访问目标</h3><p>配置得当的情况下，ISP 无法知道你具体访问了哪些网站。如果使用 Reality 技术，ISP 看到的只是你在和某个看似正常的网站进行 HTTPS 通信。它知道你在上网，但不知道你在用代理，更不知道你的最终目标。</p><h3 id="解锁地区限制内容"><a href="#解锁地区限制内容" class="headerlink" title="解锁地区限制内容"></a>解锁地区限制内容</h3><p>Netflix 的美区内容、日区动画、Disney+ 独占剧集、Spotify 的完整曲库、ChatGPT 和 Claude 的无限制访问——这些有地域限制的服务，通过连接到对应地区的代理节点就能解锁。代理让你的网络出口”搬”到了另一个国家。</p><hr><h2 id="代理不能做什么"><a href="#代理不能做什么" class="headerlink" title="代理不能做什么"></a>代理不能做什么</h2><p>这部分才是本文的重点。很多人在这些问题上存在严重的误解，而误解可能带来真实的风险。</p><h3 id="不能让你完全匿名"><a href="#不能让你完全匿名" class="headerlink" title="不能让你完全匿名"></a>不能让你完全匿名</h3><p>这是最常见也最危险的误区。代理提供的是<strong>有限的隐私保护</strong>，远远不是匿名。</p><p><strong>代理运营者能看到你的流量元数据。</strong> 你访问了哪些域名、什么时间访问、访问了多长时间、流量大小——这些信息对代理运营者（机场）来说是透明的。虽然 HTTPS 保护了具体的传输内容（运营者看不到你在 Google 上搜了什么），但你访问了 Google 这件事本身是可见的。</p><p><strong>你的真实 IP 对代理运营者是已知的。</strong> 你连接代理服务器时，服务器知道你的来源 IP。这是 TCP&#x2F;IP 协议的基本特性，代理无法改变这一点。如果运营者记录了日志，你的真实 IP 和访问记录就是关联在一起的。</p><p><strong>浏览器指纹仍然可以识别你。</strong> 即使你换了 IP，网站仍然可以通过浏览器指纹技术识别你——屏幕分辨率、已安装的字体、浏览器插件、Canvas 渲染特征、WebGL 信息……这些参数的组合几乎是独一无二的。换了 IP 但用同一个浏览器，对精确追踪来说没有本质区别。</p><p><strong>Cookies 和登录状态不会因为用了代理就消失。</strong> 你在 A 地登录了 Google 账号，切到代理后仍然是同一个账号。Google 知道你是谁，不管你的 IP 来自哪里。</p><p><strong>如果你需要真正的匿名性</strong>，应该考虑 <a href="https://www.torproject.org/">Tor 网络</a>。Tor 通过三层中继节点传递流量，没有任何单一节点能同时知道你的身份和你的目标。但 Tor 的代价是速度极慢（通常只有几百 Kbps 到几 Mbps），而且使用体验很差。对绝大多数人来说，Tor 解决的是不同层级的问题——它适合记者、活动人士等有极端匿名需求的人，不适合日常使用。</p><h3 id="不能保护你在代理关闭时"><a href="#不能保护你在代理关闭时" class="headerlink" title="不能保护你在代理关闭时"></a>不能保护你在代理关闭时</h3><p>代理只在运行时有效。这听起来像废话，但很多人忽略了这个事实的实际影响。</p><p><strong>代理断开的瞬间，你的流量直接暴露。</strong> 如果你正在浏览敏感内容时代理意外断开，后续的请求会通过你的真实网络直接发出。某些应用可能在代理断开后继续保持连接，这些连接现在是不受保护的。</p><p><strong>DNS 缓存可能泄露之前的活动。</strong> 即使你关闭了代理，操作系统的 DNS 缓存中可能还保留着你之前解析过的域名。技术上来说，有人查看你的 DNS 缓存就能知道你访问过哪些网站。</p><p><strong>应对措施：</strong></p><ul><li>使用 TUN 模式而非系统代理——TUN 模式接管所有流量，不会有应用”漏网”。</li><li>部分客户端有”断网保护”（Kill Switch）功能：代理断开时，自动切断所有网络连接，防止流量泄露。</li><li>敏感浏览结束后，清除浏览器数据和系统 DNS 缓存（Windows 上运行 <code>ipconfig /flushdns</code>）。</li></ul><h3 id="不能防止你自己泄漏信息"><a href="#不能防止你自己泄漏信息" class="headerlink" title="不能防止你自己泄漏信息"></a>不能防止你自己泄漏信息</h3><p>代理加密的是传输通道，不是你的身份。这两者的区别至关重要。</p><p><strong>如果你通过代理登录了实名账号，你的身份就是已知的。</strong> 用代理打开微博然后登录自己的账号，微博知道你是谁——代理只是帮你换了个 IP，你的用户身份没有变。用代理发了一条 Twitter，如果你的 Twitter 账号绑定了手机号或与真实身份有关联，这条推文就不是匿名的。</p><p><strong>支付行为直接关联身份。</strong> 通过代理使用支付宝、微信支付、银行卡购物——所有这些操作都携带着你的真实身份信息。代理不会隐藏你的支付凭证。</p><p><strong>社交媒体上的信息自带识别性。</strong> 你发的照片可能包含 EXIF 信息（拍摄时间、GPS 坐标、设备型号），你的文字风格、发帖时间规律、社交关系网络——这些都是识别手段，与 IP 地址无关。</p><p>核心原则：<strong>代理保护的是你的网络路径，不是你的行为模式。</strong> 如果你的行为本身带有识别性，再多层加密也帮不了你。</p><h3 id="不能防止所有类型的监控"><a href="#不能防止所有类型的监控" class="headerlink" title="不能防止所有类型的监控"></a>不能防止所有类型的监控</h3><p>代理工作在网络层。如果威胁来自其他层面，代理完全无能为力。</p><p><strong>如果你的设备已被入侵，代理毫无意义。</strong> 恶意软件、键盘记录器、远程控制木马——这些在操作系统层面运行的威胁可以直接读取你的屏幕内容、键盘输入、文件系统。你的流量经过多少层加密都没用，因为恶意软件看到的是加密之前的明文。</p><p><strong>物理访问大于一切软件保护。</strong> 如果有人能直接接触你的设备（解锁的手机、未加密的电脑硬盘），任何网络层面的安全措施都失去意义。这不是代理的问题，是整个信息安全的基本原理。</p><p><strong>执法机构可以通过法律途径获取数据。</strong> 如果代理运营者（机场）在某个国家的管辖范围内，该国执法机构可以通过法律程序要求运营者提供用户数据。运营者是否记录日志、记录了多少、保留多久——这些问题的答案决定了数据能被追溯到什么程度。</p><hr><h2 id="谁能看到什么——一张图看清隐私边界"><a href="#谁能看到什么——一张图看清隐私边界" class="headerlink" title="谁能看到什么——一张图看清隐私边界"></a>谁能看到什么——一张图看清隐私边界</h2><p>理解隐私保护的关键，是搞清楚在不同场景下，各方能看到哪些信息。</p><h3 id="没有代理时"><a href="#没有代理时" class="headerlink" title="没有代理时"></a>没有代理时</h3><table><thead><tr><th>谁</th><th>能看到什么</th></tr></thead><tbody><tr><td>ISP（你的宽带运营商）</td><td>所有流量：你访问的域名、目标 IP；如果目标网站没用 HTTPS，甚至能看到传输内容</td></tr><tr><td>GFW</td><td>与 ISP 相同——所有经过国际出口的流量</td></tr><tr><td>目标网站</td><td>你的真实 IP 地址、浏览器指纹、Cookies</td></tr><tr><td>同一 WiFi 的其他人</td><td>如果网络未加密或使用共享密码：可看到未加密的流量（现在大部分网站用 HTTPS，风险已大幅降低）</td></tr></tbody></table><h3 id="使用代理后"><a href="#使用代理后" class="headerlink" title="使用代理后"></a>使用代理后</h3><table><thead><tr><th>谁</th><th>能看到什么</th></tr></thead><tbody><tr><td>ISP</td><td>你在和代理服务器通信，但不知道最终目标是什么</td></tr><tr><td>GFW</td><td>与 ISP 类似；如果用了 Reality，只看到你在和一个正常网站做 HTTPS 通信</td></tr><tr><td>代理运营者（机场）</td><td>你的真实 IP + 你访问的域名 + 流量大小和时间（但看不到 HTTPS 加密的内容）</td></tr><tr><td>目标网站</td><td>代理节点的 IP 地址——不是你的真实 IP</td></tr><tr><td>同一 WiFi 的其他人</td><td>只看到你和代理服务器之间的加密流量，无法读取内容</td></tr></tbody></table><h3 id="使用-Tor-后（对比参考）"><a href="#使用-Tor-后（对比参考）" class="headerlink" title="使用 Tor 后（对比参考）"></a>使用 Tor 后（对比参考）</h3><table><thead><tr><th>谁</th><th>能看到什么</th></tr></thead><tbody><tr><td>ISP</td><td>你在使用 Tor（但不知道最终目标）</td></tr><tr><td>Tor 入口节点</td><td>你的真实 IP（但不知道你的目标）</td></tr><tr><td>Tor 中间节点</td><td>只知道上一跳和下一跳，不知道来源和目标</td></tr><tr><td>Tor 出口节点</td><td>目标网站地址（但不知道你的真实 IP）</td></tr><tr><td>目标网站</td><td>Tor 出口节点的 IP</td></tr><tr><td>完整路径</td><td><strong>没有任何一方能同时看到你的身份和你的目标</strong></td></tr></tbody></table><p>这三张表的对比清晰地展示了：代理把”谁能看到什么”的权力从 ISP 和 GFW 转移到了代理运营者手中。你信任 ISP 和 GFW 还是信任机场——这是你做选择时需要权衡的本质问题。而 Tor 更进一步，把信任分散到了多个互不相知的节点上，代价是性能的大幅下降。</p><hr><h2 id="选择代理服务时的隐私考量"><a href="#选择代理服务时的隐私考量" class="headerlink" title="选择代理服务时的隐私考量"></a>选择代理服务时的隐私考量</h2><p>既然代理运营者是隐私链条中最关键的一环，选择机场时就不能只看速度和价格。</p><p><strong>运营者所在的司法管辖区很重要。</strong> 不同国家对数据保留的法律要求不同。有些国家要求服务商保留用户连接日志，有些没有这类要求。运营者注册在哪个国家、服务器部署在哪些国家——这些信息会影响你的数据在法律层面的安全性。</p><p><strong>日志政策决定了追溯能力。</strong> 运营者是否记录你的连接日志？记录了哪些字段？保留多长时间？声称”无日志”（no-log）的服务是否经过独立审计验证？遗憾的是，大部分机场在这方面并不透明，你只能基于口碑和信任做判断。</p><p><strong>支付方式影响匿名性。</strong> 用信用卡或支付宝付费，你的身份直接与机场账号关联。用加密货币付费，身份关联性更低（但不是完全匿名——区块链交易是可追溯的）。对大多数人来说，这个差异不大；但如果你有强隐私需求，支付方式值得考虑。</p><p><strong>共享 IP vs. 独立 IP。</strong> 大部分机场使用共享 IP，即多个用户共享同一个出口 IP。这在隐私角度反而是优势——流量混在一起，更难追溯到具体个人。独立 IP 的好处是稳定性和解锁能力，但隐私性更低。</p><p><strong>运营历史和声誉。</strong> 运营时间长的机场通常更可信——如果一个机场已经稳定运营了三五年且没有曝出过隐私丑闻，相比新出现的不知名服务，可信度更高。但这不是绝对的保证。</p><p><strong>务实的结论：</strong> 对绝大多数普通用户来说，选择一个口碑好、运营稳定的付费机场，配合正确的客户端配置，已经提供了足够的隐私保护。你不需要做到无懈可击——你只需要让追踪你的成本高于追踪你的价值。</p><hr><h2 id="实用安全建议"><a href="#实用安全建议" class="headerlink" title="实用安全建议"></a>实用安全建议</h2><p>以下是每个代理用户都应该遵守的基本安全原则：</p><ol><li><strong>不要因为有了代理就放松警惕。</strong> 代理改变了你的网络路径，但不改变你的行为后果。通过代理做的事情仍然有现实世界的影响。</li><li><strong>确保访问 HTTPS 网站。</strong> 绝大部分现代网站已经使用 HTTPS，但仍要注意浏览器地址栏的锁图标。HTTPS 在代理隧道之外提供了一层端到端加密——即使代理运营者也无法读取加密的内容。</li><li><strong>匿名需求与实名账号不兼容。</strong> 如果你在某个场景下需要匿名，不要登录任何与真实身份关联的账号。使用独立的浏览器配置文件（Profile），不要与日常浏览混用。</li><li><strong>敏感浏览后清理痕迹。</strong> 清除浏览器 Cookies、历史记录、DNS 缓存。或者更简单的方式：直接使用浏览器的隐私模式（无痕模式）进行敏感浏览。</li><li><strong>为代理浏览使用独立的浏览器配置。</strong> 在 Chrome 或 Firefox 中创建一个专门用于代理浏览的 Profile，安装 uBlock Origin 等隐私扩展，不登录任何个人账号。</li><li><strong>保持设备自身的安全。</strong> 及时更新操作系统和应用程序，不安装来路不明的软件，不使用盗版软件（这是恶意软件的主要传播渠道之一）。代理保护不了一台已经被入侵的设备。</li><li><strong>如果你需要真正的匿名：使用 <a href="https://www.torproject.org/">Tor</a>，而不是普通的代理服务。</strong> Tor 的设计目标就是匿名性，它为此牺牲了速度和便利性。普通代理的设计目标是绕过封锁和提供基本隐私，两者不是一回事。</li></ol><hr><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="Q-机场运营者能看到我的密码吗？"><a href="#Q-机场运营者能看到我的密码吗？" class="headerlink" title="Q: 机场运营者能看到我的密码吗？"></a>Q: 机场运营者能看到我的密码吗？</h3><p>如果你访问的是 HTTPS 网站（现在几乎所有网站都是），不能。HTTPS 在代理隧道之外还有一层端到端加密，运营者能看到你访问了 <code>accounts.google.com</code>，但看不到你输入的用户名和密码，也看不到页面的具体内容。</p><p>但如果你访问的是 HTTP（没有加密的）网站，运营者理论上可以看到所有传输内容，包括密码。所以永远不要在非 HTTPS 网站上输入任何敏感信息。</p><h3 id="Q-用了代理做违法的事会被追踪吗？"><a href="#Q-用了代理做违法的事会被追踪吗？" class="headerlink" title="Q: 用了代理做违法的事会被追踪吗？"></a>Q: 用了代理做违法的事会被追踪吗？</h3><p>可能。如果执法机构要求代理运营者提供日志，且运营者在其管辖范围内（或愿意配合），你的活动可以被追溯。代理隐藏了你的 IP 不等于隐藏了你的身份——IP 只是追踪手段之一。代理不是法外之地，不要把它当成违法行为的保护伞。</p><h3 id="Q-免费代理安全吗？"><a href="#Q-免费代理安全吗？" class="headerlink" title="Q: 免费代理安全吗？"></a>Q: 免费代理安全吗？</h3><p>通常不安全。运营代理服务需要服务器和带宽成本，免费服务必须有其他盈利方式。常见的模式包括：收集并出售用户浏览数据、在网页中注入广告、作为流量中间人进行更恶劣的操作。有一句话说得好：如果你不为产品付费，你自己就是产品。</p><p>少数免费代理是靠社区捐赠或公益性质运营的，但这类服务通常不稳定，也不适合对隐私有要求的用户。</p><h3 id="Q-浏览器的”无痕模式”-代理是否足够安全？"><a href="#Q-浏览器的”无痕模式”-代理是否足够安全？" class="headerlink" title="Q: 浏览器的”无痕模式”+ 代理是否足够安全？"></a>Q: 浏览器的”无痕模式”+ 代理是否足够安全？</h3><p>取决于你对”安全”的定义。无痕模式解决的是<strong>本地隐私</strong>——关闭窗口后不留下浏览记录、Cookies 和缓存。代理解决的是<strong>网络隐私</strong>——ISP 和 GFW 看不到你的访问内容。两者针对不同层面的问题，互相补充但不能互相替代。</p><p>两者结合使用是一个不错的实践：无痕模式确保本地不留痕迹，代理确保网络路径上的隐私。但即便如此，你仍然不是”匿名”的——浏览器指纹、登录行为、行为模式等仍然可以识别你。</p><h3 id="Q-代理和-VPN-在隐私保护上有区别吗？"><a href="#Q-代理和-VPN-在隐私保护上有区别吗？" class="headerlink" title="Q: 代理和 VPN 在隐私保护上有区别吗？"></a>Q: 代理和 VPN 在隐私保护上有区别吗？</h3><p>从隐私角度看，本质上没有太大区别——两者都是把信任从 ISP 转移到了服务提供商。你信任 ExpressVPN 还是信任你的机场运营者，这是一个信任选择的问题，而不是技术架构上的隐私差异。商业 VPN 服务通常会接受独立安全审计来证明其无日志政策，这一点大部分机场做不到。但商业 VPN 在中国的可用性远不如专用代理协议。</p>]]></content>
      
      
      <categories>
          
          <category> 入门指南 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> 隐私 </tag>
            
            <tag> 安全 </tag>
            
            <tag> 新手入门 </tag>
            
            <tag> 匿名 </tag>
            
            <tag> Tor </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>Windows / macOS / iOS / Android 平台特有问题</title>
      <link href="/posts/platform-specific/"/>
      <url>/posts/platform-specific/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：代理工具的功能在各平台上大同小异，但操作系统层面的差异会带来平台特有的问题。Windows 的 UWP 应用绕过系统代理、macOS 的 Gatekeeper 阻止未签名应用、iOS 需要非中国区 Apple ID 才能安装客户端、Android 的电池优化杀死后台代理进程——这些问题与代理协议无关，但切实影响使用体验。本文按平台整理常见问题及其解决方法。</p></blockquote><hr><h2 id="Windows-平台"><a href="#Windows-平台" class="headerlink" title="Windows 平台"></a>Windows 平台</h2><h3 id="问题一：UWP-应用绕过系统代理"><a href="#问题一：UWP-应用绕过系统代理" class="headerlink" title="问题一：UWP 应用绕过系统代理"></a>问题一：UWP 应用绕过系统代理</h3><p><strong>症状</strong>：设置了系统代理后，Chrome、Firefox 等传统桌面应用正常走代理，但 Microsoft Store 应用（如 Windows 自带的邮件、日历、微软商店本身）无法通过代理联网，或者直接走了直连。</p><p><strong>原因</strong>：Windows 的 UWP（Universal Windows Platform）应用运行在沙箱环境中，默认无法访问 <code>localhost</code>（环路地址）。而系统代理通常监听在 <code>127.0.0.1</code> 上，UWP 应用因为无法连接到这个地址而绕过了代理。</p><p><strong>解决方案</strong>：</p><p>方案一：使用 TUN 模式替代系统代理。TUN 模式在网络层接管所有流量，包括 UWP 应用的流量。这是最彻底的解决方案，也是现在的主流推荐方式。</p><p>方案二：使用 Windows 的 <code>CheckNetIsolation</code> 工具为 UWP 应用解除环路地址限制：</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看所有 UWP 应用的网络隔离状态</span></span><br><span class="line">CheckNetIsolation.exe LoopbackExempt <span class="literal">-s</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 为所有 UWP 应用启用环路访问</span></span><br><span class="line"><span class="keyword">FOR</span> /F <span class="string">&quot;tokens=11 delims=\&quot;</span> %p <span class="keyword">IN</span> (<span class="string">&#x27;REG QUERY &quot;HKCU\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer\Mappings&quot;&#x27;</span>) <span class="keyword">DO</span> CheckNetIsolation.exe LoopbackExempt <span class="literal">-a</span> <span class="literal">-p</span>=%p</span><br></pre></td></tr></table></figure><p>部分代理客户端（如 Clash Verge Rev）内置了”UWP Loopback”功能，一键解决此问题。</p><h3 id="问题二：Windows-Defender-误报或阻止代理客户端"><a href="#问题二：Windows-Defender-误报或阻止代理客户端" class="headerlink" title="问题二：Windows Defender 误报或阻止代理客户端"></a>问题二：Windows Defender 误报或阻止代理客户端</h3><p><strong>症状</strong>：下载的代理客户端被 Windows Defender 标记为恶意软件并自动删除，或者运行时被实时保护拦截。</p><p><strong>原因</strong>：代理客户端的行为模式（监听端口、拦截网络流量、修改系统代理设置）与某些恶意软件相似，容易触发启发式检测。此外，部分代理客户端使用了代码混淆或非标准打包方式，增加了被误报的概率。</p><p><strong>解决方案</strong>：</p><ol><li>在 Windows Security → Virus &amp; threat protection → Exclusions 中添加代理客户端的安装目录为排除项</li><li>如果客户端已被删除，先添加排除项，再重新下载</li><li>确保从官方 GitHub Release 页面下载客户端，避免使用来源不明的版本</li></ol><p><strong>注意</strong>：只排除你信任的、从官方渠道获取的客户端。不要为任何不明来源的程序添加排除项。</p><h3 id="问题三：系统代理对部分应用不生效"><a href="#问题三：系统代理对部分应用不生效" class="headerlink" title="问题三：系统代理对部分应用不生效"></a>问题三：系统代理对部分应用不生效</h3><p><strong>症状</strong>：设置了系统代理，但某些应用（如 Git、curl 命令行工具、某些游戏）仍然不走代理，直接连接目标地址。</p><p><strong>原因</strong>：Windows 的”系统代理”实际上是 IE&#x2F;WinHTTP 代理设置，只有使用 WinInet 或 WinHTTP 库的应用会遵循这个设置。很多应用有自己的网络实现，不读取系统代理配置。</p><p><strong>解决方案</strong>：</p><ul><li><strong>最佳方案</strong>：使用 TUN 模式。TUN 模式在网络接口层接管流量，所有应用的流量都会经过代理，无论它们是否遵循系统代理设置</li><li><strong>Git 等命令行工具</strong>：手动设置代理环境变量<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Git 配置代理</span></span><br><span class="line">git config --global http.proxy http://127.0.0.1:7890</span><br><span class="line">git config --global https.proxy http://127.0.0.1:7890</span><br></pre></td></tr></table></figure></li><li><strong>终端全局代理</strong>：在 PowerShell 或 CMD 中设置环境变量<figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="variable">$env:HTTP_PROXY</span> = <span class="string">&quot;http://127.0.0.1:7890&quot;</span></span><br><span class="line"><span class="variable">$env:HTTPS_PROXY</span> = <span class="string">&quot;http://127.0.0.1:7890&quot;</span></span><br></pre></td></tr></table></figure></li></ul><h3 id="问题四：WSL2-内无法使用宿主机代理"><a href="#问题四：WSL2-内无法使用宿主机代理" class="headerlink" title="问题四：WSL2 内无法使用宿主机代理"></a>问题四：WSL2 内无法使用宿主机代理</h3><p><strong>症状</strong>：在 WSL2（Windows Subsystem for Linux 2）中运行的程序无法通过宿主机的代理上网。直接设置 <code>export http_proxy=http://127.0.0.1:7890</code> 不生效。</p><p><strong>原因</strong>：WSL2 运行在一个独立的虚拟网络中，与宿主机不共享 <code>127.0.0.1</code>。WSL2 的 <code>localhost</code> 指向的是 WSL2 虚拟机自身，而非宿主机。</p><p><strong>解决方案</strong>：</p><p>方案一：让代理客户端监听在 <code>0.0.0.0</code> 而非 <code>127.0.0.1</code>（允许局域网连接），然后在 WSL2 中使用宿主机的内网 IP：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 获取宿主机 IP（WSL2 中执行）</span></span><br><span class="line">host_ip=$(<span class="built_in">cat</span> /etc/resolv.conf | grep nameserver | awk <span class="string">&#x27;&#123;print $2&#125;&#x27;</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 设置代理</span></span><br><span class="line"><span class="built_in">export</span> http_proxy=<span class="string">&quot;http://<span class="variable">$&#123;host_ip&#125;</span>:7890&quot;</span></span><br><span class="line"><span class="built_in">export</span> https_proxy=<span class="string">&quot;http://<span class="variable">$&#123;host_ip&#125;</span>:7890&quot;</span></span><br></pre></td></tr></table></figure><p>方案二：在 WSL2 的 <code>.wslconfig</code> 或 <code>wsl.conf</code> 中启用镜像网络模式（Windows 11 22H2+）：</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># %USERPROFILE%\.wslconfig</span></span><br><span class="line"><span class="section">[wsl2]</span></span><br><span class="line"><span class="attr">networkingMode</span>=mirrored</span><br></pre></td></tr></table></figure><p>镜像网络模式下，WSL2 与宿主机共享网络栈，<code>127.0.0.1</code> 指向同一地址，代理直接可用。</p><hr><h2 id="macOS-平台"><a href="#macOS-平台" class="headerlink" title="macOS 平台"></a>macOS 平台</h2><h3 id="问题一：权限问题导致代理客户端无法正常运行"><a href="#问题一：权限问题导致代理客户端无法正常运行" class="headerlink" title="问题一：权限问题导致代理客户端无法正常运行"></a>问题一：权限问题导致代理客户端无法正常运行</h3><p><strong>症状</strong>：代理客户端安装后，启动 TUN 模式时提示需要管理员权限，或者反复弹出密码输入框。部分客户端在系统更新后需要重新授权。</p><p><strong>原因</strong>：macOS 的 TUN 模式需要创建虚拟网络接口，这是系统级操作，需要 root 权限。macOS 通过 Network Extension 框架管理这类权限，每次系统更新后可能需要重新授权。</p><p><strong>解决方案</strong>：</p><ol><li>在 System Settings → Privacy &amp; Security → Network Extensions 中确认代理客户端的网络扩展已被允许</li><li>首次使用时按提示输入管理员密码进行授权</li><li>如果频繁要求重新授权，尝试删除客户端后重新安装，然后从头完成授权流程</li><li>确保客户端版本是最新的——旧版本可能不适配新版 macOS 的权限要求</li></ol><h3 id="问题二：Gatekeeper-阻止未签名应用"><a href="#问题二：Gatekeeper-阻止未签名应用" class="headerlink" title="问题二：Gatekeeper 阻止未签名应用"></a>问题二：Gatekeeper 阻止未签名应用</h3><p><strong>症状</strong>：从 GitHub 下载的代理客户端（如 Clash Verge Rev、V2rayU 等）双击后弹出提示：”无法打开，因为 Apple 无法验证是否包含恶意软件”或”来自身份不明的开发者”。</p><p><strong>原因</strong>：macOS 的 Gatekeeper 安全机制默认阻止未经 Apple 签名或公证的应用运行。大多数开源代理客户端没有 Apple Developer ID 签名。</p><p><strong>解决方案</strong>：</p><p>方法一：右键点击应用图标，选择”打开”。这种方式会额外提供一个”仍然打开”的选项，允许一次性绕过 Gatekeeper 检查。</p><p>方法二：在终端中移除应用的隔离属性：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> xattr -rd com.apple.quarantine /Applications/ClashVergeRev.app</span><br></pre></td></tr></table></figure><p>方法三：在 System Settings → Privacy &amp; Security 中找到被阻止的应用，点击”仍然允许”。</p><h3 id="问题三：网络扩展冲突"><a href="#问题三：网络扩展冲突" class="headerlink" title="问题三：网络扩展冲突"></a>问题三：网络扩展冲突</h3><p><strong>症状</strong>：同时安装了多个使用 Network Extension 的应用（如代理客户端 + VPN + 企业安全软件），导致网络异常：无法上网、DNS 解析失败、或者代理不生效。</p><p><strong>原因</strong>：macOS 的 Network Extension 框架对同时激活的扩展数量和类型有限制。多个应用争夺同一网络接口的控制权时，可能导致冲突。</p><p><strong>解决方案</strong>：</p><ol><li>确保同一时间只有一个代理&#x2F;VPN 客户端的 Network Extension 处于激活状态</li><li>在 System Settings → VPN &amp; Network 中检查网络扩展列表，禁用不需要的扩展</li><li>如果需要同时使用企业 VPN 和代理客户端，考虑使用分应用代理——让企业 VPN 处理企业流量，代理客户端处理其他流量</li></ol><h3 id="问题四：macOS-Ventura-的后台限制"><a href="#问题四：macOS-Ventura-的后台限制" class="headerlink" title="问题四：macOS Ventura+ 的后台限制"></a>问题四：macOS Ventura+ 的后台限制</h3><p><strong>症状</strong>：macOS Ventura（13.0）及更高版本中，代理客户端在后台运行时偶尔被系统终止或限制网络访问。</p><p><strong>原因</strong>：macOS Ventura 引入了更严格的后台应用管理。系统可能在内存压力下终止后台应用，或限制其网络权限。</p><p><strong>解决方案</strong>：</p><ol><li>在 System Settings → General → Login Items &amp; Extensions 中确保代理客户端在”Allow in the Background”列表中</li><li>在客户端设置中启用”开机自启动”和”保持后台运行”选项</li><li>避免同时运行过多高内存占用的应用，减少系统内存压力</li></ol><hr><h2 id="iOS-平台"><a href="#iOS-平台" class="headerlink" title="iOS 平台"></a>iOS 平台</h2><h3 id="问题一：需要非中国区-Apple-ID-才能下载客户端"><a href="#问题一：需要非中国区-Apple-ID-才能下载客户端" class="headerlink" title="问题一：需要非中国区 Apple ID 才能下载客户端"></a>问题一：需要非中国区 Apple ID 才能下载客户端</h3><p><strong>症状</strong>：在中国区 App Store 中搜索不到 Shadowrocket、Quantumult X、Surge 等代理客户端。</p><p><strong>原因</strong>：这些应用已从中国区 App Store 下架，符合中国法律要求。目前主流的 iOS 代理客户端只能在非中国区（如美国、香港、日本等）App Store 中下载。</p><p><strong>解决方案</strong>：</p><ol><li>注册一个非中国区的 Apple ID（推荐美区或日区）</li><li>在 App Store 中切换到该 Apple ID 进行下载</li><li>部分应用为付费应用（如 Shadowrocket 约 $2.99），需要该地区的支付方式（可以通过购买当地 App Store 礼品卡充值）</li><li>下载完成后可以切回中国区 Apple ID 日常使用，已下载的应用不会被删除</li></ol><p><strong>注意</strong>：不建议使用他人共享的 Apple ID 下载应用，存在隐私和安全风险。</p><h3 id="问题二：后台连接频繁断开"><a href="#问题二：后台连接频繁断开" class="headerlink" title="问题二：后台连接频繁断开"></a>问题二：后台连接频繁断开</h3><p><strong>症状</strong>：代理以 VPN 模式运行，但锁屏或切换到其他应用后，VPN 连接经常断开。返回应用后需要手动重连。</p><p><strong>原因</strong>：iOS 的后台管理机制非常激进——为了节省电量，系统会暂停甚至终止后台应用的网络活动。虽然 VPN 类应用有一定的后台特权，但在低电量模式或系统资源紧张时仍可能被限制。</p><p><strong>解决方案</strong>：</p><ol><li>确保关闭低电量模式（Settings → Battery → Low Power Mode）</li><li>在 Settings → General → Background App Refresh 中确保代理客户端的后台刷新已开启</li><li>在代理客户端的设置中启用”Always On”或”持久连接”选项（不同客户端名称不同）</li><li>使用 On Demand 规则自动重连：部分客户端支持配置 VPN On Demand 规则，在连接断开时自动重新连接</li><li>避免频繁切换代理客户端——每次切换都需要重新建立 VPN 隧道</li></ol><h3 id="问题三：电池消耗疑虑"><a href="#问题三：电池消耗疑虑" class="headerlink" title="问题三：电池消耗疑虑"></a>问题三：电池消耗疑虑</h3><p><strong>症状</strong>：在 Settings → Battery 中看到代理客户端（如 Shadowrocket）的电池使用比例很高，有时甚至超过 50%。</p><p><strong>原因</strong>：这是 iOS 电池统计的显示方式问题，不代表代理客户端真的消耗了那么多电量。由于所有网络流量都通过 VPN 隧道传输，iOS 会将所有通过隧道的流量产生的电量消耗都记在 VPN 应用名下——实际上这些电量是其他应用的网络活动产生的。</p><p><strong>解决方案</strong>：</p><p>这是正常现象，不需要特别处理。代理客户端本身的电量消耗通常很低。如果确实觉得电量下降过快，可以检查是否有应用通过代理产生了异常大的流量（如后台自动更新、视频缓存等），并在代理规则中优化分流。</p><h3 id="问题四：VPN-配置文件管理"><a href="#问题四：VPN-配置文件管理" class="headerlink" title="问题四：VPN 配置文件管理"></a>问题四：VPN 配置文件管理</h3><p><strong>症状</strong>：安装多个代理客户端后，iOS 的 VPN 配置列表中出现多个 VPN 条目，容易混淆。切换时偶尔出现配置文件冲突。</p><p><strong>原因</strong>：iOS 限制同一时间只能有一个 VPN 连接处于激活状态。多个代理客户端各自创建独立的 VPN 配置文件。</p><p><strong>解决方案</strong>：</p><ol><li>只保留一个常用的代理客户端，卸载不使用的客户端（卸载会同时删除其 VPN 配置）</li><li>在 Settings → VPN &amp; Device Management 中手动管理和删除不需要的 VPN 配置</li><li>如果需要在两个客户端之间切换，确保先断开当前 VPN 再连接另一个</li></ol><hr><h2 id="Android-平台"><a href="#Android-平台" class="headerlink" title="Android 平台"></a>Android 平台</h2><h3 id="问题一：电池优化杀死代理应用"><a href="#问题一：电池优化杀死代理应用" class="headerlink" title="问题一：电池优化杀死代理应用"></a>问题一：电池优化杀死代理应用</h3><p><strong>症状</strong>：代理应用在后台运行一段时间后被系统自动终止。锁屏后几分钟到几小时内，代理连接断开，需要手动打开应用重新连接。</p><p><strong>原因</strong>：Android 的电池优化（Battery Optimization）机制会自动终止后台应用以节省电量。不同厂商的 Android 定制系统（如华为 EMUI、小米 MIUI、OPPO ColorOS 等）在此基础上添加了更激进的后台管理策略。</p><p><strong>解决方案</strong>：</p><ol><li>在系统设置中为代理应用关闭电池优化：Settings → Battery → Battery Optimization → 找到代理应用 → 选择”Don’t optimize”</li><li>在厂商的后台管理设置中将代理应用加入白名单：<ul><li><strong>小米 MIUI</strong>：Settings → Apps → 代理应用 → Battery saver → No restrictions</li><li><strong>华为 EMUI</strong>：Settings → Battery → App launch → 关闭代理应用的”Manage automatically”</li><li><strong>OPPO ColorOS</strong>：Settings → Battery → 代理应用 → 允许后台运行</li></ul></li><li>锁定代理应用：在最近任务列表中长按代理应用的卡片，点击”锁定”（不同系统界面不同），防止被清理后台时关闭</li><li>开启代理应用的”前台常驻通知”选项——显示一个持久通知可以提高应用的进程优先级，降低被系统终止的概率</li></ol><h3 id="问题二：Per-App-Proxy-配置"><a href="#问题二：Per-App-Proxy-配置" class="headerlink" title="问题二：Per-App Proxy 配置"></a>问题二：Per-App Proxy 配置</h3><p><strong>症状</strong>：希望只有特定应用走代理（如浏览器），其他应用（如银行、游戏）不走代理。或者反过来，希望某些应用绕过代理。</p><p><strong>原因</strong>：Android 平台的代理客户端普遍支持 Per-App（分应用）代理功能，但配置方式因客户端而异。</p><p><strong>解决方案</strong>：</p><p>大多数 Android 代理客户端（如 Clash for Android、v2rayNG、NekoBox 等）都提供了分应用代理功能：</p><ol><li>在客户端设置中找到”Per-App Proxy”或”分应用代理”选项</li><li>选择模式：<ul><li><strong>白名单模式</strong>（推荐）：只有列表中的应用走代理，其他应用直连。适合只需要浏览器走代理的场景</li><li><strong>黑名单模式</strong>：所有应用走代理，但列表中的应用除外。适合大部分应用需要代理、仅少数例外的场景</li></ul></li><li>勾选需要代理的应用（白名单）或需要排除的应用（黑名单）</li></ol><p><strong>注意</strong>：银行类、政务类应用建议排除在代理之外。这些应用通常有 IP 检测机制，通过代理访问可能触发安全验证甚至账号冻结。</p><h3 id="问题三：Android-12-的-VPN-限制"><a href="#问题三：Android-12-的-VPN-限制" class="headerlink" title="问题三：Android 12+ 的 VPN 限制"></a>问题三：Android 12+ 的 VPN 限制</h3><p><strong>症状</strong>：在 Android 12 或更高版本上，代理客户端的 VPN 权限弹窗更加频繁，或者 VPN 连接在某些情况下被系统中断。</p><p><strong>原因</strong>：Android 12 增强了对 VPN 应用的权限管理。系统对 VPN 连接有更严格的监控，包括：VPN 应用在后台持续运行时需要显示持久通知（否则可能被终止）；某些情况下系统会提示用户确认 VPN 连接。</p><p><strong>解决方案</strong>：</p><ol><li>允许代理客户端显示通知——这不仅是为了信息展示，更是维持后台运行所必需的</li><li>在 Settings → Network &amp; Internet → VPN 中确认代理客户端的 VPN 配置存在且状态正常</li><li>启用”Always-on VPN”选项：这让系统在 VPN 断开后自动重连，确保代理始终运行</li><li>如果系统频繁提示 VPN 确认弹窗，可以在开发者选项中关闭”Always ask for VPN confirmation”（如有此选项）</li></ol><h3 id="问题四：从-GitHub-安装-APK-的问题"><a href="#问题四：从-GitHub-安装-APK-的问题" class="headerlink" title="问题四：从 GitHub 安装 APK 的问题"></a>问题四：从 GitHub 安装 APK 的问题</h3><p><strong>症状</strong>：从 GitHub Release 页面下载的代理客户端 APK 无法安装，提示”未知来源”被阻止，或者安装后提示”解析包出错”。</p><p><strong>原因</strong>：</p><ul><li>Android 默认阻止安装来自非 Google Play 的应用</li><li>部分 APK 针对特定 CPU 架构编译（如 arm64-v8a），在不兼容的设备上无法安装</li><li>下载不完整或文件损坏也会导致安装失败</li></ul><p><strong>解决方案</strong>：</p><ol><li><strong>允许安装未知来源应用</strong>：在 Settings → Security → Install unknown apps 中，为下载 APK 使用的浏览器（如 Chrome）启用”Allow from this source”权限</li><li><strong>选择正确的 APK 架构</strong>：<ul><li>大多数现代 Android 手机使用 <code>arm64-v8a</code> 架构</li><li>老旧设备可能使用 <code>armeabi-v7a</code></li><li>如果不确定，选择 <code>universal</code> 版本（体积较大但兼容所有架构）</li></ul></li><li><strong>验证下载完整性</strong>：对比 GitHub Release 页面上提供的 SHA256 校验值与本地文件的校验值是否一致</li><li>如果 GitHub 直接访问困难，可以通过镜像站或代理下载</li></ol><hr><h2 id="跨平台通用建议"><a href="#跨平台通用建议" class="headerlink" title="跨平台通用建议"></a>跨平台通用建议</h2><h3 id="保持客户端更新"><a href="#保持客户端更新" class="headerlink" title="保持客户端更新"></a>保持客户端更新</h3><p>各平台的代理客户端都在持续更新以适配操作系统的新版本。旧版客户端可能在系统更新后出现兼容性问题。建议定期检查并更新到最新稳定版。</p><h3 id="优先使用-TUN-模式"><a href="#优先使用-TUN-模式" class="headerlink" title="优先使用 TUN 模式"></a>优先使用 TUN 模式</h3><p>无论哪个平台，TUN 模式都比系统代理模式更可靠。TUN 模式在网络层接管流量，不依赖应用是否遵循系统代理设置，覆盖范围更广、问题更少。详细对比参见 <a href="/posts/connectivity-checklist/">连通性排障清单</a>。</p><h3 id="导出配置备份"><a href="#导出配置备份" class="headerlink" title="导出配置备份"></a>导出配置备份</h3><p>在客户端配置调整完成并确认工作正常后，导出配置文件作为备份。如果后续出现问题，可以快速恢复到已知可用的配置状态。</p><hr><h2 id="常见问题（FAQ）"><a href="#常见问题（FAQ）" class="headerlink" title="常见问题（FAQ）"></a>常见问题（FAQ）</h2><h3 id="Windows-的-TUN-模式需要管理员权限吗？"><a href="#Windows-的-TUN-模式需要管理员权限吗？" class="headerlink" title="Windows 的 TUN 模式需要管理员权限吗？"></a>Windows 的 TUN 模式需要管理员权限吗？</h3><p>是的。TUN 模式需要创建虚拟网络适配器，这是系统级操作，需要管理员权限。首次启动时会弹出 UAC 授权弹窗。部分客户端支持安装辅助服务（Service Mode），安装后无需每次都点击 UAC。</p><h3 id="macOS-上使用代理会影响-AirDrop-吗？"><a href="#macOS-上使用代理会影响-AirDrop-吗？" class="headerlink" title="macOS 上使用代理会影响 AirDrop 吗？"></a>macOS 上使用代理会影响 AirDrop 吗？</h3><p>通常不会。AirDrop 使用蓝牙和点对点 Wi-Fi 直连，不经过系统的网络路由，因此不受代理影响。但如果代理客户端的 Network Extension 与 AirDrop 产生冲突（极少见），可以尝试临时关闭代理后使用 AirDrop。</p><h3 id="iOS-的-Shadowrocket-和-Quantumult-X-有什么区别？"><a href="#iOS-的-Shadowrocket-和-Quantumult-X-有什么区别？" class="headerlink" title="iOS 的 Shadowrocket 和 Quantumult X 有什么区别？"></a>iOS 的 Shadowrocket 和 Quantumult X 有什么区别？</h3><p>两者都是功能完善的代理客户端。Shadowrocket 价格较低（约 $2.99），界面简洁，上手容易，适合大多数用户。Quantumult X 价格较高（约 $7.99），功能更丰富，规则系统更灵活，适合高级用户进行精细配置。</p><h3 id="Android-上哪个代理客户端最稳定？"><a href="#Android-上哪个代理客户端最稳定？" class="headerlink" title="Android 上哪个代理客户端最稳定？"></a>Android 上哪个代理客户端最稳定？</h3><p>在 Android 平台，v2rayNG 是最广泛使用的客户端之一，兼容性好、更新活跃。对于更高级的需求，NekoBox 提供了更丰富的协议支持和配置选项。两者都可以从 GitHub 的 Release 页面获取最新版本。</p><h3 id="为什么同一个节点在手机上速度比电脑上慢？"><a href="#为什么同一个节点在手机上速度比电脑上慢？" class="headerlink" title="为什么同一个节点在手机上速度比电脑上慢？"></a>为什么同一个节点在手机上速度比电脑上慢？</h3><p>可能原因包括：手机的 Wi-Fi 带宽受限（尤其是 2.4GHz 频段）；手机的处理器性能不足以快速处理加解密运算（在使用 AES 加密时影响更明显，ChaCha20 在移动设备上效率更高）；手机代理客户端的路由表加载不完整；以及移动网络环境的延迟和抖动本身就比有线网络大。</p><h3 id="使用代理会被运营商检测到吗？"><a href="#使用代理会被运营商检测到吗？" class="headerlink" title="使用代理会被运营商检测到吗？"></a>使用代理会被运营商检测到吗？</h3><p>使用现代协议（如 VLESS+Reality）时，运营商能看到你有加密连接到境外服务器的流量，但无法确定这是代理流量还是正常的 HTTPS 访问。使用 TLS 1.3 和正确配置的 SNI 伪装可以使连接看起来与正常网站访问无异。</p><hr><h2 id="外部参考"><a href="#外部参考" class="headerlink" title="外部参考"></a>外部参考</h2><ul><li><a href="/posts/connectivity-checklist/">连通性排障清单</a> — 系统化的连接问题排查流程</li><li><a href="https://github.com/2dust/v2rayNG/releases">v2rayNG 官方发布</a> — Android 客户端</li><li><a href="https://github.com/clash-verge-rev/clash-verge-rev">Clash Verge Rev</a> — 跨平台桌面客户端</li><li><a href="https://support.apple.com/guide/security/vpn-overview-secc7dbb1614/web">Apple 技术支持 - VPN</a> — iOS VPN 机制说明</li></ul>]]></content>
      
      
      <categories>
          
          <category> 排障手册 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> 排障 </tag>
            
            <tag> Windows </tag>
            
            <tag> macOS </tag>
            
            <tag> iOS </tag>
            
            <tag> Android </tag>
            
            <tag> 平台 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>主流代理协议横向对比（2026）</title>
      <link href="/posts/protocol-comparison/"/>
      <url>/posts/protocol-comparison/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>: 本文对比当前主流的代理协议——Shadowsocks、VMess、VLESS+Reality、Trojan、Hysteria2、NaiveProxy、VLESS+XHTTP——从加密方式、抗检测能力、性能表现、部署难度四个维度进行系统评估，帮助用户根据自身需求选择合适的协议。无论你是刚入门的新手还是有经验的运维人员，本文都将提供有价值的参考。</p></blockquote><h2 id="为什么需要这篇对比"><a href="#为什么需要这篇对比" class="headerlink" title="为什么需要这篇对比"></a>为什么需要这篇对比</h2><p>市面上的协议对比文章大多停留在”推荐用 XX”的结论层面，缺乏对底层原理的解释。不同协议在不同网络环境下表现差异很大，理解它们的设计思路比记住结论更重要。</p><p>GFW 的检测能力在持续进化（详见 <a href="/posts/gfw-detection-overview/">GFW 工作原理全解</a>），2024 年以来对裸 VMess 的精准封锁、对 QUIC 流量的深度分析都表明：单纯依赖某个”最强协议”的思路已经过时。真正有效的策略是理解每个协议的优势边界，根据实际网络环境灵活组合。</p><p>本文不会告诉你”用这个就行了”，而是帮你建立判断框架——当环境变化时，你能自己做出正确选择。</p><h2 id="协议概览"><a href="#协议概览" class="headerlink" title="协议概览"></a>协议概览</h2><table><thead><tr><th>协议</th><th>传输层伪装</th><th>抗主动探测</th><th>抗流量分析</th><th>性能开销</th><th>部署复杂度</th></tr></thead><tbody><tr><td>Shadowsocks (2022)</td><td>无</td><td>较强</td><td>中等</td><td>低</td><td>简单</td></tr><tr><td>VMess</td><td>无</td><td>弱</td><td>中等</td><td>中等</td><td>简单</td></tr><tr><td>VLESS + Reality</td><td>TLS 伪装</td><td>强</td><td>较强</td><td>低</td><td>中等</td></tr><tr><td>Trojan</td><td>真实 TLS</td><td>中等</td><td>中等</td><td>中等</td><td>中等</td></tr><tr><td>Hysteria2</td><td>QUIC 伪装</td><td>中等</td><td>中等</td><td>低</td><td>简单</td></tr><tr><td>NaiveProxy</td><td>浏览器栈</td><td>强</td><td>较强</td><td>中等</td><td>复杂</td></tr><tr><td>VLESS+XHTTP+Reality</td><td>HTTP 伪装</td><td>强</td><td>强</td><td>中等</td><td>复杂</td></tr></tbody></table><blockquote><p>以上评估基于 2026 年中的 GFW 状态，检测策略持续演进，评估结论可能随时间变化。</p></blockquote><p><img src="/images/inline/protocol-stack.png" alt="代理协议技术栈对比"><br><em>图片来源：<a href="https://torguard.net/">TorGuard</a></em></p><h2 id="逐一解析"><a href="#逐一解析" class="headerlink" title="逐一解析"></a>逐一解析</h2><h3 id="Shadowsocks-2022-Edition-AEAD-2022"><a href="#Shadowsocks-2022-Edition-AEAD-2022" class="headerlink" title="Shadowsocks (2022 Edition &#x2F; AEAD-2022)"></a>Shadowsocks (2022 Edition &#x2F; AEAD-2022)</h3><p><strong>设计思路</strong>：</p><p>Shadowsocks 的核心设计理念是”轻量级加密代理”——不做伪装，只做加密转发。它不试图让流量看起来像正常的 HTTPS 或其他协议，而是通过加密让审查者无法解析流量内容。</p><p>早期版本（stream cipher、AEAD）存在严重的安全缺陷：重放攻击可以让审查者录制一段加密流量后重新发送给服务器，通过观察服务器的响应行为判断是否为 Shadowsocks 服务；主动探测则允许审查者直接向疑似 SS 的端口发送特定构造的数据包，根据服务器的错误响应来确认协议类型。</p><p>AEAD-2022（即 Shadowsocks 2022 Edition）对这些问题做了根本性修复：引入了基于时间戳的重放过滤机制，每个数据包都绑定了时间窗口，过期数据包直接丢弃；对于无法解密的请求，服务器不再返回任何有辨识度的错误响应，而是直接静默关闭连接，使主动探测失去依据。</p><p><strong>适用场景</strong>：</p><p>对延迟敏感的使用场景（如游戏加速、实时通信），以及网络环境相对宽松、审查力度不大的地区。如果你的线路质量好、ISP 对加密流量不做针对性干扰，SS 2022 仍然是性价比最高的选择。</p><hr><h3 id="VMess"><a href="#VMess" class="headerlink" title="VMess"></a>VMess</h3><p><strong>设计思路</strong>：</p><p>VMess 是 V2Ray 项目的原生协议，设计目标是提供自带加密和身份认证的代理通信。它使用 UUID 作为用户标识，通过自定义的加密方案实现数据传输。</p><p><strong>为什么不再推荐</strong>：</p><p>VMess 在设计之初（2017 年前后）是一个合理的选择，但以 2026 年的标准来看，它在安全性和抗检测能力上都已经落后。GFW 对 VMess 的识别准确率很高，即使在低审查时期也可能被标记。更重要的是，VLESS+Reality 在各方面都是 VMess 的上位替代——更安全、更难检测、性能更好。如果你还在使用 VMess，强烈建议尽快迁移。</p><hr><h3 id="VLESS-Reality"><a href="#VLESS-Reality" class="headerlink" title="VLESS + Reality"></a>VLESS + Reality</h3><p><strong>设计思路</strong>：</p><p>VLESS+Reality 是当前最受推荐的协议组合，其工作原理详见 <a href="/posts/vless-reality-deep-dive/">VLESS + Reality 深度解析</a>。VLESS 本身是一个极简的代理协议——去掉了 VMess 中多余的加密层（因为 TLS 已经提供了加密），只保留最基本的认证和数据传输功能。而 Reality 则是 TLS 伪装层面的一次根本性创新。</p><p>传统的 TLS 伪装（如 Trojan）需要你拥有一个真实的域名和对应的 TLS 证书。Reality 的核心思路是：<strong>借用目标网站的 TLS 证书来完成伪装，而不需要你自己申请任何证书或拥有任何域名</strong>。</p><p><strong>适用场景</strong>：</p><p>当前大多数用户的最佳选择。无论是个人使用还是为他人提供服务，VLESS+Reality 都提供了最好的安全性与易用性平衡。除非你有特殊的带宽需求（考虑 Hysteria2）或极端的隐蔽性需求（考虑 VLESS+XHTTP+Reality），否则 VLESS+Reality 就是你的默认选项。</p><hr><h3 id="Trojan"><a href="#Trojan" class="headerlink" title="Trojan"></a>Trojan</h3><p><strong>设计思路</strong>：</p><p>Trojan 的设计目标是让代理流量完全模仿正常的 HTTPS 流量。它直接工作在 TLS 层之上，使用真实的 TLS 证书（通过 Let’s Encrypt 等 CA 签发），代理数据通过标准的 TLS 加密通道传输。</p><p><strong>劣势</strong>：需要拥有域名并申请、维护 TLS 证书（Let’s Encrypt 证书每 90 天需要续期）。TLS 指纹仍然可被分析。域名本身可能被 DNS 污染或 SNI 封锁，一旦域名暴露，整个节点失效。</p><hr><h3 id="Hysteria2"><a href="#Hysteria2" class="headerlink" title="Hysteria2"></a>Hysteria2</h3><p><strong>设计思路</strong>：</p><p><a href="https://hysteria.network/">Hysteria2</a> 是一个基于 QUIC（HTTP&#x2F;3 的底层传输协议）构建的高性能代理协议。与前面所有基于 TCP 的协议不同，Hysteria2 走的是 UDP 路线，属于基于 QUIC 的新一代协议，更多 QUIC 协议的分析参见 <a href="/posts/quic-protocols/">基于 QUIC 的代理协议</a>。它利用 QUIC 的多路复用和 0-RTT 握手特性来实现低延迟连接，同时内置了一套自定义的拥塞控制算法（Brutal），可以在丢包率较高的线路上维持较高的传输速率。</p><p><strong>适用场景</strong>：</p><p>网络环境允许 UDP 且对带宽有高要求的场景——流媒体、大文件下载、视频通话等。如果你的 ISP 对 UDP 友好且线路质量一般（丢包较高），Hysteria2 的 Brutal 拥塞控制能带来明显优于 TCP 协议的体验。但一定要准备 TCP 协议作为后备方案。</p><hr><h3 id="NaiveProxy"><a href="#NaiveProxy" class="headerlink" title="NaiveProxy"></a>NaiveProxy</h3><p><strong>设计思路</strong>：</p><p><a href="https://github.com/klzgrad/naiveproxy">NaiveProxy</a> 采用了一个极为大胆的方案：直接嵌入 Chromium 的网络栈来处理代理流量。这意味着从 TLS 握手到 HTTP&#x2F;2 连接管理，NaiveProxy 产生的每一个网络数据包都与真正的 Chrome 浏览器发出的完全一致——因为它用的就是 Chrome 的代码。</p><p><strong>劣势</strong>：编译和维护成本极高。客户端选择极其有限。对于大部分用户而言，NaiveProxy 的抗检测优势相对于 VLESS+Reality 并不明显，但维护成本却高出很多。</p><hr><h3 id="VLESS-XHTTP-Reality-XMUX"><a href="#VLESS-XHTTP-Reality-XMUX" class="headerlink" title="VLESS + XHTTP + Reality + XMUX"></a>VLESS + XHTTP + Reality + XMUX</h3><p><strong>设计思路</strong>：</p><p>这是目前代理协议技术栈的”天花板”组合。它在 VLESS+Reality 的基础上更进一步：通过 XHTTP 传输层将代理数据伪装成普通的 HTTP 请求（而不仅仅是 TLS 加密隧道），并通过 XMUX 实现连接的多路复用。</p><p><strong>劣势</strong>：部署复杂度是所有方案中最高的。客户端支持有限。对运维人员的技术水平要求较高。</p><hr><h2 id="如何选择"><a href="#如何选择" class="headerlink" title="如何选择"></a>如何选择</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">你的网络环境是否封锁 UDP？</span><br><span class="line">├── 是 → 排除 Hysteria2</span><br><span class="line">├── 否 → Hysteria2 可作为备选</span><br><span class="line">│</span><br><span class="line">你是否在高审查地区（中国大陆/伊朗/俄罗斯）？</span><br><span class="line">├── 是 → 推荐 VLESS+Reality 或 VLESS+XHTTP+Reality</span><br><span class="line">├── 否 → Shadowsocks 2022 / Trojan 通常足够</span><br><span class="line">│</span><br><span class="line">你是否需要极简部署？</span><br><span class="line">├── 是 → VLESS+Reality（无需域名证书）</span><br><span class="line">├── 否 → 根据抗检测需求选择</span><br></pre></td></tr></table></figure><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">graph TD</span><br><span class="line">    A[选择代理协议] --&gt; B&#123;网络环境是否封锁 UDP?&#125;</span><br><span class="line">    B --&gt;|是| C[排除 Hysteria2]</span><br><span class="line">    B --&gt;|否| D[Hysteria2 可作为备选]</span><br><span class="line">    C --&gt; E&#123;是否在高审查地区?&#125;</span><br><span class="line">    D --&gt; E</span><br><span class="line">    E --&gt;|是| F[推荐 VLESS+Reality]</span><br><span class="line">    E --&gt;|否| G&#123;是否需要极简部署?&#125;</span><br><span class="line">    G --&gt;|是| H[VLESS+Reality&lt;br/&gt;无需域名证书]</span><br><span class="line">    G --&gt;|否| I[SS-2022 / Trojan&lt;br/&gt;通常足够]</span><br><span class="line">    </span><br><span class="line">    style F fill:#4a9,color:#fff</span><br><span class="line">    style H fill:#4a9,color:#fff</span><br></pre></td></tr></table></figure><p><strong>补充建议</strong>：</p><ul><li><strong>入门用户</strong>：直接选 VLESS+Reality。教程多，部署不需要域名和证书，抗检测能力足够应对绝大多数场景。</li><li><strong>追求带宽</strong>：在主力节点使用 VLESS+Reality 的同时，准备 Hysteria2 作为 UDP 友好环境下的加速选项。</li><li><strong>极端隐蔽需求</strong>：VLESS+XHTTP+Reality+XMUX，但请确保你有足够的技术能力来维护。</li><li><strong>始终准备备用方案</strong>：不要只依赖一种协议。敏感时期多协议切换是最基本的运维策略。</li></ul><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="Q-VMess-还能用吗？"><a href="#Q-VMess-还能用吗？" class="headerlink" title="Q: VMess 还能用吗？"></a>Q: VMess 还能用吗？</h3><p>可以用，但不推荐。VLESS+Reality 在几乎所有维度上都是 VMess 的上位替代，迁移成本也不高——如果你在用 <a href="https://github.com/XTLS/Xray-core">Xray-core</a>，只需要修改配置文件即可。</p><h3 id="Q-Reality-的-dest-目标站如果被封了怎么办？"><a href="#Q-Reality-的-dest-目标站如果被封了怎么办？" class="headerlink" title="Q: Reality 的 dest 目标站如果被封了怎么办？"></a>Q: Reality 的 dest 目标站如果被封了怎么办？</h3><p>提前准备多个 dest 配置，至少 3-5 个备选目标站，确保可以快速切换。选择 dest 时验证目标站是否支持 TLS 1.3 和 H2。避免使用冷门站点。</p><h3 id="Q-协议选择和节点质量哪个更重要？"><a href="#Q-协议选择和节点质量哪个更重要？" class="headerlink" title="Q: 协议选择和节点质量哪个更重要？"></a>Q: 协议选择和节点质量哪个更重要？</h3><p>节点质量和运营敏捷性比协议选择更重要。正确的优先级应该是：<strong>运营敏捷性 &gt; 线路质量 &gt; 协议选择</strong>。先确保你有快速响应封锁的能力，再考虑协议层面的优化。</p><h3 id="Q-Hysteria2-和-VLESS-Reality-哪个快？"><a href="#Q-Hysteria2-和-VLESS-Reality-哪个快？" class="headerlink" title="Q: Hysteria2 和 VLESS+Reality 哪个快？"></a>Q: Hysteria2 和 VLESS+Reality 哪个快？</h3><p>取决于具体场景。UDP 友好 + 高丢包线路下 Hysteria2 明显更快；UDP 受限或正常线路下 VLESS+Reality 更稳定。两者并不互斥，可以在同一台服务器上同时部署。</p>]]></content>
      
      
      <categories>
          
          <category> 协议与原理 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> 协议 </tag>
            
            <tag> 对比 </tag>
            
            <tag> VLESS </tag>
            
            <tag> Reality </tag>
            
            <tag> VMess </tag>
            
            <tag> Shadowsocks </tag>
            
            <tag> Trojan </tag>
            
            <tag> Hysteria2 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>端口转发与中转：NAT 穿透原理</title>
      <link href="/posts/port-forwarding-relay/"/>
      <url>/posts/port-forwarding-relay/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：在代理架构中，中转（relay）是一个常见的优化手段——在国内放置一台服务器作为流量中转站，利用国内到中转站的优质网络，再由中转站通过优化线路连接海外服务器。这个过程的核心技术就是端口转发。本文从 NAT 基础讲起，介绍 iptables、socat、gost 和隧道等各种端口转发方案的原理和选择。</p></blockquote><h2 id="什么是端口转发"><a href="#什么是端口转发" class="headerlink" title="什么是端口转发"></a>什么是端口转发</h2><p>端口转发（Port Forwarding）的本质非常简单：<strong>把发往本机某个端口的流量，原封不动地转发到另一台机器的某个端口</strong>。</p><p>用一个生活中的类比：端口转发就像信件中转站。你寄了一封信到中转站（地址 A，端口 443），中转站收到后在信封上改写收件人地址，然后把信转寄到最终目的地（地址 B，端口 443）。对于寄信人来说，他只知道中转站的地址；对于收信人来说，信看起来来自中转站。</p><p>在代理中转的场景下，工作流程是这样的：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">用户 → 国内中转服务器:443 → [端口转发] → 海外代理服务器:443 → 目标网站</span><br></pre></td></tr></table></figure><p>用户的代理客户端连接的是国内中转服务器的地址和端口。中转服务器收到流量后，通过端口转发将流量发送到海外的代理服务器。整个过程对代理客户端来说是透明的——它以为自己直接连接的就是代理服务器。</p><h3 id="为什么需要中转"><a href="#为什么需要中转" class="headerlink" title="为什么需要中转"></a>为什么需要中转</h3><p>中转的核心目的是<strong>优化网络路径</strong>。直接从用户到海外服务器的网络路径可能经过拥塞的国际出口，导致高延迟、高丢包。通过在国内放一台中转服务器，可以：</p><ol><li><strong>用户到中转</strong>：走国内网络，延迟极低（通常 &lt;20ms），几乎不丢包</li><li><strong>中转到海外</strong>：可以选择 CN2 GIA、IPLC 等优质线路，保证国际段的质量</li></ol><p>相当于用两段优质的链路，替代了一段质量不可控的直连链路。</p><h2 id="NAT-基础"><a href="#NAT-基础" class="headerlink" title="NAT 基础"></a>NAT 基础</h2><p>要理解端口转发的实现，需要先了解 NAT（Network Address Translation，网络地址转换）。</p><h3 id="NAT-是什么"><a href="#NAT-是什么" class="headerlink" title="NAT 是什么"></a>NAT 是什么</h3><p>NAT 最初是为了解决 IPv4 地址不够用的问题而发明的。它允许一个局域网内的多台设备共享一个公网 IP 地址。你家里的路由器就在做 NAT——你的手机、电脑、电视可能分别是 192.168.1.100、192.168.1.101、192.168.1.102，但对外只有一个公网 IP。</p><p>NAT 的工作原理是修改数据包的 IP 头部：</p><ul><li><strong>SNAT（Source NAT，源地址转换）</strong>：修改数据包的源 IP 地址。用于出站流量——你的内网 IP 被替换为公网 IP</li><li><strong>DNAT（Destination NAT，目标地址转换）</strong>：修改数据包的目标 IP 地址。用于入站流量——发往公网 IP 特定端口的流量被转发到内网的某台设备</li></ul><p>端口转发本质上就是 DNAT + SNAT 的组合。</p><h3 id="NAT-类型"><a href="#NAT-类型" class="headerlink" title="NAT 类型"></a>NAT 类型</h3><p>不同的 NAT 实现对端口映射的限制不同，这影响了某些应用的连通性：</p><table><thead><tr><th>NAT 类型</th><th>特点</th><th>对代理中转的影响</th></tr></thead><tbody><tr><td>全锥形（Full Cone）</td><td>最开放，外部任何主机都可以通过映射端口访问内部主机</td><td>最有利，所有转发方式都能工作</td></tr><tr><td>受限锥形（Restricted Cone）</td><td>只有内部主机曾主动连接过的外部 IP 才能回连</td><td>大部分情况下没问题</td></tr><tr><td>端口受限锥形（Port Restricted Cone）</td><td>在受限锥形基础上，还限制了端口</td><td>可能影响 UDP 转发</td></tr><tr><td>对称型（Symmetric）</td><td>对不同目标使用不同的映射，最严格</td><td>可能需要 TURN 等额外手段</td></tr></tbody></table><p>对于代理中转来说，NAT 类型通常不是大问题——因为中转服务器一般都有独立的公网 IP，不存在 NAT 限制。NAT 类型主要影响的是用户端（如果用户在多层 NAT 后面）。</p><h2 id="实现方法一：iptables-DNAT-SNAT"><a href="#实现方法一：iptables-DNAT-SNAT" class="headerlink" title="实现方法一：iptables DNAT&#x2F;SNAT"></a>实现方法一：iptables DNAT&#x2F;SNAT</h2><p>iptables 是 Linux 内核自带的防火墙&#x2F;NAT 工具，使用它做端口转发是最轻量、性能最高的方式，因为转发在<strong>内核态</strong>完成，不需要用户态程序参与。</p><h3 id="基本原理"><a href="#基本原理" class="headerlink" title="基本原理"></a>基本原理</h3><p>iptables 端口转发需要做两件事：</p><ol><li><strong>DNAT</strong>：将发往本机端口的流量的目标地址改为落地服务器的地址</li><li><strong>SNAT&#x2F;MASQUERADE</strong>：将转发流量的源地址改为中转服务器的地址（否则落地服务器的回复会直接发给用户，而不经过中转服务器）</li></ol><h3 id="配置步骤"><a href="#配置步骤" class="headerlink" title="配置步骤"></a>配置步骤</h3><p><strong>第一步：开启 IP 转发</strong></p><p>Linux 默认不允许一个网络接口接收的数据包从另一个接口转发出去。需要先开启 IP 转发功能：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 临时开启</span></span><br><span class="line"><span class="built_in">echo</span> 1 &gt; /proc/sys/net/ipv4/ip_forward</span><br><span class="line"></span><br><span class="line"><span class="comment"># 永久开启（写入配置文件）</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.ipv4.ip_forward = 1&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line">sysctl -p</span><br></pre></td></tr></table></figure><p><strong>第二步：配置 iptables 规则</strong></p><p>假设中转服务器要将本机的 443 端口转发到海外落地服务器 <code>1.2.3.4</code> 的 443 端口：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># DNAT：将发往本机 443 端口的流量目标地址改为落地服务器</span></span><br><span class="line">iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination 1.2.3.4:443</span><br><span class="line"></span><br><span class="line"><span class="comment"># SNAT：将转发流量的源地址改为中转服务器的公网 IP</span></span><br><span class="line"><span class="comment"># 方式一：明确指定源 IP</span></span><br><span class="line">iptables -t nat -A POSTROUTING -d 1.2.3.4 -p tcp --dport 443 -j SNAT --to-source 中转服务器IP</span><br><span class="line"></span><br><span class="line"><span class="comment"># 方式二：自动使用出口网卡的 IP（推荐）</span></span><br><span class="line">iptables -t nat -A POSTROUTING -d 1.2.3.4 -p tcp --dport 443 -j MASQUERADE</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许转发流量通过</span></span><br><span class="line">iptables -A FORWARD -p tcp -d 1.2.3.4 --dport 443 -j ACCEPT</span><br><span class="line">iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT</span><br></pre></td></tr></table></figure><p><strong>如果还需要转发 UDP</strong>（比如代理使用了 UDP 传输）：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">iptables -t nat -A PREROUTING -p udp --dport 443 -j DNAT --to-destination 1.2.3.4:443</span><br><span class="line">iptables -t nat -A POSTROUTING -d 1.2.3.4 -p udp --dport 443 -j MASQUERADE</span><br><span class="line">iptables -A FORWARD -p udp -d 1.2.3.4 --dport 443 -j ACCEPT</span><br></pre></td></tr></table></figure><p><strong>第三步：保存规则</strong></p><p>iptables 规则默认在重启后丢失。需要安装持久化工具：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Debian/Ubuntu</span></span><br><span class="line">apt install iptables-persistent</span><br><span class="line">netfilter-persistent save</span><br><span class="line"></span><br><span class="line"><span class="comment"># CentOS/RHEL</span></span><br><span class="line">service iptables save</span><br></pre></td></tr></table></figure><h3 id="iptables-转发的优缺点"><a href="#iptables-转发的优缺点" class="headerlink" title="iptables 转发的优缺点"></a>iptables 转发的优缺点</h3><p><strong>优点</strong>：</p><ul><li><strong>性能最高</strong>：内核态转发，不经过用户态程序，延迟极低</li><li><strong>资源占用最小</strong>：不需要额外进程，几乎不消耗 CPU 和内存</li><li><strong>成熟可靠</strong>：iptables 是 Linux 最成熟的网络工具</li></ul><p><strong>缺点</strong>：</p><ul><li><strong>配置语法复杂</strong>：iptables 的语法对新手不友好</li><li><strong>不加密</strong>：流量在中转和落地之间是明文传输（如果代理本身不加密的话）</li><li><strong>调试困难</strong>：规则配错后排查比较麻烦</li><li><strong>仅 Linux</strong>：Windows 和 macOS 需要使用其他工具</li></ul><h3 id="nftables：iptables-的替代"><a href="#nftables：iptables-的替代" class="headerlink" title="nftables：iptables 的替代"></a>nftables：iptables 的替代</h3><p>nftables 是 iptables 的继任者，在较新的 Linux 发行版中逐渐替代 iptables。功能相同但语法更清晰：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">nft add table ip nat</span><br><span class="line">nft add chain ip nat prerouting &#123; <span class="built_in">type</span> nat hook prerouting priority 0 \; &#125;</span><br><span class="line">nft add chain ip nat postrouting &#123; <span class="built_in">type</span> nat hook postrouting priority 100 \; &#125;</span><br><span class="line">nft add rule ip nat prerouting tcp dport 443 dnat to 1.2.3.4:443</span><br><span class="line">nft add rule ip nat postrouting ip daddr 1.2.3.4 masquerade</span><br></pre></td></tr></table></figure><p>如果你的系统默认使用 nftables，建议直接使用它而不是 iptables。</p><h2 id="实现方法二：socat"><a href="#实现方法二：socat" class="headerlink" title="实现方法二：socat"></a>实现方法二：socat</h2><p>socat（SOcket CAT）是一个多功能的网络工具，可以在用户态实现端口转发。</p><h3 id="基本用法"><a href="#基本用法" class="headerlink" title="基本用法"></a>基本用法</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 将本机 443 端口的 TCP 流量转发到 1.2.3.4:443</span></span><br><span class="line">socat TCP-LISTEN:443,reuseaddr,fork TCP:1.2.3.4:443</span><br><span class="line"></span><br><span class="line"><span class="comment"># 转发 UDP</span></span><br><span class="line">socat UDP-LISTEN:443,reuseaddr,fork UDP:1.2.3.4:443</span><br><span class="line"></span><br><span class="line"><span class="comment"># 同时转发 TCP 和 UDP（需要运行两条命令）</span></span><br><span class="line">socat TCP-LISTEN:443,reuseaddr,fork TCP:1.2.3.4:443 &amp;</span><br><span class="line">socat UDP-LISTEN:443,reuseaddr,fork UDP:1.2.3.4:443 &amp;</span><br></pre></td></tr></table></figure><h3 id="socat-的优缺点"><a href="#socat-的优缺点" class="headerlink" title="socat 的优缺点"></a>socat 的优缺点</h3><p><strong>优点</strong>：</p><ul><li><strong>使用简单</strong>：一条命令就能完成端口转发</li><li><strong>跨平台</strong>：支持 Linux、macOS、Windows（通过 Cygwin）</li><li><strong>不需要修改内核参数</strong>：不需要开启 ip_forward</li><li><strong>灵活性高</strong>：支持多种 socket 类型和选项</li></ul><p><strong>缺点</strong>：</p><ul><li><strong>性能较低</strong>：用户态转发，每个连接需要两次内核-用户态数据复制</li><li><strong>资源消耗高</strong>：每个连接 fork 一个新进程（<code>fork</code> 选项）</li><li><strong>不适合高并发</strong>：大量连接时会创建大量进程</li><li><strong>没有连接管理</strong>：无法限速、限连接数等</li></ul><p>socat 适合临时测试或低流量场景，不推荐在生产环境中作为长期的中转方案。</p><h2 id="实现方法三：gost"><a href="#实现方法三：gost" class="headerlink" title="实现方法三：gost"></a>实现方法三：gost</h2><p><a href="https://github.com/ginuerzh/gost">gost</a>（GO Simple Tunnel）是一个用 Go 语言编写的隧道工具，专为代理中转场景设计。</p><h3 id="基本用法-1"><a href="#基本用法-1" class="headerlink" title="基本用法"></a>基本用法</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># TCP 端口转发</span></span><br><span class="line">gost -L tcp://:443 -F forward+tcp://1.2.3.4:443</span><br><span class="line"></span><br><span class="line"><span class="comment"># 带加密的端口转发（TLS）</span></span><br><span class="line">gost -L tcp://:443 -F forward+tls://1.2.3.4:443</span><br><span class="line"></span><br><span class="line"><span class="comment"># WebSocket 隧道转发</span></span><br><span class="line">gost -L tcp://:443 -F forward+ws://1.2.3.4:443</span><br><span class="line"></span><br><span class="line"><span class="comment"># 多级转发（链式代理）</span></span><br><span class="line">gost -L tcp://:443 -F forward+tcp://relay1:443 -F forward+tcp://relay2:443</span><br></pre></td></tr></table></figure><h3 id="gost-的特点"><a href="#gost-的特点" class="headerlink" title="gost 的特点"></a>gost 的特点</h3><p><strong>优点</strong>：</p><ul><li><strong>支持加密</strong>：可以在中转和落地之间建立加密隧道（TLS、WSS 等）</li><li><strong>支持多种传输协议</strong>：TCP、UDP、WebSocket、gRPC、QUIC 等</li><li><strong>链式转发</strong>：支持多级中转</li><li><strong>丰富的功能</strong>：限速、认证、负载均衡、心跳检测等</li><li><strong>Go 编写</strong>：单文件部署，无依赖</li></ul><p><strong>缺点</strong>：</p><ul><li><strong>性能不如 iptables</strong>：用户态程序，有额外的处理开销</li><li><strong>需要两端配合</strong>：如果使用加密隧道，落地端也需要运行 gost</li><li><strong>配置较复杂</strong>：功能多导致参数也多</li></ul><p>gost 是目前中转场景最推荐的用户态工具之一，特别是当你需要在中转和落地之间加密传输时。</p><h2 id="实现方法四：WireGuard-IPIP-隧道"><a href="#实现方法四：WireGuard-IPIP-隧道" class="headerlink" title="实现方法四：WireGuard&#x2F;IPIP 隧道"></a>实现方法四：WireGuard&#x2F;IPIP 隧道</h2><p>使用 VPN 隧道在中转和落地之间建立加密通道，然后在隧道内做端口转发。</p><h3 id="WireGuard-隧道"><a href="#WireGuard-隧道" class="headerlink" title="WireGuard 隧道"></a>WireGuard 隧道</h3><p>WireGuard 是一个轻量级、高性能的 VPN 协议。在中转场景中，可以在中转服务器和落地服务器之间建立 WireGuard 隧道，然后通过隧道 IP 做 iptables 转发。</p><p><strong>中转服务器配置</strong>（&#x2F;etc&#x2F;wireguard&#x2F;wg0.conf）：</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[Interface]</span></span><br><span class="line"><span class="attr">PrivateKey</span> = 中转服务器私钥</span><br><span class="line"><span class="attr">Address</span> = <span class="number">10.0</span>.<span class="number">0.1</span>/<span class="number">24</span></span><br><span class="line"><span class="attr">ListenPort</span> = <span class="number">51820</span></span><br><span class="line"></span><br><span class="line"><span class="section">[Peer]</span></span><br><span class="line"><span class="attr">PublicKey</span> = 落地服务器公钥</span><br><span class="line"><span class="attr">AllowedIPs</span> = <span class="number">10.0</span>.<span class="number">0.2</span>/<span class="number">32</span></span><br><span class="line"><span class="attr">Endpoint</span> = 落地服务器公网IP:<span class="number">51820</span></span><br><span class="line"><span class="attr">PersistentKeepalive</span> = <span class="number">25</span></span><br></pre></td></tr></table></figure><p><strong>落地服务器配置</strong>：</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[Interface]</span></span><br><span class="line"><span class="attr">PrivateKey</span> = 落地服务器私钥</span><br><span class="line"><span class="attr">Address</span> = <span class="number">10.0</span>.<span class="number">0.2</span>/<span class="number">24</span></span><br><span class="line"><span class="attr">ListenPort</span> = <span class="number">51820</span></span><br><span class="line"></span><br><span class="line"><span class="section">[Peer]</span></span><br><span class="line"><span class="attr">PublicKey</span> = 中转服务器公钥</span><br><span class="line"><span class="attr">AllowedIPs</span> = <span class="number">10.0</span>.<span class="number">0.1</span>/<span class="number">32</span></span><br><span class="line"><span class="attr">Endpoint</span> = 中转服务器公网IP:<span class="number">51820</span></span><br><span class="line"><span class="attr">PersistentKeepalive</span> = <span class="number">25</span></span><br></pre></td></tr></table></figure><p><strong>隧道建立后，在中转服务器配置 iptables 转发</strong>：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 通过 WireGuard 隧道转发——目标地址使用隧道内的 IP</span></span><br><span class="line">iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination 10.0.0.2:443</span><br><span class="line">iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE</span><br></pre></td></tr></table></figure><h3 id="WireGuard-隧道的优缺点"><a href="#WireGuard-隧道的优缺点" class="headerlink" title="WireGuard 隧道的优缺点"></a>WireGuard 隧道的优缺点</h3><p><strong>优点</strong>：</p><ul><li><strong>加密传输</strong>：中转与落地之间的所有流量都经过 WireGuard 加密</li><li><strong>内核态性能</strong>：WireGuard 实现在 Linux 内核中，性能极高</li><li><strong>稳定可靠</strong>：自动重连、保活机制</li></ul><p><strong>缺点</strong>：</p><ul><li><strong>UDP 协议</strong>：WireGuard 使用 UDP，某些网络可能限制 UDP 流量</li><li><strong>配置稍复杂</strong>：需要在两端都配置 WireGuard</li><li><strong>额外开销</strong>：WireGuard 封装增加约 60 字节的头部开销</li></ul><h3 id="IPIP-隧道"><a href="#IPIP-隧道" class="headerlink" title="IPIP 隧道"></a>IPIP 隧道</h3><p>IPIP 是最简单的 IP 隧道协议——把一个 IP 包封装在另一个 IP 包里。它的优势是极低的开销（只增加 20 字节头部），但<strong>没有加密</strong>。</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 中转服务器</span></span><br><span class="line">ip tunnel add ipiptun mode ipip remote 落地服务器IP <span class="built_in">local</span> 中转服务器IP</span><br><span class="line">ip addr add 10.0.0.1/24 dev ipiptun</span><br><span class="line">ip <span class="built_in">link</span> <span class="built_in">set</span> ipiptun up</span><br><span class="line"></span><br><span class="line"><span class="comment"># 落地服务器</span></span><br><span class="line">ip tunnel add ipiptun mode ipip remote 中转服务器IP <span class="built_in">local</span> 落地服务器IP</span><br><span class="line">ip addr add 10.0.0.2/24 dev ipiptun</span><br><span class="line">ip <span class="built_in">link</span> <span class="built_in">set</span> ipiptun up</span><br></pre></td></tr></table></figure><p>IPIP 隧道适合对性能要求极高、且中转和落地之间的链路本身是安全的（如 IPLC 专线）场景。</p><h2 id="实现方法五：Cloudflare-Tunnel"><a href="#实现方法五：Cloudflare-Tunnel" class="headerlink" title="实现方法五：Cloudflare Tunnel"></a>实现方法五：Cloudflare Tunnel</h2><p><a href="https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/">Cloudflare Tunnel</a>（原 Argo Tunnel）提供了一种不同的思路——不需要中转服务器有公网 IP，通过 Cloudflare 的全球网络进行中转。</p><h3 id="工作原理"><a href="#工作原理" class="headerlink" title="工作原理"></a>工作原理</h3><ol><li>在落地服务器上运行 <code>cloudflared</code> 客户端</li><li><code>cloudflared</code> 主动向 Cloudflare 的最近节点建立加密连接</li><li>用户通过 Cloudflare 的网络访问你配置的域名</li><li>Cloudflare 将流量通过隧道转发到落地服务器</li></ol><h3 id="优缺点"><a href="#优缺点" class="headerlink" title="优缺点"></a>优缺点</h3><p><strong>优点</strong>：</p><ul><li><strong>不需要公网 IP</strong>：落地服务器即使在 NAT 后面也能工作</li><li><strong>自动 TLS</strong>：流量自动加密</li><li><strong>Cloudflare 全球网络</strong>：利用 Anycast 提供低延迟</li><li><strong>免费额度</strong>：有免费计划可以使用</li></ul><p><strong>缺点</strong>：</p><ul><li><strong>受 Cloudflare 控制</strong>：流量经过 Cloudflare，有隐私考虑</li><li><strong>仅 HTTP&#x2F;HTTPS</strong>：主要支持 HTTP 类流量，TCP&#x2F;UDP 通用代理有限制</li><li><strong>依赖 Cloudflare 可用性</strong>：如果 Cloudflare 在你所在地区的节点被干扰，隧道也会受影响</li><li><strong>不适合所有代理协议</strong>：不支持原生的 VLESS、Trojan 等协议通过隧道</li></ul><h2 id="如何选择转发方案"><a href="#如何选择转发方案" class="headerlink" title="如何选择转发方案"></a>如何选择转发方案</h2><p>不同的转发方案适合不同的场景：</p><table><thead><tr><th>方案</th><th>性能</th><th>加密</th><th>配置难度</th><th>适用场景</th></tr></thead><tbody><tr><td>iptables</td><td>最高</td><td>无</td><td>中</td><td>性能优先，代理本身已加密</td></tr><tr><td>nftables</td><td>最高</td><td>无</td><td>中</td><td>iptables 的现代替代</td></tr><tr><td>socat</td><td>低</td><td>无</td><td>低</td><td>临时测试</td></tr><tr><td>gost</td><td>中高</td><td>可选</td><td>中高</td><td>需要加密隧道</td></tr><tr><td>WireGuard</td><td>高</td><td>有</td><td>中</td><td>需要加密且性能要求高</td></tr><tr><td>IPIP</td><td>极高</td><td>无</td><td>低</td><td>专线环境，性能极致</td></tr><tr><td>Cloudflare Tunnel</td><td>中</td><td>有</td><td>低</td><td>无公网 IP 场景</td></tr></tbody></table><h3 id="一般建议"><a href="#一般建议" class="headerlink" title="一般建议"></a>一般建议</h3><ul><li><strong>大多数情况</strong>：iptables 转发足够用。代理协议本身（VLESS+TLS、Trojan 等）已经提供了加密，中转段不需要额外加密</li><li><strong>需要加密中转段</strong>：gost 或 WireGuard。gost 更灵活，WireGuard 性能更高</li><li><strong>临时测试</strong>：socat，一条命令搞定</li><li><strong>没有公网 IP</strong>：Cloudflare Tunnel</li></ul><h2 id="iptables-转发完整示例"><a href="#iptables-转发完整示例" class="headerlink" title="iptables 转发完整示例"></a>iptables 转发完整示例</h2><p>以下是一个将 TCP 443 端口转发到落地服务器的完整配置脚本：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/bash</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 配置变量</span></span><br><span class="line">LANDING_SERVER=<span class="string">&quot;1.2.3.4&quot;</span>   <span class="comment"># 落地服务器 IP</span></span><br><span class="line">LOCAL_PORT=<span class="string">&quot;443&quot;</span>            <span class="comment"># 本机监听端口</span></span><br><span class="line">REMOTE_PORT=<span class="string">&quot;443&quot;</span>           <span class="comment"># 落地服务器端口</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 开启 IP 转发</span></span><br><span class="line"><span class="built_in">echo</span> 1 &gt; /proc/sys/net/ipv4/ip_forward</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.ipv4.ip_forward = 1&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line">sysctl -p</span><br><span class="line"></span><br><span class="line"><span class="comment"># 清理旧规则（谨慎使用）</span></span><br><span class="line">iptables -t nat -F</span><br><span class="line">iptables -F FORWARD</span><br><span class="line"></span><br><span class="line"><span class="comment"># 配置 DNAT（目标地址转换）</span></span><br><span class="line">iptables -t nat -A PREROUTING -p tcp --dport <span class="variable">$LOCAL_PORT</span> -j DNAT --to-destination <span class="variable">$LANDING_SERVER</span>:<span class="variable">$REMOTE_PORT</span></span><br><span class="line">iptables -t nat -A PREROUTING -p udp --dport <span class="variable">$LOCAL_PORT</span> -j DNAT --to-destination <span class="variable">$LANDING_SERVER</span>:<span class="variable">$REMOTE_PORT</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 配置 SNAT（源地址转换）</span></span><br><span class="line">iptables -t nat -A POSTROUTING -d <span class="variable">$LANDING_SERVER</span> -j MASQUERADE</span><br><span class="line"></span><br><span class="line"><span class="comment"># 允许转发</span></span><br><span class="line">iptables -A FORWARD -p tcp -d <span class="variable">$LANDING_SERVER</span> --dport <span class="variable">$REMOTE_PORT</span> -j ACCEPT</span><br><span class="line">iptables -A FORWARD -p udp -d <span class="variable">$LANDING_SERVER</span> --dport <span class="variable">$REMOTE_PORT</span> -j ACCEPT</span><br><span class="line">iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT</span><br><span class="line"></span><br><span class="line"><span class="comment"># 保存规则</span></span><br><span class="line"><span class="keyword">if</span> <span class="built_in">command</span> -v netfilter-persistent &amp;&gt; /dev/null; <span class="keyword">then</span></span><br><span class="line">    netfilter-persistent save</span><br><span class="line"><span class="keyword">elif</span> <span class="built_in">command</span> -v iptables-save &amp;&gt; /dev/null; <span class="keyword">then</span></span><br><span class="line">    iptables-save &gt; /etc/iptables.rules</span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;端口转发配置完成: 本机:<span class="variable">$LOCAL_PORT</span> → <span class="variable">$LANDING_SERVER</span>:<span class="variable">$REMOTE_PORT</span>&quot;</span></span><br></pre></td></tr></table></figure><h2 id="常见问题（FAQ）"><a href="#常见问题（FAQ）" class="headerlink" title="常见问题（FAQ）"></a>常见问题（FAQ）</h2><h3 id="Q1：中转会增加多少延迟？"><a href="#Q1：中转会增加多少延迟？" class="headerlink" title="Q1：中转会增加多少延迟？"></a>Q1：中转会增加多少延迟？</h3><p>理论上会增加一跳的延迟。如果中转服务器和用户在同一城市（比如都在上海），增加的延迟通常在 5ms 以内，几乎感觉不到。而中转带来的线路质量提升远远大于这点额外延迟。</p><h3 id="Q2：中转服务器需要多大的带宽？"><a href="#Q2：中转服务器需要多大的带宽？" class="headerlink" title="Q2：中转服务器需要多大的带宽？"></a>Q2：中转服务器需要多大的带宽？</h3><p>中转服务器的带宽需要至少等于你期望的代理速度。如果你希望有 100Mbps 的代理速度，中转服务器的带宽至少需要 100Mbps。注意，大部分国内云服务器的带宽是按上行计费的。</p><h3 id="Q3：中转服务器的流量会被审查吗？"><a href="#Q3：中转服务器的流量会被审查吗？" class="headerlink" title="Q3：中转服务器的流量会被审查吗？"></a>Q3：中转服务器的流量会被审查吗？</h3><p>中转服务器转发的流量对于审查系统来说，看起来就是普通的加密连接（因为代理协议本身已经加密了）。但如果审查系统检查连接的目标 IP（即落地服务器），且该 IP 已被标记，则中转可能也会受到影响。</p><h3 id="Q4：iptables-和-socat-性能差多少？"><a href="#Q4：iptables-和-socat-性能差多少？" class="headerlink" title="Q4：iptables 和 socat 性能差多少？"></a>Q4：iptables 和 socat 性能差多少？</h3><p>在高并发场景下，差异显著。iptables 在内核态处理，单个数据包的处理延迟在微秒级；socat 需要在用户态接收和发送，延迟在毫秒级。对于普通用户的日常使用，差异不明显；但如果中转服务器承载大量用户，iptables 是唯一的选择。</p><h3 id="Q5：可以用一台中转服务器转发多个端口吗？"><a href="#Q5：可以用一台中转服务器转发多个端口吗？" class="headerlink" title="Q5：可以用一台中转服务器转发多个端口吗？"></a>Q5：可以用一台中转服务器转发多个端口吗？</h3><p>可以。为每个端口添加对应的 iptables 规则即可。你可以将不同端口转发到不同的落地服务器，实现一台中转机对应多个出口。</p><h3 id="Q6：中转服务器宕机了怎么办？"><a href="#Q6：中转服务器宕机了怎么办？" class="headerlink" title="Q6：中转服务器宕机了怎么办？"></a>Q6：中转服务器宕机了怎么办？</h3><p>中转服务器是单点故障。如果它宕机，所有通过它的代理连接都会中断。解决方案是使用多台中转服务器做负载均衡或故障切换。一些面板工具（如 iptables-manager）提供了中转管理和健康检查功能。</p><h2 id="外部链接"><a href="#外部链接" class="headerlink" title="外部链接"></a>外部链接</h2><ul><li><a href="https://github.com/ginuerzh/gost">gost 项目</a> — Go 语言隧道工具</li><li><a href="https://www.wireguard.com/">WireGuard 官网</a> — 轻量级 VPN</li><li><a href="https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/">Cloudflare Tunnel 文档</a> — Cloudflare 隧道</li><li><a href="https://linux.die.net/man/8/iptables">iptables 手册</a> — iptables 完整参考</li><li><a href="https://wiki.nftables.org/">nftables Wiki</a> — nftables 文档</li></ul><hr><p><em>端口转发是代理中转的基础技术。对于大多数场景，iptables 转发已经足够好用。选择更复杂的方案之前，先评估是否真的需要额外的加密或隧道功能。</em></p>]]></content>
      
      
      <categories>
          
          <category> 网络知识 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> 网络 </tag>
            
            <tag> 中转 </tag>
            
            <tag> 端口转发 </tag>
            
            <tag> NAT </tag>
            
            <tag> iptables </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>自建代理完整指南：从购买 VPS 到配置 VLESS+Reality</title>
      <link href="/posts/self-hosting-guide/"/>
      <url>/posts/self-hosting-guide/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：不想依赖机场，想完全掌控自己的代理服务？本文从零开始，手把手带你走完自建代理的全流程——选购 VPS、配置服务器环境、安装 Xray、部署 VLESS+Reality、客户端连接，一步不落。适合有一定 Linux 基础、愿意动手的用户。</p></blockquote><hr><h2 id="自建-vs-机场"><a href="#自建-vs-机场" class="headerlink" title="自建 vs 机场"></a>自建 vs 机场</h2><p>在投入时间和金钱之前，先确认自建确实适合你。</p><p>自建代理的核心优势是<strong>完全控制</strong>和<strong>隐私最优</strong>——服务器只有你一个人用，没有任何第三方能看到你的流量元数据。但代价也很明确：单点故障、IP 被封需要自己处理、缺少多地区覆盖、运维成本不低。</p><p>如果你不确定自建是否适合自己的情况，建议先阅读 <a href="/posts/decision-framework/">月付 vs 年付、自建 vs 机场：决策框架</a> 那篇文章，里面有一套系统的评估方法。</p><p><strong>简单来说</strong>：如果你具备基本的 Linux 操作能力、只需要一个地区的节点、对隐私有较高要求、并且愿意投入时间维护——自建值得尝试。反之，机场可能更适合你。</p><p>本文假设你已经做出了自建的决定，接下来进入实操环节。</p><hr><h2 id="第一步：选购-VPS"><a href="#第一步：选购-VPS" class="headerlink" title="第一步：选购 VPS"></a>第一步：选购 VPS</h2><p>VPS（Virtual Private Server，虚拟专用服务器）是你运行代理的基础设施。选购 VPS 需要考虑以下几个维度。</p><h3 id="地理位置"><a href="#地理位置" class="headerlink" title="地理位置"></a>地理位置</h3><p>VPS 的地理位置直接影响延迟和使用体验。常见的选择：</p><table><thead><tr><th>地区</th><th>典型延迟（大陆直连）</th><th>适合场景</th><th>备注</th></tr></thead><tbody><tr><td>香港（HK）</td><td>30-60ms</td><td>低延迟需求、游戏</td><td>价格较贵，带宽常受限</td></tr><tr><td>日本（JP）</td><td>50-80ms</td><td>日常使用、流媒体</td><td>线路成熟，选择多</td></tr><tr><td>新加坡（SG）</td><td>60-100ms</td><td>东南亚服务、通用</td><td>部分线路绕美国</td></tr><tr><td>美国（US）</td><td>150-200ms</td><td>大带宽需求、低价</td><td>延迟高但带宽便宜</td></tr></tbody></table><p><strong>建议</strong>：如果只买一台，日本是综合性价比最高的选择。延迟可接受，线路稳定，价格也不算太贵。</p><h3 id="VPS-提供商"><a href="#VPS-提供商" class="headerlink" title="VPS 提供商"></a>VPS 提供商</h3><p>以下是一些适合自建代理的 VPS 提供商，各有侧重：</p><p><strong>BandwagonHost（搬瓦工）</strong><br>老牌提供商，中国用户群体最大。CN2 GIA 线路质量优秀，但价格相对较高（年付 $49.99 起）。适合对线路质量有要求的用户。官网有中文界面，支持支付宝。</p><p><strong>RackNerd</strong><br>以极低价格著称，美国节点年付低至 $10 左右。经常在促销期间推出超低价套餐。适合预算有限、对延迟要求不高的用户。缺点是线路质量一般，走的是普通线路。</p><p><strong>DMIT</strong><br>提供优质的香港和日本 CN2 GIA 线路，价格比搬瓦工略低。Premium 线路质量非常好，但基础套餐带宽较小。适合追求线路质量且预算充足的用户。</p><p><strong>AWS Lightsail</strong><br>亚马逊云的轻量级 VPS 服务，$3.5&#x2F;月起。优势是 IP 被封后可以免费更换（释放旧 IP 绑定新 IP），缺点是到大陆的线路质量一般。适合怕折腾 IP 问题的用户。</p><p><strong>DigitalOcean</strong><br>界面简洁，操作友好，$4&#x2F;月起。新加坡和旧金山节点到大陆的线路尚可。IP 被封后也可以通过销毁重建 Droplet 的方式更换 IP。适合有一定英文基础的用户。</p><h3 id="硬件规格"><a href="#硬件规格" class="headerlink" title="硬件规格"></a>硬件规格</h3><p>运行 Xray 代理不需要多好的配置。最低要求：</p><ul><li><strong>CPU</strong>：1 核</li><li><strong>内存</strong>：512MB（够用），1GB（更稳）</li><li><strong>硬盘</strong>：10GB SSD</li><li><strong>带宽</strong>：500GB&#x2F;月以上（日常使用足够）</li><li><strong>系统</strong>：Debian 12 或 Ubuntu 22.04 LTS（推荐 Debian，更轻量）</li></ul><h3 id="注意事项"><a href="#注意事项" class="headerlink" title="注意事项"></a>注意事项</h3><p><strong>避免严重超售的提供商</strong>。如果一个 VPS 价格低到不合理（比如 1GB 内存年付 $5），大概率是严重超售。大量用户共享同一台物理服务器，高峰期 CPU 和网络都会被争抢，代理体验会很差。</p><p><strong>购买前测试 IP 是否可用</strong>。很多 VPS 提供商的 IP 段已经被 GFW 封锁过。购买后发现 IP 不通会非常麻烦。部分提供商支持购买前测试 IP 或提供 IP 更换服务，优先选择这类提供商。</p><p>测试 IP 是否被封的方法：在大陆环境下用浏览器访问 <code>https://ping.pe/&lt;你的IP&gt;</code>，看各地区的连通性。</p><hr><h2 id="第二步：服务器基础配置"><a href="#第二步：服务器基础配置" class="headerlink" title="第二步：服务器基础配置"></a>第二步：服务器基础配置</h2><p>拿到 VPS 后，首先做一些基础配置来保障安全和性能。</p><h3 id="连接服务器"><a href="#连接服务器" class="headerlink" title="连接服务器"></a>连接服务器</h3><p>VPS 提供商会给你一个 IP 地址和 root 密码（或 SSH 密钥）。用 SSH 连接：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh root@你的服务器IP</span><br></pre></td></tr></table></figure><p>如果是 Windows 用户，可以用 PowerShell 自带的 SSH 或 PuTTY、FinalShell 等工具。</p><h3 id="更新系统"><a href="#更新系统" class="headerlink" title="更新系统"></a>更新系统</h3><p>连上服务器后，第一件事是更新系统包：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">apt update &amp;&amp; apt upgrade -y</span><br></pre></td></tr></table></figure><h3 id="安装常用工具"><a href="#安装常用工具" class="headerlink" title="安装常用工具"></a>安装常用工具</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">apt install -y curl wget vim unzip</span><br></pre></td></tr></table></figure><h3 id="开启-BBR"><a href="#开启-BBR" class="headerlink" title="开启 BBR"></a>开启 BBR</h3><p>BBR（Bottleneck Bandwidth and Round-trip propagation time）是 Google 开发的 TCP 拥塞控制算法，能显著提升代理连接的速度和稳定性。Debian 12 和 Ubuntu 22.04 的内核已经内置了 BBR，只需要启用即可：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 写入配置</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.core.default_qdisc=fq&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;net.ipv4.tcp_congestion_control=bbr&quot;</span> &gt;&gt; /etc/sysctl.conf</span><br><span class="line"></span><br><span class="line"><span class="comment"># 使配置生效</span></span><br><span class="line">sysctl -p</span><br><span class="line"></span><br><span class="line"><span class="comment"># 验证 BBR 是否启用</span></span><br><span class="line">sysctl net.ipv4.tcp_congestion_control</span><br><span class="line"><span class="comment"># 输出应为：net.ipv4.tcp_congestion_control = bbr</span></span><br><span class="line"></span><br><span class="line">lsmod | grep bbr</span><br><span class="line"><span class="comment"># 输出应包含 tcp_bbr</span></span><br></pre></td></tr></table></figure><h3 id="配置防火墙"><a href="#配置防火墙" class="headerlink" title="配置防火墙"></a>配置防火墙</h3><p>用 <code>ufw</code>（Uncomplicated Firewall）配置基础防火墙规则。只放行必要的端口：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 安装 ufw</span></span><br><span class="line">apt install -y ufw</span><br><span class="line"></span><br><span class="line"><span class="comment"># 默认策略：拒绝所有入站，允许所有出站</span></span><br><span class="line">ufw default deny incoming</span><br><span class="line">ufw default allow outgoing</span><br><span class="line"></span><br><span class="line"><span class="comment"># 放行 SSH（重要！先放行再启用，否则会把自己锁在外面）</span></span><br><span class="line">ufw allow 22/tcp</span><br><span class="line"></span><br><span class="line"><span class="comment"># 放行你打算给 Xray 使用的端口（这里以 443 为例）</span></span><br><span class="line">ufw allow 443/tcp</span><br><span class="line"></span><br><span class="line"><span class="comment"># 启用防火墙</span></span><br><span class="line">ufw <span class="built_in">enable</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看规则</span></span><br><span class="line">ufw status verbose</span><br></pre></td></tr></table></figure><blockquote><p>⚠️ <strong>警告：务必先放行 SSH 端口再启用 ufw</strong>，否则你会被锁在服务器外面，只能通过 VPS 提供商的控制台 VNC 才能重新登录。</p></blockquote><h3 id="（可选）创建普通用户"><a href="#（可选）创建普通用户" class="headerlink" title="（可选）创建普通用户"></a>（可选）创建普通用户</h3><p>出于安全考虑，不建议长期使用 root 账户。可以创建一个普通用户并赋予 sudo 权限：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">adduser proxyuser</span><br><span class="line">usermod -aG <span class="built_in">sudo</span> proxyuser</span><br></pre></td></tr></table></figure><p>后续操作用 <code>proxyuser</code> 登录，需要管理员权限时加 <code>sudo</code>。本文为了简化演示，后续步骤仍以 root 执行。</p><hr><h2 id="第三步：安装-Xray"><a href="#第三步：安装-Xray" class="headerlink" title="第三步：安装 Xray"></a>第三步：安装 Xray</h2><p><a href="https://github.com/XTLS/Xray-core">Xray-core</a> 是 VLESS+Reality 协议的实现核心。使用官方的一键安装脚本：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">bash -c <span class="string">&quot;<span class="subst">$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)</span>&quot;</span> @ install</span><br></pre></td></tr></table></figure><p>安装完成后，验证版本：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">xray version</span><br></pre></td></tr></table></figure><p>输出应显示当前安装的 Xray 版本号，类似 <code>Xray 24.12.31 (Xray, Pair of Conditions) ...</code>。</p><p>接下来生成配置所需的密钥和 UUID：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 生成 UUID（用于客户端认证）</span></span><br><span class="line">xray uuid</span><br><span class="line"><span class="comment"># 输出示例：a1b2c3d4-e5f6-7890-abcd-ef1234567890</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 生成 x25519 密钥对（用于 Reality）</span></span><br><span class="line">xray x25519</span><br><span class="line"><span class="comment"># 输出示例：</span></span><br><span class="line"><span class="comment"># Private key: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</span></span><br><span class="line"><span class="comment"># Public key:  BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB=</span></span><br></pre></td></tr></table></figure><p><strong>记下这三个值</strong>：UUID、Private key（私钥）、Public key（公钥）。私钥配置在服务端，公钥配置在客户端。</p><hr><h2 id="第四步：配置-VLESS-Reality"><a href="#第四步：配置-VLESS-Reality" class="headerlink" title="第四步：配置 VLESS+Reality"></a>第四步：配置 VLESS+Reality</h2><p>编辑 Xray 的主配置文件：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vim /usr/local/etc/xray/config.json</span><br></pre></td></tr></table></figure><p>将以下内容写入（替换注释标注的部分为你自己生成的值）：</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">    <span class="comment">// 日志设置</span></span><br><span class="line">    <span class="attr">&quot;log&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;loglevel&quot;</span><span class="punctuation">:</span> <span class="string">&quot;warning&quot;</span>  <span class="comment">// 日志级别：debug/info/warning/error/none</span></span><br><span class="line">    <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line"></span><br><span class="line">    <span class="comment">// 入站配置（监听来自客户端的连接）</span></span><br><span class="line">    <span class="attr">&quot;inbounds&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">        <span class="punctuation">&#123;</span></span><br><span class="line">            <span class="attr">&quot;listen&quot;</span><span class="punctuation">:</span> <span class="string">&quot;0.0.0.0&quot;</span><span class="punctuation">,</span>           <span class="comment">// 监听所有网卡</span></span><br><span class="line">            <span class="attr">&quot;port&quot;</span><span class="punctuation">:</span> <span class="number">443</span><span class="punctuation">,</span>                    <span class="comment">// 监听端口，建议 443</span></span><br><span class="line">            <span class="attr">&quot;protocol&quot;</span><span class="punctuation">:</span> <span class="string">&quot;vless&quot;</span><span class="punctuation">,</span>            <span class="comment">// 协议：VLESS</span></span><br><span class="line">            <span class="attr">&quot;settings&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">                <span class="attr">&quot;clients&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">                    <span class="punctuation">&#123;</span></span><br><span class="line">                        <span class="attr">&quot;id&quot;</span><span class="punctuation">:</span> <span class="string">&quot;你生成的UUID&quot;</span><span class="punctuation">,</span>           <span class="comment">// 第三步生成的 UUID</span></span><br><span class="line">                        <span class="attr">&quot;flow&quot;</span><span class="punctuation">:</span> <span class="string">&quot;xtls-rprx-vision&quot;</span>      <span class="comment">// 流控模式，必须为 vision</span></span><br><span class="line">                    <span class="punctuation">&#125;</span></span><br><span class="line">                <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">                <span class="attr">&quot;decryption&quot;</span><span class="punctuation">:</span> <span class="string">&quot;none&quot;</span>        <span class="comment">// VLESS 不需要额外加密</span></span><br><span class="line">            <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;streamSettings&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">                <span class="attr">&quot;network&quot;</span><span class="punctuation">:</span> <span class="string">&quot;tcp&quot;</span><span class="punctuation">,</span>           <span class="comment">// 传输层：TCP</span></span><br><span class="line">                <span class="attr">&quot;security&quot;</span><span class="punctuation">:</span> <span class="string">&quot;reality&quot;</span><span class="punctuation">,</span>      <span class="comment">// 安全层：Reality</span></span><br><span class="line">                <span class="attr">&quot;realitySettings&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">                    <span class="attr">&quot;dest&quot;</span><span class="punctuation">:</span> <span class="string">&quot;www.apple.com:443&quot;</span><span class="punctuation">,</span>     <span class="comment">// 伪装目标网站（见下方说明）</span></span><br><span class="line">                    <span class="attr">&quot;serverNames&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span>                  <span class="comment">// 允许的 SNI 列表</span></span><br><span class="line">                        <span class="string">&quot;www.apple.com&quot;</span><span class="punctuation">,</span></span><br><span class="line">                        <span class="string">&quot;apple.com&quot;</span></span><br><span class="line">                    <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">                    <span class="attr">&quot;privateKey&quot;</span><span class="punctuation">:</span> <span class="string">&quot;你生成的私钥&quot;</span><span class="punctuation">,</span>       <span class="comment">// 第三步生成的 Private key</span></span><br><span class="line">                    <span class="attr">&quot;shortIds&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span>                      <span class="comment">// 短 ID，可自定义（0-16位十六进制）</span></span><br><span class="line">                        <span class="string">&quot;&quot;</span><span class="punctuation">,</span></span><br><span class="line">                        <span class="string">&quot;abcd1234&quot;</span></span><br><span class="line">                    <span class="punctuation">]</span></span><br><span class="line">                <span class="punctuation">&#125;</span></span><br><span class="line">            <span class="punctuation">&#125;</span></span><br><span class="line">        <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line"></span><br><span class="line">    <span class="comment">// 出站配置（代理服务器如何访问目标网站）</span></span><br><span class="line">    <span class="attr">&quot;outbounds&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">        <span class="punctuation">&#123;</span></span><br><span class="line">            <span class="attr">&quot;protocol&quot;</span><span class="punctuation">:</span> <span class="string">&quot;freedom&quot;</span><span class="punctuation">,</span>          <span class="comment">// 直连出站：直接访问目标</span></span><br><span class="line">            <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;direct&quot;</span></span><br><span class="line">        <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="punctuation">&#123;</span></span><br><span class="line">            <span class="attr">&quot;protocol&quot;</span><span class="punctuation">:</span> <span class="string">&quot;blackhole&quot;</span><span class="punctuation">,</span>        <span class="comment">// 黑洞出站：丢弃流量</span></span><br><span class="line">            <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;block&quot;</span></span><br><span class="line">        <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">]</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><blockquote><p>ℹ️ Xray 的 JSON 配置支持 <code>//</code> 注释，这是 Xray 的特性而非 JSON 标准。如果你使用其他工具解析此文件可能会报错。</p></blockquote><h3 id="关键参数说明"><a href="#关键参数说明" class="headerlink" title="关键参数说明"></a>关键参数说明</h3><p><strong>dest（伪装目标）</strong></p><p><code>dest</code> 是 Reality 的核心参数之一，指定客户端伪装访问的目标网站。当 GFW 或任何第三方探测你的服务器时，服务器会将请求转发到这个真实网站并返回真实的 TLS 证书，使探测者认为你的服务器只是一个普通的反向代理。</p><p>选择 <code>dest</code> 目标的要求：</p><ul><li>必须是境外网站（不在 GFW 封锁名单上）</li><li>必须支持 TLS 1.3 和 HTTP&#x2F;2</li><li>域名不能有重定向（访问时不能自动跳转到其他域名）</li><li>目标站 IP 与你的 VPS IP 不能相差太远（最好在同一地区）</li></ul><p>常用的 <code>dest</code> 目标：<code>www.apple.com:443</code>、<code>www.microsoft.com:443</code>、<code>www.samsung.com:443</code>、<code>www.lovelive-anime.jp:443</code>。你也可以自己找——用浏览器开发者工具检查目标站是否支持 TLS 1.3 和 HTTP&#x2F;2。</p><p><strong>serverNames（SNI 列表）</strong></p><p><code>serverNames</code> 是允许客户端使用的 SNI（Server Name Indication）值。必须与 <code>dest</code> 目标的域名一致。通常填写 <code>dest</code> 中的域名及其主域名即可。</p><p><strong>privateKey（私钥）</strong></p><p>服务端使用的 x25519 私钥，用于与客户端完成 Reality 的密钥协商。这个值必须保密，只存在于服务端配置中。对应的公钥需要配置在客户端。</p><p><strong>shortIds（短 ID）</strong></p><p>额外的认证字段，可以理解为一个简单的密码。空字符串 <code>&quot;&quot;</code> 表示允许不带 shortId 的连接。你可以生成随机的十六进制字符串作为 shortId（最长 16 位），客户端连接时必须携带匹配的 shortId。</p><p><strong>flow（流控）</strong></p><p>设置为 <code>xtls-rprx-vision</code>。Vision 模式会对内层 TLS 握手包进行填充处理，消除 TLS-in-TLS 的流量特征，提高隐蔽性。使用 Reality 时必须配合 vision 使用。</p><p>关于 VLESS+Reality 原理的深入解析，参见 <a href="/posts/vless-reality-deep-dive/">VLESS+Reality 深度解析</a>。各协议的横向对比可参考 <a href="/posts/protocol-comparison/">主流代理协议横向对比</a>。</p><hr><h2 id="第五步：启动与验证"><a href="#第五步：启动与验证" class="headerlink" title="第五步：启动与验证"></a>第五步：启动与验证</h2><p>配置写完后，启动 Xray 并设置开机自启：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 启用开机自启</span></span><br><span class="line">systemctl <span class="built_in">enable</span> xray</span><br><span class="line"></span><br><span class="line"><span class="comment"># 启动 Xray</span></span><br><span class="line">systemctl start xray</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看运行状态</span></span><br><span class="line">systemctl status xray</span><br></pre></td></tr></table></figure><p>如果状态显示 <code>active (running)</code>，说明启动成功。如果显示 <code>failed</code>，需要查看日志排查问题：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 查看 Xray 日志（实时跟踪）</span></span><br><span class="line">journalctl -u xray -f</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看最近 50 行日志</span></span><br><span class="line">journalctl -u xray -n 50</span><br></pre></td></tr></table></figure><p>常见的启动失败原因：</p><ul><li><strong>JSON 格式错误</strong>：多了或少了逗号、引号不匹配。可以先用 <code>xray run -test -c /usr/local/etc/xray/config.json</code> 测试配置文件语法。</li><li><strong>端口被占用</strong>：443 端口可能被 Nginx 或其他服务占用。用 <code>ss -tlnp | grep 443</code> 检查。</li><li><strong>密钥格式错误</strong>：确保 UUID 和 x25519 密钥是完整复制的，没有多余的空格或换行。</li></ul><hr><h2 id="第六步：客户端配置"><a href="#第六步：客户端配置" class="headerlink" title="第六步：客户端配置"></a>第六步：客户端配置</h2><p>服务端跑起来后，需要在本地设备上配置客户端来连接。</p><h3 id="Clash-Verge-Rev（推荐）"><a href="#Clash-Verge-Rev（推荐）" class="headerlink" title="Clash Verge Rev（推荐）"></a>Clash Verge Rev（推荐）</h3><p><a href="https://github.com/clash-verge-rev/clash-verge-rev">Clash Verge Rev</a> 支持 VLESS+Reality。你需要创建一个本地配置文件。</p><p>在 Clash Verge 的”订阅”（Profiles）页面中，点击”新建”，选择”Local”类型，创建一个 YAML 配置文件，填入以下内容：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">proxies:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">&quot;我的VPS&quot;</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">vless</span></span><br><span class="line">    <span class="attr">server:</span> <span class="string">你的服务器IP</span>           <span class="comment"># VPS 的 IP 地址</span></span><br><span class="line">    <span class="attr">port:</span> <span class="number">443</span>                       <span class="comment"># 与服务端配置一致</span></span><br><span class="line">    <span class="attr">uuid:</span> <span class="string">你生成的UUID</span>              <span class="comment"># 与服务端配置一致</span></span><br><span class="line">    <span class="attr">network:</span> <span class="string">tcp</span></span><br><span class="line">    <span class="attr">udp:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">tls:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">flow:</span> <span class="string">xtls-rprx-vision</span>          <span class="comment"># 与服务端配置一致</span></span><br><span class="line">    <span class="attr">servername:</span> <span class="string">www.apple.com</span>       <span class="comment"># 与服务端 serverNames 一致</span></span><br><span class="line">    <span class="attr">reality-opts:</span></span><br><span class="line">      <span class="attr">public-key:</span> <span class="string">你生成的公钥</span>      <span class="comment"># 第三步生成的 Public key（不是私钥！）</span></span><br><span class="line">      <span class="attr">short-id:</span> <span class="string">&quot;abcd1234&quot;</span>          <span class="comment"># 与服务端 shortIds 中的某一个一致</span></span><br><span class="line"></span><br><span class="line"><span class="attr">proxy-groups:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">&quot;Proxy&quot;</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">select</span></span><br><span class="line">    <span class="attr">proxies:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">&quot;我的VPS&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="attr">rules:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOIP,CN,DIRECT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">MATCH,Proxy</span></span><br></pre></td></tr></table></figure><p>保存后，在 Clash Verge 中选中这个配置，切换代理模式为”规则”模式（Rule），然后开启系统代理或 TUN 模式。打开浏览器访问 <code>https://www.google.com</code>，如果能正常加载，说明一切配置正确。</p><blockquote><p>ℹ️ 上面的 rules 只是最简化的示例——大陆 IP 直连，其余走代理。如果需要更精细的分流规则，参考 <a href="./what-are-rules.md">规则入门</a> 和 <a href="./custom-rules.md">自定义规则</a>。</p></blockquote><h3 id="v2rayN（Windows）"><a href="#v2rayN（Windows）" class="headerlink" title="v2rayN（Windows）"></a>v2rayN（Windows）</h3><p>v2rayN 同样支持 VLESS+Reality。添加服务器时选择 VLESS 协议，然后填入对应的参数：</p><ul><li>地址：你的服务器 IP</li><li>端口：443</li><li>UUID：与服务端一致</li><li>流控（Flow）：xtls-rprx-vision</li><li>传输方式：tcp</li><li>TLS：reality</li><li>SNI：<a href="http://www.apple.com/">www.apple.com</a></li><li>公钥（Public Key）：第三步生成的公钥</li><li>短 ID（Short Id）：与服务端一致</li></ul><p>v2rayN 的界面会引导你逐项填写，按照服务端配置对应填入即可。</p><hr><h2 id="进阶优化"><a href="#进阶优化" class="headerlink" title="进阶优化"></a>进阶优化</h2><p>基础搭建完成后，可以通过以下手段进一步优化体验。</p><h3 id="确认-BBR-生效"><a href="#确认-BBR-生效" class="headerlink" title="确认 BBR 生效"></a>确认 BBR 生效</h3><p>第二步中我们已经启用了 BBR。如果你跳过了那一步，或者想确认是否真的生效了：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sysctl net.ipv4.tcp_congestion_control</span><br></pre></td></tr></table></figure><p>输出应为 <code>bbr</code>。如果显示 <code>cubic</code> 或其他值，回到第二步重新配置。BBR 对代理速度的提升非常明显，尤其是在丢包率较高的国际线路上。</p><h3 id="使用-warp-cli-获取-IPv6-和解锁能力"><a href="#使用-warp-cli-获取-IPv6-和解锁能力" class="headerlink" title="使用 warp-cli 获取 IPv6 和解锁能力"></a>使用 warp-cli 获取 IPv6 和解锁能力</h3><p>很多 VPS 默认只有 IPv4，部分流媒体服务（如 Netflix）和 AI 服务可能需要特定地区的 IP 才能解锁。Cloudflare WARP 可以为你的 VPS 提供一个 Cloudflare 的出口 IP，有时能绕过一些 IP 限制。</p><p>安装 WARP CLI：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 添加 Cloudflare 的 APT 仓库（以 Debian 为例）</span></span><br><span class="line">curl -fsSL https://pkg.cloudflareclient.com/pubkey.gpg \</span><br><span class="line">  | gpg --dearmor -o /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg</span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ <span class="subst">$(lsb_release -cs)</span> main&quot;</span> \</span><br><span class="line">  | <span class="built_in">tee</span> /etc/apt/sources.list.d/cloudflare-client.list</span><br><span class="line"></span><br><span class="line">apt update &amp;&amp; apt install -y cloudflare-warp</span><br><span class="line"></span><br><span class="line"><span class="comment"># 注册并启用代理模式</span></span><br><span class="line">warp-cli registration new</span><br><span class="line">warp-cli mode proxy</span><br><span class="line">warp-cli connect</span><br><span class="line"></span><br><span class="line"><span class="comment"># 验证（通过 WARP 的 socks5 代理访问）</span></span><br><span class="line">curl --proxy socks5://127.0.0.1:40000 https://cloudflare.com/cdn-cgi/trace</span><br></pre></td></tr></table></figure><p>然后在 Xray 的出站配置中，可以添加一条通过 WARP 出去的出站规则，配合路由将特定流量经由 WARP 转发。这属于更高级的配置，适合有具体解锁需求的用户。</p><h3 id="IP-监控与告警"><a href="#IP-监控与告警" class="headerlink" title="IP 监控与告警"></a>IP 监控与告警</h3><p>自建节点最怕 IP 被封。你可以写一个简单的定时脚本来监控 VPS 的可达性。在大陆的一台设备上（或使用国内的云函数服务）设置 cron 任务：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 每 30 分钟检测一次 VPS 端口是否可达</span></span><br><span class="line">*/30 * * * * nc -z -w5 你的服务器IP 443 || curl -s <span class="string">&quot;你的告警Webhook&quot;</span></span><br></pre></td></tr></table></figure><p>如果端口不通，通过 Webhook 发送通知到 Telegram 或微信。这样你能在 IP 被封后第一时间知道并着手更换 IP。</p><hr><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="Q1：配置完成后客户端连不上怎么办？"><a href="#Q1：配置完成后客户端连不上怎么办？" class="headerlink" title="Q1：配置完成后客户端连不上怎么办？"></a>Q1：配置完成后客户端连不上怎么办？</h3><p>按以下顺序排查：</p><ol><li><strong>确认服务端运行正常</strong>：<code>systemctl status xray</code> 应显示 <code>active (running)</code>。</li><li><strong>确认端口放行</strong>：<code>ufw status</code> 中应有你配置的端口（如 443）的 ALLOW 规则。VPS 控制面板中如果有安全组&#x2F;防火墙，也需要放行对应端口。</li><li><strong>确认 IP 未被封</strong>：在大陆网络下访问 <code>https://ping.pe/你的IP</code>，看是否全国范围不通。如果大陆全部 timeout 而海外正常，说明 IP 已被 GFW 封锁，需要更换 IP。</li><li><strong>检查客户端参数</strong>：UUID、公钥（注意是公钥不是私钥）、shortId、SNI、服务器 IP&#x2F;端口是否与服务端配置完全一致。</li></ol><h3 id="Q2：IP-被封了怎么办？"><a href="#Q2：IP-被封了怎么办？" class="headerlink" title="Q2：IP 被封了怎么办？"></a>Q2：IP 被封了怎么办？</h3><p>取决于你的 VPS 提供商：</p><ul><li><strong>AWS Lightsail &#x2F; DigitalOcean</strong>：释放当前 IP，重新分配一个弹性 IP（或销毁重建实例），不需要额外付费。</li><li><strong>搬瓦工</strong>：部分套餐支持在控制面板中免费更换 IP（每 10 周一次）。也可以购买付费更换。</li><li><strong>其他提供商</strong>：提工单咨询是否支持更换 IP。如果不支持，可能需要新购一台 VPS。</li></ul><p>更换 IP 后，只需修改客户端配置中的服务器地址，服务端配置无需改动。</p><h3 id="Q3：Reality-的-dest-目标站怎么选？"><a href="#Q3：Reality-的-dest-目标站怎么选？" class="headerlink" title="Q3：Reality 的 dest 目标站怎么选？"></a>Q3：Reality 的 dest 目标站怎么选？</h3><p>好的 <code>dest</code> 目标需要满足：支持 TLS 1.3、不做 301&#x2F;302 重定向、在你的 VPS 地区有 CDN 节点（这样 IP 地理位置看起来合理）。一些常用选择：<code>www.apple.com</code>、<code>www.microsoft.com</code>、<code>www.samsung.com</code>、<code>www.lovelive-anime.jp</code>、<code>www.swift.org</code>。</p><p>避免使用冷门小站（可能宕机）、已被大量自建用户使用导致被标记的目标、以及墙内可直连访问的站点。</p><h3 id="Q4：Xray-需要手动更新吗？"><a href="#Q4：Xray-需要手动更新吗？" class="headerlink" title="Q4：Xray 需要手动更新吗？"></a>Q4：Xray 需要手动更新吗？</h3><p>是的。Xray 不会自动更新，你需要定期手动升级以获得安全补丁和性能优化。更新方法很简单，重新运行安装脚本即可：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">bash -c <span class="string">&quot;<span class="subst">$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)</span>&quot;</span> @ install</span><br><span class="line">systemctl restart xray</span><br></pre></td></tr></table></figure><p>建议每 1-2 个月检查一次 <a href="https://github.com/XTLS/Xray-core/releases">Xray-core Releases</a> 页面，看是否有重要更新。</p><hr><h2 id="相关资源"><a href="#相关资源" class="headerlink" title="相关资源"></a>相关资源</h2><ul><li><a href="https://github.com/XTLS/Xray-core">Xray-core</a> — VLESS&#x2F;Reality 协议的核心实现</li><li><a href="https://github.com/XTLS/Xray-install">Xray-install</a> — 官方安装脚本</li><li><a href="https://github.com/XTLS/REALITY">REALITY</a> — Reality 协议的设计文档</li><li><a href="https://github.com/clash-verge-rev/clash-verge-rev">Clash Verge Rev</a> — 跨平台代理客户端</li></ul><p>站内相关文章：</p><ul><li><a href="./vless-reality-deep-dive.md">VLESS+Reality 深度解析</a> — 理解 Reality 的工作原理</li><li><a href="./decision-framework.md">月付 vs 年付、自建 vs 机场：决策框架</a> — 判断自建是否适合你</li><li><a href="./first-time-setup.md">第一次使用代理：从零开始的配置指南</a> — 如果你最终选择了机场方案</li><li><a href="./speed-optimization.md">速度优化指南</a> — 进一步提升代理性能</li></ul>]]></content>
      
      
      <categories>
          
          <category> 入门指南 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> Xray </tag>
            
            <tag> 教程 </tag>
            
            <tag> 自建 </tag>
            
            <tag> VLESS </tag>
            
            <tag> Reality </tag>
            
            <tag> VPS </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>Hysteria2 与 TUIC：基于 QUIC 的协议</title>
      <link href="/posts/quic-protocols/"/>
      <url>/posts/quic-protocols/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>: Hysteria2 和 TUIC 是基于 QUIC（HTTP&#x2F;3 底层协议）构建的代理协议。它们利用 UDP 传输实现高带宽和低延迟，特别适合流媒体和大文件下载场景。本文解析两者的技术原理、各自特点和适用场景。</p></blockquote><h2 id="为什么用-QUIC"><a href="#为什么用-QUIC" class="headerlink" title="为什么用 QUIC"></a>为什么用 QUIC</h2><p>在讨论 <a href="https://hysteria.network/">Hysteria2</a> 和 TUIC 之前，首先需要理解它们为什么选择了 <a href="https://datatracker.ietf.org/doc/html/rfc9000">QUIC</a> 而不是沿用传统的 TCP。这个选择不是赶时髦，而是为了解决 TCP 在代理场景中的根本性缺陷。</p><h3 id="TCP-的局限"><a href="#TCP-的局限" class="headerlink" title="TCP 的局限"></a>TCP 的局限</h3><p>几乎所有主流代理协议——Shadowsocks、VMess、VLESS、Trojan——都建立在 TCP 之上。TCP 在现代高延迟、有丢包的跨境链路上存在几个固有问题。</p><p>**队头阻塞（Head-of-Line Blocking）**是最核心的问题。TCP 保证数据有序到达，一个数据包的丢失会阻塞同一 TCP 连接上的所有后续数据。</p><p><strong>拥塞控制过于保守</strong>也是长期存在的问题。TCP 的拥塞控制算法在检测到丢包后会大幅降低发送速率，在跨境代理的高延迟链路上，实际吞吐量远低于链路的理论带宽。</p><p><strong>握手开销</strong>同样值得关注。TCP 建立连接需要三次握手加上 TLS 握手，在跨太平洋链路上意味着数百毫秒的固定延迟开销。</p><h3 id="QUIC-的优势"><a href="#QUIC-的优势" class="headerlink" title="QUIC 的优势"></a>QUIC 的优势</h3><p>QUIC 基于 UDP 构建，支持多路复用的独立流消除队头阻塞；0-RTT 或 1-RTT 连接建立大幅降低延迟；内置 TLS 1.3 加密；拥塞控制在用户空间实现，可以自由定制。</p><p>QUIC 已经是 HTTP&#x2F;3 的基础，截至 2026 年，全球超过 30% 的 Web 流量通过 QUIC 传输。基于 QUIC 的代理流量在网络中并不异常。</p><p><img src="/images/inline/quic-vs-tcp.png" alt="QUIC 与 TCP 对比"><br><em>图片来源：<a href="https://www.catchpoint.com/">Catchpoint</a></em></p><h2 id="Hysteria2"><a href="#Hysteria2" class="headerlink" title="Hysteria2"></a>Hysteria2</h2><h3 id="设计理念"><a href="#设计理念" class="headerlink" title="设计理念"></a>设计理念</h3><p>Hysteria2 的设计目标非常明确：<strong>在恶劣的网络条件下最大化传输吞吐量</strong>。它把”快”放在了首位。</p><h3 id="Brutal-拥塞控制"><a href="#Brutal-拥塞控制" class="headerlink" title="Brutal 拥塞控制"></a>Brutal 拥塞控制</h3><p>Brutal 是 Hysteria2 最具特色也最具争议的设计。标准拥塞控制在检测到丢包后降低发送速率，但在跨境代理场景中，丢包往往不是真正的网络拥塞，而是链路本身的质量问题。</p><p>Brutal 的做法：<strong>用户直接指定目标带宽</strong>，Brutal 会尝试维持这个发送速率，无论网络是否出现丢包信号。在丢包率 5%-10% 的跨境链路上，Brutal 的实际吞吐量可以达到传统 TCP 的 3-5 倍。</p><p>但 Brutal 对同网络其他用户”不友好”、流量特征异常、带宽估算需要准确。Hysteria2 也支持 BBR 拥塞控制作为替代选项。</p><h3 id="协议特点"><a href="#协议特点" class="headerlink" title="协议特点"></a>协议特点</h3><ul><li><strong>HTTP&#x2F;3 伪装</strong>：流量在网络层面看起来像标准的 HTTP&#x2F;3 连接</li><li><strong>简化的认证机制</strong>：使用简单的密码认证</li><li><strong>内置 ACME 支持</strong>：可自动申请和续期 TLS 证书</li><li><strong>端口跳跃（Port Hopping）</strong>：在多个 UDP 端口之间轮换连接，增加抗封锁韧性</li><li><strong>同时支持代理和 VPN 模式</strong></li></ul><h3 id="部署示例"><a href="#部署示例" class="headerlink" title="部署示例"></a>部署示例</h3><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">listen:</span> <span class="string">:443</span></span><br><span class="line"></span><br><span class="line"><span class="attr">tls:</span></span><br><span class="line">  <span class="attr">cert:</span> <span class="string">/path/to/cert.pem</span></span><br><span class="line">  <span class="attr">key:</span> <span class="string">/path/to/key.pem</span></span><br><span class="line"></span><br><span class="line"><span class="attr">auth:</span></span><br><span class="line">  <span class="attr">type:</span> <span class="string">password</span></span><br><span class="line">  <span class="attr">password:</span> <span class="string">your-password</span></span><br><span class="line"></span><br><span class="line"><span class="attr">masquerade:</span></span><br><span class="line">  <span class="attr">type:</span> <span class="string">proxy</span></span><br><span class="line">  <span class="attr">proxy:</span></span><br><span class="line">    <span class="attr">url:</span> <span class="string">https://example.com</span></span><br><span class="line">    <span class="attr">rewriteHost:</span> <span class="literal">true</span></span><br></pre></td></tr></table></figure><h2 id="TUIC"><a href="#TUIC" class="headerlink" title="TUIC"></a>TUIC</h2><h3 id="设计理念-1"><a href="#设计理念-1" class="headerlink" title="设计理念"></a>设计理念</h3><p>TUIC 的关键词是”规范的 QUIC 代理”。它不使用激进的拥塞控制，而是利用 QUIC 本身的多路复用、低延迟握手等特性来提升代理性能。</p><h3 id="协议特点-1"><a href="#协议特点-1" class="headerlink" title="协议特点"></a>协议特点</h3><ul><li><strong>多路复用 QUIC Stream</strong>：每个代理请求使用独立的 QUIC Stream，真正实现无队头阻塞</li><li><strong>UUID 认证</strong>：与 VLESS&#x2F;VMess 生态保持一致</li><li><strong>0-RTT 支持</strong></li><li><strong>标准拥塞控制</strong>：使用 BBR 或 Cubic，流量行为模式更接近正常网络流量</li></ul><h3 id="与-Hysteria2-的区别"><a href="#与-Hysteria2-的区别" class="headerlink" title="与 Hysteria2 的区别"></a>与 Hysteria2 的区别</h3><table><thead><tr><th>维度</th><th>Hysteria2</th><th>TUIC</th></tr></thead><tbody><tr><td>拥塞控制</td><td>Brutal（激进）&#x2F; BBR</td><td>BBR &#x2F; Cubic（标准）</td></tr><tr><td>认证方式</td><td>密码</td><td>UUID + Password</td></tr><tr><td>端口跳跃</td><td>支持</td><td>不支持</td></tr><tr><td>客户端支持</td><td>广泛</td><td><a href="https://github.com/SagerNet/sing-box">sing-box</a> 为主</td></tr><tr><td>开发活跃度</td><td>活跃</td><td>较低</td></tr><tr><td>适用场景</td><td>高带宽需求</td><td>通用代理</td></tr></tbody></table><h3 id="TUIC-的现状"><a href="#TUIC-的现状" class="headerlink" title="TUIC 的现状"></a>TUIC 的现状</h3><p>截至 2026 年中，TUIC 的项目维护状态不太理想。如果你是新用户在 QUIC 方案中做选择，推荐直接选 Hysteria2。</p><h2 id="QUIC-协议在中国的现状"><a href="#QUIC-协议在中国的现状" class="headerlink" title="QUIC 协议在中国的现状"></a>QUIC 协议在中国的现状</h2><h3 id="UDP-封锁与-QoS-问题"><a href="#UDP-封锁与-QoS-问题" class="headerlink" title="UDP 封锁与 QoS 问题"></a>UDP 封锁与 QoS 问题</h3><p>中国各大运营商对 UDP 流量的态度存在明显差异。中国移动对 UDP 的限制最为严格，中国电信和中国联通相对好一些。移动网络（4G&#x2F;5G）通常比宽带更严格地限制 UDP。</p><h3 id="检测风险"><a href="#检测风险" class="headerlink" title="检测风险"></a>检测风险</h3><p>GFW 对 QUIC 流量的分析能力正在持续增强。Brutal 模式的流量特征、单一 IP 的 QUIC 连接集中度、连接时长和流量模式都是潜在的检测信号。检测风险评估：中等，且呈上升趋势。</p><h2 id="该不该用-QUIC-协议"><a href="#该不该用-QUIC-协议" class="headerlink" title="该不该用 QUIC 协议"></a>该不该用 QUIC 协议</h2><h3 id="适合使用的场景"><a href="#适合使用的场景" class="headerlink" title="适合使用的场景"></a>适合使用的场景</h3><ul><li>ISP 对 UDP 限制不严</li><li>需要高带宽传输（4K&#x2F;8K 流媒体、大文件下载）</li><li>TCP 节点高峰拥堵</li><li>作为备用协议</li></ul><h3 id="不适合的场景"><a href="#不适合的场景" class="headerlink" title="不适合的场景"></a>不适合的场景</h3><ul><li>ISP 封锁或严格限速 UDP</li><li>主要使用移动网络</li><li>隐蔽性是首要需求</li><li>游戏加速（延迟波动敏感）</li></ul><h3 id="推荐策略"><a href="#推荐策略" class="headerlink" title="推荐策略"></a>推荐策略</h3><p>对于大多数用户，最务实的做法是<strong>多协议组合</strong>：</p><ul><li><strong>主力协议</strong>：VLESS + Reality（TCP，最可靠，抗检测能力最强）</li><li><strong>备用协议</strong>：Hysteria2（UDP 友好环境下的高带宽选项）</li><li><strong>客户端配置</strong>：利用 sing-box 或 mihomo 的自动切换功能</li></ul><p>不要把所有节点都放在同一种协议上。TCP 和 UDP 属于不同的传输层，运营商的封锁策略通常也是分开的。保持协议多样性是最基本的风险分散策略。</p><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="Q-Hysteria2-和-VLESS-Reality-只能选一个吗？"><a href="#Q-Hysteria2-和-VLESS-Reality-只能选一个吗？" class="headerlink" title="Q: Hysteria2 和 VLESS+Reality 只能选一个吗？"></a>Q: Hysteria2 和 VLESS+Reality 只能选一个吗？</h3><p>不用。两种协议完全可以同时部署在同一台服务器上——VLESS+Reality 监听 TCP 443，Hysteria2 监听 UDP 443，互不干扰。</p><h3 id="Q-怎么测试我的网络支不支持-UDP-QUIC？"><a href="#Q-怎么测试我的网络支不支持-UDP-QUIC？" class="headerlink" title="Q: 怎么测试我的网络支不支持 UDP&#x2F;QUIC？"></a>Q: 怎么测试我的网络支不支持 UDP&#x2F;QUIC？</h3><p>最直接的方法：连接一个 Hysteria2 节点，尝试正常使用。也可以检查 YouTube 是否通过 h3 协议加载。</p><h3 id="Q-TUIC-还值得用吗？"><a href="#Q-TUIC-还值得用吗？" class="headerlink" title="Q: TUIC 还值得用吗？"></a>Q: TUIC 还值得用吗？</h3><p>如果你是新用户，推荐直接选 Hysteria2。如果你已经在使用 TUIC 且运行稳定，没必要急着迁移。</p><h3 id="Q-端口跳跃是什么意思？"><a href="#Q-端口跳跃是什么意思？" class="headerlink" title="Q: 端口跳跃是什么意思？"></a>Q: 端口跳跃是什么意思？</h3><p>端口跳跃允许 Hysteria2 客户端在一个预设的端口范围内轮换连接端口，大幅增加了封锁方的成本。TUIC 不支持端口跳跃。</p><h3 id="Q-Brutal-模式的带宽应该设多少？"><a href="#Q-Brutal-模式的带宽应该设多少？" class="headerlink" title="Q: Brutal 模式的带宽应该设多少？"></a>Q: Brutal 模式的带宽应该设多少？</h3><p>应该设为你的实际链路带宽的 80%-90%，而不是一个脱离实际的高值。如果不确定，建议先用 BBR 模式测试基准带宽。</p>]]></content>
      
      
      <categories>
          
          <category> 协议与原理 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> 协议 </tag>
            
            <tag> Hysteria2 </tag>
            
            <tag> TUIC </tag>
            
            <tag> QUIC </tag>
            
            <tag> UDP </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>Shadowrocket 使用指南（iOS）</title>
      <link href="/posts/shadowrocket-guide/"/>
      <url>/posts/shadowrocket-guide/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：Shadowrocket（俗称”小火箭”）是 iOS 平台上最受欢迎的代理客户端，以低廉的价格（$2.99 一次性购买）和强大的功能著称。本文从购买安装到高级配置，全面介绍 Shadowrocket 的使用方法。无论你是刚刚入门还是想深入挖掘它的功能，这篇文章都能帮到你。</p></blockquote><hr><h2 id="如何获取-Shadowrocket"><a href="#如何获取-Shadowrocket" class="headerlink" title="如何获取 Shadowrocket"></a>如何获取 Shadowrocket</h2><p>这是很多新手遇到的第一个障碍。Shadowrocket 没有上架中国区 App Store，你必须使用一个<strong>非中国大陆地区的 Apple ID</strong> 才能下载。</p><h3 id="获取海外-Apple-ID"><a href="#获取海外-Apple-ID" class="headerlink" title="获取海外 Apple ID"></a>获取海外 Apple ID</h3><p>有两种主要途径：</p><p><strong>方法一：自己注册</strong></p><ol><li>准备一个没有注册过 Apple ID 的邮箱（Gmail、Outlook 等都可以）</li><li>在浏览器打开 <a href="https://appleid.apple.com/">https://appleid.apple.com</a>，点击”创建 Apple ID”</li><li>国家&#x2F;地区选择<strong>美国</strong>或<strong>香港</strong>（推荐美区，App 最全）</li><li>地址信息可以填写当地的任意有效地址（网上搜索”美国免税州地址”可以找到很多）</li><li>付款方式选择”无”</li><li>完成注册后，用这个新 Apple ID 登录 App Store</li></ol><p><strong>方法二：通过机场服务商</strong></p><p>部分机场提供海外 Apple ID 的代购服务或共享账号。共享账号有一定安全风险，建议优先自己注册。</p><h3 id="购买和下载"><a href="#购买和下载" class="headerlink" title="购买和下载"></a>购买和下载</h3><ol><li>在 iPhone 上打开 <strong>App Store</strong></li><li>点击右上角头像，<strong>退出当前 Apple ID</strong></li><li><strong>登录你的海外 Apple ID</strong></li><li>搜索”Shadowrocket”</li><li>售价 $2.99（美区价格），一次性购买，没有订阅费</li><li>购买后下载安装</li></ol><p>如果你没有绑定支付方式，可以购买对应地区的 App Store 礼品卡来充值。</p><p>下载完成后，<strong>立即切回你自己的 Apple ID</strong>。Shadowrocket 已经安装在手机上了，切回账号不会影响已安装的应用。</p><h3 id="注意事项"><a href="#注意事项" class="headerlink" title="注意事项"></a>注意事项</h3><ul><li><strong>不要在”设置”里登录海外 Apple ID</strong>。只在 App Store 里切换就行。在系统设置中登录可能触发 iCloud 同步，影响你的数据。</li><li>Shadowrocket 购买后绑定你的海外 Apple ID，以后换手机用同一个 Apple ID 登录 App Store 就能免费重新下载。</li></ul><hr><h2 id="添加订阅"><a href="#添加订阅" class="headerlink" title="添加订阅"></a>添加订阅</h2><p>打开 Shadowrocket 后，你会看到一个几乎空白的主界面。第一步是导入你的机场订阅。</p><h3 id="通过订阅链接添加"><a href="#通过订阅链接添加" class="headerlink" title="通过订阅链接添加"></a>通过订阅链接添加</h3><ol><li>点击右上角的 <strong>+</strong> 按钮</li><li>选择类型为 <strong>Subscribe</strong>（订阅）</li><li>在 <strong>URL</strong> 字段粘贴你从机场获取的订阅链接</li><li><strong>Remarks</strong>（备注）字段填一个你方便识别的名称，比如”我的机场”</li><li>点击右上角 <strong>Done</strong>（完成）</li></ol><p>添加后，Shadowrocket 会自动拉取订阅内容并导入所有节点。你会在首页看到一堆节点列表。</p><h3 id="更新订阅"><a href="#更新订阅" class="headerlink" title="更新订阅"></a>更新订阅</h3><p>订阅添加后，节点列表不会自动更新。你需要手动操作：</p><ol><li>在首页顶部找到你的订阅项</li><li>向左滑动，会出现操作按钮</li><li>点击 <strong>更新</strong> 按钮拉取最新节点</li></ol><p>你也可以在 <strong>设置 → 订阅</strong> 中开启<strong>自动更新</strong>，设置更新间隔（建议每天一次）。这样新增或调整的节点会自动同步。</p><h3 id="通过扫码添加单个节点"><a href="#通过扫码添加单个节点" class="headerlink" title="通过扫码添加单个节点"></a>通过扫码添加单个节点</h3><p>如果你有节点的二维码（通常是自建节点或机场提供的单节点分享），可以点击 + → <strong>Scan QR Code</strong>（扫描二维码）来添加。</p><hr><h2 id="连接和节点选择"><a href="#连接和节点选择" class="headerlink" title="连接和节点选择"></a>连接和节点选择</h2><h3 id="开启代理"><a href="#开启代理" class="headerlink" title="开启代理"></a>开启代理</h3><ol><li>在首页的节点列表中，<strong>点击你想使用的节点</strong>使其被选中（前面出现橙色圆点）</li><li>点击页面最顶部的<strong>连接开关</strong>（一个大的切换按钮）</li><li>首次开启时，iOS 会弹出 VPN 配置权限请求，点击”允许”并验证 Face ID &#x2F; Touch ID</li></ol><p>连接成功后，你会看到状态栏（或灵动岛附近）出现一个 <strong>VPN</strong> 标志。打开浏览器试试能不能访问 Google——如果可以，说明代理已经生效了。</p><h3 id="节点延迟测试"><a href="#节点延迟测试" class="headerlink" title="节点延迟测试"></a>节点延迟测试</h3><p>在首页长按某个节点会弹出菜单，可以对单个节点进行延迟测试。或者你可以在 <strong>设置</strong> 中找到<strong>连通性测试</strong> URL（默认是 <code>http://www.gstatic.com/generate_204</code>），点击首页底部的延迟测试按钮对所有节点进行批量测试。</p><p>延迟测试的结果显示在节点名称的右侧。选择延迟最低的节点通常能获得最好的体验。</p><hr><h2 id="代理模式"><a href="#代理模式" class="headerlink" title="代理模式"></a>代理模式</h2><p>Shadowrocket 提供三种代理模式，点击首页底部可以切换：</p><h3 id="全局代理（Global-Proxy）"><a href="#全局代理（Global-Proxy）" class="headerlink" title="全局代理（Global Proxy）"></a>全局代理（Global Proxy）</h3><p>所有流量都走代理节点。这意味着访问国内网站也会绕道境外服务器，速度会变慢。一般不推荐日常使用，但在某些特殊场景下（比如需要确保所有流量都经过加密）有用。</p><h3 id="规则模式（Config-Rule）"><a href="#规则模式（Config-Rule）" class="headerlink" title="规则模式（Config &#x2F; Rule）"></a>规则模式（Config &#x2F; Rule）</h3><p>根据预设的规则来判断每个请求是走代理还是直连。这是最推荐的模式：</p><ul><li>国内网站和服务 → 直连，不走代理</li><li>被墙的网站 → 走代理</li><li>广告域名 → 拦截</li></ul><p>Shadowrocket 自带一份基础规则配置，但你也可以导入更完善的第三方规则。</p><h3 id="直连模式（Direct）"><a href="#直连模式（Direct）" class="headerlink" title="直连模式（Direct）"></a>直连模式（Direct）</h3><p>所有流量都直连，等于没有开代理。可以在临时不需要代理时快速切换，而不用断开 VPN 连接。</p><hr><h2 id="规则配置"><a href="#规则配置" class="headerlink" title="规则配置"></a>规则配置</h2><p>规则模式是 Shadowrocket 最核心的功能之一。合理的规则配置可以让你在无感知的情况下自动实现”国内直连、国外代理”。</p><h3 id="使用远程规则配置"><a href="#使用远程规则配置" class="headerlink" title="使用远程规则配置"></a>使用远程规则配置</h3><p>Shadowrocket 支持导入远程规则配置文件。社区有很多维护良好的规则集合，你可以直接使用：</p><ol><li>点击底部标签栏的 <strong>配置</strong>（Config）标签</li><li>点击右上角 <strong>+</strong> 按钮</li><li>输入远程配置文件的 URL</li><li>下载完成后，<strong>点击该配置文件使其被选中</strong>（前面出现橙色圆点）</li></ol><h3 id="手动编辑规则"><a href="#手动编辑规则" class="headerlink" title="手动编辑规则"></a>手动编辑规则</h3><p>在配置标签中，点击已使用的配置文件旁边的 <strong>(i)</strong> 按钮，可以进入编辑界面。规则的格式和 Clash 类似：</p><ul><li><code>DOMAIN-SUFFIX,google.com,PROXY</code> —— google.com 及其子域名走代理</li><li><code>DOMAIN-KEYWORD,github,PROXY</code> —— 域名中包含 github 的走代理</li><li><code>IP-CIDR,10.0.0.0/8,DIRECT</code> —— 局域网 IP 直连</li><li><code>GEOIP,CN,DIRECT</code> —— 中国大陆 IP 直连</li><li><code>FINAL,PROXY</code> —— 其他所有流量走代理</li></ul><p>规则的顺序很重要——Shadowrocket 从上到下匹配，命中第一条规则后就不再继续匹配。所以越精确的规则应该放在越前面。</p><hr><h2 id="按需连接（On-Demand-Connect）"><a href="#按需连接（On-Demand-Connect）" class="headerlink" title="按需连接（On-Demand Connect）"></a>按需连接（On-Demand Connect）</h2><p>这是 Shadowrocket 一个很实用的功能。开启后，代理会在需要时自动连接，不需要手动开关。</p><p>设置路径：<strong>设置 → 按需连接</strong></p><p>你可以配置不同的触发条件：</p><ul><li><strong>在 Wi-Fi 网络下自动连接</strong>：连接到指定 Wi-Fi 时自动开启代理</li><li><strong>在蜂窝网络下自动连接</strong>：使用移动数据时自动开启</li><li><strong>特定 Wi-Fi 排除</strong>：在家庭或公司的受信任 Wi-Fi 下不自动连接</li></ul><p>这个功能特别适合日常使用：你不需要每次打开手机都记得手动开代理，也不用担心在不需要代理的环境下浪费流量。</p><hr><h2 id="DNS-设置"><a href="#DNS-设置" class="headerlink" title="DNS 设置"></a>DNS 设置</h2><p>Shadowrocket 内置了 DNS 配置功能，可以防止 DNS 泄漏并提升解析速度。</p><p>设置路径：在配置文件编辑界面中找到 DNS 部分。</p><h3 id="推荐配置"><a href="#推荐配置" class="headerlink" title="推荐配置"></a>推荐配置</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">[General]</span><br><span class="line">dns-server = https://dns.alidns.com/dns-query, https://doh.pub/dns-query</span><br></pre></td></tr></table></figure><p>使用 DoH（DNS over HTTPS）可以加密 DNS 查询，防止 ISP 监控和劫持你的 DNS 请求。</p><h3 id="DNS-分流"><a href="#DNS-分流" class="headerlink" title="DNS 分流"></a>DNS 分流</h3><p>你还可以为不同的域名指定不同的 DNS 服务器。比如国内域名用国内 DNS 解析（速度快），国外域名用国外 DNS 解析（避免污染）。不过对于大多数用户来说，默认配置加上规则模式已经能很好地处理这个问题。</p><hr><h2 id="流量统计"><a href="#流量统计" class="headerlink" title="流量统计"></a>流量统计</h2><p>Shadowrocket 的 <strong>数据</strong> 标签提供了流量使用统计：</p><ul><li>当日和累计的上传&#x2F;下载流量</li><li>最近的连接记录</li><li>每条连接的目标地址、匹配规则、使用节点</li></ul><p>这些信息在排查问题时很有帮助。比如你发现某个应用异常耗流量，可以在连接记录中看到它到底在连哪些服务器。</p><hr><h2 id="HTTPS-解密（可选高级功能）"><a href="#HTTPS-解密（可选高级功能）" class="headerlink" title="HTTPS 解密（可选高级功能）"></a>HTTPS 解密（可选高级功能）</h2><p>Shadowrocket 支持 MITM（中间人）HTTPS 解密功能。这个功能可以让你查看和修改 HTTPS 流量的内容，主要用于：</p><ul><li>拦截 HTTPS 网页中的广告</li><li>调试应用的网络请求</li><li>实现某些需要解密流量才能生效的规则</li></ul><h3 id="如何开启"><a href="#如何开启" class="headerlink" title="如何开启"></a>如何开启</h3><ol><li>进入 <strong>配置 → 编辑配置 → HTTPS 解密</strong></li><li>开启 HTTPS 解密</li><li>生成 CA 证书</li><li>安装并信任该证书：<strong>设置 → 通用 → VPN 与设备管理 → 安装描述文件</strong></li><li>前往 <strong>设置 → 通用 → 关于本机 → 证书信任设置</strong>，开启对该证书的完全信任</li></ol><h3 id="风险提醒"><a href="#风险提醒" class="headerlink" title="风险提醒"></a>风险提醒</h3><p>HTTPS 解密本质上是一种中间人攻击技术。开启后：</p><ul><li>Shadowrocket 能看到你所有 HTTPS 流量的明文内容</li><li>如果你的设备被他人控制或证书泄漏，可能造成安全风险</li><li>部分应用（尤其是银行和支付类应用）有证书绑定机制，开启后可能无法使用</li></ul><p><strong>普通用户不需要开启这个功能</strong>。只有在明确知道自己在做什么的情况下才建议使用。</p><hr><h2 id="iOS-上的其他代理客户端"><a href="#iOS-上的其他代理客户端" class="headerlink" title="iOS 上的其他代理客户端"></a>iOS 上的其他代理客户端</h2><p>Shadowrocket 性价比最高，但并不是 iOS 上唯一的选择。了解一下其他选项有助于你做出判断：</p><table><thead><tr><th>客户端</th><th>价格</th><th>特点</th></tr></thead><tbody><tr><td><strong>Shadowrocket</strong></td><td>$2.99 一次性</td><td>性价比之王，功能全面，轻量</td></tr><tr><td><strong>Stash</strong></td><td>$3.99 一次性</td><td>基于 Clash 配置格式，支持 MitM 和脚本，界面精美</td></tr><tr><td><strong>Surge</strong></td><td>$49.99 起</td><td>功能最强大，支持高级调试和脚本，面向专业用户</td></tr><tr><td><strong>Loon</strong></td><td>$5.99 一次性</td><td>轻量且强大，支持插件系统</td></tr><tr><td><strong>Quantumult X</strong></td><td>$7.99 一次性</td><td>功能丰富，有独特的分流和重写规则语法</td></tr><tr><td><strong>sing-box（SFI）</strong></td><td>免费</td><td>sing-box 官方客户端，开源</td></tr></tbody></table><p>各客户端的核心功能（代理、分流、TUN）大同小异。差别主要体现在配置格式、高级功能（脚本、MitM、插件）和用户界面上。</p><p>如果你没有特殊需求，Shadowrocket 的 $2.99 已经能满足绝大多数场景。如果你需要高级脚本和调试能力，且预算充足，Surge 是公认最强大的选择。</p><hr><h2 id="实用技巧"><a href="#实用技巧" class="headerlink" title="实用技巧"></a>实用技巧</h2><h3 id="快速切换节点"><a href="#快速切换节点" class="headerlink" title="快速切换节点"></a>快速切换节点</h3><p>在首页长按某个节点可以设为”默认节点”。在 Widget（小组件）中添加 Shadowrocket，可以在不打开应用的情况下快速切换节点和开关代理。</p><h3 id="节点分组"><a href="#节点分组" class="headerlink" title="节点分组"></a>节点分组</h3><p>当你有很多节点时，可以在订阅设置中按关键词分组。比如让所有包含”HK”的节点自动归入”香港”组，包含”US”的归入”美国”组。这样在选择节点时更方便。</p><h3 id="共享配置"><a href="#共享配置" class="headerlink" title="共享配置"></a>共享配置</h3><p>你可以将自己的规则配置导出为 URL，分享给使用 Shadowrocket 的朋友。他们只需要添加你的配置 URL 就能使用相同的规则。但要注意：<strong>不要把包含节点信息的配置分享出去</strong>——只分享规则配置。</p><h3 id="代理-UDP-流量"><a href="#代理-UDP-流量" class="headerlink" title="代理 UDP 流量"></a>代理 UDP 流量</h3><p>Shadowrocket 支持代理 UDP 流量，这对需要使用 VoIP 通话、在线游戏等应用的用户很重要。在节点支持 UDP 转发的前提下，这些流量会自动通过代理。</p><hr><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="Q-Shadowrocket-和-VPN-有什么区别？"><a href="#Q-Shadowrocket-和-VPN-有什么区别？" class="headerlink" title="Q: Shadowrocket 和 VPN 有什么区别？"></a>Q: Shadowrocket 和 VPN 有什么区别？</h3><p>Shadowrocket 利用 iOS 的 VPN API 来实现流量捕获（所以你会看到 VPN 图标），但它并不是传统意义上的 VPN。传统 VPN 加密所有流量并发送到一个固定服务器；Shadowrocket 则根据规则智能分流，只有需要代理的流量才走代理节点。</p><h3 id="Q-为什么有时候显示”VPN”但还是打不开-Google？"><a href="#Q-为什么有时候显示”VPN”但还是打不开-Google？" class="headerlink" title="Q: 为什么有时候显示”VPN”但还是打不开 Google？"></a>Q: 为什么有时候显示”VPN”但还是打不开 Google？</h3><p>VPN 图标只表示 Shadowrocket 的流量捕获功能已开启，不代表代理连接成功。检查你选择的节点是否可用：在首页对节点进行延迟测试，如果显示”超时”则需要更换节点。</p><h3 id="Q-切换回国内-Apple-ID-后-Shadowrocket-会消失吗？"><a href="#Q-切换回国内-Apple-ID-后-Shadowrocket-会消失吗？" class="headerlink" title="Q: 切换回国内 Apple ID 后 Shadowrocket 会消失吗？"></a>Q: 切换回国内 Apple ID 后 Shadowrocket 会消失吗？</h3><p>不会。已安装的应用不会因为切换 Apple ID 而被删除。但如果你删除了应用，再想重新下载就需要切回海外 Apple ID。</p><h3 id="Q-开了-Shadowrocket-后耗电明显增加？"><a href="#Q-开了-Shadowrocket-后耗电明显增加？" class="headerlink" title="Q: 开了 Shadowrocket 后耗电明显增加？"></a>Q: 开了 Shadowrocket 后耗电明显增加？</h3><p>轻微的额外耗电是正常的——Shadowrocket 需要持续处理网络流量。但如果耗电异常严重，可能是节点连接不稳定导致频繁重连。尝试切换到更稳定的节点。</p><h3 id="Q-能不能在-iPad-和-Mac-上用？"><a href="#Q-能不能在-iPad-和-Mac-上用？" class="headerlink" title="Q: 能不能在 iPad 和 Mac 上用？"></a>Q: 能不能在 iPad 和 Mac 上用？</h3><p>Shadowrocket 是 Universal App，iPad 上可以直接使用。Mac 上如果是 Apple Silicon 芯片（M1 及以后），可以通过 App Store 中”iPhone 和 iPad App”分类找到并安装——但体验不如原生 macOS 客户端，建议 Mac 上直接使用 Clash Verge Rev。</p><h3 id="Q-Shadowrocket-支持哪些协议？"><a href="#Q-Shadowrocket-支持哪些协议？" class="headerlink" title="Q: Shadowrocket 支持哪些协议？"></a>Q: Shadowrocket 支持哪些协议？</h3><p>支持 Shadowsocks、ShadowsocksR、VMess、VLESS、Trojan、Hysteria、Hysteria 2、TUIC、WireGuard、Snell 等主流协议。协议覆盖范围非常全面。</p><hr><h2 id="相关资源"><a href="#相关资源" class="headerlink" title="相关资源"></a>相关资源</h2><ul><li><a href="https://t.me/ShadowrocketApp">Shadowrocket 官方 Telegram 频道</a> —— 官方公告和更新信息</li><li><a href="/posts/first-time-setup/">第一次使用代理：从零开始的配置指南</a> —— 跨平台入门指南</li><li><a href="/posts/tun-vs-system-proxy/">TUN 模式 vs 系统代理</a> —— 理解 iOS 上 VPN 模式的原理</li></ul>]]></content>
      
      
      <categories>
          
          <category> 代理软件 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> 配置 </tag>
            
            <tag> 教程 </tag>
            
            <tag> Shadowrocket </tag>
            
            <tag> iOS </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>Sing-box 的路由规则与 Clash 规则的区别</title>
      <link href="/posts/singbox-vs-clash-rules/"/>
      <url>/posts/singbox-vs-clash-rules/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：Sing-box 和 Clash（mihomo）是当前最主流的两套代理内核，但它们的路由规则系统从设计理念到实现细节都有显著差异。Clash 使用 YAML 格式配置，通过 rule-provider 加载外部规则集；Sing-box 使用 JSON 格式，通过 rule_set 加载 SRS 二进制规则。本文从配置格式、匹配逻辑、规则文件格式到迁移方法，全面对比两者的区别。</p></blockquote><hr><h2 id="为什么需要了解这个差异"><a href="#为什么需要了解这个差异" class="headerlink" title="为什么需要了解这个差异"></a>为什么需要了解这个差异</h2><p>如果你一直只用 Clash 系列客户端，可能从未关注过规则格式的问题——配置文件复制粘贴就能用。但随着 Sing-box 生态的快速发展（NekoBox、Hiddify 等客户端都基于 Sing-box 内核），越来越多的用户面临一个现实问题：<strong>原来在 Clash 上运行良好的规则配置，换到 Sing-box 上完全不通用</strong>。</p><p>这不是简单的”格式不同”，而是两个内核在路由规则的设计哲学上就有根本差异。理解这些差异，你才能在两个生态之间灵活切换，或者在选择客户端时做出更清晰的判断。关于 Clash 和 Sing-box 内核本身的差异，可以参考 <a href="/posts/core-comparison/">V2Ray vs Xray vs Sing-box：核心的区别与演进</a>。</p><hr><h2 id="Clash-的规则体系"><a href="#Clash-的规则体系" class="headerlink" title="Clash 的规则体系"></a>Clash 的规则体系</h2><h3 id="配置格式：YAML"><a href="#配置格式：YAML" class="headerlink" title="配置格式：YAML"></a>配置格式：YAML</h3><p>Clash 系列（包括 mihomo &#x2F; Clash.Meta）使用 YAML 作为配置文件格式。YAML 以缩进表示层级关系，人类可读性很强，但对缩进和格式敏感。</p><p>一个典型的 Clash 规则配置片段：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">rules:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,google.com,Proxy</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,github.com,Proxy</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-KEYWORD,facebook,Proxy</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">IP-CIDR,91.108.0.0/16,Proxy</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOIP,CN,DIRECT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">MATCH,Proxy</span></span><br></pre></td></tr></table></figure><p>每条规则是一个字符串，格式为 <code>类型,值,策略</code>，用逗号分隔三个字段。规则从上到下逐条匹配，命中即停。</p><h3 id="规则类型"><a href="#规则类型" class="headerlink" title="规则类型"></a>规则类型</h3><p>Clash 支持的核心规则类型包括：</p><ul><li><code>DOMAIN</code>：精确域名匹配</li><li><code>DOMAIN-SUFFIX</code>：域名后缀匹配</li><li><code>DOMAIN-KEYWORD</code>：域名关键词匹配</li><li><code>IP-CIDR</code> &#x2F; <code>IP-CIDR6</code>：IPv4&#x2F;IPv6 地址段匹配</li><li><code>GEOIP</code>：IP 地理位置匹配</li><li><code>GEOSITE</code>：域名分类匹配（mihomo 特有）</li><li><code>PROCESS-NAME</code>：进程名匹配</li><li><code>RULE-SET</code>：外部规则集</li><li><code>MATCH</code>：兜底匹配</li></ul><h3 id="Rule-Provider（外部规则集）"><a href="#Rule-Provider（外部规则集）" class="headerlink" title="Rule Provider（外部规则集）"></a>Rule Provider（外部规则集）</h3><p>Clash 通过 <code>rule-providers</code> 机制加载外部规则文件。你在配置中定义一个 provider，指定 URL 和文件类型，客户端会自动下载并缓存规则文件：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">rule-providers:</span></span><br><span class="line">  <span class="attr">google:</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">http</span></span><br><span class="line">    <span class="attr">behavior:</span> <span class="string">domain</span></span><br><span class="line">    <span class="attr">url:</span> <span class="string">&quot;https://example.com/google-domains.yaml&quot;</span></span><br><span class="line">    <span class="attr">path:</span> <span class="string">./ruleset/google.yaml</span></span><br><span class="line">    <span class="attr">interval:</span> <span class="number">86400</span></span><br><span class="line"></span><br><span class="line"><span class="attr">rules:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,google,Proxy</span></span><br></pre></td></tr></table></figure><p><code>behavior</code> 字段告诉客户端这个规则文件的内容类型：<code>domain</code>（纯域名列表）、<code>ipcidr</code>（IP 段列表）或 <code>classical</code>（混合类型）。</p><p>Rule Provider 文件本身是 YAML 格式的列表：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">payload:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,google.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,googleapis.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,googleusercontent.com</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN,translate.google.com</span></span><br></pre></td></tr></table></figure><p>mihomo 还支持 MRS 二进制格式，加载速度更快。更多关于 Rule Provider 的说明，参见 <a href="/posts/clash-rule-providers/">Clash 的 Rule Provider 详解</a>。</p><h3 id="GeoIP-GeoSite"><a href="#GeoIP-GeoSite" class="headerlink" title="GeoIP &#x2F; GeoSite"></a>GeoIP &#x2F; GeoSite</h3><p>Clash 内置 <code>geoip.dat</code> 和 <code>geosite.dat</code> 数据库文件（或使用 MaxMind mmdb 格式的 GeoIP 数据库），通过 <code>GEOIP</code> 和 <code>GEOSITE</code> 规则类型直接调用。关于 GeoIP 和 GeoSite 的详细原理，参见 <a href="/posts/geoip-geosite/">GeoIP &#x2F; GeoSite 数据库</a>。</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">rules:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOSITE,google,Proxy</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOSITE,cn,DIRECT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOIP,CN,DIRECT</span></span><br></pre></td></tr></table></figure><p>这种写法的好处是简洁——不需要单独定义 rule-providers，规则直接内嵌在配置文件中。</p><hr><h2 id="Sing-box-的规则体系"><a href="#Sing-box-的规则体系" class="headerlink" title="Sing-box 的规则体系"></a>Sing-box 的规则体系</h2><h3 id="配置格式：JSON"><a href="#配置格式：JSON" class="headerlink" title="配置格式：JSON"></a>配置格式：JSON</h3><p>Sing-box 使用 JSON 作为配置文件格式。JSON 是一种严格的结构化数据格式，每个字段都有明确的类型定义，不存在 YAML 中容易出错的缩进问题，但可读性和编辑友好度不如 YAML。</p><p>一个典型的 Sing-box 路由配置片段：</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;route&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;rules&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;domain_suffix&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;.google.com&quot;</span><span class="punctuation">,</span> <span class="string">&quot;.googleapis.com&quot;</span><span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;outbound&quot;</span><span class="punctuation">:</span> <span class="string">&quot;proxy&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;domain_keyword&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;facebook&quot;</span><span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;outbound&quot;</span><span class="punctuation">:</span> <span class="string">&quot;proxy&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;ip_cidr&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;91.108.0.0/16&quot;</span><span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;outbound&quot;</span><span class="punctuation">:</span> <span class="string">&quot;proxy&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;geoip&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;cn&quot;</span><span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;outbound&quot;</span><span class="punctuation">:</span> <span class="string">&quot;direct&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;final&quot;</span><span class="punctuation">:</span> <span class="string">&quot;proxy&quot;</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><p>对比 Clash 的逐行字符串写法，Sing-box 的规则是<strong>结构化的 JSON 对象</strong>。每条规则是一个独立的对象，包含匹配条件和出站策略。这种结构的一个重要特点是：<strong>一条规则内可以同时包含多个匹配条件</strong>。</p><h3 id="规则类型-1"><a href="#规则类型-1" class="headerlink" title="规则类型"></a>规则类型</h3><p>Sing-box 支持的核心规则字段包括：</p><ul><li><code>domain</code> &#x2F; <code>domain_suffix</code> &#x2F; <code>domain_keyword</code> &#x2F; <code>domain_regex</code>：域名匹配</li><li><code>ip_cidr</code>：IP 段匹配</li><li><code>geoip</code>：IP 地理位置匹配</li><li><code>geosite</code>：域名分类匹配</li><li><code>process_name</code> &#x2F; <code>process_path</code>：进程匹配</li><li><code>port</code> &#x2F; <code>port_range</code>：端口匹配</li><li><code>protocol</code>：协议类型匹配（如 QUIC、STUN 等）</li><li><code>network</code>：网络类型匹配（TCP&#x2F;UDP）</li><li><code>rule_set</code>：外部规则集</li></ul><h3 id="条件组合：AND-逻辑"><a href="#条件组合：AND-逻辑" class="headerlink" title="条件组合：AND 逻辑"></a>条件组合：AND 逻辑</h3><p>Sing-box 规则的一个强大能力是<strong>同一条规则内多个条件之间默认是 AND 关系</strong>（都需要满足才匹配）。这意味着你可以写出这样的规则：</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;domain_suffix&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;.example.com&quot;</span><span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;port&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="number">443</span><span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;network&quot;</span><span class="punctuation">:</span> <span class="string">&quot;tcp&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;outbound&quot;</span><span class="punctuation">:</span> <span class="string">&quot;proxy&quot;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><p>这条规则的含义是：只有当目标域名以 <code>.example.com</code> 结尾 <strong>并且</strong> 端口是 443 <strong>并且</strong> 是 TCP 连接时，才走代理。在 Clash 中实现同样的效果需要多条规则配合或使用 SUB-RULE 等高级功能。</p><p>如果你需要 OR 逻辑（满足任一条件即匹配），Sing-box 提供了 <code>logical</code> 规则类型：</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;logical&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;mode&quot;</span><span class="punctuation">:</span> <span class="string">&quot;or&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;rules&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">    <span class="punctuation">&#123;</span> <span class="attr">&quot;domain_suffix&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;.google.com&quot;</span><span class="punctuation">]</span> <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="punctuation">&#123;</span> <span class="attr">&quot;domain_suffix&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;.youtube.com&quot;</span><span class="punctuation">]</span> <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;outbound&quot;</span><span class="punctuation">:</span> <span class="string">&quot;proxy&quot;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h3 id="Rule-Set（外部规则集）"><a href="#Rule-Set（外部规则集）" class="headerlink" title="Rule Set（外部规则集）"></a>Rule Set（外部规则集）</h3><p>Sing-box 通过 <code>rule_set</code> 机制加载外部规则。和 Clash 的 rule-providers 类似，你需要先在 <code>route.rule_set</code> 中定义来源，然后在规则中引用：</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;route&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;rule_set&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;geosite-google&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;remote&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;format&quot;</span><span class="punctuation">:</span> <span class="string">&quot;binary&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;url&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-google.srs&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;rules&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;rule_set&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;geosite-google&quot;</span><span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;outbound&quot;</span><span class="punctuation">:</span> <span class="string">&quot;proxy&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">]</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h3 id="SRS-格式"><a href="#SRS-格式" class="headerlink" title="SRS 格式"></a>SRS 格式</h3><p>Sing-box 的二进制规则集格式叫 <strong>SRS（Sing-box Rule Set）</strong>。它和 mihomo 的 MRS 格式是完全不同的二进制编码，彼此不兼容。SRS 文件在构建时将规则编译为优化后的数据结构，加载速度快于纯文本。</p><p>Sing-box 也支持 JSON 格式的纯文本规则集（<code>&quot;format&quot;: &quot;source&quot;</code>），但生产环境中推荐使用 SRS 格式以获得最佳性能。</p><hr><h2 id="关键差异对比"><a href="#关键差异对比" class="headerlink" title="关键差异对比"></a>关键差异对比</h2><table><thead><tr><th>对比维度</th><th>Clash (mihomo)</th><th>Sing-box</th></tr></thead><tbody><tr><td><strong>配置格式</strong></td><td>YAML</td><td>JSON</td></tr><tr><td><strong>规则写法</strong></td><td>逐行字符串 <code>TYPE,VALUE,POLICY</code></td><td>结构化 JSON 对象</td></tr><tr><td><strong>条件组合</strong></td><td>每条规则只有单一条件</td><td>单条规则支持多条件 AND&#x2F;OR</td></tr><tr><td><strong>外部规则集</strong></td><td>rule-providers</td><td>route.rule_set</td></tr><tr><td><strong>规则集格式</strong></td><td>YAML 文本 &#x2F; MRS 二进制</td><td>JSON 文本 &#x2F; SRS 二进制</td></tr><tr><td><strong>GeoIP 格式</strong></td><td>mmdb &#x2F; dat</td><td>mmdb &#x2F; db（自有格式）</td></tr><tr><td><strong>GeoSite 格式</strong></td><td>dat（v2fly 格式）</td><td>db（自有格式） &#x2F; SRS</td></tr><tr><td><strong>兜底规则</strong></td><td><code>MATCH,策略</code></td><td><code>&quot;final&quot;: &quot;策略&quot;</code></td></tr><tr><td><strong>进程匹配</strong></td><td><code>PROCESS-NAME</code></td><td><code>process_name</code> &#x2F; <code>process_path</code></td></tr><tr><td><strong>正则匹配</strong></td><td><code>DOMAIN-REGEX</code>（mihomo）</td><td><code>domain_regex</code></td></tr><tr><td><strong>协议匹配</strong></td><td>不支持</td><td>支持 <code>protocol</code> 字段</td></tr><tr><td><strong>DNS 规则</strong></td><td>dns 部分独立配置</td><td>dns.rules 结构与路由规则统一</td></tr></tbody></table><h3 id="匹配逻辑的差异"><a href="#匹配逻辑的差异" class="headerlink" title="匹配逻辑的差异"></a>匹配逻辑的差异</h3><p>两者都是”从上到下逐条匹配，命中即停”，但 Sing-box 的”一条规则”可以包含更复杂的条件组合。</p><p>在 Clash 中，如果你想让 Google 和 YouTube 的流量走同一个策略组，通常需要两条规则或一个包含两者的 RULE-SET：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">rules:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,google.com,Proxy</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,youtube.com,Proxy</span></span><br></pre></td></tr></table></figure><p>在 Sing-box 中，你可以在一条规则中列出多个域名后缀（数组内多个值之间是 OR 关系）：</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;domain_suffix&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;.google.com&quot;</span><span class="punctuation">,</span> <span class="string">&quot;.youtube.com&quot;</span><span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;outbound&quot;</span><span class="punctuation">:</span> <span class="string">&quot;proxy&quot;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><p>但如果你在同一条规则中混合不同类型的条件（比如同时指定 <code>domain_suffix</code> 和 <code>port</code>），它们之间是 AND 关系。这个设计比 Clash 的逐条纯字符串规则更灵活，但也需要更仔细地理解逻辑关系。</p><h3 id="DNS-规则的差异"><a href="#DNS-规则的差异" class="headerlink" title="DNS 规则的差异"></a>DNS 规则的差异</h3><p>在 Clash 中，DNS 配置和路由规则是分开的两个部分。DNS 解析策略通过 <code>dns</code> 部分的 <code>nameserver-policy</code> 等字段配置，和 <code>rules</code> 部分是平行关系。</p><p>Sing-box 则将 DNS 规则和路由规则统一在了相似的结构下。<code>dns.rules</code> 的语法和 <code>route.rules</code> 基本一致，你可以用同样的条件字段（域名、IP、进程等）来决定 DNS 查询使用哪个 DNS 服务器：</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;dns&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;rules&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;domain_suffix&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;.cn&quot;</span><span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;server&quot;</span><span class="punctuation">:</span> <span class="string">&quot;local-dns&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;domain_suffix&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;.google.com&quot;</span><span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;server&quot;</span><span class="punctuation">:</span> <span class="string">&quot;remote-dns&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">]</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><p>这种统一设计让 DNS 策略和路由策略的配置体验更加一致。</p><hr><h2 id="从-Clash-迁移到-Sing-box"><a href="#从-Clash-迁移到-Sing-box" class="headerlink" title="从 Clash 迁移到 Sing-box"></a>从 Clash 迁移到 Sing-box</h2><p>如果你打算从 Clash 迁移到 Sing-box，需要做以下几方面的转换。</p><h3 id="配置文件格式转换"><a href="#配置文件格式转换" class="headerlink" title="配置文件格式转换"></a>配置文件格式转换</h3><p>最基础的工作是把 YAML 改写为 JSON。这不只是格式上的转换（缩进变花括号），更重要的是适配 Sing-box 的配置字段名。两边的字段命名完全不同——Clash 的 <code>proxy-groups</code> 对应 Sing-box 的 <code>outbounds</code>，Clash 的 <code>rules</code> 对应 Sing-box 的 <code>route.rules</code>，等等。</p><p>目前有一些社区工具可以辅助转换，但由于两个内核的功能覆盖不完全对等，自动转换的结果通常需要手动调整。</p><h3 id="规则集替换"><a href="#规则集替换" class="headerlink" title="规则集替换"></a>规则集替换</h3><p>Clash 的 Rule Provider 文件（YAML 或 MRS 格式）无法直接在 Sing-box 中使用。你需要找到对应的 Sing-box 格式规则集。</p><p>目前 Sing-box 生态中常用的规则集来源包括：</p><ul><li><strong><a href="https://github.com/SagerNet/sing-geosite">SagerNet&#x2F;sing-geosite</a></strong>：从 v2fly&#x2F;domain-list-community 转换而来的 SRS 格式规则集</li><li><strong><a href="https://github.com/SagerNet/sing-geoip">SagerNet&#x2F;sing-geoip</a></strong>：从 GeoLite2 转换而来的 SRS 格式 GeoIP 规则集</li><li><strong><a href="https://github.com/MetaCubeX/meta-rules-dat">MetaCubeX&#x2F;meta-rules-dat</a></strong>：同时提供 Clash 和 Sing-box 格式的规则集</li></ul><h3 id="GeoIP-GeoSite-数据库替换"><a href="#GeoIP-GeoSite-数据库替换" class="headerlink" title="GeoIP&#x2F;GeoSite 数据库替换"></a>GeoIP&#x2F;GeoSite 数据库替换</h3><p>Clash 使用 v2fly 格式的 <code>geoip.dat</code> 和 <code>geosite.dat</code>，Sing-box 使用自己的 <code>geoip.db</code> 和 <code>geosite.db</code> 格式。文件不通用，需要下载 Sing-box 专用版本。</p><h3 id="逻辑适配"><a href="#逻辑适配" class="headerlink" title="逻辑适配"></a>逻辑适配</h3><p>一些 Clash 的高级功能在 Sing-box 中有不同的实现方式或暂不支持。例如：</p><ul><li>Clash 的 <code>SUB-RULE</code> 在 Sing-box 中可以通过规则内的多条件组合部分实现</li><li>Clash 的 <code>proxy-groups</code>（策略组）在 Sing-box 中通过 <code>outbounds</code> 的 <code>selector</code> &#x2F; <code>urltest</code> 等类型实现</li><li>Clash 的 <code>script</code> 规则类型在 Sing-box 中没有对应功能</li></ul><hr><h2 id="从-Sing-box-迁移到-Clash"><a href="#从-Sing-box-迁移到-Clash" class="headerlink" title="从 Sing-box 迁移到 Clash"></a>从 Sing-box 迁移到 Clash</h2><p>反向迁移同样需要格式和逻辑的转换。</p><p>Sing-box 中一条多条件 AND 规则在 Clash 中可能需要拆成多条规则或使用 <code>SUB-RULE</code>。Sing-box 的 <code>protocol</code> 匹配在 Clash 中不直接支持。SRS 格式文件需要替换为 YAML 或 MRS 格式的对应规则集。</p><p>总的来说，Sing-box → Clash 的迁移通常比 Clash → Sing-box 更容易，因为 Clash 的规则语法更简单直接，大部分 Sing-box 规则都能找到 Clash 的对应写法。</p><hr><h2 id="哪个更强大"><a href="#哪个更强大" class="headerlink" title="哪个更强大"></a>哪个更强大</h2><p>这个问题没有绝对的答案，取决于你的衡量标准。</p><p><strong>从规则表达能力来看，Sing-box 更强。</strong> 单条规则内的多条件组合（AND&#x2F;OR）、正则域名匹配、协议类型匹配、DNS 规则的统一语法——这些能力让你可以用更少的规则实现更精确的控制。</p><p><strong>从易用性和生态来看，Clash 更成熟。</strong> YAML 格式比 JSON 更易读写，rule-providers 的教程和现成规则集更丰富，社区积累了大量可直接复用的配置模板。</p><p><strong>从性能来看，两者各有优化。</strong> mihomo 的 MRS 格式和 Sing-box 的 SRS 格式都是针对各自内核优化的二进制格式，在各自的内核上加载速度都很快。跨内核使用时没有性能优势。</p><p>对于大多数用户来说，规则系统的差异不应该成为选择内核的决定性因素。选择客户端时，更重要的考虑是协议支持、平台覆盖、GUI 体验等因素。规则系统只要能满足你的分流需求就足够了——而目前两个内核都能覆盖绝大多数使用场景。</p><hr><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="Clash-的规则文件能直接在-Sing-box-中使用吗？"><a href="#Clash-的规则文件能直接在-Sing-box-中使用吗？" class="headerlink" title="Clash 的规则文件能直接在 Sing-box 中使用吗？"></a>Clash 的规则文件能直接在 Sing-box 中使用吗？</h3><p>不能。两者的规则文件格式完全不同——Clash 用 YAML 文本或 MRS 二进制，Sing-box 用 JSON 文本或 SRS 二进制。你需要使用格式转换工具或找到对应的 Sing-box 版本规则集。MetaCubeX&#x2F;meta-rules-dat 项目同时提供两种格式的文件，是跨内核使用的方便选择。</p><h3 id="Sing-box-的-JSON-配置写起来很麻烦，有没有更方便的方式？"><a href="#Sing-box-的-JSON-配置写起来很麻烦，有没有更方便的方式？" class="headerlink" title="Sing-box 的 JSON 配置写起来很麻烦，有没有更方便的方式？"></a>Sing-box 的 JSON 配置写起来很麻烦，有没有更方便的方式？</h3><p>有几个选择。第一，使用带模板功能的客户端（如 Hiddify），它会帮你生成基础配置。第二，使用订阅转换服务，输入机场订阅链接，选择 Sing-box 输出格式，自动生成完整配置。第三，使用社区分享的配置模板作为起点，在此基础上修改。</p><h3 id="两个内核的规则匹配速度有差别吗？"><a href="#两个内核的规则匹配速度有差别吗？" class="headerlink" title="两个内核的规则匹配速度有差别吗？"></a>两个内核的规则匹配速度有差别吗？</h3><p>在使用各自的二进制规则格式（MRS &#x2F; SRS）时，匹配速度都很快，日常使用中感知不到差异。瓶颈通常在网络延迟而非规则匹配。如果你使用纯文本格式的超大规则集（数万条），初次加载时可能有几秒的延迟，但规则加载完成后匹配速度同样很快。</p><h3 id="我的客户端同时支持-Clash-和-Sing-box-内核，规则需要分别配吗？"><a href="#我的客户端同时支持-Clash-和-Sing-box-内核，规则需要分别配吗？" class="headerlink" title="我的客户端同时支持 Clash 和 Sing-box 内核，规则需要分别配吗？"></a>我的客户端同时支持 Clash 和 Sing-box 内核，规则需要分别配吗？</h3><p>是的。切换内核时，配置文件需要一并切换。一些客户端（如 Clash Verge Rev）只支持 Clash&#x2F;mihomo 配置格式；另一些（如 NekoBox）只支持 Sing-box 格式。少数客户端支持双内核切换，但配置文件仍然需要准备两套。</p><h3 id="GeoIP-GeoSite-数据在两个内核中通用吗？"><a href="#GeoIP-GeoSite-数据在两个内核中通用吗？" class="headerlink" title="GeoIP&#x2F;GeoSite 数据在两个内核中通用吗？"></a>GeoIP&#x2F;GeoSite 数据在两个内核中通用吗？</h3><p>不通用。Clash&#x2F;mihomo 使用 v2fly 的 dat 格式或 MaxMind 的 mmdb 格式；Sing-box 使用自己定义的 db 格式。文件名可能看起来一样（都叫 <code>geoip.dat</code>），但内部编码不同，互相不能读取。下载时要注意选择对应内核的版本。</p><p>更多关于规则集项目的选择和对比，可以参考 <a href="/posts/popular-rulesets/">常用规则集推荐与对比</a>。更多关于 Clash 和 Sing-box 内核本身的差异，参见 <a href="https://wiki.metacubex.one/">Clash Wiki</a> 和 <a href="https://sing-box.sagernet.org/">sing-box 官方文档</a>。</p>]]></content>
      
      
      <categories>
          
          <category> 规则与分流 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> 路由 </tag>
            
            <tag> Clash </tag>
            
            <tag> Sing-box </tag>
            
            <tag> 对比 </tag>
            
            <tag> 规则 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>如何选择 SNI 伪装目标</title>
      <link href="/posts/sni-target-selection/"/>
      <url>/posts/sni-target-selection/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：在 VLESS+Reality 的配置中，<code>dest</code>（也叫 SNI 伪装目标）是一个看似简单但极为重要的参数。它决定了 GFW 观察到的 TLS 连接”看起来是在访问哪个网站”。选错 dest 可能让你的节点在伪装效果上大打折扣，甚至增加被检测的风险。本文详细解释 dest 的工作原理、选择标准，并提供经过验证的推荐列表。</p></blockquote><hr><h2 id="什么是-dest-SNI-伪装目标"><a href="#什么是-dest-SNI-伪装目标" class="headerlink" title="什么是 dest &#x2F; SNI 伪装目标"></a>什么是 dest &#x2F; SNI 伪装目标</h2><h3 id="Reality-协议的核心机制"><a href="#Reality-协议的核心机制" class="headerlink" title="Reality 协议的核心机制"></a>Reality 协议的核心机制</h3><p>要理解 dest 的作用，首先需要理解 <a href="https://github.com/XTLS/REALITY">Reality</a> 协议的工作方式。</p><p>传统的 TLS 代理方案（如 VLESS+TLS+WebSocket）需要你拥有一个域名并申请 TLS 证书。GFW 在 TLS 握手阶段可以看到你的 SNI（Server Name Indication，即你声称要访问的域名），然后通过主动探测来验证这个域名对应的服务器是否真的运行着一个网站。如果探测发现 SNI 所指向的服务器不像一个正常网站，代理特征就暴露了。</p><p>Reality 的创新在于：<strong>它不使用自己的证书，而是”借用”一个真实网站的 TLS 连接</strong>。当 GFW 看到你的连接时，TLS 握手中的 Server Hello 和证书都来自那个真实网站——因为 Reality 确实是在与那个真实网站交互。GFW 无法区分这个连接和正常访问该网站的连接。</p><p>而 <code>dest</code> 参数，就是你指定的那个”真实网站”。</p><h3 id="dest-在配置中的位置"><a href="#dest-在配置中的位置" class="headerlink" title="dest 在配置中的位置"></a>dest 在配置中的位置</h3><p>在 <a href="https://xtls.github.io/">Xray-core</a> 的服务端配置中，dest 出现在 Reality 的相关设置中：</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;inbounds&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;streamSettings&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;security&quot;</span><span class="punctuation">:</span> <span class="string">&quot;reality&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;realitySettings&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;dest&quot;</span><span class="punctuation">:</span> <span class="string">&quot;www.apple.com:443&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;serverNames&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;www.apple.com&quot;</span><span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;shortIds&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;abcdef1234567890&quot;</span><span class="punctuation">]</span></span><br><span class="line">      <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">&#125;</span><span class="punctuation">]</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><p><code>dest</code> 指定了当非代理客户端（包括 GFW 的探测器）连接到你的服务器时，Reality 将连接转发到的目标网站。<code>serverNames</code> 是客户端配置中需要匹配的 SNI 值，通常与 dest 的域名一致。</p><h3 id="GFW-视角下的连接"><a href="#GFW-视角下的连接" class="headerlink" title="GFW 视角下的连接"></a>GFW 视角下的连接</h3><p>从 GFW 的角度来看，使用 Reality 的连接经历如下过程：</p><ol><li>客户端向你的服务器 IP 发起 TLS 连接，SNI 为 <code>www.apple.com</code></li><li>服务器返回的 Server Hello 和证书确实来自 <code>www.apple.com</code></li><li>GFW 如果进行主动探测（即自己也连接你的服务器），得到的同样是真实的 Apple 网站响应</li></ol><p>这就是 Reality 的伪装力——GFW 看到的一切都与正常访问 Apple 网站一致。但如果你的 dest 选择不当，这种伪装效果会被削弱。</p><hr><h2 id="选择标准"><a href="#选择标准" class="headerlink" title="选择标准"></a>选择标准</h2><p>一个合格的 dest 目标需要同时满足以下条件。</p><h3 id="必须条件"><a href="#必须条件" class="headerlink" title="必须条件"></a>必须条件</h3><p><strong>1. 支持 TLS 1.3</strong></p><p>Reality 要求 dest 目标支持 TLS 1.3。这是技术层面的硬性要求——如果目标网站只支持 TLS 1.2 或更低版本，Reality 无法正常工作。</p><p><strong>2. 支持 HTTP&#x2F;2（H2）</strong></p><p>dest 目标需要支持 HTTP&#x2F;2 协议。这是因为 Reality 在伪装层使用了 H2 的特性来实现多路复用。</p><p><strong>3. 网站本身未被 GFW 封锁</strong></p><p>如果 dest 目标域名在中国大陆已被封锁（DNS 污染或 IP 封锁），那么 GFW 看到你”访问”一个被封锁的网站反而会引起怀疑。dest 必须是一个从中国大陆可以正常访问的网站。</p><h3 id="加分条件"><a href="#加分条件" class="headerlink" title="加分条件"></a>加分条件</h3><p><strong>4. 高流量站点</strong></p><p>选择全球流量排名靠前的大型网站作为 dest。道理很简单：如果你的 SNI 是 apple.com，GFW 每天看到数百万个 SNI 为 apple.com 的连接，你的连接就淹没在正常流量中。但如果你选择一个日均访问量只有几千的小网站，而你的服务器上产生了数 TB 的”访问”流量，这种流量异常本身就是一个检测信号。</p><p><strong>5. 服务器地理位置相近</strong></p><p>理想情况下，dest 目标的服务器应与你的代理服务器在同一个或相近的网络中。这样可以降低因跨网络访问 dest 带来的延迟。如果你的服务器在东京，选择在东京有 CDN 节点的 dest（如大型跨国网站）比选择只有欧洲服务器的 dest 更合适。</p><p><strong>6. 稳定的 TLS 配置</strong></p><p>dest 目标的 TLS 配置不应频繁变更。一些网站会定期轮换证书、更新 TLS 参数，这可能导致 Reality 连接出现间歇性问题。选择 TLS 配置稳定的大型企业网站可以降低这种风险。</p><hr><h2 id="推荐列表"><a href="#推荐列表" class="headerlink" title="推荐列表"></a>推荐列表</h2><h3 id="推荐使用的-dest"><a href="#推荐使用的-dest" class="headerlink" title="推荐使用的 dest"></a>推荐使用的 dest</h3><p>以下网站经过社区验证，满足上述选择标准：</p><table><thead><tr><th>dest 目标</th><th>优势</th></tr></thead><tbody><tr><td><code>www.apple.com:443</code></td><td>全球流量巨大，TLS 配置标准，CDN 节点广泛</td></tr><tr><td><code>www.microsoft.com:443</code></td><td>企业级稳定性，全球 CDN</td></tr><tr><td><code>www.samsung.com:443</code></td><td>高流量，TLS 1.3 + H2 支持完善</td></tr><tr><td><code>addons.mozilla.org:443</code></td><td>Mozilla 官方站点，配置规范</td></tr><tr><td><code>dl.google.com:443</code></td><td>Google 下载服务器，高流量，低延迟</td></tr><tr><td><code>www.lovelive-anime.jp:443</code></td><td>日本站点，适合日本节点</td></tr><tr><td><code>www.swift.com:443</code></td><td>金融基础设施站点，流量稳定</td></tr><tr><td><code>www.tesla.com:443</code></td><td>高流量商业站点</td></tr></tbody></table><p><strong>具体选择建议</strong>：</p><ul><li><strong>通用推荐</strong>：<code>www.apple.com</code> 和 <code>www.microsoft.com</code> 是最安全的选择，流量大、稳定性高、全球 CDN 覆盖</li><li><strong>日本节点</strong>：可以额外考虑 <code>.jp</code> 域名的大型网站</li><li><strong>美国节点</strong>：<code>dl.google.com</code> 是优秀选择，在美国有大量服务器且流量极高</li></ul><h3 id="不推荐的-dest"><a href="#不推荐的-dest" class="headerlink" title="不推荐的 dest"></a>不推荐的 dest</h3><p>以下类型的网站应当避免作为 dest：</p><p><strong>小型网站</strong>：访问量低的个人博客、小型企业站。你的代理流量会在该网站的正常流量中显得异常突出。</p><p><strong>已被封锁的网站</strong>：如果目标域名的 DNS 已被中国大陆污染，选它做 dest 等于在 SNI 中暴露你在访问一个被封锁的站点。</p><p><strong>TLS 配置异常的网站</strong>：某些网站使用非标准的 TLS 扩展或不寻常的证书链，这可能导致 Reality 握手异常。</p><p><strong>CDN 共享域名</strong>：一些网站使用共享的 CDN 域名（如 Cloudflare 的共享证书），多个网站共用同一个证书。这会导致证书中的域名列表与你的 SNI 不完全匹配，可能引起检测系统的注意。</p><p><strong>频繁变更 TLS 配置的网站</strong>：如果目标网站经常更换证书颁发商、更新 TLS 参数，可能导致 Reality 连接不稳定。</p><hr><h2 id="如何测试-dest-是否可用"><a href="#如何测试-dest-是否可用" class="headerlink" title="如何测试 dest 是否可用"></a>如何测试 dest 是否可用</h2><p>在确定 dest 之前，应该对目标网站进行技术验证。</p><h3 id="验证-TLS-1-3-和-H2-支持"><a href="#验证-TLS-1-3-和-H2-支持" class="headerlink" title="验证 TLS 1.3 和 H2 支持"></a>验证 TLS 1.3 和 H2 支持</h3><p>使用 curl 命令检测目标是否支持 TLS 1.3 和 HTTP&#x2F;2：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl -I --http2 -v --tlsv1.3 https://www.apple.com 2&gt;&amp;1 | grep -E <span class="string">&quot;SSL connection|ALPN|HTTP/2&quot;</span></span><br></pre></td></tr></table></figure><p>期望看到的输出应包含：</p><ul><li><code>SSL connection using TLSv1.3</code>（确认 TLS 1.3 支持）</li><li><code>ALPN: server accepted h2</code>（确认 H2 支持）</li></ul><p>如果没有看到 TLS 1.3 或 H2 的字样，说明该目标不满足 Reality 的基本要求。</p><h3 id="从中国大陆验证可达性"><a href="#从中国大陆验证可达性" class="headerlink" title="从中国大陆验证可达性"></a>从中国大陆验证可达性</h3><p>确保 dest 域名没有被 GFW 封锁：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 使用国内 DNS 解析，检查是否被污染</span></span><br><span class="line">nslookup www.apple.com 114.114.114.114</span><br><span class="line"></span><br><span class="line"><span class="comment"># 从国内服务器测试连通性</span></span><br><span class="line">curl -o /dev/null -s -w <span class="string">&quot;%&#123;http_code&#125;&quot;</span> https://www.apple.com</span><br></pre></td></tr></table></figure><p>如果 DNS 解析返回异常 IP 或连接超时，说明该域名不适合用作 dest。</p><h3 id="检查证书信息"><a href="#检查证书信息" class="headerlink" title="检查证书信息"></a>检查证书信息</h3><p>查看目标网站的证书详情，确认证书链完整且非共享证书：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">openssl s_client -connect www.apple.com:443 -servername www.apple.com &lt; /dev/null 2&gt;/dev/null | openssl x509 -noout -subject -issuer -dates</span><br></pre></td></tr></table></figure><p>重点关注证书的 Common Name 和 Subject Alternative Names 是否与目标域名匹配，以及证书的有效期是否充足。</p><hr><h2 id="监控-dest-可用性"><a href="#监控-dest-可用性" class="headerlink" title="监控 dest 可用性"></a>监控 dest 可用性</h2><p>选定 dest 后，需要持续监控其可用性。dest 目标虽然是大型网站，但也可能发生变更。</p><h3 id="定期检测-TLS-配置"><a href="#定期检测-TLS-配置" class="headerlink" title="定期检测 TLS 配置"></a>定期检测 TLS 配置</h3><p>编写脚本定期检测 dest 的 TLS 版本和 ALPN 支持是否正常：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/bash</span></span><br><span class="line"><span class="comment"># check_dest.sh - 定期检测 dest 可用性</span></span><br><span class="line"></span><br><span class="line">DEST=<span class="string">&quot;www.apple.com&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 检测 TLS 1.3 支持</span></span><br><span class="line">tls_version=$(curl -I --tlsv1.3 -s -o /dev/null -w <span class="string">&quot;%&#123;ssl_version&#125;&quot;</span> https://<span class="variable">$DEST</span> 2&gt;/dev/null)</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> [ <span class="string">&quot;<span class="variable">$tls_version</span>&quot;</span> != <span class="string">&quot;TLSv1.3&quot;</span> ]; <span class="keyword">then</span></span><br><span class="line">    <span class="built_in">echo</span> <span class="string">&quot;警告：<span class="variable">$DEST</span> 的 TLS 版本异常 (<span class="variable">$tls_version</span>)&quot;</span></span><br><span class="line">    <span class="comment"># 发送告警</span></span><br><span class="line"><span class="keyword">fi</span></span><br></pre></td></tr></table></figure><h3 id="监控-GFW-封锁状态"><a href="#监控-GFW-封锁状态" class="headerlink" title="监控 GFW 封锁状态"></a>监控 GFW 封锁状态</h3><p>如果 dest 目标被 GFW 新增封锁（虽然概率很低，但像 Google 的部分域名就经历过封锁范围变化），你需要及时更换 dest。建议从国内的监控节点定期检测 dest 域名的可达性。</p><hr><h2 id="dest-被封后的应对"><a href="#dest-被封后的应对" class="headerlink" title="dest 被封后的应对"></a>dest 被封后的应对</h2><p>虽然概率极低，但如果你选择的 dest 目标被 GFW 封锁了，需要知道如何应对。</p><h3 id="影响范围"><a href="#影响范围" class="headerlink" title="影响范围"></a>影响范围</h3><p>dest 被封后，你的 Reality 节点不会立即不可用——因为 Reality 并不真的需要客户端能访问 dest。但 GFW 看到你的连接 SNI 指向一个被封锁的域名，这本身就是一个异常信号，会增加你的节点被重点审查的概率。</p><h3 id="更换流程"><a href="#更换流程" class="headerlink" title="更换流程"></a>更换流程</h3><ol><li><strong>服务端</strong>：在 Xray 配置中修改 <code>dest</code> 和 <code>serverNames</code> 为新的目标域名，然后重启 Xray 服务</li><li><strong>客户端</strong>：更新所有客户端配置中的 <code>serverName</code> 参数，使其与新的 dest 匹配</li><li><strong>面板更新</strong>：如果通过面板分发节点，需要同步更新面板中的节点配置</li></ol><p>更换 dest 不需要更换服务器 IP，整个过程可以在几分钟内完成。</p><h3 id="预防措施"><a href="#预防措施" class="headerlink" title="预防措施"></a>预防措施</h3><ul><li>选择被封风险极低的 dest（如苹果、微软等大型企业站点）</li><li>准备一个备用 dest 列表，在需要时快速切换</li><li>避免选择与政治敏感内容相关的网站作为 dest</li></ul><hr><h2 id="高级话题：同一服务器多个-dest"><a href="#高级话题：同一服务器多个-dest" class="headerlink" title="高级话题：同一服务器多个 dest"></a>高级话题：同一服务器多个 dest</h2><p>一台服务器可以配置多个 Reality 入站，每个使用不同的 dest。这在以下场景中有价值：</p><ul><li><strong>分散风险</strong>：不同用户组使用不同的 dest，避免所有用户因单一 dest 问题而受影响</li><li><strong>按需选择</strong>：不同地区的用户可以使用延迟最低的 dest</li><li><strong>A&#x2F;B 测试</strong>：对比不同 dest 的抗封锁效果</li></ul><p>配置方式是在 Xray 的 inbounds 中添加多个监听不同端口的入站，每个入站使用独立的 Reality 设置和不同的 dest。</p><hr><h2 id="常见问题（FAQ）"><a href="#常见问题（FAQ）" class="headerlink" title="常见问题（FAQ）"></a>常见问题（FAQ）</h2><h3 id="dest-选同一台服务器上的网站会怎样？"><a href="#dest-选同一台服务器上的网站会怎样？" class="headerlink" title="dest 选同一台服务器上的网站会怎样？"></a>dest 选同一台服务器上的网站会怎样？</h3><p>如果你的服务器上真的运行了一个网站，并且将 dest 指向这个网站的域名，技术上可行。但这样做实际上失去了 Reality 的核心优势——GFW 可以通过主动探测判断这个”网站”是你自己搭建的，而非一个高流量的真实商业网站。</p><h3 id="所有人都用-apple-com-作为-dest-会不会被针对？"><a href="#所有人都用-apple-com-作为-dest-会不会被针对？" class="headerlink" title="所有人都用 apple.com 作为 dest 会不会被针对？"></a>所有人都用 apple.com 作为 dest 会不会被针对？</h3><p>理论上存在这个风险。如果 GFW 发现大量非苹果 CDN 的 IP 地址上的 TLS 连接都声称在访问 apple.com，这确实是一个统计异常。但目前没有证据表明 GFW 在进行这种级别的统计分析。apple.com 的正常流量基数足够大，短期内不太可能因此被针对。</p><h3 id="Reality-的-dest-和传统方案的-SNI-有什么本质区别？"><a href="#Reality-的-dest-和传统方案的-SNI-有什么本质区别？" class="headerlink" title="Reality 的 dest 和传统方案的 SNI 有什么本质区别？"></a>Reality 的 dest 和传统方案的 SNI 有什么本质区别？</h3><p>传统 TLS 方案中的 SNI 只是一个声明——你声称在访问这个域名，但服务器返回的是自己的证书。GFW 可以通过探测发现 SNI 与实际证书不匹配。Reality 的 dest 则是真正的转发目标——GFW 探测时得到的证书确实来自该网站，伪装更彻底。</p><h3 id="可以使用-IP-地址作为-dest-吗？"><a href="#可以使用-IP-地址作为-dest-吗？" class="headerlink" title="可以使用 IP 地址作为 dest 吗？"></a>可以使用 IP 地址作为 dest 吗？</h3><p>不推荐。使用 IP 地址意味着 SNI 也要设为 IP 地址，而正常的 TLS 连接几乎都使用域名 SNI。IP 地址作为 SNI 本身就是一个显著的异常特征。</p><h3 id="dest-目标更换证书会影响我的节点吗？"><a href="#dest-目标更换证书会影响我的节点吗？" class="headerlink" title="dest 目标更换证书会影响我的节点吗？"></a>dest 目标更换证书会影响我的节点吗？</h3><p>大型网站定期轮换证书是正常行为，Reality 对此有容错能力。证书轮换不会导致现有代理连接中断，因为 Reality 会动态获取目标网站的最新证书。但如果目标网站在轮换过程中短暂出现 TLS 配置异常，可能导致新连接建立失败。</p><h3 id="如何判断我当前的-dest-效果好不好？"><a href="#如何判断我当前的-dest-效果好不好？" class="headerlink" title="如何判断我当前的 dest 效果好不好？"></a>如何判断我当前的 dest 效果好不好？</h3><p>最直接的指标是节点的存活时间。如果节点长期稳定运行（数月不被封），说明 dest 选择和整体配置都没有问题。如果节点频繁被封，在排除其他因素（如协议指纹、流量模式等）后，可以尝试更换 dest。</p><hr><h2 id="外部参考"><a href="#外部参考" class="headerlink" title="外部参考"></a>外部参考</h2><ul><li><a href="https://github.com/XTLS/REALITY">REALITY 项目</a> — Reality 协议源码和文档</li><li><a href="https://xtls.github.io/">Xray-core 官方文档</a> — Xray 配置参考</li><li><a href="/posts/vless-reality-deep-dive/">VLESS+Reality 深度解析</a> — 本站详细技术解读</li></ul>]]></content>
      
      
      <categories>
          
          <category> 运营与架构 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> 配置 </tag>
            
            <tag> SNI </tag>
            
            <tag> Reality </tag>
            
            <tag> dest </tag>
            
            <tag> 伪装 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>敏感时期封锁加强的规律与应对</title>
      <link href="/posts/sensitive-periods/"/>
      <url>/posts/sensitive-periods/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：每年特定时期（如全国两会、国庆节等），GFW 的封锁力度会显著加强，大量代理节点短时间内失效。理解封锁加强的规律和时间节点，有助于提前做好准备，减少影响。</p></blockquote><hr><h2 id="什么是”敏感时期”"><a href="#什么是”敏感时期”" class="headerlink" title="什么是”敏感时期”"></a>什么是”敏感时期”</h2><p>在代理社区中，”敏感时期”指的是 GFW 封锁力度出现阶段性明显加强的时间段。这些时间段通常与重大政治活动、特定历史纪念日或突发公共事件相关联。</p><p><strong>这个概念有几个关键特征需要理解</strong>：</p><p>第一，GFW 的封锁力度<strong>并非恒定不变</strong>。它存在一个”常规水平”和”加强水平”的切换机制。在常规时段，检测系统的阈值设定相对宽松——一些轻微的协议异常、偶尔的 TLS 指纹不匹配可能只被标记但不触发封锁。而在敏感时期，同样的异常信号会直接导致 IP 被封。这种差异的本质是检测阈值的动态调整，而非检测技术本身的变化。</p><p>第二，敏感时期的封锁加强<strong>没有任何官方通知或公开文件</strong>。不存在”GFW 封锁日历”这样的东西。但多年来，社区通过大量的实际观察已经积累了相当可靠的经验规律——哪些时期会加强、加强到什么程度、持续多久——这些规律在年复一年的验证中被不断确认。</p><p>第三，敏感时期的封锁是<strong>系统性的、自动化的</strong>，而非针对个人的定向行为。GFW 在这些时期降低检测阈值、增加主动探测频率、扩大预防性封锁范围，这些操作都是批量执行的。你的节点在敏感时期被封，几乎可以确定是自动系统的批量行为，而不是有人在专门追踪你。</p><hr><h2 id="常见敏感时期及其影响程度"><a href="#常见敏感时期及其影响程度" class="headerlink" title="常见敏感时期及其影响程度"></a>常见敏感时期及其影响程度</h2><h3 id="全国两会（3-月，约-2-周）"><a href="#全国两会（3-月，约-2-周）" class="headerlink" title="全国两会（3 月，约 2 周）"></a>全国两会（3 月，约 2 周）</h3><p>全国人民代表大会和全国政协会议是每年最重要的政治活动之一，通常在 3 月初召开，持续约两周。两会期间的封锁力度<strong>一般是全年最强的</strong>。</p><p>多年来社区的一致观察是：两会期间大量原本稳定运行的节点会在数天内集中失效。机场服务商的节点批量下线、自建节点存活率骤降、UDP 协议被大面积干扰或阻断。封锁通常在两会开幕前一到两天开始加强，在闭幕后数天到一周内逐步恢复。但需要强调的是——被封的 IP 不会因为敏感时期结束而自动解封。GFW 降低的是检测阈值，恢复的是阈值水平，已经被写入黑名单的 IP 不会因此被移出。</p><h3 id="国庆节（10-月-1-7-日）"><a href="#国庆节（10-月-1-7-日）" class="headerlink" title="国庆节（10 月 1-7 日）"></a>国庆节（10 月 1-7 日）</h3><p>国庆长假期间是第二个封锁力度显著加强的时段。封锁通常从 9 月下旬开始逐步收紧，到 10 月 1 日前后达到峰值，假期结束后逐渐恢复。逢十周年大庆（如 2029 年的 80 周年）力度会进一步加大。</p><p>国庆期间的封锁程度总体上不如两会严重，但仍然会导致相当比例的节点失效。特别是 UDP 类协议（如 Hysteria2）在国庆期间受到的影响通常更明显——部分地区会出现 UDP 流量被大面积限速甚至直接阻断的情况。</p><h3 id="重大党代会-全会"><a href="#重大党代会-全会" class="headerlink" title="重大党代会 &#x2F; 全会"></a>重大党代会 &#x2F; 全会</h3><p>党的全国代表大会（每五年一届）和中央全会的召开也会触发封锁加强。这类活动的影响程度取决于具体的政治重要性——换届年的党代会通常影响较大，普通年份的全会影响相对较小。由于这类活动的日期不像两会和国庆那样固定，需要关注政治新闻来提前判断。</p><h3 id="六四周年（6-月-4-日前后）"><a href="#六四周年（6-月-4-日前后）" class="headerlink" title="六四周年（6 月 4 日前后）"></a>六四周年（6 月 4 日前后）</h3><p>每年 6 月 4 日前后，GFW 会在数天的窗口内加强封锁。加强的幅度和持续时间因年份而异——逢五逢十周年通常更严格。这是一个时间窗口较短但信号明确的敏感时期，通常从 6 月 1 日或 2 日开始收紧，6 月 5 日或 6 日后逐步放松。</p><h3 id="突发事件"><a href="#突发事件" class="headerlink" title="突发事件"></a>突发事件</h3><p>上述都是可预测的敏感时期。但 GFW 还会在无法提前预知的突发事件中临时加强封锁。这类事件包括但不限于：重大自然灾害、公共安全事件、重大社会舆论事件等。突发事件导致的封锁加强具有不可预测性——你无法提前准备，只能依靠冗余方案和快速切换能力来应对。</p><h3 id="年度差异"><a href="#年度差异" class="headerlink" title="年度差异"></a>年度差异</h3><p>需要特别指出的是：<strong>即使是同一个敏感时期，每年的封锁力度也不完全相同。</strong> 有些年份的两会封锁异常严格，大量主流机场在整个会期内可用率骤降至个位数；有些年份则相对温和，多数用户只感受到轻微的速度下降而不是完全断连。影响因素包括当年的政治氛围、国际关系形势、以及 GFW 自身技术系统的升级状态等。因此，过往经验可以作为参考，但不能作为精确预测。</p><hr><h2 id="封锁加强的具体表现"><a href="#封锁加强的具体表现" class="headerlink" title="封锁加强的具体表现"></a>封锁加强的具体表现</h2><p>理解敏感时期封锁加强的具体表现，有助于你判断当前情况并采取正确的应对措施。</p><h3 id="IP-被主动封锁"><a href="#IP-被主动封锁" class="headerlink" title="IP 被主动封锁"></a>IP 被主动封锁</h3><p>常规时段下，GFW 主要通过被动检测来识别和封锁代理节点——你的流量先被检测到异常，然后才被封锁。但在敏感时期，GFW 会切换到更主动的模式：</p><ul><li><strong>预防性封锁</strong>：GFW 根据已有的 IP 信誉数据库，提前封锁一批”高概率代理服务器”的 IP。这些 IP 可能在当前没有表现出任何异常，但它们的历史记录（曾被检测为代理、属于代理用户集中的 VPS 提供商 IP 段等）使它们在敏感时期被预防性拉黑。</li><li><strong>扩大探测范围</strong>：GFW 的主动探测系统在敏感时期会扫描更多的 IP 段，而不仅限于已被标记为可疑的 IP。</li></ul><h3 id="检测灵敏度提升"><a href="#检测灵敏度提升" class="headerlink" title="检测灵敏度提升"></a>检测灵敏度提升</h3><p>GFW 在敏感时期会降低各层检测机制的触发阈值：</p><ul><li>平时可能被忽略的轻微 TLS 指纹异常，在敏感时期可能直接触发封锁。</li><li>流量行为分析的异常判定标准更严格——连接频率、带宽利用率等维度的”正常范围”被收窄。</li><li>对于处于灰色地带的协议（如配置不完善的 Trojan、未使用 uTLS 的 VLESS+TLS），平时可能勉强通过检测，敏感时期则会被拦截。</li></ul><h3 id="封锁响应速度加快"><a href="#封锁响应速度加快" class="headerlink" title="封锁响应速度加快"></a>封锁响应速度加快</h3><p>在常规时段，从 GFW 检测到异常到实际执行封锁之间可能存在数小时甚至数天的延迟。这给了用户和服务提供商一定的反应时间。但在敏感时期，这个响应窗口被大幅压缩——从检测到封锁可能只需要几分钟。这意味着你的备用节点也可能在切换后不久就被封锁，传统的”被封了换一个”策略在敏感时期的有效性会显著降低。</p><h3 id="UDP-流量被大面积干扰"><a href="#UDP-流量被大面积干扰" class="headerlink" title="UDP 流量被大面积干扰"></a>UDP 流量被大面积干扰</h3><p>敏感时期另一个显著的表现是对 UDP 流量的大面积干扰。基于 QUIC&#x2F;UDP 的协议（如 Hysteria2、TUIC）在敏感时期受到的影响通常最为严重。干扰方式包括：</p><ul><li>UDP 流量被全面限速，导致基于 UDP 的代理协议速度骤降到不可用的程度。</li><li>特定端口范围的 UDP 流量被直接丢弃。</li><li>部分地区在敏感时期会出现几乎完全阻断非 DNS 用途 UDP 流量的情况。</li></ul><p>这是因为 UDP 流量在技术上更难进行精细化的 DPI 分析（相比 TCP），GFW 在敏感时期倾向于采取更粗暴的策略——宁可误杀也不放过。</p><h3 id="地域差异"><a href="#地域差异" class="headerlink" title="地域差异"></a>地域差异</h3><p>封锁加强的影响在不同地区之间并不均匀。一般规律是：</p><ul><li>北京等政治中心地区在敏感时期的封锁力度最强。</li><li>经济发达的一线城市（上海、广州、深圳）封锁力度次之。</li><li>部分二三线城市和偏远地区的影响可能相对较小。</li><li>不同运营商的执行力度也存在差异——中国电信的国际出口管控通常最严格，中国联通次之，中国移动在部分地区相对宽松。</li></ul><hr><h2 id="应对策略"><a href="#应对策略" class="headerlink" title="应对策略"></a>应对策略</h2><h3 id="提前准备（敏感时期前）"><a href="#提前准备（敏感时期前）" class="headerlink" title="提前准备（敏感时期前）"></a>提前准备（敏感时期前）</h3><p>敏感时期的封锁是可预测的——两会在每年 3 月、国庆在每年 10 月，日期基本固定。既然可预测，就应当提前准备。</p><p><strong>更新订阅并测试备用节点</strong>：在敏感时期到来前一到两周，更新你的代理服务订阅链接，测试所有可用节点的连通性。特别要测试平时不常用的备用节点——不要等到主力节点被封了才发现备用节点也不能用。</p><p><strong>确保多个代理服务</strong>：不要把所有鸡蛋放在一个篮子里。如果你只使用一个机场服务，那么该机场在敏感时期全面失效时你就完全没有退路。建议至少维持两个不同提供商的服务——一个作为日常主力，另一个作为敏感时期的备份。两个提供商使用不同的 IP 段和不同的基础设施，同时失效的概率远低于单一提供商。</p><p><strong>保留自建节点作为最后防线</strong>：如果你有技术能力，在一个非热门 VPS 提供商上维护一个自建的 VLESS+Reality 节点，作为所有商业服务都失效时的最后手段。自建节点由于只有你一个人使用，流量特征极低，在敏感时期的存活率通常高于共享节点。</p><p><strong>提前下载关键资源</strong>：如果你有在敏感时期需要使用的海外资源（工作文件、学习资料等），尽量在敏感时期到来之前下载到本地。不要假设你的代理在整个敏感时期都能正常工作。</p><h3 id="期间应对（敏感时期中）"><a href="#期间应对（敏感时期中）" class="headerlink" title="期间应对（敏感时期中）"></a>期间应对（敏感时期中）</h3><p><strong>优先使用 IPLC &#x2F; 专线中转节点</strong>：IPLC（International Private Leased Circuit，国际私有租用线路）和 IEPL 等专线不经过 GFW 的公网检测节点，理论上不受 GFW 封锁加强的直接影响。如果你的代理服务提供 IPLC 线路选项，敏感时期应优先使用。当然，IPLC 线路通常价格更高、带宽更有限，但在敏感时期它是可用性最高的选择。</p><p><strong>切换到 CDN 中转节点</strong>：如果没有 IPLC 线路，CDN 中转（如通过 Cloudflare 的 WebSocket 或 gRPC 传输）是次优选择。由于 Cloudflare 等 CDN 承载大量正常网站的流量，GFW 不太可能直接封锁 CDN 的 IP 段。CDN 中转的速度和延迟不如直连或 IPLC，但在敏感时期的可用性更有保障。</p><p><strong>降低使用强度</strong>：敏感时期不是看 4K 视频或下载大文件的好时机。降低代理使用的带宽和频率可以减少你的流量在行为分析层面被标记为异常的概率。将使用限制在必要的工作和通信需求上，非必要的高带宽活动推迟到敏感时期结束后。</p><p><strong>保持耐心，等待恢复</strong>：敏感时期的封锁加强是临时性的。无论多严格的封锁，都会在事件结束后逐步回到常规水平。如果你的主力节点在敏感时期失效，不要恐慌。切换到备用方案维持基本需求，等待敏感时期过去后再评估情况。</p><p><strong>关注服务提供商的信息发布</strong>：优质的机场服务商在敏感时期会通过 Telegram 群组、公告页面等渠道发布节点状态更新和临时解决方案。保持关注这些渠道，及时获取可用节点的信息。</p><h3 id="长期策略"><a href="#长期策略" class="headerlink" title="长期策略"></a>长期策略</h3><p><strong>选择有良好敏感时期记录的服务</strong>：评估一个机场服务的质量，不能只看日常的速度和稳定性。敏感时期的表现才是真正的试金石。一个在两会期间仍能维持基本可用的服务，其背后的运维能力和 IP 资源储备远超那些一到敏感时期就全军覆没的服务。在选择服务之前，搜索社区中关于该服务在上一个敏感时期表现的反馈。</p><p><strong>关注服务商如何应对历次封锁</strong>：不仅要看结果（是否可用），还要看过程——服务商是否提前通知用户做准备？封锁后多快恢复？恢复后是否吸取教训升级了方案？这些细节反映了服务商的专业程度和持续投入的意愿。</p><p><strong>维持多协议支持的客户端配置</strong>：不要只配置单一协议。建议在 <a href="https://github.com/clash-verge-rev/clash-verge-rev">Clash Verge Rev</a> 等客户端中配置多种协议的节点，优先级是：VLESS+Reality 作为日常主力协议（抗检测能力最强）、<a href="https://v2.hysteria.network/">Hysteria2</a> 作为低延迟场景的补充（但注意 UDP 在敏感时期可能被干扰）、CDN 中转（WebSocket&#x2F;gRPC）作为敏感时期的最后保障。客户端应配置自动故障转移，当主力协议不可用时自动切换到备选。</p><p><strong>考虑备用服务来自不同提供商</strong>：你的主力服务和备用服务应当来自不同的提供商——不同的 IP 段、不同的机房、最好是不同的协议组合。这样在一个提供商的整个基础设施被针对时，另一个提供商仍有存活的可能。</p><hr><h2 id="运营者如何应对"><a href="#运营者如何应对" class="headerlink" title="运营者如何应对"></a>运营者如何应对</h2><p>如果你是代理服务的运营者（机场主或自建节点的管理者），敏感时期需要更系统化的准备。</p><p><strong>提前储备 IP 资源</strong>：在敏感时期到来之前，预先准备一批备用 IP 地址。这些 IP 在敏感时期之前不应被使用（保持”干净”的 IP 信誉），等到主力 IP 被封后再启用。IP 资源的储备量取决于你的用户规模——用户越多，被封的概率越高，需要的备用 IP 也越多。</p><p><strong>实现自动化 IP 轮换</strong>：手动更换 IP 在封锁响应速度加快的敏感时期可能跟不上节奏。建议通过 API 与 VPS 提供商对接，实现检测到 IP 被封后自动更换的流程。检测方式可以是定期从国内监测节点 ping 服务器 IP——连续多次 ping 不通则判定为被封，自动触发 IP 更换和配置更新。</p><p><strong>准备 CDN 回落路线</strong>：即使你的主力线路是直连或中转，也应当提前配置好 CDN 回落方案。当直连节点批量失效时，CDN 回落可以确保用户至少保持基本的连通性。虽然速度会下降，但”能用”远比”快但不能用”重要。</p><p><strong>主动与用户沟通</strong>：在敏感时期到来之前，提前通知用户可能出现的影响和应对建议。在敏感时期中，及时更新节点状态信息。透明的沟通可以减少用户的焦虑和不必要的客服压力。</p><p><strong>临时调整日志策略</strong>：在敏感时期，如果可能的话，考虑减少服务端日志的留存时间和详细程度。这是一种安全审慎的做法——在封锁加强的时期，减少任何不必要的数据留存，降低潜在风险。</p><hr><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="Q-每次敏感时期都这么严格吗？"><a href="#Q-每次敏感时期都这么严格吗？" class="headerlink" title="Q: 每次敏感时期都这么严格吗？"></a>Q: 每次敏感时期都这么严格吗？</h3><p>程度每年不同。两会通常最严格，国庆次之。有些年份比较宽松——可能只是速度下降但大多数节点仍然可用；有些年份则非常严格——大量节点集体失效、UDP 被全面阻断、连 CDN 中转都受到影响。影响因素很多，包括当年的政治环境、GFW 技术系统的升级状态、以及代理社区与 GFW 之间的攻防态势。没有固定规律可循，过往经验只能作为粗略参考。</p><h3 id="Q-封锁加强会持续多久？"><a href="#Q-封锁加强会持续多久？" class="headerlink" title="Q: 封锁加强会持续多久？"></a>Q: 封锁加强会持续多久？</h3><p>通常与相关事件的周期基本一致。两会约 2-3 周（包括会前收紧和会后恢复的过渡期），国庆约 1-2 周，六四周年约数天。封锁加强结束后，GFW 的检测阈值会逐渐回到常规水平，新的节点连接不再被如此严格地审查。但一个关键点是：<strong>已经被封的 IP 不一定会随着敏感时期结束而解封。</strong> 敏感时期结束意味着”新的封锁不再那么容易发生”，而不是”已有的封锁会被撤销”。部分 IP 可能在数周后自动解封，部分则不会。</p><h3 id="Q-敏感时期用代理有额外风险吗？"><a href="#Q-敏感时期用代理有额外风险吗？" class="headerlink" title="Q: 敏感时期用代理有额外风险吗？"></a>Q: 敏感时期用代理有额外风险吗？</h3><p>对于个人正常使用者来说，敏感时期使用代理的风险不会因为时间段本身而增加。GFW 的封锁加强是自动化系统行为——降低检测阈值、增加主动探测频率、扩大预防性封锁范围——这些都是针对代理服务基础设施的批量操作，不是对个人用户的追踪或定向执法。你的节点可能更容易被封，但这不意味着你个人面临更高的法律或行政风险。当然，如果涉及政治敏感内容的传播或组织活动，那是另一个层面的问题，与代理工具本身无关，需要更加审慎地评估。</p><h3 id="Q-有没有完全不受影响的方案？"><a href="#Q-有没有完全不受影响的方案？" class="headerlink" title="Q: 有没有完全不受影响的方案？"></a>Q: 有没有完全不受影响的方案？</h3><p>理论上最接近”不受影响”的方案是 IPLC 专线——它不经过公网的 GFW 检测节点，而是通过运营商的专用线路直接连接国内外网络。因此 GFW 在公网上的所有检测和封锁措施对 IPLC 线路没有直接影响。但即使是 IPLC，在极端情况下也可能受到影响——例如运营商层面的管控、专线本身的带宽限制、或者提供 IPLC 服务的商家因其他原因被关停。此外，IPLC 的价格远高于普通代理方案，带宽也相对有限，不适合所有用户。总结：<strong>没有 100% 免疫的方案。</strong> 降低风险的核心思路是冗余——多服务商、多协议、多线路类型，确保任何单一故障点都不会导致完全断连。</p>]]></content>
      
      
      <categories>
          
          <category> GFW 与审查 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> 封锁 </tag>
            
            <tag> 敏感时期 </tag>
            
            <tag> 两会 </tag>
            
            <tag> 国庆 </tag>
            
            <tag> 应对策略 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>速度慢的常见原因与优化思路</title>
      <link href="/posts/speed-optimization/"/>
      <url>/posts/speed-optimization/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>: 代理速度慢是除了”连不上”之外最常见的问题。慢的原因可能在本地网络、代理节点、线路拥堵或配置不当。本文按排查优先级列出常见原因和对应的优化方法。</p></blockquote><hr><h2 id="先确认：到底是什么慢"><a href="#先确认：到底是什么慢" class="headerlink" title="先确认：到底是什么慢"></a>先确认：到底是什么慢</h2><p>开始排查之前，必须先搞清楚一个基本概念：你遇到的”慢”究竟是哪种慢。延迟高和带宽低是两个完全不同的问题，对应的优化方向也不同。</p><h3 id="区分”延迟高”和”带宽低”"><a href="#区分”延迟高”和”带宽低”" class="headerlink" title="区分”延迟高”和”带宽低”"></a>区分”延迟高”和”带宽低”</h3><p><strong>延迟（Latency）</strong> 指的是发出请求到收到回应的时间，通常用 ping 值衡量：</p><ul><li>高延迟的表现：网页加载慢（点击链接后等很久才开始显示）、视频缓冲转圈、游戏操作明显卡顿</li><li>参考标准：&lt; 100ms 良好，100-200ms 可接受，&gt; 300ms 体验明显变差</li></ul><p><strong>带宽（Bandwidth）</strong> 指的是单位时间内能传输多少数据：</p><ul><li>低带宽的表现：下载文件速度慢、视频画质自动降低（平台为了不卡顿主动降画质）、大文件传输耗时长</li><li>参考标准：&gt; 30Mbps 看 4K 视频没问题，&gt; 10Mbps 看 1080p 够用</li></ul><p>这两者可以独立存在，不要混淆：</p><table><thead><tr><th>场景</th><th>延迟</th><th>带宽</th><th>实际体验</th></tr></thead><tbody><tr><td>延迟低 + 带宽高</td><td>✓</td><td>✓</td><td>最理想状态</td></tr><tr><td>延迟低 + 带宽低</td><td>✓</td><td>✗</td><td>网页打开快，但下载慢、视频模糊</td></tr><tr><td>延迟高 + 带宽高</td><td>✗</td><td>✓</td><td>等一会儿才开始加载，但加载起来很快</td></tr><tr><td>延迟高 + 带宽低</td><td>✗</td><td>✗</td><td>全方位的慢</td></tr></tbody></table><p>搞清楚你属于哪种情况，后续才能有针对性地优化。</p><h3 id="基准测试：量化你的”慢”"><a href="#基准测试：量化你的”慢”" class="headerlink" title="基准测试：量化你的”慢”"></a>基准测试：量化你的”慢”</h3><p>不做测试凭感觉说”慢”是没有意义的。你需要数据来对比：</p><p><strong>第一步：测试不经过代理的网速（基准值）</strong></p><ul><li>使用 <a href="https://www.speedtest.cn/">speedtest.cn</a> 测国内速度</li><li>这是你的网络上限，代理速度不可能超过这个值</li></ul><p><strong>第二步：测试经过代理的网速</strong></p><ul><li>使用 <a href="https://www.speedtest.net/">Speedtest</a>，选择与你代理节点同地区的测速服务器</li><li>例如用香港节点，就选香港的测速服务器</li></ul><p><strong>第三步：对比</strong></p><ul><li>如果代理速度 &lt; 直连速度的 10% → 有明确的问题需要排查</li><li>如果代理速度在直连速度的 30%-50% → 正常范围，可以优化但期望不要太高</li><li>如果代理速度 &gt; 直连速度的 50% → 已经很好了</li></ul><p><img src="/images/inline/speedtest-result.jpg" alt="Speedtest 测速结果示例"><br><em>图片来源：<a href="https://www.reddit.com/">Reddit</a></em></p><hr><h2 id="原因一：节点本身的问题"><a href="#原因一：节点本身的问题" class="headerlink" title="原因一：节点本身的问题"></a>原因一：节点本身的问题</h2><p>节点质量是影响速度最直接的因素。便宜的节点和贵的节点差距可以非常大。</p><h3 id="服务器负载高"><a href="#服务器负载高" class="headerlink" title="服务器负载高"></a>服务器负载高</h3><p>机场的节点是多用户共享的。当同一台服务器上的用户数量过多时，每个用户分到的带宽自然就少。</p><ul><li><strong>高峰期效应</strong>：中国时间 20:00-23:00 是用户集中上线的时段，几乎所有节点都会比白天慢</li><li><strong>热门节点拥挤</strong>：如果某个节点延迟最低或者名称里带”推荐”字样，大家都会优先选它，导致负载更高</li></ul><p><strong>解决方法</strong>：</p><ol><li>切换到冷门节点（延迟稍高但可能负载更低的节点）</li><li>尝试不同地区的节点</li><li>如果你的机场提供负载信息（部分面板显示节点在线人数或负载率），选择负载低的</li></ol><h3 id="服务器带宽限制"><a href="#服务器带宽限制" class="headerlink" title="服务器带宽限制"></a>服务器带宽限制</h3><p>服务器本身的出口带宽就那么大。VPS 的不同套餐对应不同的带宽上限：</p><ul><li>低端 VPS：通常只有 100Mbps-500Mbps 的端口带宽</li><li>中端 VPS：1Gbps 端口</li><li>高端&#x2F;专线：10Gbps 端口</li></ul><p>如果这个带宽再分给几十个用户，每个人分到的就很有限了。</p><p><strong>解决方法</strong>：</p><ul><li>如果你的机场提供不同等级的线路（直连、中转、IPLC&#x2F;IEPL），优先使用高等级线路</li><li>部分机场会把线路类型标注在节点名称中，注意观察</li></ul><h3 id="节点地理距离"><a href="#节点地理距离" class="headerlink" title="节点地理距离"></a>节点地理距离</h3><p>物理距离直接影响延迟。数据包传输需要时间，距离越远延迟越高，中间经过的路由节点越多，出问题的概率也越大。</p><p>从中国大陆出发，各地区的典型延迟（仅参考）：</p><table><thead><tr><th>地区</th><th>典型延迟</th><th>适合场景</th></tr></thead><tbody><tr><td>香港</td><td>30-60ms</td><td>日常浏览、视频、对延迟敏感的应用</td></tr><tr><td>日本</td><td>50-100ms</td><td>日常浏览、视频、日本内容</td></tr><tr><td>新加坡</td><td>70-120ms</td><td>日常浏览、东南亚内容</td></tr><tr><td>美国西海岸</td><td>150-200ms</td><td>美国内容、AI 服务（ChatGPT 等）</td></tr><tr><td>美国东海岸</td><td>200-280ms</td><td>仅在需要时使用</td></tr><tr><td>欧洲</td><td>250-350ms</td><td>仅在需要时使用</td></tr></tbody></table><p><strong>解决方法</strong>：</p><ul><li>日常浏览优先选香港、日本等近距离节点</li><li>只在需要访问特定地区内容时才选远距离节点</li><li>不要为了”稳定”盲目选美国节点——距离带来的延迟代价很大</li></ul><hr><h2 id="原因二：线路问题"><a href="#原因二：线路问题" class="headerlink" title="原因二：线路问题"></a>原因二：线路问题</h2><p>即使节点本身没有问题，数据从你的设备到节点之间的链路也会决定速度好坏。</p><h3 id="国际出口拥堵"><a href="#国际出口拥堵" class="headerlink" title="国际出口拥堵"></a>国际出口拥堵</h3><p>中国大陆连接海外需要经过国际出口，而国际出口的总带宽是有限的。所有人共用这些出口，高峰期自然拥堵。</p><p><strong>直连线路</strong>（数据直接从你的 ISP 出国际出口到海外服务器）受此影响最大：</p><ul><li>白天：国际出口负载较低，速度尚可</li><li>晚间 20:00-23:00：最拥堵的时段，速度可能断崖式下降</li><li>凌晨：负载最低，速度通常最好</li></ul><p><strong>中转&#x2F;专线线路</strong>（数据先到国内中转服务器，再通过专用通道出海）受拥堵影响小得多：</p><ul><li>IPLC（国际私有租用线路）：完全不经过公网国际出口，不受拥堵影响，但价格贵</li><li>IEPL（国际以太网专线）：同样不经过公网出口</li><li>中转（BGP 中转）：经过优化路由的公网出口，比直连好但仍受一定影响</li></ul><p><strong>解决方法</strong>：</p><ol><li>如果你的机场提供中转或专线节点，晚高峰时优先使用</li><li>错峰使用——把下载、更新等对带宽要求高的任务安排在非高峰时段</li><li>准备多个机场作为备用</li></ol><h3 id="ISP（运营商）限速和-QoS"><a href="#ISP（运营商）限速和-QoS" class="headerlink" title="ISP（运营商）限速和 QoS"></a>ISP（运营商）限速和 QoS</h3><p>不同运营商的国际出口质量差距明显，而且部分运营商会对特定类型的流量进行 QoS（服务质量管理，本质就是限速）：</p><p><strong>三大运营商的一般表现</strong>（仅供参考，不同地区差异很大）：</p><ul><li><strong>中国电信</strong>：国际出口质量通常最好，到亚太地区线路较优</li><li><strong>中国联通</strong>：次之，对某些地区线路不错</li><li><strong>中国移动</strong>：国际出口质量通常最差，移动网络（4G&#x2F;5G）尤其明显</li></ul><p><strong>QoS 限速的特征</strong>：</p><ul><li>UDP 流量比 TCP 更容易被限速</li><li>非标准端口的流量可能被降级处理</li><li>大流量长连接可能被识别并限速</li></ul><p><strong>解决方法</strong>：</p><ol><li>切换协议：如果 TCP 慢试试 UDP（Hysteria2），反之亦然</li><li>切换端口：尝试 443、8443、2053 等常见端口</li><li>如果条件允许，换一家 ISP 测试对比</li><li>使用手机移动数据热点和宽带分别测试，判断是否为特定 ISP 的问题</li></ol><h3 id="路由绕行"><a href="#路由绕行" class="headerlink" title="路由绕行"></a>路由绕行</h3><p>正常情况下，从上海到美国西海岸的数据包应该走太平洋直达。但实际路由可能会绕行——比如从上海先到北京，再到欧洲，最后才到美国西海岸。绕行意味着更长的延迟和更多出问题的环节。</p><p><strong>如何检测路由</strong>：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Windows - 使用 tracert</span></span><br><span class="line">tracert your-server-ip</span><br><span class="line"></span><br><span class="line"><span class="comment"># 更好的工具 - nexttrace（显示每一跳的地理位置和运营商）</span></span><br><span class="line">nexttrace your-server-ip</span><br><span class="line"></span><br><span class="line"><span class="comment"># BestTrace 也是不错的图形化工具（Windows）</span></span><br></pre></td></tr></table></figure><p><strong>解决方法</strong>：</p><ul><li>选择经过 BGP 优化路由的节点或机场</li><li>使用中转线路（中转机房通常有更优的路由）</li><li>尝试不同地区的节点，绕行情况因目的地不同而不同</li></ul><hr><h2 id="原因三：协议和配置问题"><a href="#原因三：协议和配置问题" class="headerlink" title="原因三：协议和配置问题"></a>原因三：协议和配置问题</h2><p>协议选择和配置细节对速度的影响往往被低估。同一个节点，不同的配置可能带来显著的速度差异。</p><h3 id="TLS-开销"><a href="#TLS-开销" class="headerlink" title="TLS 开销"></a>TLS 开销</h3><p>TLS 加密是必要的（否则流量特征一眼就能被识别），但它确实带来一定的性能开销：</p><ul><li>每次新建连接都需要 TLS 握手，握手过程需要多次往返通信</li><li>访问 HTTPS 网站时，代理本身的 TLS 和网站的 TLS 形成双重加密，CPU 开销翻倍</li><li>在低性能设备上，加密&#x2F;解密的 CPU 消耗可能成为瓶颈</li></ul><p><strong>解决方法</strong>：</p><ol><li>使用 VLESS + Reality 配合 <code>flow: xtls-rprx-vision</code>（参考 <a href="https://github.com/MetaCubeX/mihomo">mihomo</a> 文档）—— 这个组合通过复用底层 TLS 连接的方式减少了额外的加密开销</li><li>避免不必要的双重加密：如果代理协议本身已经提供了加密，传输层不需要再加一层 TLS</li><li>在性能允许的情况下，使用支持 0-RTT 的协议（减少握手延迟）</li></ol><h3 id="DNS-解析慢"><a href="#DNS-解析慢" class="headerlink" title="DNS 解析慢"></a>DNS 解析慢</h3><p>DNS 解析是建立每一个新连接的第一步。如果 DNS 解析慢，每访问一个新域名都会多等一段时间。</p><p><strong>DNS 慢的常见原因</strong>：</p><ul><li>直接使用海外 DNS（如 8.8.8.8）从中国查询 → 查询请求本身就需要翻墙或走国际出口</li><li>DNS 被污染 → 返回错误的 IP 地址，导致连接失败或者连接到错误的服务器</li><li>DNS 查询没有缓存 → 每次访问都要重新解析</li></ul><p><strong>解决方法</strong>：</p><ol><li><p><strong>Nameserver（上游 DNS）使用国内 DoH</strong>：</p><ul><li>推荐 <code>https://dns.alidns.com/dns-query</code>（阿里）</li><li>或 <code>https://doh.pub/dns-query</code>（腾讯）</li><li>国内 DNS 用于解析代理服务器的域名和国内网站</li></ul></li><li><p><strong>启用 Fake-IP 模式</strong>：</p><ul><li>Fake-IP 模式下，客户端不会真正去解析海外域名的 IP，而是分配一个假 IP</li><li>真正的 DNS 解析由代理服务器在远端完成</li><li>这样既快（本地不需要等海外 DNS 响应），又准（远端 DNS 不受国内 DNS 污染影响）</li></ul></li><li><p><strong>确保 DNS 缓存开启</strong>：大多数代理客户端默认开启 DNS 缓存，确认没有被手动关闭</p></li></ol><h3 id="代理客户端自身的资源占用"><a href="#代理客户端自身的资源占用" class="headerlink" title="代理客户端自身的资源占用"></a>代理客户端自身的资源占用</h3><p>代理客户端本身也是一个程序，它需要 CPU 和内存来处理所有经过它的流量。</p><p><strong>可能成为瓶颈的情况</strong>：</p><ul><li><strong>连接数过多</strong>：打开大量网页标签、运行多个需要代理的程序，会产生大量并发连接</li><li><strong>TUN 模式的额外开销</strong>：TUN 模式接管系统全部流量，比系统代理模式处理的数据量更大</li><li><strong>规则匹配开销</strong>：如果分流规则非常多（几万条），每个连接都要匹配规则，CPU 占用增加</li><li><strong>低性能设备</strong>：路由器、旧款手机等设备的 CPU 和内存有限</li></ul><p><strong>解决方法</strong>：</p><ol><li>关闭不需要代理的程序，减少并发连接数</li><li>如果不需要全局代理，使用系统代理模式代替 TUN 模式（资源消耗更少）</li><li>精简分流规则，去掉不需要的规则集</li><li>保持客户端版本更新——新版本通常有性能优化</li><li>在客户端设置中检查日志级别——Debug 级别的日志输出会消耗额外性能，日常使用设为 Warning 或 Error 即可</li></ol><hr><h2 id="原因四：本地网络环境"><a href="#原因四：本地网络环境" class="headerlink" title="原因四：本地网络环境"></a>原因四：本地网络环境</h2><p>在怀疑节点和线路之前，先排除本地网络的问题。本地问题往往是最容易解决但最容易被忽略的。</p><h3 id="WiFi-vs-有线"><a href="#WiFi-vs-有线" class="headerlink" title="WiFi vs 有线"></a>WiFi vs 有线</h3><p>WiFi 是很多速度问题的根源：</p><ul><li><strong>信号干扰</strong>：邻居的 WiFi、微波炉、蓝牙设备都会干扰 WiFi 信号</li><li><strong>距离衰减</strong>：离路由器越远信号越弱，穿墙后更明显</li><li><strong>频段拥堵</strong>：2.4GHz 频段在居民区通常非常拥挤</li><li><strong>连接设备过多</strong>：同一个路由器连的设备越多，分到的带宽越少</li></ul><p>有线连接几乎不存在这些问题。</p><p><strong>解决方法</strong>：</p><ol><li>用网线直连路由器测试，排除 WiFi 问题</li><li>如果必须用 WiFi，优先连 5GHz 频段（信道更多、干扰更少，但穿墙能力较弱）</li><li>检查路由器固件是否为最新版本</li><li>考虑路由器位置——放在使用区域的中心位置效果最好</li></ol><h3 id="MTU-问题"><a href="#MTU-问题" class="headerlink" title="MTU 问题"></a>MTU 问题</h3><p>MTU（最大传输单元）是网络数据包的最大尺寸。当 TUN 虚拟网卡的 MTU 值与物理网卡或 ISP 链路的 MTU 不匹配时，数据包需要被拆分（分片），导致传输效率下降。</p><p><strong>症状</strong>：</p><ul><li>能正常浏览网页但下载速度很慢</li><li>大文件传输速度异常低</li><li>时不时出现连接中断</li></ul><p><strong>解决方法</strong>：</p><ol><li>在代理客户端的 TUN 设置中调整 MTU 值</li><li>常见的安全值是 1400（比默认的 1500 低一些，留出隧道封装的空间）</li><li>可以通过 ping 命令测试最佳 MTU：</li></ol><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Windows - 测试 MTU（-l 设置包大小，-f 禁止分片）</span></span><br><span class="line">ping -l 1400 -f baidu.com</span><br><span class="line"></span><br><span class="line"><span class="comment"># 如果报告&quot;需要拆分数据包但是设置了不分段&quot;，说明 MTU 太大</span></span><br><span class="line"><span class="comment"># 逐步减小数值直到不再报错</span></span><br></pre></td></tr></table></figure><h3 id="本地防火墙和杀毒软件"><a href="#本地防火墙和杀毒软件" class="headerlink" title="本地防火墙和杀毒软件"></a>本地防火墙和杀毒软件</h3><p>安全软件对所有网络流量进行实时扫描，这会增加延迟和 CPU 负担。代理流量已经是加密的，杀毒软件扫描加密流量几乎没有安全价值，但性能开销是实实在在的。</p><p><strong>受影响最大的场景</strong>：</p><ul><li>Windows Defender 实时保护开启时扫描代理进程的网络活动</li><li>第三方杀毒软件（360、火绒等）的流量扫描功能</li><li>企业网络环境中的安全代理软件</li></ul><p><strong>解决方法</strong>：</p><ol><li>将代理客户端的可执行文件添加到杀毒软件的排除列表&#x2F;白名单中</li><li>Windows Defender：设置 → 病毒和威胁防护 → 排除项 → 添加排除项 → 选择代理客户端的安装目录</li><li>如果使用 TUN 模式，还需要排除 TUN 虚拟网卡的流量</li></ol><hr><h2 id="优化清单（按优先级排序）"><a href="#优化清单（按优先级排序）" class="headerlink" title="优化清单（按优先级排序）"></a>优化清单（按优先级排序）</h2><p>以下按实际效果和操作难度排列。从上到下依次尝试，通常前几项就能解决问题。</p><table><thead><tr><th>优先级</th><th>优化措施</th><th>操作难度</th><th>预期效果</th></tr></thead><tbody><tr><td>1</td><td><strong>换节点</strong></td><td>低</td><td>最简单也最有效，不同节点差距可能极大</td></tr><tr><td>2</td><td><strong>错峰使用</strong></td><td>低</td><td>避开 20:00-23:00 晚高峰</td></tr><tr><td>3</td><td><strong>使用中转&#x2F;专线线路</strong></td><td>低</td><td>如果机场提供中转或 IPLC 选项，优先选择</td></tr><tr><td>4</td><td><strong>正确配置 DNS</strong></td><td>中</td><td>Fake-IP 模式 + 国内 DoH 作为上游 DNS</td></tr><tr><td>5</td><td><strong>启用 flow 优化</strong></td><td>中</td><td>VLESS + Reality 配合 xtls-rprx-vision</td></tr><tr><td>6</td><td><strong>尝试不同协议</strong></td><td>中</td><td>TCP 慢试 Hysteria2（UDP），反之亦然</td></tr><tr><td>7</td><td><strong>有线代替 WiFi</strong></td><td>低</td><td>排除无线网络的不确定因素</td></tr><tr><td>8</td><td><strong>检查 ISP</strong></td><td>高</td><td>不同运营商出口质量不同，可能需要换宽带</td></tr></tbody></table><hr><h2 id="Speedtest-技巧"><a href="#Speedtest-技巧" class="headerlink" title="Speedtest 技巧"></a>Speedtest 技巧</h2><p>测速看起来简单，但方法不对会得到误导性的结果。</p><h3 id="正确的测速方式"><a href="#正确的测速方式" class="headerlink" title="正确的测速方式"></a>正确的测速方式</h3><ol><li><p><strong>选择正确的测速服务器</strong>：通过代理测速时，选择与代理节点同地区的测速服务器</p><ul><li>用香港节点 → 选 speedtest.net 上香港的服务器</li><li>用日本节点 → 选日本的服务器</li><li>千万不要用美国节点去测欧洲的测速服务器，那样测的是节点到欧洲的速度</li></ul></li><li><p><strong>多次测试取平均值</strong>：网络速度波动很正常，单次测试结果不够可靠。至少在不同时段测试 3-5 次</p></li><li><p><strong>使用客户端内置测速</strong>：部分代理客户端有内置测速功能，可以快速对比不同节点</p><ul><li><a href="https://github.com/clash-verge-rev/clash-verge-rev">Clash Verge Rev</a>：代理页面的测速按钮，可以批量测试所有节点的延迟</li><li><a href="https://github.com/2dust/v2rayN">v2rayN</a>：右键节点 → 测试真连接延迟</li></ul></li></ol><h3 id="常见误区"><a href="#常见误区" class="headerlink" title="常见误区"></a>常见误区</h3><ul><li><strong>只看 ping 延迟不看带宽</strong>：延迟低不代表带宽高，两个都要测</li><li><strong>在直连下测 speedtest.net</strong>：国内直连 speedtest.net 的结果没有参考价值（受国际出口影响）</li><li><strong>只测一次就下结论</strong>：网络状态时刻在变化，一次测试可能恰好赶上网络波动</li></ul><hr><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="Q：为什么白天快晚上慢？"><a href="#Q：为什么白天快晚上慢？" class="headerlink" title="Q：为什么白天快晚上慢？"></a>Q：为什么白天快晚上慢？</h3><p>国际出口带宽是共享资源。白天大多数人在上班上学，网络负载低。晚间 20:00-23:00 用户集中上网（看视频、打游戏、刷社交媒体），国际出口带宽被大量占用，所有经过公网国际出口的代理流量都会受影响。</p><p>解决方案：</p><ul><li>使用中转或 IPLC 线路，这类线路不走公网国际出口，不受晚高峰拥堵影响</li><li>错峰使用——把需要大带宽的任务（下载文件、更新软件）安排在白天或凌晨</li><li>换节点地区——有时某个出口拥堵但另一个出口还好</li></ul><h3 id="Q：测速能跑满但看-YouTube-还是卡？"><a href="#Q：测速能跑满但看-YouTube-还是卡？" class="headerlink" title="Q：测速能跑满但看 YouTube 还是卡？"></a>Q：测速能跑满但看 YouTube 还是卡？</h3><p>这种情况很常见。测速能跑满说明代理链路本身没问题，但 YouTube 播放体验还涉及其他因素：</p><ul><li><strong>CDN 节点匹配</strong>：YouTube 的内容通过 CDN（内容分发网络）分发，你的代理节点可能没有命中最优的 CDN 节点</li><li><strong>边缘服务器负载</strong>：你命中的那台 YouTube CDN 服务器负载可能很高</li><li><strong>DNS 解析影响 CDN 调度</strong>：DNS 返回的 IP 决定了你连接哪台 CDN 服务器</li></ul><p>解决方案：</p><ul><li>尝试切换不同地区的代理节点（比如从香港换到日本或新加坡）</li><li>确保远端 DNS 解析正常（使用 Fake-IP 模式让代理服务器在远端解析）</li><li>降低画质测试——如果 720p 流畅但 4K 卡，说明带宽是瓶颈</li></ul><h3 id="Q：为什么同一个节点别人快我慢？"><a href="#Q：为什么同一个节点别人快我慢？" class="headerlink" title="Q：为什么同一个节点别人快我慢？"></a>Q：为什么同一个节点别人快我慢？</h3><p>同一个节点不同用户体验不同是完全正常的，因为影响速度的因素远不止节点本身：</p><ul><li><strong>运营商不同</strong>：电信、联通、移动的国际出口质量和路由不同</li><li><strong>地区不同</strong>：不同省份到同一个节点的路由路径不同（同样是电信，广东出口和北京出口走的路不一样）</li><li><strong>本地网络差异</strong>：WiFi vs 有线、路由器性能、是否有其他设备占用带宽</li><li><strong>ISP 策略差异</strong>：某些地区的运营商可能有针对性的 QoS 策略</li></ul><p>排查思路：</p><ol><li>和对方确认对比条件是否一致（同一时段、同一协议）</li><li>用有线连接排除 WiFi 差异</li><li>尝试手机移动数据热点测试，对比不同 ISP</li></ol><h3 id="Q：Hysteria2-比-VLESS-Reality-快吗？"><a href="#Q：Hysteria2-比-VLESS-Reality-快吗？" class="headerlink" title="Q：Hysteria2 比 VLESS + Reality 快吗？"></a>Q：Hysteria2 比 VLESS + Reality 快吗？</h3><p>不能一概而论。两种协议的设计目标和优势场景不同：</p><p><strong>Hysteria2（基于 UDP &#x2F; QUIC）的优势场景</strong>：</p><ul><li>网络丢包率较高的环境——Hysteria2 的 Brutal 拥塞控制不会因为丢包大幅降速</li><li>ISP 对 TCP 限速但对 UDP 相对宽松的网络</li><li>需要快速恢复连接的移动网络环境</li></ul><p><strong>VLESS + Reality（基于 TCP &#x2F; TLS）的优势场景</strong>：</p><ul><li>网络本身质量好、丢包率低的环境</li><li>ISP 对 UDP 进行 QoS 限速的网络</li><li>需要高度伪装（Reality 的 TLS 指纹伪装能力更强）</li></ul><p><strong>结论</strong>：两者互为补充而非替代。最好的策略是两种都配置好，根据实际表现切换使用。如果一种明显快于另一种，说明你的网络环境更适合那种协议。</p><h3 id="Q：路由器上跑代理和电脑上跑有什么区别？"><a href="#Q：路由器上跑代理和电脑上跑有什么区别？" class="headerlink" title="Q：路由器上跑代理和电脑上跑有什么区别？"></a>Q：路由器上跑代理和电脑上跑有什么区别？</h3><p>路由器代理的好处是所有设备自动走代理，不需要每台设备单独配置。但路由器通常 CPU 和内存远不如电脑，性能可能成为瓶颈：</p><ul><li>低端路由器（如 MT7621 芯片）：跑代理后可能只有几十 Mbps 的吞吐量</li><li>中端路由器（如 ARM 双核&#x2F;四核）：通常可以跑到 100-300Mbps</li><li>软路由（x86）：性能充足，不会成为瓶颈</li></ul><p>如果你发现路由器代理明显比电脑端慢，说明路由器性能不够。解决方案是换更强的路由器&#x2F;软路由，或者对速度要求高的设备单独在本机跑代理客户端。</p>]]></content>
      
      
      <categories>
          
          <category> 排障手册 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> 排障 </tag>
            
            <tag> 速度 </tag>
            
            <tag> 优化 </tag>
            
            <tag> 延迟 </tag>
            
            <tag> 带宽 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>Sing-box TUN vs Clash Verge TUN：实际体验对比</title>
      <link href="/posts/singbox-vs-clash-tun/"/>
      <url>/posts/singbox-vs-clash-tun/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：TUN 模式是现代代理客户端的核心功能，能够接管系统的全部网络流量。Sing-box 和 Clash Verge（基于 mihomo）是目前最主流的两大代理平台，它们各自实现了 TUN 功能。本文从性能、兼容性、配置复杂度和生态四个维度进行实际对比，帮助你做出选择。</p></blockquote><h2 id="TUN-模式回顾"><a href="#TUN-模式回顾" class="headerlink" title="TUN 模式回顾"></a>TUN 模式回顾</h2><p>在深入对比之前，有必要快速回顾 TUN 模式的基本原理。如果你已经熟悉相关概念，可以跳过本节。</p><p>TUN（network TUNnel）是操作系统提供的一种虚拟网络设备。代理客户端创建一个 TUN 网卡后，通过修改系统路由表，将所有网络流量引导到这张虚拟网卡。代理客户端从 TUN 设备读取原始 IP 数据包，解析出目标地址后，根据规则决定是直连还是走代理。</p><p>与传统的系统代理（HTTP&#x2F;SOCKS5）相比，TUN 模式的关键优势在于：</p><ul><li><strong>全局覆盖</strong>：不依赖应用程序主动遵守代理设置，任何产生网络流量的程序都会被接管</li><li><strong>协议无关</strong>：可以处理 TCP、UDP 以及 ICMP 等所有类型的流量</li><li><strong>透明代理</strong>：对应用程序完全透明，不需要程序做任何修改</li></ul><p>关于 TUN 模式的更多细节，可以参考 <a href="/posts/tun-vs-system-proxy/">TUN 模式与系统代理的区别</a>。</p><h2 id="两大平台的-TUN-实现"><a href="#两大平台的-TUN-实现" class="headerlink" title="两大平台的 TUN 实现"></a>两大平台的 TUN 实现</h2><h3 id="mihomo（Clash-内核）的-TUN"><a href="#mihomo（Clash-内核）的-TUN" class="headerlink" title="mihomo（Clash 内核）的 TUN"></a>mihomo（Clash 内核）的 TUN</h3><p>Clash Verge 使用的底层内核是 <a href="https://github.com/MetaCubeXorg/mihomo">mihomo</a>（原 Clash.Meta）。mihomo 的 TUN 实现经历了多次迭代，目前提供三种网络栈（stack）选项：</p><table><thead><tr><th>网络栈</th><th>实现方式</th><th>特点</th></tr></thead><tbody><tr><td>gVisor</td><td>用户态 TCP&#x2F;IP 栈</td><td>兼容性最好，性能适中，内存占用稍高</td></tr><tr><td>system</td><td>系统内核栈</td><td>性能最好，但某些场景下兼容性不如 gVisor</td></tr><tr><td>mixed</td><td>混合模式</td><td>TCP 使用 system 栈，UDP 使用 gVisor 栈，兼顾性能和兼容性</td></tr></tbody></table><p>mihomo 的 TUN 实现与其规则系统深度集成。流量从 TUN 设备进入后，会经过完整的规则匹配流程，包括域名嗅探（sniffer）、DNS 解析、规则匹配和策略选择。这个过程对用户来说是透明的，只需要在配置文件中启用 TUN 即可：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">tun:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">stack:</span> <span class="string">mixed</span></span><br><span class="line">  <span class="attr">dns-hijack:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">any:53</span></span><br><span class="line">  <span class="attr">auto-route:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">auto-detect-interface:</span> <span class="literal">true</span></span><br></pre></td></tr></table></figure><p>mihomo TUN 的一个重要特性是<strong>域名嗅探（sniffer）</strong>。由于 TUN 模式工作在网络层，收到的是 IP 数据包而不是域名请求，mihomo 会通过分析 TLS Client Hello 中的 SNI 或 HTTP 请求中的 Host 字段来”嗅探”出真实的目标域名，从而实现基于域名的规则匹配。</p><h3 id="sing-box-的-TUN"><a href="#sing-box-的-TUN" class="headerlink" title="sing-box 的 TUN"></a>sing-box 的 TUN</h3><p><a href="https://github.com/SagerNet/sing-box">sing-box</a> 是由 SagerNet 项目开发的代理平台，以模块化和高性能为设计目标。sing-box 有自己独立的 TUN 实现，同样提供三种网络栈选项：</p><table><thead><tr><th>网络栈</th><th>说明</th></tr></thead><tbody><tr><td>gVisor</td><td>与 mihomo 类似，使用用户态 TCP&#x2F;IP 栈</td></tr><tr><td>system</td><td>使用系统内核的网络栈</td></tr><tr><td>mixed</td><td>TCP 使用 system，UDP 使用 gVisor</td></tr></tbody></table><p>sing-box 的 TUN 配置使用 JSON 格式：</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;inbounds&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;tun&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;tun-in&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;interface_name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;tun0&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;inet4_address&quot;</span><span class="punctuation">:</span> <span class="string">&quot;172.19.0.1/30&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;auto_route&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;stack&quot;</span><span class="punctuation">:</span> <span class="string">&quot;mixed&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;sniff&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;sniff_override_destination&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">false</span></span></span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">]</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><p>sing-box 的 TUN 实现有一些自己的特点：</p><ul><li><strong>独立的网络栈代码</strong>：sing-box 维护了自己的 gVisor 网络栈适配层，而不是直接复用 mihomo 的代码</li><li><strong>更细粒度的嗅探控制</strong>：可以分别配置是否嗅探以及是否覆盖目标地址</li><li><strong>平台特定优化</strong>：在 Android 和 iOS 平台上有针对性的优化</li></ul><h2 id="性能对比"><a href="#性能对比" class="headerlink" title="性能对比"></a>性能对比</h2><p>这是很多用户最关心的问题：两者的 TUN 性能到底有多大差距？</p><h3 id="吞吐量测试"><a href="#吞吐量测试" class="headerlink" title="吞吐量测试"></a>吞吐量测试</h3><p>根据社区多位用户的实测数据（使用 iperf3 进行局域网吞吐量测试），在相同硬件和相同网络栈配置下：</p><table><thead><tr><th>测试条件</th><th>mihomo TUN</th><th>sing-box TUN</th><th>差异</th></tr></thead><tbody><tr><td>TCP 下载（gVisor 栈）</td><td>~850 Mbps</td><td>~920 Mbps</td><td>sing-box 快约 8%</td></tr><tr><td>TCP 下载（system 栈）</td><td>~1.1 Gbps</td><td>~1.2 Gbps</td><td>sing-box 快约 9%</td></tr><tr><td>TCP 下载（mixed 栈）</td><td>~1.0 Gbps</td><td>~1.1 Gbps</td><td>sing-box 快约 10%</td></tr><tr><td>UDP 吞吐</td><td>~600 Mbps</td><td>~650 Mbps</td><td>sing-box 快约 8%</td></tr></tbody></table><p>从数据上看，sing-box 的 TUN 在吞吐量方面确实略优于 mihomo，大约有 <strong>8-10% 的性能优势</strong>。</p><h3 id="延迟测试"><a href="#延迟测试" class="headerlink" title="延迟测试"></a>延迟测试</h3><p>在延迟方面，两者的差异更小：</p><table><thead><tr><th>测试条件</th><th>mihomo TUN</th><th>sing-box TUN</th></tr></thead><tbody><tr><td>TUN 处理延迟（本地）</td><td>~0.3ms</td><td>~0.2ms</td></tr><tr><td>规则匹配延迟</td><td>~0.1ms</td><td>~0.1ms</td></tr><tr><td>总体感知延迟</td><td>基本无差异</td><td>基本无差异</td></tr></tbody></table><h3 id="内存占用"><a href="#内存占用" class="headerlink" title="内存占用"></a>内存占用</h3><table><thead><tr><th>场景</th><th>mihomo</th><th>sing-box</th></tr></thead><tbody><tr><td>空载</td><td>~30 MB</td><td>~25 MB</td></tr><tr><td>500 条活跃连接</td><td>~80 MB</td><td>~65 MB</td></tr><tr><td>2000 条活跃连接</td><td>~180 MB</td><td>~140 MB</td></tr></tbody></table><p>sing-box 在内存占用方面也有一定优势，特别是在高连接数的情况下。</p><h3 id="性能差异的实际意义"><a href="#性能差异的实际意义" class="headerlink" title="性能差异的实际意义"></a>性能差异的实际意义</h3><p>这里需要强调一个重要的结论：<strong>在实际使用中，这些性能差异几乎不可感知</strong>。</p><p>原因很简单——TUN 本身的处理速度远高于实际的网络带宽瓶颈。即便是性能较低的 mihomo TUN，其 gVisor 栈也能提供 850 Mbps 的吞吐量，而大多数用户的代理节点带宽远低于这个数字。通常，你的实际代理速度受限于：</p><ol><li><strong>代理服务器的带宽</strong>（通常 100-500 Mbps）</li><li><strong>国际网络链路质量</strong>（丢包和延迟）</li><li><strong>代理协议的加解密开销</strong></li></ol><p>TUN 本身的性能差异被这些更大的瓶颈完全掩盖了。除非你在本地局域网中使用 TUN 做纯粹的流量转发，否则几乎不会感受到两者的区别。</p><h2 id="兼容性差异"><a href="#兼容性差异" class="headerlink" title="兼容性差异"></a>兼容性差异</h2><p>虽然两者都支持三种网络栈，但在具体的应用场景中，兼容性表现并不完全一致。</p><h3 id="游戏兼容性"><a href="#游戏兼容性" class="headerlink" title="游戏兼容性"></a>游戏兼容性</h3><p>一些在线游戏（特别是使用 UDP 的游戏）对 TUN 模式有较高的敏感度。根据社区反馈：</p><ul><li><strong>原神&#x2F;星铁</strong>：两者都能正常工作，无明显差异</li><li><strong>Valorant</strong>：Valorant 的反作弊系统（Vanguard）对 TUN 模式非常敏感，两者都可能遇到问题，需要特殊配置</li><li><strong>Steam 在线游戏</strong>：大部分情况下两者表现一致</li><li><strong>Switch&#x2F;PS 联机</strong>（通过 TUN 网关）：sing-box 在 UDP 转发方面略有优势</li></ul><h3 id="特殊协议兼容性"><a href="#特殊协议兼容性" class="headerlink" title="特殊协议兼容性"></a>特殊协议兼容性</h3><ul><li><strong>QUIC&#x2F;HTTP3</strong>：两者都支持，但 sing-box 对 QUIC 的处理更精细</li><li><strong>IPv6</strong>：sing-box 的 IPv6 TUN 支持更完善</li><li><strong>WireGuard over TUN</strong>：两者都支持，表现一致</li></ul><h3 id="平台兼容性"><a href="#平台兼容性" class="headerlink" title="平台兼容性"></a>平台兼容性</h3><table><thead><tr><th>平台</th><th>mihomo TUN</th><th>sing-box TUN</th></tr></thead><tbody><tr><td>Windows</td><td>需要 Wintun 驱动</td><td>需要 Wintun 驱动</td></tr><tr><td>macOS</td><td>原生支持</td><td>原生支持</td></tr><tr><td>Linux</td><td>原生支持</td><td>原生支持</td></tr><tr><td>Android</td><td>通过客户端支持</td><td>原生支持</td></tr><tr><td>iOS</td><td>有限支持</td><td>通过 SFI 支持</td></tr></tbody></table><p>在桌面平台上，两者的 TUN 兼容性基本一致。差异主要体现在移动平台上——sing-box 在 Android（SFA）和 iOS（SFI）上有原生的 TUN 实现，而 mihomo 在移动平台主要依赖第三方客户端。</p><h2 id="配置复杂度"><a href="#配置复杂度" class="headerlink" title="配置复杂度"></a>配置复杂度</h2><p>这是两者差异最明显的地方。</p><h3 id="mihomo（YAML）的配置"><a href="#mihomo（YAML）的配置" class="headerlink" title="mihomo（YAML）的配置"></a>mihomo（YAML）的配置</h3><p>mihomo 使用 YAML 格式，配置相对简洁直观：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">tun:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">stack:</span> <span class="string">mixed</span></span><br><span class="line">  <span class="attr">dns-hijack:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">any:53</span></span><br><span class="line">  <span class="attr">auto-route:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">auto-detect-interface:</span> <span class="literal">true</span></span><br><span class="line"></span><br><span class="line"><span class="attr">dns:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">enhanced-mode:</span> <span class="string">fake-ip</span></span><br><span class="line">  <span class="attr">fake-ip-range:</span> <span class="number">198.18</span><span class="number">.0</span><span class="number">.1</span><span class="string">/16</span></span><br><span class="line">  <span class="attr">nameserver:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">https://dns.alidns.com/dns-query</span></span><br><span class="line"></span><br><span class="line"><span class="attr">proxies:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">&quot;HK-Server&quot;</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">trojan</span></span><br><span class="line">    <span class="attr">server:</span> <span class="string">hk.example.com</span></span><br><span class="line">    <span class="attr">port:</span> <span class="number">443</span></span><br><span class="line">    <span class="attr">password:</span> <span class="string">your-password</span></span><br><span class="line"></span><br><span class="line"><span class="attr">rules:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,google.com,HK-Server</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOIP,CN,DIRECT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">MATCH,HK-Server</span></span><br></pre></td></tr></table></figure><p>整个配置在一个 YAML 文件中完成，结构清晰，易于阅读和修改。Clash Verge 的 GUI 还提供了图形化的配置界面，进一步降低了上手门槛。</p><h3 id="sing-box（JSON）的配置"><a href="#sing-box（JSON）的配置" class="headerlink" title="sing-box（JSON）的配置"></a>sing-box（JSON）的配置</h3><p>sing-box 使用 JSON 格式，配置更加详细和冗长：</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;log&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span> <span class="attr">&quot;level&quot;</span><span class="punctuation">:</span> <span class="string">&quot;info&quot;</span> <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;dns&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;servers&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;google&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;address&quot;</span><span class="punctuation">:</span> <span class="string">&quot;tls://8.8.8.8&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;local&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;address&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://dns.alidns.com/dns-query&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;detour&quot;</span><span class="punctuation">:</span> <span class="string">&quot;direct&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;rules&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;geosite&quot;</span><span class="punctuation">:</span> <span class="string">&quot;cn&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;server&quot;</span><span class="punctuation">:</span> <span class="string">&quot;local&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">]</span></span><br><span class="line">  <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;inbounds&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;tun&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;tun-in&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;inet4_address&quot;</span><span class="punctuation">:</span> <span class="string">&quot;172.19.0.1/30&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;auto_route&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;stack&quot;</span><span class="punctuation">:</span> <span class="string">&quot;mixed&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;sniff&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span></span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;outbounds&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;trojan&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;hk-server&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;server&quot;</span><span class="punctuation">:</span> <span class="string">&quot;hk.example.com&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;server_port&quot;</span><span class="punctuation">:</span> <span class="number">443</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;password&quot;</span><span class="punctuation">:</span> <span class="string">&quot;your-password&quot;</span></span><br><span class="line">    <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;direct&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;direct&quot;</span></span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;route&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;rules&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;geosite&quot;</span><span class="punctuation">:</span> <span class="string">&quot;cn&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;geoip&quot;</span><span class="punctuation">:</span> <span class="string">&quot;cn&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;outbound&quot;</span><span class="punctuation">:</span> <span class="string">&quot;direct&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;final&quot;</span><span class="punctuation">:</span> <span class="string">&quot;hk-server&quot;</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><p>可以看到，实现相同的功能，sing-box 的配置文件长度大约是 mihomo 的 <strong>2-3 倍</strong>。JSON 格式的冗长是一个客观缺点——没有注释支持（虽然 sing-box 扩展了 JSON 允许注释），不能像 YAML 那样通过缩进来表达层次关系，阅读体验较差。</p><h3 id="配置复杂度对比"><a href="#配置复杂度对比" class="headerlink" title="配置复杂度对比"></a>配置复杂度对比</h3><table><thead><tr><th>维度</th><th>mihomo (YAML)</th><th>sing-box (JSON)</th></tr></thead><tbody><tr><td>文件格式</td><td>YAML（简洁）</td><td>JSON（冗长）</td></tr><tr><td>注释支持</td><td>原生支持</td><td>需要特殊处理</td></tr><tr><td>配置模板</td><td>社区海量模板</td><td>模板相对较少</td></tr><tr><td>GUI 支持</td><td>Clash Verge 提供完整 GUI</td><td>GUI 客户端较少</td></tr><tr><td>学习成本</td><td>较低</td><td>较高</td></tr><tr><td>文档完整度</td><td>中等</td><td>良好</td></tr></tbody></table><h2 id="生态差异"><a href="#生态差异" class="headerlink" title="生态差异"></a>生态差异</h2><h3 id="规则资源"><a href="#规则资源" class="headerlink" title="规则资源"></a>规则资源</h3><p>Clash&#x2F;mihomo 的规则生态是目前最丰富的。社区维护了大量的规则集和配置模板：</p><ul><li><strong><a href="https://github.com/Loyalsoldier/clash-rules">Loyalsoldier&#x2F;clash-rules</a></strong>：高质量的规则集合</li><li><strong><a href="https://github.com/blackmatrix7/ios_rule_script">blackmatrix7&#x2F;ios_rule_script</a></strong>：覆盖面极广的规则项目</li><li>各类 Clash 配置生成工具</li></ul><p>sing-box 的规则资源相对较少，但正在快速增长。sing-box 1.8+ 引入了 rule-set 功能，使得规则的分享和复用变得更加方便。</p><h3 id="客户端生态"><a href="#客户端生态" class="headerlink" title="客户端生态"></a>客户端生态</h3><table><thead><tr><th>平台</th><th>mihomo 客户端</th><th>sing-box 客户端</th></tr></thead><tbody><tr><td>Windows</td><td>Clash Verge, Clash Nyanpasu</td><td>sing-box GUI (有限)</td></tr><tr><td>macOS</td><td>Clash Verge, Clash Nyanpasu</td><td>SFM</td></tr><tr><td>Linux</td><td>Clash Verge</td><td>sing-box CLI</td></tr><tr><td>Android</td><td>Clash Meta for Android</td><td>SFA (sing-box for Android)</td></tr><tr><td>iOS</td><td>Stash (付费)</td><td>SFI (sing-box for iOS)</td></tr></tbody></table><p>Clash 系列的客户端在桌面平台上有明显的优势——Clash Verge 提供了成熟的图形界面、配置管理和快捷操作。sing-box 在移动平台（特别是 Android）上的客户端体验不错，但桌面端的 GUI 支持仍然较弱。</p><h3 id="订阅格式"><a href="#订阅格式" class="headerlink" title="订阅格式"></a>订阅格式</h3><p>大多数机场默认提供 Clash（YAML）格式的订阅链接，而 sing-box（JSON）格式的订阅支持在逐步增加。如果你的机场不提供 sing-box 格式的订阅，可以使用订阅转换工具（如 <a href="https://github.com/tindy2013/subconverter">subconverter</a>）进行格式转换。</p><h2 id="实际使用建议"><a href="#实际使用建议" class="headerlink" title="实际使用建议"></a>实际使用建议</h2><p>综合以上对比，给出以下建议：</p><h3 id="选择-Clash-Verge（mihomo-TUN）如果你："><a href="#选择-Clash-Verge（mihomo-TUN）如果你：" class="headerlink" title="选择 Clash Verge（mihomo TUN）如果你："></a>选择 Clash Verge（mihomo TUN）如果你：</h3><ul><li>刚接触代理，需要友好的图形界面</li><li>使用 Windows 或 macOS 桌面平台</li><li>需要大量现成的规则和配置模板</li><li>机场提供 Clash 格式订阅</li><li>不想花时间在配置上</li></ul><h3 id="选择-sing-box-TUN-如果你："><a href="#选择-sing-box-TUN-如果你：" class="headerlink" title="选择 sing-box TUN 如果你："></a>选择 sing-box TUN 如果你：</h3><ul><li>追求极致的性能和资源占用</li><li>主要在 Android 平台使用</li><li>熟悉 JSON 配置且不介意手写配置</li><li>需要 sing-box 特有的功能（如更细粒度的嗅探控制）</li><li>已经有 sing-box 格式的配置</li></ul><h3 id="核心结论"><a href="#核心结论" class="headerlink" title="核心结论"></a>核心结论</h3><p><strong>选择应该基于客户端偏好，而不是 TUN 实现本身。</strong> TUN 的性能差异在实际使用中几乎不可感知，真正影响你日常体验的是客户端的 GUI 界面、配置方便程度和规则生态。对大多数用户来说，Clash Verge 仍然是综合体验最好的选择。</p><h2 id="常见问题（FAQ）"><a href="#常见问题（FAQ）" class="headerlink" title="常见问题（FAQ）"></a>常见问题（FAQ）</h2><h3 id="Q1：sing-box-TUN-真的比-Clash-TUN-快吗？"><a href="#Q1：sing-box-TUN-真的比-Clash-TUN-快吗？" class="headerlink" title="Q1：sing-box TUN 真的比 Clash TUN 快吗？"></a>Q1：sing-box TUN 真的比 Clash TUN 快吗？</h3><p>在纯粹的 TUN 吞吐量测试中，sing-box 确实快 8-10%。但这个差异在实际的代理使用场景中几乎不可感知，因为瓶颈在于代理服务器和国际链路，不在本地 TUN 层。</p><h3 id="Q2：两者的-TUN-可以同时开启吗？"><a href="#Q2：两者的-TUN-可以同时开启吗？" class="headerlink" title="Q2：两者的 TUN 可以同时开启吗？"></a>Q2：两者的 TUN 可以同时开启吗？</h3><p>不可以。同一台设备上只能有一个程序创建 TUN 设备并接管路由。如果两个代理同时尝试创建 TUN，会产生冲突。</p><h3 id="Q3：TUN-模式下的-DNS-处理有什么区别？"><a href="#Q3：TUN-模式下的-DNS-处理有什么区别？" class="headerlink" title="Q3：TUN 模式下的 DNS 处理有什么区别？"></a>Q3：TUN 模式下的 DNS 处理有什么区别？</h3><p>两者都支持 Fake-IP 和 Real-IP（redir-host）两种 DNS 模式。mihomo 的 Fake-IP 实现更成熟（使用时间更长），sing-box 的 DNS 模块更加灵活。对于大多数用户来说，两者的 DNS 处理效果没有明显区别。</p><h3 id="Q4：哪个对游戏更友好？"><a href="#Q4：哪个对游戏更友好？" class="headerlink" title="Q4：哪个对游戏更友好？"></a>Q4：哪个对游戏更友好？</h3><p>两者差异不大。如果你遇到特定游戏在某一平台的 TUN 模式下有问题，可以尝试切换网络栈（从 gVisor 换成 system 或 mixed），通常能解决兼容性问题。</p><h3 id="Q5：从-Clash-Verge-迁移到-sing-box-困难吗？"><a href="#Q5：从-Clash-Verge-迁移到-sing-box-困难吗？" class="headerlink" title="Q5：从 Clash Verge 迁移到 sing-box 困难吗？"></a>Q5：从 Clash Verge 迁移到 sing-box 困难吗？</h3><p>需要将整个配置从 YAML 转换为 JSON 格式，规则语法也有差异。有一些社区工具可以辅助转换，但通常需要手动调整。如果你对现有的 Clash Verge 配置满意，没有特别的理由去迁移。</p><h3 id="Q6：未来的趋势是什么？"><a href="#Q6：未来的趋势是什么？" class="headerlink" title="Q6：未来的趋势是什么？"></a>Q6：未来的趋势是什么？</h3><p>sing-box 的开发更加活跃，架构设计也更现代化。从长远来看，sing-box 可能会逐步成为更主流的选择。但 mihomo 社区庞大，短期内不会消亡。选择任一平台都不会”过时”。</p><h2 id="外部链接"><a href="#外部链接" class="headerlink" title="外部链接"></a>外部链接</h2><ul><li><a href="https://github.com/MetaCubeXorg/mihomo">mihomo GitHub 仓库</a></li><li><a href="https://github.com/SagerNet/sing-box">sing-box GitHub 仓库</a></li><li><a href="https://sing-box.sagernet.org/">sing-box 官方文档</a></li><li><a href="https://github.com/clash-verge-rev/clash-verge-rev">Clash Verge 下载</a></li><li><a href="/posts/tun-vs-system-proxy/">TUN 模式与系统代理的区别</a></li></ul><hr><p><em>TUN 实现的差异不应该成为你选择代理平台的决定性因素。客户端的易用性、规则生态和社区支持才是日常体验的关键。</em></p>]]></content>
      
      
      <categories>
          
          <category> 代理软件 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> Clash </tag>
            
            <tag> Sing-box </tag>
            
            <tag> 对比 </tag>
            
            <tag> TUN </tag>
            
            <tag> 性能 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>V2Ray、Xray、Clash、Sing-box……我该用哪个？</title>
      <link href="/posts/software-overview/"/>
      <url>/posts/software-overview/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：代理软件种类繁多，新手很容易在各种名词之间迷失。本文从”内核”和”客户端”这两个最基本的概念入手，梳理当前主流的代理内核（v2ray-core、xray-core、sing-box、mihomo）和各平台推荐客户端，用对比表格和决策树帮助你快速找到最适合自己的方案。不需要任何技术基础，读完就能做出选择。</p></blockquote><hr><h2 id="先分清两个概念：内核和客户端"><a href="#先分清两个概念：内核和客户端" class="headerlink" title="先分清两个概念：内核和客户端"></a>先分清两个概念：内核和客户端</h2><p>在开始比较之前，你需要理解代理软件世界里最重要的一组概念：<strong>内核</strong>和<strong>客户端</strong>。混淆这两者是新手最常犯的错误，也是各种讨论里产生误解的根源。</p><h3 id="内核（Core）"><a href="#内核（Core）" class="headerlink" title="内核（Core）"></a>内核（Core）</h3><p>内核是代理软件的<strong>核心引擎</strong>，负责所有底层工作：建立代理连接、加密解密数据、转发网络流量、执行路由规则。它通常是一个没有图形界面的命令行程序，普通用户不会直接和它打交道。</p><p>目前主流的内核包括：</p><ul><li><strong>v2ray-core</strong> —— V2Ray 项目的核心</li><li><strong>xray-core</strong> —— 从 v2ray-core 分叉而来，功能更多</li><li><strong><a href="https://github.com/SagerNet/sing-box">sing-box</a></strong> —— 全新架构，从零开发</li><li><strong><a href="https://github.com/MetaCubeX/mihomo">mihomo</a></strong>（Clash Meta 内核）—— Clash 生态的核心</li></ul><h3 id="客户端（Client）"><a href="#客户端（Client）" class="headerlink" title="客户端（Client）"></a>客户端（Client）</h3><p>客户端是你实际打开、操作的那个应用程序。它把内核”包装”起来，提供图形界面、配置管理、节点选择、日志查看等用户友好的功能。你在手机或电脑上看到的那个带图标的 App，就是客户端。</p><h3 id="它们的关系"><a href="#它们的关系" class="headerlink" title="它们的关系"></a>它们的关系</h3><p>用汽车来类比：</p><ul><li><strong>内核 &#x3D; 发动机</strong>。决定了动力性能、油耗、能跑多快。</li><li><strong>客户端 &#x3D; 整辆车</strong>。包括方向盘、仪表盘、座椅、空调——你作为驾驶员接触的一切。</li></ul><p>关键要点：</p><ul><li><strong>一个内核可以驱动多个不同的客户端</strong>。比如 xray-core 被 v2rayN、v2rayNG、NekoBox 等多个客户端使用。</li><li><strong>一个客户端在同一时间只使用一个内核</strong>。但有些客户端（如 v2rayN）支持在设置中切换不同的内核。</li><li><strong>客户端决定了你的使用体验</strong>，但<strong>内核决定了你能使用哪些协议和功能</strong>。</li></ul><p>理解了这一点，你就不会再问出”V2Ray 和 Clash Verge 哪个好”这样的问题——前者是内核（的名字），后者是客户端，它们不在同一个层面上。</p><hr><h2 id="主流内核一览"><a href="#主流内核一览" class="headerlink" title="主流内核一览"></a>主流内核一览</h2><h3 id="v2ray-core"><a href="#v2ray-core" class="headerlink" title="v2ray-core"></a>v2ray-core</h3><table><thead><tr><th>属性</th><th>说明</th></tr></thead><tbody><tr><td>开发者</td><td>V2Fly 社区</td></tr><tr><td>定位</td><td>第一代多协议代理内核</td></tr><tr><td>支持协议</td><td>VMess、VLESS、Trojan、Shadowsocks</td></tr><tr><td>当前状态</td><td>仍在维护，但开发活跃度较低</td></tr></tbody></table><p>v2ray-core 是整个”V2Ray 生态”的起源。它首创了 VMess 协议，并通过灵活的配置系统支持多种传输方式（WebSocket、gRPC、HTTP&#x2F;2 等）。在相当长一段时间里，v2ray-core 是代理领域的事实标准。</p><p>但随着 xray-core 的出现和快速发展，v2ray-core 的更新节奏明显放缓。新功能和新协议（如 XTLS、Reality、XHTTP）都是在 Xray 生态中首先实现的。对于新用户来说，v2ray-core 的意义更多是历史性的——你需要知道它的存在，但大多数情况下不需要直接使用它。</p><h3 id="xray-core"><a href="#xray-core" class="headerlink" title="xray-core"></a>xray-core</h3><table><thead><tr><th>属性</th><th>说明</th></tr></thead><tbody><tr><td>开发者</td><td>XTLS 团队</td></tr><tr><td>定位</td><td>v2ray-core 的增强分叉，目前最主流的代理内核之一</td></tr><tr><td>支持协议</td><td>VMess、VLESS、Trojan、Shadowsocks、Wireguard 等</td></tr><tr><td>独有特性</td><td>VLESS 协议、Reality、XTLS 流控、XHTTP</td></tr><tr><td>当前状态</td><td>活跃开发，迭代频繁</td></tr></tbody></table><p>xray-core 从 v2ray-core 分叉而来，保持了完全的向下兼容，同时引入了大量创新：</p><ul><li><strong>VLESS 协议</strong>：比 VMess 更轻量，去掉了冗余的加密层（当外层已有 TLS 时），降低性能开销。</li><li><strong>Reality</strong>：不需要域名和证书就能实现 TLS 伪装，大幅降低部署门槛的同时提供极强的抗检测能力。</li><li><strong>XTLS</strong>：通过减少不必要的重复加密来提升传输效率。</li><li><strong>XHTTP</strong>：最新的传输方式，通过模拟标准 HTTP 请求行为来进一步增强隐蔽性。</li></ul><p>如果你选择的客户端基于 xray-core（如 v2rayN、v2rayNG），你就自动获得了这些最新特性的支持。</p><h3 id="sing-box"><a href="#sing-box" class="headerlink" title="sing-box"></a>sing-box</h3><table><thead><tr><th>属性</th><th>说明</th></tr></thead><tbody><tr><td>开发者</td><td>SagerNet 开发者（nekohasekai）</td></tr><tr><td>定位</td><td>新一代通用代理内核</td></tr><tr><td>支持协议</td><td>几乎所有主流协议（VLESS、VMess、Trojan、Shadowsocks、Hysteria2、TUIC 等）</td></tr><tr><td>独有特性</td><td>现代化架构、规则集系统、多平台原生支持</td></tr><tr><td>当前状态</td><td>高速发展中，社区增长迅速</td></tr></tbody></table><p>sing-box 没有基于任何现有代码，而是完全从零开始用 Go 语言重新构建。这带来了几个重要优势：</p><ul><li><strong>代码架构更现代、更干净</strong>，没有历史包袱，方便后续扩展和维护。</li><li><strong>协议覆盖范围极广</strong>，几乎支持市面上所有主流代理协议。</li><li><strong>跨平台能力强</strong>，同一套内核可以在 Windows、macOS、Linux、Android、iOS 上运行。</li><li><strong>配置格式统一</strong>，使用 JSON 格式，结构清晰。</li></ul><p>sing-box 正在成为越来越多客户端的底层引擎选择，有逐步取代旧内核的趋势。部分观点认为它将成为下一个”事实标准”内核。</p><h3 id="mihomo（Clash-Meta-内核）"><a href="#mihomo（Clash-Meta-内核）" class="headerlink" title="mihomo（Clash Meta 内核）"></a>mihomo（Clash Meta 内核）</h3><table><thead><tr><th>属性</th><th>说明</th></tr></thead><tbody><tr><td>开发者</td><td>MetaCubeX 社区</td></tr><tr><td>定位</td><td>规则驱动的代理内核，Clash 生态的延续</td></tr><tr><td>支持协议</td><td>VMess、VLESS、Trojan、Shadowsocks、Hysteria2、TUIC、WireGuard 等</td></tr><tr><td>独有特性</td><td>强大的规则分流系统、proxy-provider、rule-provider</td></tr><tr><td>当前状态</td><td>活跃维护，Clash 生态的核心引擎</td></tr></tbody></table><p>先说背景：最初的 Clash Premium 内核由原作者开发，于 2023 年 11 月突然删库停更。但 Clash 的社区分叉——Clash Meta——早在停更之前就已经独立发展，功能上远超原版。后来 Clash Meta 更名为 <strong>mihomo</strong>，这就是当前所有 Clash 系客户端实际使用的内核。</p><p>mihomo 最核心的优势在于它的<strong>规则分流体系</strong>：</p><ul><li><strong>rule-provider</strong>：可以引用外部规则集文件，实现按域名、IP、进程等维度的精细流量分流。</li><li><strong>proxy-group</strong>：支持自动选择、负载均衡、URL 测速等节点组策略。</li><li><strong>高级路由能力</strong>：支持 SCRIPT 规则、逻辑规则组合，能实现非常复杂的分流逻辑。</li></ul><p>如果你的核心需求是”让不同的网站走不同的节点，国内流量直连，国外流量走代理”，mihomo 的规则系统是目前最成熟、最灵活的方案。</p><hr><h2 id="四大内核横向对比"><a href="#四大内核横向对比" class="headerlink" title="四大内核横向对比"></a>四大内核横向对比</h2><table><thead><tr><th>维度</th><th>v2ray-core</th><th>xray-core</th><th>sing-box</th><th>mihomo</th></tr></thead><tbody><tr><td>协议支持</td><td>较全</td><td>最全（含独有协议）</td><td>几乎全部</td><td>全面</td></tr><tr><td>独有特性</td><td>无</td><td>Reality &#x2F; XTLS &#x2F; XHTTP</td><td>现代架构</td><td>规则分流体系</td></tr><tr><td>配置复杂度</td><td>中等</td><td>中等</td><td>中等</td><td>较低（YAML 格式）</td></tr><tr><td>更新频率</td><td>低</td><td>高</td><td>高</td><td>高</td></tr><tr><td>社区规模</td><td>中等</td><td>大</td><td>快速增长</td><td>大</td></tr><tr><td>最大优势</td><td>历史生态</td><td>协议创新</td><td>架构先进</td><td>分流规则</td></tr><tr><td>推荐度</td><td>⭐⭐</td><td>⭐⭐⭐⭐</td><td>⭐⭐⭐⭐</td><td>⭐⭐⭐⭐⭐</td></tr></tbody></table><blockquote><p>推荐度说明：这里的推荐度是面向普通用户的综合评价。mihomo 获得最高分是因为大多数用户的核心需求是”用得舒服、分流好用”，而非”协议支持最新”。</p></blockquote><hr><h2 id="各平台推荐客户端"><a href="#各平台推荐客户端" class="headerlink" title="各平台推荐客户端"></a>各平台推荐客户端</h2><p>选择客户端时需要考虑三个因素：你的操作系统、你需要的内核、以及你对界面和功能的偏好。</p><h3 id="Windows"><a href="#Windows" class="headerlink" title="Windows"></a>Windows</h3><table><thead><tr><th>客户端</th><th>内核</th><th>特点</th><th>推荐度</th></tr></thead><tbody><tr><td><a href="https://github.com/clash-verge-rev/clash-verge-rev">Clash Verge Rev</a></td><td>mihomo</td><td>规则分流强大，GUI 美观，跨平台一致体验</td><td>⭐⭐⭐⭐⭐</td></tr><tr><td><a href="https://github.com/2dust/v2rayN">v2rayN</a></td><td>xray-core &#x2F; sing-box</td><td>功能全面，支持切换内核，协议支持最广</td><td>⭐⭐⭐⭐</td></tr><tr><td>NekoBox</td><td>sing-box</td><td>轻量简洁，sing-box 原生生态</td><td>⭐⭐⭐</td></tr></tbody></table><p><strong>大多数 Windows 用户的最佳选择是 Clash Verge Rev。</strong> 它安装简单，界面清晰，导入机场订阅后开箱即用，规则分流功能开箱即有。如果你需要使用 Reality、XHTTP 等最新协议特性，或者你更喜欢手动配置节点，v2rayN 是更好的选择。</p><p><img src="/images/inline/clash-verge-ui.webp" alt="Clash Verge Rev 界面"><br><em>图片来源：<a href="https://clashverge.net/">Clash Verge</a></em></p><h3 id="macOS"><a href="#macOS" class="headerlink" title="macOS"></a>macOS</h3><table><thead><tr><th>客户端</th><th>内核</th><th>特点</th><th>推荐度</th></tr></thead><tbody><tr><td>Clash Verge Rev</td><td>mihomo</td><td>跨平台体验一致，与 Windows 版功能相同</td><td>⭐⭐⭐⭐⭐</td></tr><tr><td>Surge</td><td>自研内核</td><td>macOS 原生体验最佳，功能极其强大，但需付费</td><td>⭐⭐⭐⭐</td></tr></tbody></table><p>Clash Verge Rev 在 macOS 上的表现与 Windows 版完全一致，是多数用户的首选。Surge 则是 macOS&#x2F;iOS 平台上公认体验最好的代理客户端，拥有最优秀的原生 UI 设计和最完善的调试工具，但其 macOS 版本价格不低。如果你追求极致的使用体验且不介意付费，Surge 值得考虑。</p><h3 id="iOS"><a href="#iOS" class="headerlink" title="iOS"></a>iOS</h3><table><thead><tr><th>客户端</th><th>内核</th><th>特点</th><th>推荐度</th></tr></thead><tbody><tr><td>Shadowrocket</td><td>自研内核</td><td>价格便宜（$2.99），功能完善，性价比极高</td><td>⭐⭐⭐⭐⭐</td></tr><tr><td><a href="https://nssurge.com/">Surge</a></td><td>自研内核</td><td>功能最强大，调试能力最好，价格最贵（$49.99）</td><td>⭐⭐⭐⭐</td></tr><tr><td><a href="https://apps.apple.com/app/stash-rule-based-proxy/id1596063349">Stash</a></td><td>mihomo</td><td>Clash 规则生态，支持 rule-provider</td><td>⭐⭐⭐⭐</td></tr><tr><td><a href="https://apps.apple.com/app/loon/id1373567447">Loon</a></td><td>自研内核</td><td>功能介于 Shadowrocket 和 Surge 之间</td><td>⭐⭐⭐</td></tr></tbody></table><p>iOS 平台的客户端几乎全部是付费应用（因 App Store 政策限制）。<strong>Shadowrocket 是性价比之王</strong>——仅需 2.99 美元，支持主流协议，配置简单，满足绝大多数用户的日常需求。Surge 适合对代理有极高要求的高级用户，它的网络调试、MitM 抓包、脚本引擎等功能远超其他客户端，但 49.99 美元的价格也远超其他选择。Stash 适合习惯了 Clash 规则体系、希望在 iOS 上使用相同规则配置的用户。</p><blockquote><p>提示：iOS 客户端需要非中国大陆地区的 Apple ID 才能购买和下载。</p></blockquote><h3 id="Android"><a href="#Android" class="headerlink" title="Android"></a>Android</h3><table><thead><tr><th>客户端</th><th>内核</th><th>特点</th><th>推荐度</th></tr></thead><tbody><tr><td><a href="https://github.com/MetaCubeX/ClashMetaForAndroid">Clash Meta for Android</a></td><td>mihomo</td><td>Clash 生态，规则分流强大</td><td>⭐⭐⭐⭐⭐</td></tr><tr><td><a href="https://github.com/2dust/v2rayNG">v2rayNG</a></td><td>xray-core</td><td>轻量稳定，支持最新协议</td><td>⭐⭐⭐⭐</td></tr><tr><td><a href="https://github.com/MatsuriDayo/NekoBoxForAndroid">NekoBox</a></td><td>sing-box</td><td>sing-box 生态，功能丰富</td><td>⭐⭐⭐</td></tr><tr><td><a href="https://github.com/getsurfboard/surfboard/releases">Surfboard</a></td><td>自研内核</td><td>兼容 Surge 规则格式</td><td>⭐⭐⭐</td></tr></tbody></table><p>Android 平台首推 <strong>Clash Meta for Android</strong>（也叫 CMFA），它与 Clash Verge Rev 使用相同的 mihomo 内核，规则配置可以通用。v2rayNG 更加轻量，适合不需要复杂分流规则、只想简单连接代理的用户。</p><h3 id="Linux"><a href="#Linux" class="headerlink" title="Linux"></a>Linux</h3><p>Linux 用户通常有一定的技术背景，可根据需求选择：</p><ul><li><strong>Clash Verge Rev</strong>：有 GUI 需求时的最佳选择，与 Windows&#x2F;macOS 版体验一致。</li><li><strong>sing-box</strong>：命令行运行，适合服务器环境或喜欢终端操作的用户。</li><li><strong>mihomo</strong>：命令行运行，适合需要 Clash 规则分流的场景，常用于路由器和服务器。</li></ul><h3 id="路由器（OpenWrt）"><a href="#路由器（OpenWrt）" class="headerlink" title="路由器（OpenWrt）"></a>路由器（OpenWrt）</h3><table><thead><tr><th>方案</th><th>内核</th><th>特点</th><th>推荐度</th></tr></thead><tbody><tr><td><a href="https://github.com/vernesong/OpenClash">OpenClash</a></td><td>mihomo</td><td>最成熟的路由器方案，Web UI 完善</td><td>⭐⭐⭐⭐⭐</td></tr><tr><td>PassWall &#x2F; PassWall2</td><td>xray-core</td><td>功能强大，协议支持全面</td><td>⭐⭐⭐⭐</td></tr><tr><td>sing-box</td><td>sing-box</td><td>轻量，适合性能有限的路由器</td><td>⭐⭐⭐</td></tr></tbody></table><p>在路由器上部署代理的好处是全家设备无需单独配置，连上 WiFi 就自动走代理。<strong>OpenClash</strong> 是目前使用最广泛的路由器代理方案，提供完善的 Web 管理界面，基于 mihomo 内核，支持完整的 Clash 规则分流。</p><hr><h2 id="怎么选？一个决策树"><a href="#怎么选？一个决策树" class="headerlink" title="怎么选？一个决策树"></a>怎么选？一个决策树</h2><p>如果上面的信息太多，用这个简化的决策树快速做出选择：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">你用的什么平台？</span><br><span class="line">│</span><br><span class="line">├── iOS</span><br><span class="line">│   ├── 预算充足，追求极致 → Surge</span><br><span class="line">│   └── 性价比优先（大多数人）→ Shadowrocket</span><br><span class="line">│</span><br><span class="line">├── Android</span><br><span class="line">│   ├── 需要规则分流 → Clash Meta for Android</span><br><span class="line">│   └── 简单好用就行 → v2rayNG</span><br><span class="line">│</span><br><span class="line">├── Windows / macOS / Linux</span><br><span class="line">│   ├── 大多数用户 → Clash Verge Rev</span><br><span class="line">│   └── 需要最新协议特性 → v2rayN（Windows）</span><br><span class="line">│</span><br><span class="line">└── 路由器（OpenWrt）→ OpenClash</span><br></pre></td></tr></table></figure><p><strong>一句话总结：如果你不想深入研究，桌面平台选 Clash Verge Rev，iOS 选 Shadowrocket，Android 选 Clash Meta for Android。</strong> 这三个选择覆盖了 90% 用户的需求。</p><hr><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="Clash-不是停更了吗？还能用吗？"><a href="#Clash-不是停更了吗？还能用吗？" class="headerlink" title="Clash 不是停更了吗？还能用吗？"></a>Clash 不是停更了吗？还能用吗？</h3><p>这是一个非常常见的误解。2023 年 11 月，原版 Clash Premium 的作者确实删除了代码库并停止开发。但这影响的只是原版内核。社区分叉 Clash Meta（现已更名为 mihomo）在此之前就已经独立发展，功能上远远超过了原版，并且一直保持活跃更新。</p><p>目前所有主流的 Clash 系客户端——Clash Verge Rev、Clash Meta for Android、OpenClash、Stash——使用的都是 mihomo 内核，而非已停更的原版。<strong>Clash 生态不仅没有死，反而比原版时期更加活跃。</strong></p><h3 id="选-Clash-系还是-V2Ray-系？"><a href="#选-Clash-系还是-V2Ray-系？" class="headerlink" title="选 Clash 系还是 V2Ray 系？"></a>选 Clash 系还是 V2Ray 系？</h3><p>这取决于你的核心需求：</p><ul><li><p><strong>Clash 系（mihomo 内核）</strong> 的优势在于规则分流。如果你需要精细地控制”哪些网站走代理、哪些直连、哪些走特定节点”，Clash 系的 rule-provider 和 proxy-group 体系是最成熟的解决方案。适合使用机场订阅的用户。</p></li><li><p><strong>V2Ray 系（xray-core 内核）</strong> 的优势在于协议支持全面和配置灵活。如果你自建节点，需要使用 Reality、XHTTP 等最新协议特性，或者需要对连接参数做精细调整，V2Ray 系客户端提供了更多的自由度。</p></li></ul><p><strong>对于大多数使用机场订阅的普通用户，推荐 Clash 系。</strong> 它的规则分流功能让你不用操心哪些流量该走代理，配置好后基本不需要手动干预。</p><h3 id="免费客户端和付费客户端有什么区别？"><a href="#免费客户端和付费客户端有什么区别？" class="headerlink" title="免费客户端和付费客户端有什么区别？"></a>免费客户端和付费客户端有什么区别？</h3><p>桌面端（Windows、macOS、Linux）的客户端<strong>大多数是免费且开源的</strong>。Clash Verge Rev、v2rayN、v2rayNG、NekoBox、sing-box 都是免费的开源项目。</p><p>付费客户端主要集中在 iOS 平台（由于 App Store 的分发机制）。付费不一定意味着更好——Shadowrocket 只需 2.99 美元但功能非常完善，Surge 要 49.99 美元但提供了许多普通用户用不到的高级功能。对于绝大多数用户来说，Shadowrocket 的性价比远高于 Surge。</p><p>macOS 上的 Surge 也是付费软件，如果你不追求极致的原生体验，免费的 Clash Verge Rev 完全可以满足需求。</p><h3 id="我需要同时安装多个客户端吗？"><a href="#我需要同时安装多个客户端吗？" class="headerlink" title="我需要同时安装多个客户端吗？"></a>我需要同时安装多个客户端吗？</h3><p>通常不需要。选择一个适合你平台和需求的客户端，坚持使用即可。同一台设备上运行多个代理客户端反而容易产生冲突（端口占用、TUN 模式冲突等）。</p><p>不过，备一个替代客户端是有好处的。如果你的主力客户端出现问题（崩溃、订阅无法更新、某个节点连不上），可以用备用客户端快速排除是客户端问题还是节点&#x2F;网络问题。比如平时用 Clash Verge Rev，同时装一个 v2rayN 作为备用，二者不同时运行即可。</p><h3 id="我应该选哪个内核？"><a href="#我应该选哪个内核？" class="headerlink" title="我应该选哪个内核？"></a>我应该选哪个内核？</h3><p>作为普通用户，你其实不需要直接选择内核——<strong>你选择客户端，客户端自带内核</strong>。当你安装 Clash Verge Rev 时，mihomo 内核就已经包含在内了；当你安装 v2rayNG 时，xray-core 也已经内置了。</p><p>只有在以下情况下你需要关心内核的选择：</p><ul><li>你在服务器或路由器上以命令行方式运行代理</li><li>你需要特定内核的独有功能（如 xray-core 的 Reality）</li><li>你的客户端支持切换内核（如 v2rayN 可以切换到 sing-box 内核）</li></ul><hr><h2 id="写在最后"><a href="#写在最后" class="headerlink" title="写在最后"></a>写在最后</h2><p>代理软件的选择不需要过度纠结。对于大多数用户来说，核心需求无非是：能连上、速度快、分流准。满足这三点的客户端都是好客户端。</p><p>如果你是完全的新手，按照本文的推荐选一个客户端安装好，然后去看 <a href="./first-time-setup.md">第一次使用代理：从零开始的配置指南</a> 完成初始配置即可。更深入的技术细节（协议选择、规则配置、DNS 优化）可以等你用熟了之后再慢慢了解。</p><p><strong>先跑起来，再慢慢优化。</strong></p>]]></content>
      
      
      <categories>
          
          <category> 入门指南 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> Clash </tag>
            
            <tag> 客户端 </tag>
            
            <tag> V2Ray </tag>
            
            <tag> Xray </tag>
            
            <tag> Sing-box </tag>
            
            <tag> 软件推荐 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>Surge 使用指南（iOS/macOS）</title>
      <link href="/posts/surge-guide/"/>
      <url>/posts/surge-guide/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：Surge 并不只是一个代理工具——它是 iOS 和 macOS 平台上功能最全面的网络调试与代理平台。本文从定位、定价、核心功能到适用人群，全面介绍 Surge 的真实面貌，帮助你判断它是否值得购买。</p></blockquote><h2 id="Surge-到底是什么"><a href="#Surge-到底是什么" class="headerlink" title="Surge 到底是什么"></a>Surge 到底是什么</h2><p>很多人第一次听说 Surge，是把它当作一个”翻墙工具”。这种理解并没有完全错，但远远不够准确。Surge 的开发者 Yachen Liu 从一开始就把它定位为一个<strong>网络调试工具</strong>（Network Debugging Tool），代理只是它众多功能中的一项。</p><p>更准确地说，Surge 是一个<strong>可编程的网络中间件</strong>。它位于设备的网络层和应用层之间，能够拦截、检查、修改和转发所有网络流量。你可以把它想象成一个运行在本地的迷你网关，所有网络请求都必须经过它的审查和处理。</p><p>这种设计赋予了 Surge 远超普通代理工具的能力：</p><ul><li><strong>代理与规则</strong>：根据域名、IP、进程名等条件决定流量走直连还是代理</li><li><strong>网络调试</strong>：实时查看所有 HTTP&#x2F;HTTPS 请求的详细信息</li><li><strong>DNS 控制</strong>：自定义 DNS 解析行为，支持 DoH&#x2F;DoT</li><li><strong>MitM 解密</strong>：对 HTTPS 流量进行中间人解密，查看和修改加密内容</li><li><strong>脚本引擎</strong>：使用 JavaScript 脚本对请求和响应进行编程处理</li><li><strong>模块系统</strong>：通过模块（Module）扩展功能，社区有大量现成模块</li></ul><p>在 Apple 生态中，没有任何其他工具能同时提供这些功能的组合。</p><h2 id="定价与购买"><a href="#定价与购买" class="headerlink" title="定价与购买"></a>定价与购买</h2><p>Surge 的价格是所有主流代理工具中最高的，这也是最让人犹豫的一点：</p><table><thead><tr><th>平台</th><th>价格</th><th>说明</th></tr></thead><tbody><tr><td>iOS（Surge for iOS）</td><td>$49.99</td><td>App Store 一次性购买，含所有功能</td></tr><tr><td>macOS（Surge for Mac）</td><td>$49.99 起</td><td>官网购买授权，按设备数量定价</td></tr><tr><td>组合购买</td><td>各自独立</td><td>iOS 和 macOS 版本需要分别购买</td></tr></tbody></table><p>也就是说，如果你想在 iPhone 和 Mac 上同时使用 Surge，需要花费至少 <strong>100 美元</strong>。这个价格放在代理工具领域是相当昂贵的——对比来看，Clash Verge 完全免费，Quantumult X 也只要 $7.99。</p><h3 id="为什么这么贵"><a href="#为什么这么贵" class="headerlink" title="为什么这么贵"></a>为什么这么贵</h3><p>Surge 的高价并非没有道理：</p><ol><li><strong>开发成本</strong>：Surge 是一个极其复杂的网络工程项目，由个人开发者维护，代码质量和更新频率都很高</li><li><strong>功能深度</strong>：它提供的功能远超代理需求，网络调试、脚本引擎、MitM 等功能在其他工具中难以找到同等水平的实现</li><li><strong>定位差异</strong>：Surge 的目标用户不是只需要代理的普通用户，而是对网络有深度需求的专业用户</li><li><strong>持续更新</strong>：购买后可以持续获得功能更新，Surge 5 的更新频率保持在每月多次</li></ol><p>简单说：如果你只需要代理功能，Surge 的价格确实不值；但如果你需要它提供的完整工具集，它的定价是合理的。</p><h2 id="核心功能详解"><a href="#核心功能详解" class="headerlink" title="核心功能详解"></a>核心功能详解</h2><h3 id="代理与策略组"><a href="#代理与策略组" class="headerlink" title="代理与策略组"></a>代理与策略组</h3><p>Surge 支持几乎所有主流代理协议：</p><ul><li><strong>Shadowsocks &#x2F; ShadowsocksR</strong></li><li><strong>VMess &#x2F; VLESS</strong></li><li><strong>Trojan</strong></li><li><strong>HTTPS&#x2F;SOCKS5 代理</strong></li><li><strong>WireGuard</strong>（内置支持）</li><li><strong>Snell</strong>（Surge 自研协议）</li></ul><p>策略组（Policy Group）是 Surge 规则系统的核心概念。你可以创建多种类型的策略组：</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[Proxy Group]</span></span><br><span class="line"><span class="attr">Auto</span> = url-test, Server-A, Server-B, Server-C, url=http://www.gstatic.com/generate_204, interval=<span class="number">600</span></span><br><span class="line"><span class="attr">Streaming</span> = select, HK-Server, JP-Server, US-Server</span><br><span class="line"><span class="attr">Fallback</span> = fallback, Server-A, Server-B, Server-C</span><br></pre></td></tr></table></figure><ul><li><strong>url-test</strong>：自动测速，选择延迟最低的节点</li><li><strong>select</strong>：手动选择节点</li><li><strong>fallback</strong>：自动故障转移</li><li><strong>load-balance</strong>：负载均衡</li></ul><h3 id="规则系统"><a href="#规则系统" class="headerlink" title="规则系统"></a>规则系统</h3><p>Surge 的规则系统是其最核心的能力之一。规则按照从上到下的顺序匹配，支持多种匹配条件：</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[Rule]</span></span><br><span class="line">DOMAIN-SUFFIX,google.com,Proxy</span><br><span class="line">DOMAIN-KEYWORD,youtube,Proxy</span><br><span class="line">IP-CIDR,91.108.0.0/16,Proxy</span><br><span class="line">GEOIP,CN,DIRECT</span><br><span class="line">PROCESS-NAME,Telegram,Proxy</span><br><span class="line">URL-REGEX,^https?://api\.example\.com,REJECT</span><br><span class="line">FINAL,Proxy</span><br></pre></td></tr></table></figure><p>Surge 的规则类型包括但不限于：</p><table><thead><tr><th>规则类型</th><th>匹配对象</th><th>示例</th></tr></thead><tbody><tr><td>DOMAIN</td><td>精确域名</td><td><code>DOMAIN,www.google.com,Proxy</code></td></tr><tr><td>DOMAIN-SUFFIX</td><td>域名后缀</td><td><code>DOMAIN-SUFFIX,google.com,Proxy</code></td></tr><tr><td>DOMAIN-KEYWORD</td><td>域名关键词</td><td><code>DOMAIN-KEYWORD,google,Proxy</code></td></tr><tr><td>IP-CIDR</td><td>IP 地址段</td><td><code>IP-CIDR,10.0.0.0/8,DIRECT</code></td></tr><tr><td>GEOIP</td><td>IP 归属国家</td><td><code>GEOIP,US,Proxy</code></td></tr><tr><td>PROCESS-NAME</td><td>进程名</td><td><code>PROCESS-NAME,Telegram,Proxy</code></td></tr><tr><td>RULE-SET</td><td>外部规则集</td><td><code>RULE-SET,https://example.com/rules,Proxy</code></td></tr><tr><td>URL-REGEX</td><td>URL 正则</td><td>对 HTTP 请求的 URL 进行正则匹配</td></tr></tbody></table><h3 id="DNS-控制"><a href="#DNS-控制" class="headerlink" title="DNS 控制"></a>DNS 控制</h3><p>Surge 对 DNS 的控制能力非常细致：</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[DNS]</span></span><br><span class="line"><span class="attr">dns-server</span> = <span class="number">119.29</span>.<span class="number">29.29</span>, <span class="number">223.5</span>.<span class="number">5.5</span></span><br><span class="line"><span class="attr">doh-server</span> = https://dns.alidns.com/dns-query</span><br><span class="line"><span class="attr">encrypted-dns-follow-outbound-mode</span> = <span class="literal">true</span></span><br><span class="line"></span><br><span class="line"><span class="section">[Host]</span></span><br><span class="line">*.<span class="attr">google.com</span> = server:<span class="number">8.8</span>.<span class="number">8.8</span></span><br></pre></td></tr></table></figure><p>你可以为不同域名指定不同的 DNS 服务器，支持 DNS over HTTPS (DoH) 和 DNS over TLS (DoT)，甚至可以对 DNS 查询结果进行修改。</p><h3 id="MitM-中间人解密"><a href="#MitM-中间人解密" class="headerlink" title="MitM 中间人解密"></a>MitM 中间人解密</h3><p>这是 Surge 最强大也最”危险”的功能之一。启用 MitM 后，Surge 会生成一个自签名的根证书，安装到设备的信任存储中，然后对指定域名的 HTTPS 流量进行解密：</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[MITM]</span></span><br><span class="line"><span class="attr">hostname</span> = api.example.com, *.google.com</span><br><span class="line"><span class="attr">ca-passphrase</span> = your-passphrase</span><br></pre></td></tr></table></figure><p>启用后，你可以在 Surge 的 Dashboard 中看到这些 HTTPS 请求的完整内容——包括请求头、请求体和响应内容。这对于以下场景非常有用：</p><ul><li><strong>API 调试</strong>：开发过程中检查 App 与后端的通信内容</li><li><strong>广告屏蔽</strong>：精确识别和拦截广告请求</li><li><strong>脚本处理</strong>：对特定 API 的响应进行修改（比如解锁某些功能）</li></ul><p>需要注意的是，MitM 会对安全性产生影响。只应该对你信任的域名启用，且不应在不信任的网络环境中使用。</p><h3 id="JavaScript-脚本引擎"><a href="#JavaScript-脚本引擎" class="headerlink" title="JavaScript 脚本引擎"></a>JavaScript 脚本引擎</h3><p>Surge 内置了一个 JavaScript 脚本引擎，可以在请求的不同阶段执行自定义脚本：</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[Script]</span></span><br><span class="line"><span class="attr">cron-job</span> = type=cron,cronexp=<span class="number">0</span> <span class="number">8</span> * * *,script-path=morning-check.js</span><br><span class="line"><span class="attr">http-response</span> = type=http-response,pattern=^https://api\.example\.com/user,script-path=modify-response.js,requires-body=<span class="literal">true</span></span><br></pre></td></tr></table></figure><p>脚本可以实现的功能非常广泛：</p><ul><li>修改 HTTP 请求和响应</li><li>定时执行任务（cron）</li><li>自动签到</li><li>解锁某些服务的会员功能</li><li>生成通知和报告</li></ul><p>社区已经积累了大量现成的脚本，涵盖了从去广告到功能增强的各种场景。</p><h3 id="Dashboard-仪表盘"><a href="#Dashboard-仪表盘" class="headerlink" title="Dashboard 仪表盘"></a>Dashboard 仪表盘</h3><p>Surge 的 Dashboard 提供了一个直观的图形界面，用于实时监控和管理网络流量。macOS 版本的 Dashboard 功能尤其强大，可以显示：</p><ul><li>实时连接列表和流量统计</li><li>请求详情（URL、状态码、响应时间、大小）</li><li>DNS 查询记录</li><li>规则匹配日志</li><li>网络接口状态</li></ul><p>对于开发者来说，Surge Dashboard 在某些场景下甚至可以替代 Charles 或 Proxyman 等专业抓包工具。</p><h2 id="适用人群"><a href="#适用人群" class="headerlink" title="适用人群"></a>适用人群</h2><p>Surge 并不适合所有人。以下是不同人群的建议：</p><h3 id="推荐使用-Surge-的人群"><a href="#推荐使用-Surge-的人群" class="headerlink" title="推荐使用 Surge 的人群"></a>推荐使用 Surge 的人群</h3><ul><li><strong>iOS&#x2F;macOS 开发者</strong>：需要调试网络请求、分析 API 通信</li><li><strong>网络工程师</strong>：需要深度控制 DNS、路由和网络行为</li><li><strong>高级代理用户</strong>：需要复杂的规则系统、多策略组、脚本自动化</li><li><strong>安全研究人员</strong>：需要 MitM 功能分析加密通信</li></ul><h3 id="不推荐使用-Surge-的人群"><a href="#不推荐使用-Surge-的人群" class="headerlink" title="不推荐使用 Surge 的人群"></a>不推荐使用 Surge 的人群</h3><ul><li><strong>只需要基本代理功能</strong>：Clash Verge 免费且完全够用</li><li><strong>预算有限</strong>：100 美元的花费对于只用代理来说性价比极低</li><li><strong>Android&#x2F;Windows&#x2F;Linux 用户</strong>：Surge 只支持 Apple 平台</li><li><strong>新手用户</strong>：Surge 的学习曲线较陡，配置复杂度高于 Clash</li></ul><h2 id="基本配置流程"><a href="#基本配置流程" class="headerlink" title="基本配置流程"></a>基本配置流程</h2><p>如果你决定使用 Surge，以下是最基本的配置步骤：</p><h3 id="第一步：添加代理节点"><a href="#第一步：添加代理节点" class="headerlink" title="第一步：添加代理节点"></a>第一步：添加代理节点</h3><p>在配置文件的 <code>[Proxy]</code> 段中添加节点信息：</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[Proxy]</span></span><br><span class="line"><span class="attr">HK-Server</span> = trojan, hk.example.com, <span class="number">443</span>, password=your-password</span><br><span class="line"><span class="attr">JP-Server</span> = vmess, jp.example.com, <span class="number">443</span>, username=your-uuid, tls=<span class="literal">true</span></span><br><span class="line"><span class="attr">US-Server</span> = ss, us.example.com, <span class="number">8388</span>, encrypt-method=aes-<span class="number">256</span>-gcm, password=your-password</span><br></pre></td></tr></table></figure><p>大多数机场会提供订阅链接，你也可以通过订阅方式导入节点。</p><h3 id="第二步：配置策略组"><a href="#第二步：配置策略组" class="headerlink" title="第二步：配置策略组"></a>第二步：配置策略组</h3><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[Proxy Group]</span></span><br><span class="line"><span class="attr">Auto</span> = url-test, HK-Server, JP-Server, US-Server, url=http://www.gstatic.com/generate_204</span><br><span class="line"><span class="attr">Streaming</span> = select, HK-Server, JP-Server, US-Server</span><br></pre></td></tr></table></figure><h3 id="第三步：编写规则"><a href="#第三步：编写规则" class="headerlink" title="第三步：编写规则"></a>第三步：编写规则</h3><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[Rule]</span></span><br><span class="line">DOMAIN-SUFFIX,google.com,Auto</span><br><span class="line">DOMAIN-SUFFIX,youtube.com,Streaming</span><br><span class="line">DOMAIN-SUFFIX,netflix.com,Streaming</span><br><span class="line">GEOIP,CN,DIRECT</span><br><span class="line">FINAL,Auto</span><br></pre></td></tr></table></figure><h3 id="第四步：启用增强模式（可选）"><a href="#第四步：启用增强模式（可选）" class="headerlink" title="第四步：启用增强模式（可选）"></a>第四步：启用增强模式（可选）</h3><p>在 Surge 的设置中启用增强模式（Enhanced Mode），它会接管系统的 DNS 解析，提供更完整的流量控制。</p><h2 id="Surge-vs-Clash-Verge"><a href="#Surge-vs-Clash-Verge" class="headerlink" title="Surge vs Clash Verge"></a>Surge vs Clash Verge</h2><p>这是最常见的对比问题。两者的定位有本质差异：</p><table><thead><tr><th>维度</th><th>Surge</th><th>Clash Verge（mihomo）</th></tr></thead><tbody><tr><td>定价</td><td>iOS $49.99 + macOS $49.99</td><td>完全免费</td></tr><tr><td>平台</td><td>iOS &#x2F; macOS</td><td>Windows &#x2F; macOS &#x2F; Linux</td></tr><tr><td>规则格式</td><td>INI 风格</td><td>YAML</td></tr><tr><td>网络调试</td><td>内置 Dashboard，功能强大</td><td>基础连接查看</td></tr><tr><td>MitM</td><td>支持</td><td>不支持</td></tr><tr><td>脚本引擎</td><td>JavaScript</td><td>不支持（mihomo 有有限的脚本能力）</td></tr><tr><td>TUN 模式</td><td>支持</td><td>支持</td></tr><tr><td>WireGuard</td><td>内置支持</td><td>通过 mihomo 支持</td></tr><tr><td>上手难度</td><td>较高</td><td>中等</td></tr><tr><td>社区规则</td><td>丰富</td><td>极其丰富</td></tr></tbody></table><p><strong>结论</strong>：对于 90% 以上的用户，Clash Verge 完全够用。Surge 的优势主要体现在 iOS 平台的深度集成、MitM、脚本引擎和网络调试方面。如果你不需要这些功能，没有必要花钱购买 Surge。</p><h2 id="Surge-的规则格式-vs-Clash-YAML"><a href="#Surge-的规则格式-vs-Clash-YAML" class="headerlink" title="Surge 的规则格式 vs Clash YAML"></a>Surge 的规则格式 vs Clash YAML</h2><p>两者的规则格式差异较大。Surge 使用 INI 风格的配置文件，Clash 使用 YAML。以同一条规则为例：</p><p><strong>Surge 格式</strong>：</p><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">DOMAIN-SUFFIX,google.com,Proxy</span><br></pre></td></tr></table></figure><p><strong>Clash 格式</strong>：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">rules:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,google.com,Proxy</span></span><br></pre></td></tr></table></figure><p>虽然单条规则的语法相似，但整体配置文件的结构差异很大。Surge 的配置以 Section（段落）划分，Clash 的配置是一个完整的 YAML 文档。规则本身大部分可以互相转换，社区也有不少转换工具。</p><p>需要注意的是，Surge 支持的一些高级规则类型（如 URL-REGEX、USER-AGENT）在 Clash 中可能没有直接对应。</p><h2 id="常见问题（FAQ）"><a href="#常见问题（FAQ）" class="headerlink" title="常见问题（FAQ）"></a>常见问题（FAQ）</h2><h3 id="Q1：Surge-支持订阅链接吗？"><a href="#Q1：Surge-支持订阅链接吗？" class="headerlink" title="Q1：Surge 支持订阅链接吗？"></a>Q1：Surge 支持订阅链接吗？</h3><p>支持。Surge 可以通过托管配置（Managed Configuration）或订阅模块来导入节点。大部分主流机场都提供 Surge 格式的订阅链接。如果没有，你也可以使用 <a href="https://github.com/sub-store-org/Sub-Store">Sub-Store</a> 等工具进行格式转换。</p><h3 id="Q2：Surge-能在-Apple-TV-上使用吗？"><a href="#Q2：Surge-能在-Apple-TV-上使用吗？" class="headerlink" title="Q2：Surge 能在 Apple TV 上使用吗？"></a>Q2：Surge 能在 Apple TV 上使用吗？</h3><p>Surge 5 开始支持 tvOS，可以在 Apple TV 上使用。但需要 iOS 版本的授权。</p><h3 id="Q3：购买后可以多设备使用吗？"><a href="#Q3：购买后可以多设备使用吗？" class="headerlink" title="Q3：购买后可以多设备使用吗？"></a>Q3：购买后可以多设备使用吗？</h3><p>iOS 版跟随 Apple ID，同一个 Apple ID 下的所有设备都可以使用。macOS 版的授权按设备数量计费。</p><h3 id="Q4：Surge-和-Quantumult-X、Loon-怎么选？"><a href="#Q4：Surge-和-Quantumult-X、Loon-怎么选？" class="headerlink" title="Q4：Surge 和 Quantumult X、Loon 怎么选？"></a>Q4：Surge 和 Quantumult X、Loon 怎么选？</h3><p>这三者都是 iOS 平台的高级代理工具。Quantumult X（$7.99）和 Loon（$5.99）价格更低，功能也不弱。对于大多数 iOS 用户来说，Quantumult X 的性价比最高。Surge 适合对网络调试和脚本有深度需求的用户。</p><h3 id="Q5：Surge-的安全性如何？"><a href="#Q5：Surge-的安全性如何？" class="headerlink" title="Q5：Surge 的安全性如何？"></a>Q5：Surge 的安全性如何？</h3><p>Surge 本身是一个商业软件，代码不开源。但它在 Apple 生态中已经运营多年，拥有良好的口碑。MitM 功能确实存在安全风险，但这是你主动启用的功能，且只对你指定的域名生效。</p><h3 id="Q6：Surge-适合新手吗？"><a href="#Q6：Surge-适合新手吗？" class="headerlink" title="Q6：Surge 适合新手吗？"></a>Q6：Surge 适合新手吗？</h3><p>不太适合。Surge 的配置较为复杂，且价格高昂。新手建议先从免费的 Clash Verge 开始，等熟悉了代理的基本概念后，再根据需求决定是否升级到 Surge。</p><h2 id="外部链接"><a href="#外部链接" class="headerlink" title="外部链接"></a>外部链接</h2><ul><li><a href="https://nssurge.com/">Surge 官方网站</a></li><li><a href="https://manual.nssurge.com/">Surge 官方文档</a></li><li><a href="https://github.com/Surge-Modules">Surge 社区模块仓库</a></li><li><a href="https://github.com/sub-store-org/Sub-Store">Sub-Store 订阅转换</a></li></ul><hr><p><em>Surge 是一款优秀的网络工具，但不是每个人都需要它。在购买之前，先明确你的实际需求。如果你只需要代理，免费的开源方案完全够用。</em></p>]]></content>
      
      
      <categories>
          
          <category> 代理软件 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> 教程 </tag>
            
            <tag> Surge </tag>
            
            <tag> macOS </tag>
            
            <tag> iOS </tag>
            
            <tag> 高级 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>流媒体解锁是什么？为什么有的节点能解锁有的不能</title>
      <link href="/posts/streaming-unlock-basics/"/>
      <url>/posts/streaming-unlock-basics/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：Netflix、Disney+、HBO Max 等流媒体平台会根据用户 IP 地址判断其所在地区，从而决定可以观看的内容库。”解锁”指的是通过代理使用特定 IP 访问这些服务的完整内容。本文解释流媒体地区限制的原理、解锁的实现方式，以及为什么不是所有节点都能解锁。</p></blockquote><h2 id="什么是流媒体地区限制"><a href="#什么是流媒体地区限制" class="headerlink" title="什么是流媒体地区限制"></a>什么是流媒体地区限制</h2><p>如果你用过 <a href="https://www.netflix.com/">Netflix</a>，可能会注意到一个现象：同一个 Netflix 账号，在不同国家打开看到的内容库完全不同。一部在美国能看的电影，换到日本可能就找不到了；一部在新加坡上线的动画，在美区可能根本不存在。</p><p>这不是 Bug，而是流媒体行业的基本运作方式。</p><p><img src="/images/inline/netflix-region.jpg" alt="Netflix 各地区内容库差异"><br><em>图片来源：<a href="https://surfshark.com/">Surfshark</a></em></p><h3 id="地区限制的根源：版权授权"><a href="#地区限制的根源：版权授权" class="headerlink" title="地区限制的根源：版权授权"></a>地区限制的根源：版权授权</h3><p>流媒体平台上的内容分为两类：<strong>自制内容</strong>和<strong>授权内容</strong>。</p><p><strong>自制内容</strong>（如 Netflix Originals、Disney+ Originals）由平台自己投资制作，版权归平台所有，通常在全球所有地区同步上线。你在任何国家打开 Netflix 都能看到《鱿鱼游戏》或《怪奇物语》。</p><p><strong>授权内容</strong>则完全不同。电影和电视剧的版权是按地区分别出售的。一部好莱坞电影的制片方可能把北美的流媒体播放权卖给 Netflix，把日本的播放权卖给 Amazon Prime，把欧洲的播放权卖给当地的流媒体平台。这意味着 Netflix 只有权在北美播放这部电影——如果它允许日本用户也观看，就构成了版权侵权。</p><p>这就是为什么流媒体平台必须实施地区限制：<strong>它们在法律上被要求只向特定地区的用户展示特定的内容。</strong></p><h3 id="平台如何判断你的地区"><a href="#平台如何判断你的地区" class="headerlink" title="平台如何判断你的地区"></a>平台如何判断你的地区</h3><p>流媒体平台判断用户所在地区的主要依据是 <strong>IP 地址</strong>。</p><p>当你打开 Netflix 时，Netflix 的服务器会获取你的公网 IP 地址，然后查询 IP 地理位置数据库（如 MaxMind GeoIP）来确定这个 IP 属于哪个国家和地区。根据查询结果，Netflix 会向你展示对应地区的内容库。</p><p>这个判断过程发生在每次访问时。如果你的 IP 地址变了（比如出国旅行或使用了代理），你看到的内容库也会随之改变。</p><h3 id="不只是-Netflix"><a href="#不只是-Netflix" class="headerlink" title="不只是 Netflix"></a>不只是 Netflix</h3><p>地区限制是整个流媒体和在线服务行业的通行做法，受影响的平台远比大多数人想象的多：</p><ul><li><strong>视频流媒体</strong>：Netflix、Disney+、HBO Max、Hulu（仅限美国）、BBC iPlayer（仅限英国）、Amazon Prime Video、Peacock</li><li><strong>音乐流媒体</strong>：Spotify 部分地区独占内容、Apple Music 地区差异</li><li><strong>游戏平台</strong>：Steam 地区定价差异、部分游戏地区锁定</li><li><strong>AI 服务</strong>：ChatGPT 和 Claude 对部分地区的 IP 有访问限制，大量数据中心 IP 被封禁</li><li><strong>其他</strong>：YouTube Premium 地区定价差异、Google Play &#x2F; App Store 地区内容差异</li></ul><hr><h2 id="“解锁”到底是什么意思"><a href="#“解锁”到底是什么意思" class="headerlink" title="“解锁”到底是什么意思"></a>“解锁”到底是什么意思</h2><p>理解了地区限制的原理后，”解锁”的含义就很清楚了：<strong>通过代理节点，让你的流量以一个特定地区的 IP 地址访问流媒体服务，从而获取该地区的完整内容库。</strong></p><p>举个具体例子：你人在中国大陆，想看 Netflix 美区的内容。你通过代理连接到一个位于美国的节点，这个节点的出口 IP 被 Netflix 识别为美国 IP，于是 Netflix 向你展示美区内容库——这就是”解锁了 Netflix 美区”。</p><p>但问题来了：<strong>不是随便找一个美国 IP 就能解锁 Netflix 的。</strong> 这正是本文的核心主题。</p><hr><h2 id="为什么不是所有代理节点都能解锁"><a href="#为什么不是所有代理节点都能解锁" class="headerlink" title="为什么不是所有代理节点都能解锁"></a>为什么不是所有代理节点都能解锁</h2><p>这是很多人困惑的问题：我明明连接了一个美国节点，为什么 Netflix 还是提示我在使用 VPN？</p><p>答案在于：<strong>流媒体平台不只看你的 IP 属于哪个国家，还会判断这个 IP 的”性质”。</strong> 并非所有 IP 在平台眼中都是平等的。</p><h3 id="IP-类型：决定解锁能力的关键因素"><a href="#IP-类型：决定解锁能力的关键因素" class="headerlink" title="IP 类型：决定解锁能力的关键因素"></a>IP 类型：决定解锁能力的关键因素</h3><p>IP 地址按其注册和使用方式，大致分为以下几类：</p><p><strong>原生住宅 IP（Native Residential IP）</strong></p><p>这是普通家庭宽带用户使用的 IP 地址。它由当地的互联网服务提供商（ISP）分配，在 WHOIS 数据库中显示的注册机构是该国的电信运营商（如美国的 Comcast、AT&amp;T，日本的 NTT、KDDI）。</p><p>流媒体平台对原生住宅 IP 的信任度最高——因为这类 IP 代表的就是普通家庭用户，正是平台的目标受众。使用原生住宅 IP 几乎可以解锁所有流媒体服务。</p><p>但原生住宅 IP 的问题是：<strong>极其稀缺且昂贵。</strong> 代理服务提供商要获得原生住宅 IP，通常需要与当地 ISP 合作或使用特殊的服务器托管方式，成本远高于普通的数据中心服务器。</p><p><strong>数据中心 IP &#x2F; 广播 IP（Datacenter &#x2F; Hosting IP）</strong></p><p>这是绝大多数代理节点使用的 IP 类型。这些 IP 属于云服务商（AWS、Google Cloud、Azure、Vultr、BandwagonHost 等）或专业的服务器托管公司。在 WHOIS 数据库中，它们的注册机构显示的是数据中心运营商的名称，而非当地的住宅 ISP。</p><p>流媒体平台对数据中心 IP 持高度怀疑态度。原因很简单：正常的家庭用户不会从数据中心的 IP 地址看电影。如果大量流量从同一个数据中心 IP 涌入 Netflix，这几乎可以确定是代理或 VPN 用户。</p><p>目前，Netflix、Disney+、HBO Max 等主流平台已经封锁了绝大多数已知的数据中心 IP 段。这就是为什么你买了一台便宜的美国 VPS，搭建了代理，连上后却发现 Netflix 提示”你似乎在使用代理”——不是你的代理配置有问题，而是你的服务器 IP 本身就被 Netflix 标记了。</p><p><strong>住宅代理 IP（Residential Proxy IP）</strong></p><p>关于各种 IP 类型的详细分类和解锁影响，参见 <a href="/posts/ip-types/">代理中的 IP 类型详解</a>。这是一种比较特殊的类型。住宅代理通过实际的家庭网络路由流量，IP 地址在 WHOIS 中显示为住宅 ISP。理论上它和原生住宅 IP 一样受信任，但实际操作中可能存在带宽限制和延迟问题，用来看高清视频不一定理想。</p><h3 id="流媒体平台的检测手段"><a href="#流媒体平台的检测手段" class="headerlink" title="流媒体平台的检测手段"></a>流媒体平台的检测手段</h3><p>除了 IP 类型判断，流媒体平台还使用多种技术手段来识别和封锁代理用户：</p><p><strong>1. IP 地理位置数据库</strong></p><p>平台采购专业的 IP 地理位置数据库服务（如 MaxMind、IP2Location、<a href="https://ipinfo.io/">ipinfo.io</a>），这些数据库不仅提供 IP 的地理位置信息，还标注 IP 的类型——住宅、数据中心、VPN、代理等。数据库会持续更新，新的 VPN 和代理 IP 段被不断加入。</p><p><strong>2. IP 黑名单与信誉评分</strong></p><p>流媒体平台维护自己的 IP 黑名单，并结合第三方黑名单服务。一个 IP 地址一旦被标记为 VPN 或代理 IP，即使更换了使用者，这个标记也会持续一段时间。此外，一些平台引入了 IP 信誉评分系统——信誉分低的 IP 更可能触发额外的验证或直接被拒绝。</p><p><strong>3. 同一 IP 的并发用户检测</strong></p><p>正常情况下，一个住宅 IP 背后的 Netflix 活跃用户不会超过一个家庭的规模（通常不超过 5-10 个设备）。如果一个 IP 地址在短时间内出现了几十甚至上百个不同的 Netflix 账号登录，平台会判定这是一个代理节点的出口 IP，并将其加入黑名单。</p><p>这也是为什么即使一个 IP 一开始能解锁，使用的人多了之后也可能失效——太多人共用同一个代理节点，导致该节点的出口 IP 被流媒体平台标记。此外，IPv6 在解锁场景中正变得越来越重要，详见 <a href="/posts/ipv4-vs-ipv6-unlock/">IPv4 与 IPv6 在解锁中的作用</a>。</p><p><strong>4. DNS 一致性检测</strong></p><p>部分平台会检查用户的 DNS 解析结果是否与 IP 地址的地理位置一致（关于 DNS 解锁的详细原理，参见 <a href="/posts/dns-vs-native-unlock/">DNS 解锁与原生 IP 解锁的区别</a>）。如果你的 IP 显示在美国，但你的 DNS 请求被发送到了日本的 DNS 服务器，平台可能会判定你在使用代理。这就是为什么代理客户端通常需要配置远端 DNS 解析——确保 DNS 请求也走代理通道，与 IP 地址的地区保持一致。</p><p><strong>5. WebRTC 泄漏检测</strong></p><p>WebRTC 是浏览器的一项实时通信技术，它可能绕过代理设置直接暴露你的真实 IP 地址。部分流媒体平台会通过 WebRTC 探测用户的真实 IP。如果检测到 WebRTC 暴露的 IP 与当前访问 IP 不一致，流量就会被标记为代理。</p><p>解决方法很简单：在浏览器中禁用 WebRTC，或者使用支持 WebRTC 防泄漏的代理客户端。</p><hr><h2 id="解锁的三种实现方式"><a href="#解锁的三种实现方式" class="headerlink" title="解锁的三种实现方式"></a>解锁的三种实现方式</h2><p>了解了为什么不是所有节点都能解锁之后，来看看代理服务提供商是如何实现流媒体解锁的。</p><h3 id="方式一：原生-IP-节点"><a href="#方式一：原生-IP-节点" class="headerlink" title="方式一：原生 IP 节点"></a>方式一：原生 IP 节点</h3><p>这是最直接、最可靠的方式。代理服务商使用拥有原生住宅 IP 的服务器作为代理节点。你的流量通过这个节点出去时，流媒体平台看到的就是一个正常的当地住宅 IP，自然可以正常访问。</p><p><strong>优点</strong>：</p><ul><li>解锁成功率最高，几乎可以解锁所有流媒体服务</li><li>稳定性好，不容易被平台封锁</li><li>用户端不需要任何额外配置</li></ul><p><strong>缺点</strong>：</p><ul><li>成本极高，原生住宅 IP 资源稀缺</li><li>可用的地区有限，不是每个国家的每个 ISP 都能提供</li><li>机场的售价通常也更高</li></ul><h3 id="方式二：DNS-解锁"><a href="#方式二：DNS-解锁" class="headerlink" title="方式二：DNS 解锁"></a>方式二：DNS 解锁</h3><p>DNS 解锁是目前最常见的解锁方案，它的核心思路是：<strong>你的常规流量仍然走普通的代理节点，但当你访问流媒体服务时，DNS 解析会被重定向到一个拥有解锁能力 IP 的服务器。</strong></p><p>具体工作流程如下：</p><ol><li>你通过代理节点访问 netflix.com</li><li>代理节点上的 DNS 服务器检测到这是一个流媒体域名</li><li>DNS 服务器将 netflix.com 解析到一个特殊的 IP——这个 IP 指向一台拥有原生 IP 或已被 Netflix 信任的服务器</li><li>你的流量被透明地转发到这台解锁服务器</li><li>Netflix 看到的是解锁服务器的 IP，判定你在对应地区，正常提供内容</li></ol><p><strong>优点</strong>：</p><ul><li>成本相对较低，可以在普通数据中心节点上实现解锁</li><li>部署灵活，一个 DNS 解锁服务可以服务多个代理节点</li><li>对用户透明，不需要用户做任何操作</li></ul><p><strong>缺点</strong>：</p><ul><li>需要持续维护，流媒体平台更新检测策略后，DNS 解锁的配置也需要相应更新</li><li>存在一定的不稳定性，解锁 IP 可能随时被平台封锁</li><li>部分服务（如 Netflix）的检测越来越严格，纯 DNS 解锁的成功率在下降</li></ul><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">graph LR</span><br><span class="line">    subgraph 原生 IP 解锁</span><br><span class="line">    A1[用户] --&gt; B1[代理节点&lt;br/&gt;原生IP] --&gt; C1[Netflix ✅]</span><br><span class="line">    end</span><br><span class="line">    </span><br><span class="line">    subgraph DNS 解锁</span><br><span class="line">    A2[用户] --&gt; B2[代理节点&lt;br/&gt;数据中心IP] --&gt; D2[DNS解锁服务器&lt;br/&gt;原生IP] --&gt; C2[Netflix ✅]</span><br><span class="line">    end</span><br><span class="line">    </span><br><span class="line">    subgraph 无解锁</span><br><span class="line">    A3[用户] --&gt; B3[代理节点&lt;br/&gt;数据中心IP] --&gt; C3[Netflix ❌]</span><br><span class="line">    end</span><br></pre></td></tr></table></figure><h3 id="方式三：回落-转发解锁"><a href="#方式三：回落-转发解锁" class="headerlink" title="方式三：回落 &#x2F; 转发解锁"></a>方式三：回落 &#x2F; 转发解锁</h3><p>这种方式结合了成本效率和解锁能力。普通代理节点在检测到用户访问流媒体域名时，将这部分流量专门转发到另一台拥有解锁能力 IP 的服务器。</p><p>从用户角度看，你连接的还是那个普通节点，但流媒体流量在后端被自动路由到了解锁节点。用户完全无感知。</p><p><strong>优点</strong>：</p><ul><li>平衡了成本和解锁能力</li><li>普通流量走便宜的数据中心节点（速度快），流媒体流量走解锁节点（能解锁）</li><li>用户体验无缝</li></ul><p><strong>缺点</strong>：</p><ul><li>实现复杂度较高，需要精确的流量分流规则</li><li>依赖解锁节点的可用性，解锁节点失效时需要及时切换</li><li>流媒体流量的延迟可能比普通流量略高</li></ul><hr><h2 id="主流服务的解锁难度"><a href="#主流服务的解锁难度" class="headerlink" title="主流服务的解锁难度"></a>主流服务的解锁难度</h2><p>不同的流媒体和在线服务，对代理的检测严格程度差异很大。以下是目前主流服务的解锁难度概览：</p><table><thead><tr><th>服务</th><th>解锁难度</th><th>说明</th></tr></thead><tbody><tr><td>Netflix</td><td>⭐⭐⭐⭐</td><td>检测最严格的平台之一。维护庞大的 IP 黑名单，积极封杀数据中心 IP，通常需要原生 IP 或高质量 DNS 解锁</td></tr><tr><td>Disney+</td><td>⭐⭐⭐</td><td>检测较严格，但比 Netflix 稍宽松。部分优质数据中心 IP 仍可使用</td></tr><tr><td>HBO Max</td><td>⭐⭐⭐⭐</td><td>仅限美国地区，检测严格程度与 Netflix 相当</td></tr><tr><td>Hulu</td><td>⭐⭐⭐⭐</td><td>仅限美国，对代理检测非常严格</td></tr><tr><td>BBC iPlayer</td><td>⭐⭐⭐</td><td>仅限英国，检测中等偏严，需要英国原生 IP 或优质解锁方案</td></tr><tr><td>YouTube Premium</td><td>⭐⭐</td><td>主要看 IP 所属地区来确定定价和内容，对 IP 类型的检测相对宽松</td></tr><tr><td>Spotify</td><td>⭐⭐</td><td>对 IP 类型不太敏感，主要通过账户注册地区来管理内容</td></tr><tr><td>ChatGPT</td><td>⭐⭐⭐</td><td>封锁了大量数据中心 IP 段以及部分地区的访问，对住宅 IP 相对友好</td></tr><tr><td>Claude</td><td>⭐⭐</td><td>检测相对宽松，主要限制部分地区的直接访问</td></tr><tr><td>Amazon Prime</td><td>⭐⭐⭐</td><td>检测中等，不同地区的内容库差异明显</td></tr></tbody></table><p>需要注意的是，解锁难度是动态变化的。平台在不断升级检测手段，代理服务商也在不断适应。上表反映的是当前的大致情况，未来可能会有变化。</p><hr><h2 id="怎么测试节点是否能解锁"><a href="#怎么测试节点是否能解锁" class="headerlink" title="怎么测试节点是否能解锁"></a>怎么测试节点是否能解锁</h2><p>在选择代理服务或测试自建节点时，你需要知道如何验证解锁能力。</p><h3 id="在线检测工具"><a href="#在线检测工具" class="headerlink" title="在线检测工具"></a>在线检测工具</h3><p>最方便的方式是使用在线检测工具。连接到代理节点后，访问以下网站：</p><ul><li><strong>nflix.eu</strong>：专门检测当前 IP 是否能解锁 Netflix，以及能解锁哪个地区的内容库</li><li><strong>browserleaks.com</strong>：综合检测工具，可以查看 IP 信息、WebRTC 泄漏、DNS 泄漏等</li></ul><h3 id="命令行检测脚本"><a href="#命令行检测脚本" class="headerlink" title="命令行检测脚本"></a>命令行检测脚本</h3><p>如果你有服务器的 SSH 访问权限，可以使用 GitHub 上的开源检测脚本。这类脚本（如 media-unlock-test）可以一次性测试当前服务器 IP 对 Netflix、Disney+、YouTube Premium、Spotify、ChatGPT 等数十个服务的解锁情况，非常高效。</p><p>使用方式通常是通过 SSH 连接到服务器后运行一条命令，脚本会自动检测并输出结果——哪些服务能解锁、解锁的是哪个地区。</p><h3 id="直接测试"><a href="#直接测试" class="headerlink" title="直接测试"></a>直接测试</h3><p>最直观的方法就是直接打开流媒体服务试一试：</p><ol><li>连接到代理节点</li><li>打开 Netflix（或其他流媒体服务）</li><li>尝试播放一部非自制的授权内容</li><li>如果能正常播放，说明解锁成功；如果提示错误或跳转到代理检测页面，说明该节点无法解锁</li></ol><p>注意：有些情况下 Netflix 的首页可以正常打开，但点击播放时才会触发代理检测。所以一定要测试实际播放，而不是仅仅打开首页就判定为解锁成功。</p><h3 id="机场提供的信息"><a href="#机场提供的信息" class="headerlink" title="机场提供的信息"></a>机场提供的信息</h3><p>好的代理服务提供商会在节点列表中明确标注每个节点的解锁能力。常见的标注方式包括：</p><ul><li>节点名称中包含”Netflix””Disney+”等字样</li><li>节点分组中单独列出”流媒体解锁”组</li><li>官网或公告中列出各节点的解锁支持情况</li></ul><p>如果一个机场对流媒体解锁只字不提，要么是不支持，要么是运营者没有这方面的意识——两种情况都不太理想。</p><hr><h2 id="选择建议"><a href="#选择建议" class="headerlink" title="选择建议"></a>选择建议</h2><p>根据你的使用场景，以下是一些实用的选择建议：</p><p><strong>如果流媒体是你的核心需求：</strong></p><ul><li>优先选择明确标注支持流媒体解锁的代理服务</li><li>关注具体支持哪些服务和地区（Netflix US 和 Netflix JP 是不同的解锁）</li><li>了解解锁方式——原生 IP 节点比 DNS 解锁更稳定，但价格也更高</li><li>在试用期内重点测试流媒体解锁是否稳定</li></ul><p><strong>如果流媒体只是附带需求：</strong></p><ul><li>DNS 解锁方案对大多数用户来说已经足够</li><li>不必追求所有服务都能解锁，能覆盖你最常用的一两个平台即可</li><li>优先保证代理本身的稳定性和速度，流媒体解锁作为加分项</li></ul><p><strong>如果你是自建用户：</strong></p><ul><li>自建节点能否解锁完全取决于服务器的 IP 类型</li><li>大多数 VPS 供应商提供的都是数据中心 IP，大概率被 Netflix 等平台封锁</li><li>如果需要解锁，你需要寻找提供原生住宅 IP 的服务商，或者自己搭建 DNS 解锁</li><li>另一个思路是自建主节点 + 购买一个便宜的流媒体解锁专用机场，两者配合使用</li></ul><hr><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="Q-解锁是永久的吗？"><a href="#Q-解锁是永久的吗？" class="headerlink" title="Q: 解锁是永久的吗？"></a>Q: 解锁是永久的吗？</h3><p>不是。流媒体平台持续更新检测策略，IP 数据库也在不断更新。一个今天能解锁 Netflix 的 IP，明天就可能被封锁。好的代理服务商会主动轮换 IP、更新 DNS 解锁配置来维持解锁能力，但这是一个持续的对抗过程，没有”一劳永逸”的方案。</p><p>如果你发现某个节点突然不能解锁了，不一定是机场出了问题——可能只是那个 IP 被流媒体平台新一轮的检测更新封锁了，等待服务商更换 IP 即可。</p><h3 id="Q-为什么我的节点能解锁-Netflix-但不能解锁-Disney-？"><a href="#Q-为什么我的节点能解锁-Netflix-但不能解锁-Disney-？" class="headerlink" title="Q: 为什么我的节点能解锁 Netflix 但不能解锁 Disney+？"></a>Q: 为什么我的节点能解锁 Netflix 但不能解锁 Disney+？</h3><p>因为不同平台使用的 IP 数据库和检测方法不完全相同。Netflix 可能使用 MaxMind 的数据库，Disney+ 可能使用 IP2Location 的数据库，两个数据库对同一个 IP 的分类可能不一致。一个 IP 在 MaxMind 中被标记为住宅 IP（能解锁 Netflix），但在 IP2Location 中被标记为数据中心 IP（不能解锁 Disney+），这种情况完全可能发生。</p><p>此外，不同平台的检测严格程度也不同，有的平台只查 IP 类型，有的还会综合考虑并发用户数、IP 信誉分等因素。</p><h3 id="Q-DNS-解锁和原生-IP-解锁哪个好？"><a href="#Q-DNS-解锁和原生-IP-解锁哪个好？" class="headerlink" title="Q: DNS 解锁和原生 IP 解锁哪个好？"></a>Q: DNS 解锁和原生 IP 解锁哪个好？</h3><p>各有优劣。原生 IP 解锁更可靠、更稳定，但成本高、可用地区有限；DNS 解锁成本低、部署灵活，但需要持续维护，且随着平台检测升级，稳定性会有波动。</p><p>对大多数用户来说，DNS 解锁已经够用。如果你是重度流媒体用户，对解锁稳定性有很高要求，可以考虑选择提供原生 IP 节点的服务——但要做好多付费的心理准备。</p><p>很多优质的代理服务商会同时使用两种方式：原生 IP 节点作为主力，DNS 解锁作为补充和回退方案。</p><h3 id="Q-自建节点能解锁吗？"><a href="#Q-自建节点能解锁吗？" class="headerlink" title="Q: 自建节点能解锁吗？"></a>Q: 自建节点能解锁吗？</h3><p>这完全取决于你的服务器 IP 类型。如果你使用的是 Vultr、BandwagonHost、DigitalOcean 等常见 VPS 供应商，获得的几乎一定是数据中心 IP，Netflix 等平台大概率会将其封锁。</p><p>要让自建节点具备解锁能力，你有几个选择：</p><ol><li><strong>寻找提供原生住宅 IP 的服务商</strong>：这类服务商比较少见，价格也明显高于普通 VPS</li><li><strong>自建 DNS 解锁</strong>：技术门槛较高，需要你理解 DNS 解锁的原理并自行维护解锁 IP 的更新</li><li><strong>混合方案</strong>：自建节点处理日常流量，另外购买一个支持流媒体解锁的机场订阅，在代理客户端中通过分流规则将流媒体流量导向机场节点</li></ol><p>第三种方案是最务实的选择——既保留了自建的控制权和隐私性，又不用自己折腾流媒体解锁这件成本高、维护累的事。</p><h3 id="Q-4K-视频对解锁节点有什么额外要求？"><a href="#Q-4K-视频对解锁节点有什么额外要求？" class="headerlink" title="Q: 4K 视频对解锁节点有什么额外要求？"></a>Q: 4K 视频对解锁节点有什么额外要求？</h3><p>4K 流媒体对带宽的要求很高。Netflix 的 4K 内容通常需要至少 25Mbps 的稳定带宽，实际使用中建议节点带宽在 35Mbps 以上以保证流畅体验。如果解锁节点本身的带宽不足，即使能解锁也会出现画质降级或缓冲的问题。</p><p>此外，如果使用的是 DNS 解锁或转发解锁，流量需要经过额外的跳转，延迟和带宽损耗会有所增加。对 4K 有需求的用户，原生 IP 直连节点是最佳选择。</p>]]></content>
      
      
      <categories>
          
          <category> 流媒体与解锁 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> 解锁 </tag>
            
            <tag> DNS解锁 </tag>
            
            <tag> 流媒体 </tag>
            
            <tag> Netflix </tag>
            
            <tag> IP类型 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>VPN、代理、机场——这些词到底什么意思</title>
      <link href="/posts/terminology/"/>
      <url>/posts/terminology/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：刚接触科学上网，满眼都是 VPN、代理、机场、Clash、V2Ray、节点、订阅、TUN 模式……完全看不懂？本文用最直白的语言，把你会遇到的所有术语一次讲清楚。每个词是什么意思、跟其他词什么关系、日常使用中怎么理解——看完这一篇，后续文章就不会再有”黑话障碍”了。</p></blockquote><hr><h2 id="核心概念"><a href="#核心概念" class="headerlink" title="核心概念"></a>核心概念</h2><h3 id="科学上网-翻墙"><a href="#科学上网-翻墙" class="headerlink" title="科学上网 &#x2F; 翻墙"></a>科学上网 &#x2F; 翻墙</h3><p>“科学上网”是一个委婉说法，意思是通过技术手段访问被屏蔽的网站。Google、YouTube、Twitter、Wikipedia……这些网站在中国大陆无法直接打开，需要借助代理工具绕过封锁才能访问。”翻墙”是更口语化的说法，意思一样。</p><h3 id="GFW（Great-Firewall）"><a href="#GFW（Great-Firewall）" class="headerlink" title="GFW（Great Firewall）"></a>GFW（Great Firewall）</h3><p>GFW 是 Great Firewall 的缩写，中文叫”防火长城”，官方名称是”金盾工程”。它是中国的互联网审查系统，负责屏蔽境外网站、过滤敏感内容。你打不开 Google，就是 GFW 在起作用。</p><p>GFW 不是一台机器，而是一整套技术体系，包括 DNS 污染、IP 封锁、深度包检测（DPI）等多种手段。科学上网的所有技术，本质上都是在跟 GFW 的检测机制做对抗。</p><h3 id="代理（Proxy）"><a href="#代理（Proxy）" class="headerlink" title="代理（Proxy）"></a>代理（Proxy）</h3><p>代理是一台中间服务器。你的设备不直接访问目标网站，而是把请求发给代理服务器，由它帮你去访问，再把结果传回给你。</p><p>打个比方：你想买一本国外的书，但你自己没法直接下单。于是你找了一个朋友（代理服务器），他帮你下单、收货、再转寄给你。网站看到的是你朋友的地址，不是你的。</p><p>代理是科学上网最核心的概念——几乎所有翻墙工具本质上都是在帮你建立一条到代理服务器的连接。</p><h3 id="VPN（虚拟专用网络）"><a href="#VPN（虚拟专用网络）" class="headerlink" title="VPN（虚拟专用网络）"></a>VPN（虚拟专用网络）</h3><p>VPN 是 Virtual Private Network 的缩写。它在你的设备和服务器之间创建一条加密隧道，所有网络流量都通过这条隧道传输。</p><p>VPN 最初是为企业设计的——公司员工在外出差时，通过 VPN 连回公司内网，就像坐在办公室里一样。后来人们发现 VPN 也能用来绕过网络封锁，于是”翻墙”和”VPN”就被划上了等号。</p><p>但严格来说，VPN 和代理是不同的东西：</p><table><thead><tr><th>区别</th><th>VPN</th><th>代理</th></tr></thead><tbody><tr><td>工作层级</td><td>系统层面，接管所有流量</td><td>通常在应用层面工作</td></tr><tr><td>加密</td><td>全程加密</td><td>取决于具体协议</td></tr><tr><td>原始设计目的</td><td>企业远程访问</td><td>流量转发</td></tr><tr><td>速度</td><td>因为加密所有流量，可能较慢</td><td>可以选择性代理，更灵活</td></tr></tbody></table><p>现在大家说”VPN”，往往泛指所有翻墙工具。但技术讨论中需要区分：我们日常用的 Clash、Shadowrocket 这些，严格来说是代理客户端，不是 VPN 客户端。不过随着 TUN 模式的普及（后面会讲），两者的界限越来越模糊了。</p><p><img src="/images/inline/vpn-vs-proxy.webp" alt="VPN 与代理的区别"><br><em>图片来源：<a href="https://nordlayer.com/">NordLayer</a></em></p><h3 id="机场"><a href="#机场" class="headerlink" title="机场"></a>机场</h3><p>“机场”是代理服务提供商的俗称。你可以把它理解为”代理服务的供应商”——你付费，它给你提供代理服务器（节点）供你使用。</p><p>这个名字的由来很有趣：早期 Shadowsocks 客户端里，每个节点前面会显示一个飞机图标，提供这些节点的服务商自然就被叫做”机场”了。虽然后来客户端早就不用飞机图标了，但这个叫法一直流传了下来。</p><p>大部分用户不需要自己搭建代理服务器，只需要找一个靠谱的机场，把它提供的订阅链接导入客户端就能用了。</p><hr><h2 id="软件相关术语"><a href="#软件相关术语" class="headerlink" title="软件相关术语"></a>软件相关术语</h2><h3 id="客户端（Client）"><a href="#客户端（Client）" class="headerlink" title="客户端（Client）"></a>客户端（Client）</h3><p>客户端就是你安装在手机、电脑上的那个代理软件。它的作用是接收你的网络请求，按照规则决定哪些走代理、哪些直连，然后跟代理服务器建立连接。</p><p>不同平台上常用的客户端不一样：</p><ul><li><strong>Windows</strong>：Clash Verge Rev、v2rayN</li><li><strong>macOS</strong>：Clash Verge Rev、<a href="https://nssurge.com/">Surge</a></li><li><strong>iOS</strong>：Shadowrocket、Surge、<a href="https://apps.apple.com/app/stash-rule-based-proxy/id1596063349">Stash</a></li><li><strong>Android</strong>：<a href="https://github.com/MetaCubeX/ClashMetaForAndroid">Clash Meta for Android</a>、v2rayNG、<a href="https://github.com/MatsuriDayo/NekoBoxForAndroid">NekoBox</a></li></ul><p>选客户端的核心考虑：支持的协议是否全面、界面是否好用、是否还在维护更新。各客户端的详细对比可参考 <a href="/posts/software-overview/">V2Ray、Xray、Clash、Sing-box……我该用哪个？</a>。</p><h3 id="内核（Core-Kernel）"><a href="#内核（Core-Kernel）" class="headerlink" title="内核（Core &#x2F; Kernel）"></a>内核（Core &#x2F; Kernel）</h3><p>内核是客户端底层真正干活的引擎。客户端是你看到的界面（GUI），内核是在背后处理网络连接的核心程序。</p><p>一个类比：客户端是汽车的仪表盘和方向盘，内核是发动机。你通过仪表盘操控，但真正驱动车跑的是发动机。</p><p>常见内核：</p><ul><li><strong>v2ray-core</strong>：最早的多协议代理内核，由 <a href="https://www.v2fly.org/">V2Fly</a> 社区维护</li><li><strong><a href="https://xtls.github.io/">Xray-core</a></strong>：v2ray-core 的分支，支持 VLESS 和 Reality</li><li><strong><a href="https://sing-box.sagernet.org/">sing-box</a></strong>：较新的内核，性能好，设计现代</li><li><strong><a href="https://github.com/MetaCubeX/mihomo">mihomo</a></strong>（原 Clash.Meta）：兼容 Clash 配置格式的内核</li></ul><p>同一个客户端可能支持切换不同内核，同一个内核也可能被多个客户端使用。比如 Clash Verge Rev 用的是 mihomo 内核。</p><h3 id="订阅链接（Subscription-Link）"><a href="#订阅链接（Subscription-Link）" class="headerlink" title="订阅链接（Subscription Link）"></a>订阅链接（Subscription Link）</h3><p>订阅链接是机场提供给你的一个 URL 地址。你把它粘贴到客户端里，客户端会自动从这个链接下载所有节点的配置信息。</p><p>订阅链接的好处是自动更新——机场增减节点、更换服务器时，你不需要手动修改，客户端定期刷新订阅就能拿到最新的节点列表。</p><p>注意：订阅链接相当于你账户的凭证，不要分享给别人，也不要发到公开场合。</p><h3 id="节点（Node）"><a href="#节点（Node）" class="headerlink" title="节点（Node）"></a>节点（Node）</h3><p>一个节点就是一台代理服务器。机场通常会提供几十甚至上百个节点，分布在不同国家和地区——香港、日本、新加坡、美国等等。</p><p>不同节点的区别：</p><ul><li><strong>地理位置</strong>：影响延迟和能解锁的内容</li><li><strong>线路类型</strong>：直连还是中转（后面会讲）</li><li><strong>负载情况</strong>：用的人多的节点可能会慢</li><li><strong>倍率</strong>：消耗流量的计算比例（后面会讲）</li></ul><p>日常使用时，你通常不需要手动选节点——客户端可以配置自动测速、自动选择最优节点。</p><h3 id="分流-规则（Routing-Rules）"><a href="#分流-规则（Routing-Rules）" class="headerlink" title="分流 &#x2F; 规则（Routing Rules）"></a>分流 &#x2F; 规则（Routing Rules）</h3><p>分流规则决定了哪些流量走代理、哪些直连、哪些拒绝连接。</p><p>为什么需要分流？因为不是所有网站都需要代理。访问百度、淘宝这些国内网站，走代理反而更慢。合理的分流策略是：国外网站走代理，国内网站直连，广告域名直接拦截。</p><p>规则的来源通常是社区维护的规则集（rule set），你不需要自己写——导入一份成熟的规则集，绝大部分场景就覆盖了。关于分流规则的深入解读，参见 <a href="/posts/what-are-rules/">什么是分流规则</a>。</p><h3 id="TUN-模式"><a href="#TUN-模式" class="headerlink" title="TUN 模式"></a>TUN 模式</h3><p>TUN 模式是代理客户端的一种工作方式。它会在你的系统中创建一个虚拟网卡，接管所有网络流量——不管是浏览器、游戏、命令行工具还是其他任何应用，所有流量都会经过代理客户端处理。</p><p>这跟 VPN 的工作方式非常相似，也是为什么说现代代理工具和 VPN 的界限越来越模糊。</p><h3 id="系统代理（System-Proxy）"><a href="#系统代理（System-Proxy）" class="headerlink" title="系统代理（System Proxy）"></a>系统代理（System Proxy）</h3><p>系统代理是另一种工作方式。它利用操作系统自带的代理设置（HTTP&#x2F;SOCKS 代理），让支持系统代理的应用通过代理连接。</p><p>问题在于：不是所有应用都会读取系统代理设置。游戏、很多命令行工具、部分桌面应用会忽略系统代理，导致这些应用的流量无法走代理。</p><p>简单对比：</p><table><thead><tr><th></th><th>TUN 模式</th><th>系统代理</th></tr></thead><tbody><tr><td>覆盖范围</td><td>所有流量</td><td>仅遵守系统代理设置的应用</td></tr><tr><td>需要权限</td><td>管理员权限</td><td>普通权限</td></tr><tr><td>资源占用</td><td>较高</td><td>较低</td></tr><tr><td>适用场景</td><td>需要全局代理（游戏、开发等）</td><td>日常浏览网页</td></tr></tbody></table><p>对大部分用户，推荐使用 TUN 模式，省心。</p><hr><h2 id="协议相关术语"><a href="#协议相关术语" class="headerlink" title="协议相关术语"></a>协议相关术语</h2><h3 id="协议（Protocol）"><a href="#协议（Protocol）" class="headerlink" title="协议（Protocol）"></a>协议（Protocol）</h3><p>协议是客户端和代理服务器之间的”通信规则”。不同协议在安全性、速度、抗检测能力上各有差异。</p><p>你可以把协议理解为”语言”——客户端和服务器必须用同一种”语言”才能通信。</p><h3 id="Shadowsocks（SS）"><a href="#Shadowsocks（SS）" class="headerlink" title="Shadowsocks（SS）"></a>Shadowsocks（SS）</h3><p>Shadowsocks 是最早专为翻墙设计的代理协议之一，由 clowwindy 在 2012 年开发。它设计简洁、性能好，是科学上网历史上里程碑式的项目。</p><p>虽然现在有更先进的协议，但 Shadowsocks（特别是 SS-2022 版本）仍然在使用中。很多机场也还提供 SS 节点。</p><h3 id="V2Ray-Xray"><a href="#V2Ray-Xray" class="headerlink" title="V2Ray &#x2F; Xray"></a>V2Ray &#x2F; Xray</h3><p>V2Ray 是一个代理平台（框架），不是单一协议。它支持多种协议、多种传输方式，是 Shadowsocks 之后最重要的代理项目。</p><p>Xray 是 V2Ray 的社区分支，在 V2Ray 基础上增加了 VLESS 协议和 Reality 技术等重要功能。目前社区的活跃开发主要在 Xray 这边。</p><h3 id="VMess"><a href="#VMess" class="headerlink" title="VMess"></a>VMess</h3><p>VMess 是 V2Ray 的原生协议。它有加密和认证机制，在早期是主流选择。但现在 VMess 在安全性和效率上不如新协议，特征也容易被 GFW 识别。如果你的机场还在用裸 VMess（不套 TLS），建议考虑更换。</p><h3 id="VLESS"><a href="#VLESS" class="headerlink" title="VLESS"></a>VLESS</h3><p>VLESS 是 VMess 的简化版本，去掉了冗余的加密层（因为传输层已经有 TLS 加密了，协议层再加密是浪费资源）。VLESS 本身不加密，依赖传输层（TLS）提供安全性。</p><p>VLESS 通常搭配 Reality 使用，是目前最推荐的协议组合之一。</p><h3 id="Reality"><a href="#Reality" class="headerlink" title="Reality"></a>Reality</h3><p>Reality 是 Xray 团队开发的一项技术，解决的是”TLS 指纹”问题。</p><p>传统的 TLS 代理需要一个域名和证书，GFW 可以通过分析 TLS 握手特征来识别代理流量。Reality 的做法是让你的代理流量看起来就像在访问一个真实的网站（比如微软或苹果的官网），GFW 如果去主动探测，得到的也是那个真实网站的回应。</p><p>这让 GFW 很难区分你到底是在正常访问网站还是在用代理。</p><h3 id="Trojan"><a href="#Trojan" class="headerlink" title="Trojan"></a>Trojan</h3><p>Trojan 协议的思路是”藏在 HTTPS 里”——它把代理流量伪装成普通的 HTTPS 流量。当有人（包括 GFW）直接访问 Trojan 服务器时，看到的就是一个正常的网站。</p><h3 id="Hysteria2"><a href="#Hysteria2" class="headerlink" title="Hysteria2"></a>Hysteria2</h3><p>Hysteria2 是基于 QUIC 协议（UDP）的代理协议。它的特点是速度快，特别适合高丢包环境。但因为是 UDP 协议，在某些网络环境下可能被限速或屏蔽。</p><h3 id="Clash"><a href="#Clash" class="headerlink" title="Clash"></a>Clash</h3><p>Clash 是一个基于规则的代理客户端框架。注意它不是一种协议，而是一个软件。Clash 支持多种协议（SS、VMess、VLESS、Trojan 等），核心特色是强大的分流规则系统。</p><p>原版 Clash 和 Clash Premium 已经停止维护。现在社区的主流是 mihomo（原 Clash.Meta），它兼容 Clash 配置格式但有大量增强。<a href="https://github.com/clash-verge-rev/clash-verge-rev">Clash Verge Rev</a> 等客户端底层用的就是 mihomo 内核。更多信息可参考 <a href="https://wiki.metacubex.one/">Clash Wiki</a>。</p><h3 id="Sing-box"><a href="#Sing-box" class="headerlink" title="Sing-box"></a>Sing-box</h3><p>Sing-box 是一个较新的代理平台，支持多种协议，设计更现代、性能更好。它既可以作为服务端也可以作为客户端使用。越来越多的客户端开始支持 sing-box 内核。</p><hr><h2 id="网络相关术语"><a href="#网络相关术语" class="headerlink" title="网络相关术语"></a>网络相关术语</h2><h3 id="DNS（域名系统）"><a href="#DNS（域名系统）" class="headerlink" title="DNS（域名系统）"></a>DNS（域名系统）</h3><p>DNS 的作用是把域名（比如 google.com）翻译成 IP 地址（比如 142.250.80.46）。你的设备需要知道 IP 地址才能连接服务器，DNS 就是做这个翻译工作的。</p><p>在代理场景中，DNS 配置非常重要——配置不当可能导致连接失败或隐私泄漏。</p><h3 id="DNS-污染-DNS-劫持"><a href="#DNS-污染-DNS-劫持" class="headerlink" title="DNS 污染 &#x2F; DNS 劫持"></a>DNS 污染 &#x2F; DNS 劫持</h3><p>这是 GFW 的一种封锁手段。当你查询被封锁域名的 IP 地址时，GFW 会抢先返回一个错误的 IP 地址，让你根本连不上正确的服务器。</p><p>比如你查询 google.com 的 IP，正常应该返回 Google 的服务器地址，但 GFW 返回了一个无效地址——你自然就打不开 Google 了。</p><h3 id="Fake-IP"><a href="#Fake-IP" class="headerlink" title="Fake-IP"></a>Fake-IP</h3><p>Fake-IP 是代理客户端的一种 DNS 处理策略。当应用查询域名时，客户端不去真的解析，而是返回一个假的 IP 地址（通常是 198.18.x.x 这样的保留地址段）。客户端记住这个假 IP 对应的域名，当流量发往这个假 IP 时，客户端知道该把它转给哪个代理服务器，由代理服务器在远端做真正的 DNS 解析。</p><p>好处是避免了本地 DNS 污染，缺点是某些依赖真实 IP 的应用可能出问题。</p><h3 id="SNI（Server-Name-Indication）"><a href="#SNI（Server-Name-Indication）" class="headerlink" title="SNI（Server Name Indication）"></a>SNI（Server Name Indication）</h3><p>SNI 是 TLS 握手过程中的一个字段，告诉服务器你要访问哪个域名。问题在于 SNI 是明文的——GFW 可以读取 SNI 来判断你在访问什么网站。</p><p>这也是为什么 Reality 等技术要在 SNI 上做文章——让 SNI 显示的是一个正常网站的域名。</p><h3 id="TLS（传输层安全）"><a href="#TLS（传输层安全）" class="headerlink" title="TLS（传输层安全）"></a>TLS（传输层安全）</h3><p>TLS 是 HTTPS 使用的加密协议。当你看到浏览器地址栏有锁的图标，就是在用 TLS 加密。代理协议（如 VLESS、Trojan）也通常运行在 TLS 之上，确保传输内容被加密。</p><h3 id="DPI（深度包检测）"><a href="#DPI（深度包检测）" class="headerlink" title="DPI（深度包检测）"></a>DPI（深度包检测）</h3><p>DPI 是 GFW 的核心检测技术之一。普通的防火墙只看数据包的头部信息（来源、目标、端口），DPI 会深入检查数据包的内容和行为特征，试图判断这个连接到底是正常流量还是代理流量。</p><p>各种代理协议的抗检测设计，很大程度上就是在对抗 DPI。</p><hr><h2 id="机场服务相关术语"><a href="#机场服务相关术语" class="headerlink" title="机场服务相关术语"></a>机场服务相关术语</h2><h3 id="直连（Direct）"><a href="#直连（Direct）" class="headerlink" title="直连（Direct）"></a>直连（Direct）</h3><p>直连是指你的设备直接连接到海外的代理服务器，中间不经过任何国内的中继。直连的延迟通常最低，但在 GFW 加强封锁时最容易受影响——因为跨境连接是 GFW 重点监控的对象。</p><h3 id="中转（Relay-Transit）"><a href="#中转（Relay-Transit）" class="headerlink" title="中转（Relay &#x2F; Transit）"></a>中转（Relay &#x2F; Transit）</h3><p>中转是指你的流量先到达一台国内的服务器，再由这台服务器转发到海外的代理服务器。国内到国内的连接不受 GFW 干扰，而国内中转服务器到海外服务器的连接通常使用优化过的线路（如 IPLC、IEPL 专线）。</p><p>中转线路更稳定、更抗封锁，但成本也更高，所以中转节点的价格通常比直连贵。</p><h3 id="倍率（Rate-Multiplier）"><a href="#倍率（Rate-Multiplier）" class="headerlink" title="倍率（Rate &#x2F; Multiplier）"></a>倍率（Rate &#x2F; Multiplier）</h3><p>机场里经常看到节点标注”0.5x””1x””3x”这样的倍率。这是流量消耗的计算比例。</p><p>比如你的套餐有 100GB 流量：</p><ul><li>用 1x 倍率的节点：实际用 10GB，扣 10GB</li><li>用 0.5x 倍率的节点：实际用 10GB，只扣 5GB（划算）</li><li>用 3x 倍率的节点：实际用 10GB，扣 30GB（贵）</li></ul><p>一般来说，中转线路和优质线路的倍率会更高。</p><h3 id="落地-IP-出口-IP"><a href="#落地-IP-出口-IP" class="headerlink" title="落地 IP &#x2F; 出口 IP"></a>落地 IP &#x2F; 出口 IP</h3><p>落地 IP 是指你的流量最终从哪个 IP 地址”出去”。目标网站看到的就是这个 IP。</p><p>这个概念很重要，因为它决定了你能不能解锁某些服务——比如 Netflix 会检查你的 IP 是不是来自它允许的地区。</p><h3 id="解锁（Unlock）"><a href="#解锁（Unlock）" class="headerlink" title="解锁（Unlock）"></a>解锁（Unlock）</h3><p>解锁是指通过代理访问有地区限制的内容。比如某些 Netflix 内容只对美国用户开放、Disney+ 某些内容限定日本地区。如果你连接的节点的落地 IP 能通过这些平台的地区检测，就说这个节点”能解锁”该服务。</p><p>不是所有节点都能解锁流媒体。很多数据中心 IP 已经被流媒体平台标记和屏蔽了，只有原生住宅 IP 或专门做了解锁的 IP 才行。</p><hr><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="Q-VPN-和代理有什么区别？"><a href="#Q-VPN-和代理有什么区别？" class="headerlink" title="Q: VPN 和代理有什么区别？"></a>Q: VPN 和代理有什么区别？</h3><p>VPN 在系统层面创建一个虚拟网络接口，加密所有流量，你的设备就像直接接入了远端的网络。代理通常在应用层面工作，只处理特定应用的流量。</p><p>但这个界限现在越来越模糊了。现代代理工具开启 TUN 模式后，同样会创建虚拟网卡、接管所有流量，效果上跟 VPN 很像。两者的真正区别更多在技术实现和协议层面，对普通用户来说体感差不多。</p><h3 id="Q-为什么叫”机场”？"><a href="#Q-为什么叫”机场”？" class="headerlink" title="Q: 为什么叫”机场”？"></a>Q: 为什么叫”机场”？</h3><p>早期 Shadowsocks 客户端（如 ShadowsocksR）的节点列表中，每个节点前面都有一个飞机的图标。用户习惯了用”飞机”来指代代理节点，提供这些节点的服务商自然就被叫做”机场”。这个称呼一直沿用至今，已经成了圈子里的标准叫法。</p><h3 id="Q-Clash-和-V2Ray-是什么关系？"><a href="#Q-Clash-和-V2Ray-是什么关系？" class="headerlink" title="Q: Clash 和 V2Ray 是什么关系？"></a>Q: Clash 和 V2Ray 是什么关系？</h3><p>V2Ray（以及 Xray）是代理内核——它负责实际的代理连接、协议处理。Clash 是客户端框架——它提供界面、分流规则、策略组等功能。</p><p>Clash 可以使用 V2Ray 的协议（VMess、VLESS 等），但 Clash 有自己的内核（mihomo），不依赖 v2ray-core。它们是不同层级的东西：一个是引擎，一个是驾驶舱。</p><h3 id="Q-订阅链接和节点链接有什么区别？"><a href="#Q-订阅链接和节点链接有什么区别？" class="headerlink" title="Q: 订阅链接和节点链接有什么区别？"></a>Q: 订阅链接和节点链接有什么区别？</h3><p>节点链接是单个代理服务器的配置信息，格式类似 <code>vless://xxx@server:port?...</code>。一个节点链接对应一台服务器。</p><p>订阅链接是一个 URL（比如 <code>https://xxx.com/api/sub?token=xxx</code>），指向一个动态更新的列表，这个列表里包含了很多节点的配置。客户端访问订阅链接后会自动获取里面所有的节点。</p><p>简单说：节点链接 &#x3D; 一张机票，订阅链接 &#x3D; 一本机票册，而且册子里的票会自动更新。</p>]]></content>
      
      
      <categories>
          
          <category> 入门指南 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> 机场 </tag>
            
            <tag> Clash </tag>
            
            <tag> V2Ray </tag>
            
            <tag> 代理 </tag>
            
            <tag> 新手入门 </tag>
            
            <tag> 术语 </tag>
            
            <tag> VPN </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>Sing-box 使用指南</title>
      <link href="/posts/singbox-guide/"/>
      <url>/posts/singbox-guide/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：sing-box 是由 SagerNet 开发者从零构建的新一代代理平台，采用 JSON 配置格式，支持几乎所有主流代理协议。它既是一个内核，也在逐步发展自己的客户端生态。本文介绍 sing-box 的核心概念、配置结构、使用方法，以及它与 Clash 生态的对比。</p></blockquote><hr><h2 id="sing-box-是什么"><a href="#sing-box-是什么" class="headerlink" title="sing-box 是什么"></a>sing-box 是什么</h2><p><a href="https://github.com/SagerNet/sing-box">sing-box</a> 是一个通用的代理平台。注意这个用词——它不叫”代理工具”或”代理内核”，而是<strong>平台</strong>。这反映了它的设计野心：做一个统一的、可以支撑各种使用场景的代理基础设施。</p><p>sing-box 的核心特点：</p><ul><li><strong>从零开发</strong>：不是任何现有项目的分叉，完全从头用 Go 语言编写</li><li><strong>协议全面</strong>：支持 Shadowsocks、VMess、VLESS、Trojan、Hysteria、Hysteria 2、TUIC、WireGuard、Tor 等几乎所有主流协议</li><li><strong>JSON 配置</strong>：使用 JSON 格式编写配置文件（而非 Clash 生态的 YAML）</li><li><strong>跨平台</strong>：覆盖 Windows、macOS、Linux、iOS（SFI）、Android（SFA）</li><li><strong>模块化架构</strong>：入站（inbound）、出站（outbound）、路由（route）三层结构清晰分离</li></ul><p>项目地址：<a href="https://github.com/SagerNet/sing-box">https://github.com/SagerNet/sing-box</a><br>官方文档：<a href="https://sing-box.sagernet.org/">https://sing-box.sagernet.org/</a></p><hr><h2 id="配置格式：JSON-vs-YAML"><a href="#配置格式：JSON-vs-YAML" class="headerlink" title="配置格式：JSON vs YAML"></a>配置格式：JSON vs YAML</h2><p>sing-box 和 Clash 生态最直观的区别就是配置格式。Clash 系使用 YAML，sing-box 使用 JSON。</p><h3 id="格式差异示例"><a href="#格式差异示例" class="headerlink" title="格式差异示例"></a>格式差异示例</h3><p>Clash（YAML）的写法：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">proxies:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">&quot;我的节点&quot;</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">vless</span></span><br><span class="line">    <span class="attr">server:</span> <span class="string">example.com</span></span><br><span class="line">    <span class="attr">port:</span> <span class="number">443</span></span><br><span class="line">    <span class="attr">uuid:</span> <span class="string">xxx-xxx</span></span><br></pre></td></tr></table></figure><p>sing-box（JSON）的写法：</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;outbounds&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;我的节点&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;vless&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;server&quot;</span><span class="punctuation">:</span> <span class="string">&quot;example.com&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;server_port&quot;</span><span class="punctuation">:</span> <span class="number">443</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;uuid&quot;</span><span class="punctuation">:</span> <span class="string">&quot;xxx-xxx&quot;</span></span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">]</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><p>JSON 格式的优势是结构严谨、解析无歧义，适合程序生成和处理。缺点是对人类来说可读性不如 YAML，而且不支持注释（虽然 sing-box 的解析器实际上允许注释，但这不是 JSON 标准的一部分）。</p><hr><h2 id="配置结构详解"><a href="#配置结构详解" class="headerlink" title="配置结构详解"></a>配置结构详解</h2><p>一个完整的 sing-box 配置文件由几个核心模块组成。理解这个结构是使用 sing-box 的基础。</p><h3 id="Inbound（入站）"><a href="#Inbound（入站）" class="headerlink" title="Inbound（入站）"></a>Inbound（入站）</h3><p>入站定义了 sing-box 如何接收需要代理的流量。常见的入站类型包括：</p><ul><li><strong>tun</strong>：创建虚拟网卡，接管系统所有流量（等同于 Clash 的 TUN 模式）</li><li><strong>mixed</strong>：同时监听 HTTP 和 SOCKS5 代理（等同于 Clash 的混合端口）</li><li><strong>http</strong>：纯 HTTP 代理入站</li><li><strong>socks</strong>：纯 SOCKS5 代理入站</li></ul><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;inbounds&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;mixed&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;mixed-in&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;listen&quot;</span><span class="punctuation">:</span> <span class="string">&quot;127.0.0.1&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;listen_port&quot;</span><span class="punctuation">:</span> <span class="number">7890</span></span><br><span class="line">    <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;tun&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;tun-in&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;auto_route&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;strict_route&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;stack&quot;</span><span class="punctuation">:</span> <span class="string">&quot;mixed&quot;</span></span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">]</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h3 id="Outbound（出站）"><a href="#Outbound（出站）" class="headerlink" title="Outbound（出站）"></a>Outbound（出站）</h3><p>出站定义了流量要往哪里发。每个出站对应一个代理节点或特殊处理方式：</p><ul><li><strong>direct</strong>：直连，不走代理</li><li><strong>block</strong>：丢弃流量</li><li><strong>dns</strong>：DNS 查询专用</li><li>各种代理协议（vless、vmess、trojan、shadowsocks、hysteria2 等）</li><li><strong>selector</strong>：手动选择组（类似 Clash 的 select 策略组）</li><li><strong>urltest</strong>：自动选择延迟最低的节点（类似 Clash 的 url-test）</li></ul><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;outbounds&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;selector&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;proxy&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;outbounds&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;auto&quot;</span><span class="punctuation">,</span> <span class="string">&quot;node-hk&quot;</span><span class="punctuation">,</span> <span class="string">&quot;node-jp&quot;</span><span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;default&quot;</span><span class="punctuation">:</span> <span class="string">&quot;auto&quot;</span></span><br><span class="line">    <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;urltest&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;auto&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;outbounds&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;node-hk&quot;</span><span class="punctuation">,</span> <span class="string">&quot;node-jp&quot;</span><span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;interval&quot;</span><span class="punctuation">:</span> <span class="string">&quot;5m&quot;</span></span><br><span class="line">    <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;vless&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;node-hk&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;server&quot;</span><span class="punctuation">:</span> <span class="string">&quot;hk.example.com&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;server_port&quot;</span><span class="punctuation">:</span> <span class="number">443</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;uuid&quot;</span><span class="punctuation">:</span> <span class="string">&quot;xxx&quot;</span></span><br><span class="line">    <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;direct&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;direct&quot;</span></span><br><span class="line">    <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;block&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;block&quot;</span></span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">]</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h3 id="Route（路由）"><a href="#Route（路由）" class="headerlink" title="Route（路由）"></a>Route（路由）</h3><p>路由模块决定了哪些流量走哪个出站——这就是分流规则。sing-box 的路由规则采用”从上到下匹配，命中即停止”的逻辑：</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;route&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;rules&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;geosite&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;cn&quot;</span><span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;outbound&quot;</span><span class="punctuation">:</span> <span class="string">&quot;direct&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;geoip&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;cn&quot;</span><span class="punctuation">,</span> <span class="string">&quot;private&quot;</span><span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;outbound&quot;</span><span class="punctuation">:</span> <span class="string">&quot;direct&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;geosite&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;category-ads-all&quot;</span><span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;outbound&quot;</span><span class="punctuation">:</span> <span class="string">&quot;block&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;final&quot;</span><span class="punctuation">:</span> <span class="string">&quot;proxy&quot;</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><p><code>final</code> 字段指定了没有匹配到任何规则时的默认出站——通常设为你的代理策略组。</p><h3 id="Rule-Set（规则集）"><a href="#Rule-Set（规则集）" class="headerlink" title="Rule Set（规则集）"></a>Rule Set（规则集）</h3><p>sing-box 1.8 版本引入了 rule set 来替代传统的 GeoIP&#x2F;GeoSite 数据库。rule set 可以从远程 URL 加载，支持更灵活的规则管理：</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;route&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;rule_set&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;remote&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;geosite-cn&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;format&quot;</span><span class="punctuation">:</span> <span class="string">&quot;binary&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;url&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-cn.srs&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;rules&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;rule_set&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;geosite-cn&quot;</span><span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;outbound&quot;</span><span class="punctuation">:</span> <span class="string">&quot;direct&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">]</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><hr><h2 id="DNS-配置"><a href="#DNS-配置" class="headerlink" title="DNS 配置"></a>DNS 配置</h2><p>sing-box 的 DNS 配置是一个独立的模块，功能很强大。它支持多种 DNS 协议和分流策略：</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;dns&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;servers&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;remote-dns&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;address&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://dns.google/dns-query&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;detour&quot;</span><span class="punctuation">:</span> <span class="string">&quot;proxy&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;local-dns&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;address&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://dns.alidns.com/dns-query&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;detour&quot;</span><span class="punctuation">:</span> <span class="string">&quot;direct&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;rules&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;geosite&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;cn&quot;</span><span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;server&quot;</span><span class="punctuation">:</span> <span class="string">&quot;local-dns&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;final&quot;</span><span class="punctuation">:</span> <span class="string">&quot;remote-dns&quot;</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><p>这个配置实现了一个常见的 DNS 分流策略：国内域名用阿里 DNS 解析（走直连），其他域名用 Google DNS 解析（走代理）。这样既保证了国内网站的解析速度，又避免了海外域名被 DNS 污染。</p><hr><h2 id="如何配合订阅使用"><a href="#如何配合订阅使用" class="headerlink" title="如何配合订阅使用"></a>如何配合订阅使用</h2><p>sing-box 的配置是纯 JSON，不像 Clash 那样有统一的订阅格式标准。实际使用中有几种方式：</p><h3 id="方式一：sing-box-格式订阅"><a href="#方式一：sing-box-格式订阅" class="headerlink" title="方式一：sing-box 格式订阅"></a>方式一：sing-box 格式订阅</h3><p>部分机场已经开始提供 sing-box 原生格式的订阅链接。这种订阅下载下来就是一个完整的 sing-box JSON 配置文件，直接使用即可。这是最省事的方式。</p><h3 id="方式二：通过订阅转换"><a href="#方式二：通过订阅转换" class="headerlink" title="方式二：通过订阅转换"></a>方式二：通过订阅转换</h3><p>如果你的机场只提供 Clash 格式订阅，可以使用订阅转换工具（如 subconverter）将 Clash 格式转换为 sing-box 格式。不过转换可能不够完美，复杂的规则可能需要手动调整。</p><h3 id="方式三：手动编写配置"><a href="#方式三：手动编写配置" class="headerlink" title="方式三：手动编写配置"></a>方式三：手动编写配置</h3><p>对于有技术能力的用户，可以手动编写 sing-box 配置文件。这种方式灵活性最高，但门槛也最高。适合自建节点的用户或需要高度自定义的场景。</p><hr><h2 id="使用-sing-box-的-GUI-客户端"><a href="#使用-sing-box-的-GUI-客户端" class="headerlink" title="使用 sing-box 的 GUI 客户端"></a>使用 sing-box 的 GUI 客户端</h2><p>对于普通用户，直接使用命令行版本的 sing-box 门槛较高。幸运的是，有多个图形化客户端基于 sing-box 内核开发，大幅降低了使用难度。</p><h3 id="桌面端"><a href="#桌面端" class="headerlink" title="桌面端"></a>桌面端</h3><ul><li><strong>sing-box 官方客户端</strong>：sing-box 自身也在开发桌面版的图形界面，支持 macOS 和 Windows，可以直接从 <a href="https://github.com/SagerNet/sing-box/releases">GitHub Releases</a> 下载</li><li><strong>Clash Nyanpasu</strong>：支持切换 mihomo 和 sing-box 内核，提供 Clash 风格的界面</li></ul><h3 id="Android"><a href="#Android" class="headerlink" title="Android"></a>Android</h3><ul><li><strong>SFA（sing-box for Android）</strong>：sing-box 的官方 Android 客户端，可以从 <a href="https://play.google.com/store/apps/details?id=io.nekohasekai.sfa">Google Play</a> 或 GitHub 下载</li><li><strong>NekoBox for Android</strong>：由 <a href="https://github.com/MatsuriDayo/NekoBoxForAndroid">MatsuriDayo</a> 开发，支持 sing-box 内核，界面友好</li></ul><h3 id="iOS"><a href="#iOS" class="headerlink" title="iOS"></a>iOS</h3><ul><li><strong>SFI（sing-box for iOS）</strong>：sing-box 的官方 iOS 客户端，在 App Store 上架（需要非中国区 Apple ID）</li></ul><hr><h2 id="命令行使用"><a href="#命令行使用" class="headerlink" title="命令行使用"></a>命令行使用</h2><p>对于服务器部署或高级用户，sing-box 的命令行使用很直接：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 运行</span></span><br><span class="line">sing-box run -c config.json</span><br><span class="line"></span><br><span class="line"><span class="comment"># 检查配置文件是否合法</span></span><br><span class="line">sing-box check -c config.json</span><br><span class="line"></span><br><span class="line"><span class="comment"># 格式化配置文件</span></span><br><span class="line">sing-box format -c config.json</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看版本</span></span><br><span class="line">sing-box version</span><br></pre></td></tr></table></figure><p>配置文件默认位置因平台而异：</p><ul><li>Linux：<code>/etc/sing-box/config.json</code></li><li>macOS：<code>~/Library/Application Support/sing-box/config.json</code></li><li>Windows：程序所在目录下的 <code>config.json</code></li></ul><hr><h2 id="sing-box-与-mihomo-的比较"><a href="#sing-box-与-mihomo-的比较" class="headerlink" title="sing-box 与 mihomo 的比较"></a>sing-box 与 mihomo 的比较</h2><p>这是很多用户关心的问题。两者都是优秀的代理内核，但设计哲学不同。</p><table><thead><tr><th>对比维度</th><th>sing-box</th><th>mihomo（Clash Meta）</th></tr></thead><tbody><tr><td>配置格式</td><td>JSON</td><td>YAML</td></tr><tr><td>设计思路</td><td>从零开发，不依赖任何现有项目</td><td>Clash 生态的延续和增强</td></tr><tr><td>协议支持</td><td>基本相同，都覆盖了主流协议</td><td>基本相同</td></tr><tr><td>规则系统</td><td>基于 rule set 的模块化设计</td><td>兼容 Clash 规则格式，支持 rule-provider</td></tr><tr><td>客户端生态</td><td>自有客户端（SFA&#x2F;SFI）+ 少量第三方</td><td>大量 Clash 生态客户端（Verge Rev、Nyanpasu 等）</td></tr><tr><td>订阅兼容</td><td>自有格式，Clash 格式需要转换</td><td>完全兼容 Clash 订阅格式</td></tr><tr><td>社区规模</td><td>增长中，但相对较小</td><td>成熟且庞大的 Clash 社区</td></tr><tr><td>学习曲线</td><td>较陡——JSON 配置需要理解完整结构</td><td>较缓——大量教程和现成配置可参考</td></tr></tbody></table><h3 id="该选哪个？"><a href="#该选哪个？" class="headerlink" title="该选哪个？"></a>该选哪个？</h3><ul><li><strong>如果你是新手</strong>，先用 mihomo（通过 Clash Verge Rev 等客户端），因为生态成熟、教程多、机场支持好。</li><li><strong>如果你是高级用户</strong>，sing-box 的架构更现代，配置结构更清晰，适合需要深度自定义的场景。</li><li><strong>如果你用 iOS</strong>，sing-box 的官方客户端 SFI 是一个值得关注的选择。</li><li><strong>如果你自建节点</strong>，两者都可以作为服务端使用，sing-box 在这方面的文档更完善。</li></ul><p>实际上，两个项目的开发者之间也有交流和相互借鉴。它们更像是同一领域的不同设计方案，而非对立的竞争关系。</p><hr><h2 id="从-Clash-迁移到-sing-box"><a href="#从-Clash-迁移到-sing-box" class="headerlink" title="从 Clash 迁移到 sing-box"></a>从 Clash 迁移到 sing-box</h2><p>如果你现在使用 Clash 生态并考虑尝试 sing-box，需要注意以下变化：</p><h3 id="配置概念映射"><a href="#配置概念映射" class="headerlink" title="配置概念映射"></a>配置概念映射</h3><table><thead><tr><th>Clash 概念</th><th>sing-box 对应</th></tr></thead><tbody><tr><td>proxies</td><td>outbounds</td></tr><tr><td>proxy-groups</td><td>outbounds（selector &#x2F; urltest 类型）</td></tr><tr><td>rules</td><td>route.rules</td></tr><tr><td>rule-providers</td><td>route.rule_set</td></tr><tr><td>dns.nameserver</td><td>dns.servers</td></tr><tr><td>tun.enable</td><td>inbounds 中添加 tun 类型</td></tr><tr><td>mixed-port</td><td>inbounds 中添加 mixed 类型</td></tr></tbody></table><h3 id="主要差异"><a href="#主要差异" class="headerlink" title="主要差异"></a>主要差异</h3><ol><li><strong>没有 proxy-providers 的概念</strong>：sing-box 的订阅管理由客户端（如 SFA&#x2F;SFI）处理，内核本身不负责订阅更新</li><li><strong>规则匹配逻辑略有不同</strong>：sing-box 的路由规则在单条 rule 中支持多个条件，这些条件之间是 AND 关系（Clash 中每条规则只有一个条件）</li><li><strong>DNS 配置更灵活</strong>：sing-box 的 DNS 分流可以基于更多维度，包括出站标签</li></ol><hr><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="Q-sing-box-适合新手吗？"><a href="#Q-sing-box-适合新手吗？" class="headerlink" title="Q: sing-box 适合新手吗？"></a>Q: sing-box 适合新手吗？</h3><p>取决于使用方式。如果通过 SFA &#x2F; SFI 等图形化客户端配合机场提供的 sing-box 格式订阅使用，上手难度和 Clash 客户端差不多。但如果需要手动编写 JSON 配置，门槛会高不少。</p><h3 id="Q-我的机场不提供-sing-box-格式订阅怎么办？"><a href="#Q-我的机场不提供-sing-box-格式订阅怎么办？" class="headerlink" title="Q: 我的机场不提供 sing-box 格式订阅怎么办？"></a>Q: 我的机场不提供 sing-box 格式订阅怎么办？</h3><p>几个选择：（1）使用订阅转换服务将 Clash 格式转为 sing-box 格式；（2）使用同时支持 Clash 和 sing-box 的客户端（如 Clash Nyanpasu）；（3）继续使用 Clash 生态的客户端——没必要强行迁移。</p><h3 id="Q-sing-box-比-mihomo-快吗？"><a href="#Q-sing-box-比-mihomo-快吗？" class="headerlink" title="Q: sing-box 比 mihomo 快吗？"></a>Q: sing-box 比 mihomo 快吗？</h3><p>在绝大多数使用场景下，两者的性能差异可以忽略不计。代理速度的瓶颈几乎总是在节点本身（服务器带宽、线路质量、延迟），而不是在内核的处理速度上。不要因为”性能更好”这样的说法就盲目切换。</p><h3 id="Q-sing-box-是免费的吗？"><a href="#Q-sing-box-是免费的吗？" class="headerlink" title="Q: sing-box 是免费的吗？"></a>Q: sing-box 是免费的吗？</h3><p>sing-box 内核完全免费且开源。官方客户端 SFA 和 SFI 也是免费的（SFI 在 App Store 免费下载）。</p><h3 id="Q-配置文件有语法错误怎么排查？"><a href="#Q-配置文件有语法错误怎么排查？" class="headerlink" title="Q: 配置文件有语法错误怎么排查？"></a>Q: 配置文件有语法错误怎么排查？</h3><p>运行 <code>sing-box check -c config.json</code>，它会指出配置文件中的语法错误和位置。JSON 格式最常见的错误是多余的逗号（JSON 不允许末尾逗号）和引号遗漏。</p><hr><h2 id="相关资源"><a href="#相关资源" class="headerlink" title="相关资源"></a>相关资源</h2><ul><li><a href="https://github.com/SagerNet/sing-box">sing-box GitHub 仓库</a> —— 项目源码和发布</li><li><a href="https://sing-box.sagernet.org/">sing-box 官方文档</a> —— 完整的配置参考</li><li><a href="https://github.com/MatsuriDayo/NekoBoxForAndroid">NekoBox for Android</a> —— 支持 sing-box 的 Android 客户端</li><li><a href="https://sing-box.sagernet.org/configuration/">sing-box 配置示例集合</a> —— 官方配置示例</li></ul>]]></content>
      
      
      <categories>
          
          <category> 代理软件 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> 配置 </tag>
            
            <tag> Sing-box </tag>
            
            <tag> 教程 </tag>
            
            <tag> JSON </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>TLS 指纹识别：JA3/JA4 与反检测策略</title>
      <link href="/posts/tls-fingerprinting/"/>
      <url>/posts/tls-fingerprinting/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：TLS 指纹识别是 GFW 检测代理流量的核心手段之一。即使流量内容完全加密，TLS 握手阶段的明文参数也会暴露客户端的身份。本文解释 JA3&#x2F;JA4 指纹的计算方式、GFW 如何利用它识别代理、以及主流协议的应对策略。</p></blockquote><h2 id="TLS-握手中暴露了什么"><a href="#TLS-握手中暴露了什么" class="headerlink" title="TLS 握手中暴露了什么"></a>TLS 握手中暴露了什么</h2><p>TLS 连接建立时，客户端需要向服务器发送一个 <strong>Client Hello</strong> 消息，这是整个 TLS 握手的第一步。关键在于：这条消息是以<strong>明文</strong>发送的，其中包含了大量描述客户端能力的元数据。</p><p>以下是 Client Hello 中携带的关键字段：</p><ol><li><strong>支持的 TLS 版本列表</strong>：客户端声明自己支持哪些 TLS 协议版本（如 TLS 1.2、TLS 1.3）。</li><li><strong>加密套件（Cipher Suites）列表及顺序</strong>：客户端罗列自己支持的加密算法组合，并且列出的顺序代表了优先级偏好。不同的 TLS 实现对加密套件的选择和排列方式截然不同。</li><li><strong>扩展（Extensions）列表及顺序</strong>：TLS 扩展用于协商额外的功能，比如支持的协议、密钥交换方式等。不同客户端携带的扩展种类、数量和排列顺序都各有特征。</li><li><strong>支持的椭圆曲线（Supported Groups）</strong>：声明客户端支持哪些椭圆曲线用于密钥交换，例如 x25519、P-256、P-384 等。</li><li><strong>签名算法（Signature Algorithms）</strong>：客户端声明自己支持哪些签名算法用于证书验证，例如 ECDSA、RSA-PSS 等。</li><li><strong>ALPN（Application-Layer Protocol Negotiation）</strong>：应用层协议协商，告知服务器客户端希望使用的上层协议，如 h2（HTTP&#x2F;2）或 http&#x2F;1.1。</li><li><strong>SNI（Server Name Indication）</strong>：服务器名称指示，明文告知服务器客户端想要连接的域名。</li></ol><p>这些参数的组合是<strong>高度特征化</strong>的。</p><p><img src="/images/inline/tls-handshake.png" alt="TLS 握手过程示意图"><br><em>图片来源：<a href="https://www.cloudflare.com/">Cloudflare</a></em></p><p>不同的 TLS 库（如浏览器内置的 BoringSSL、Go 语言的 crypto&#x2F;tls、Python 的 ssl 模块、Java 的 JSSE）会产生截然不同的 Client Hello。就像每个人走路的姿态不同一样，每种 TLS 实现发出的 Client Hello 也带有自己独特的”步态”。审查者只需要观察这个明文的握手消息，就能推断出对方使用的是什么客户端软件——即使后续的所有通信内容都是加密的。</p><h2 id="JA3-指纹是什么"><a href="#JA3-指纹是什么" class="headerlink" title="JA3 指纹是什么"></a>JA3 指纹是什么</h2><p><strong>JA3</strong> 是由 Salesforce 的安全团队在 2017 年提出的一种 TLS 客户端指纹方法。它的核心思路非常直观：从 Client Hello 中提取最具辨识度的字段，拼接成一个字符串，然后计算哈希值作为指纹。</p><p>具体而言，JA3 从 Client Hello 中提取以下<strong>五个字段</strong>：</p><table><thead><tr><th>字段</th><th>说明</th></tr></thead><tbody><tr><td>TLS 版本</td><td>客户端声明的 TLS 协议版本号</td></tr><tr><td>加密套件（Cipher Suites）</td><td>所有支持的加密套件的编号列表</td></tr><tr><td>扩展（Extensions）</td><td>所有 TLS 扩展的编号列表</td></tr><tr><td>椭圆曲线（Elliptic Curves）</td><td>支持的椭圆曲线编号列表</td></tr><tr><td>椭圆曲线点格式（EC Point Formats）</td><td>支持的椭圆曲线点格式列表</td></tr></tbody></table><p>JA3 将这五个字段的值按顺序用<strong>逗号</strong>连接成一个长字符串，格式如下：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">TLSVersion,Ciphers,Extensions,EllipticCurves,ECPointFormats</span><br></pre></td></tr></table></figure><p>然后对这个字符串取 <strong>MD5 哈希</strong>，得到一个 32 字符的十六进制字符串，即 JA3 指纹。例如：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">769,47-53-5-10-49161-49162-49171-49172-50-56-19-4,0-10-11,23-24-25,0</span><br><span class="line">→ MD5</span><br><span class="line">→ e7d705a3286e19ea42f587b344ee6865</span><br></pre></td></tr></table></figure><p>这个指纹的核心价值在于<strong>区分不同的客户端实现</strong>。以下是一些关键的区分能力：</p><ul><li><strong>Chrome 的 JA3 指纹 ≠ Firefox 的 JA3 指纹</strong>：因为 Chrome 使用 BoringSSL，Firefox 使用 NSS，两者对加密套件和扩展的选择完全不同。</li><li><strong>浏览器的 JA3 指纹 ≠ Go crypto&#x2F;tls 的 JA3 指纹</strong>：Go 语言标准库的 TLS 实现有自己独特的参数组合，与任何主流浏览器都不相同。</li><li><strong>同一浏览器的不同版本指纹也可能不同</strong>：当浏览器升级并添加对新加密算法或新扩展的支持时，其 Client Hello 会随之变化，JA3 指纹也会改变。</li></ul><p>简而言之，JA3 指纹就像是 TLS 客户端的一个”身份证号”，虽然不是百分之百唯一，但足以在大多数场景下区分客户端类型。</p><p><img src="/images/inline/ja3-fingerprint.png" alt="JA3 指纹示例"><br><em>图片来源：<a href="https://www.ntop.org/">Ntop</a></em></p><h2 id="JA4-与-JA3-的区别"><a href="#JA4-与-JA3-的区别" class="headerlink" title="JA4 与 JA3 的区别"></a>JA4 与 JA3 的区别</h2><p><strong>JA4</strong> 是 2023 年由 FoxIO 推出的下一代 TLS 指纹方案，旨在解决 JA3 的若干局限性。</p><p>JA3 的主要问题在于：MD5 哈希将所有信息压缩成一个不可读的字符串，丢失了结构信息，且 MD5 本身存在碰撞风险。此外，JA3 仅针对 TCP 上的 TLS 设计，无法覆盖基于 UDP 的 QUIC 协议。</p><p>JA4 的改进主要体现在以下几个方面：</p><ul><li><strong>结构化的指纹格式</strong>：JA4 的指纹不再是一个单一的哈希值，而是由多个有意义的片段组成。格式大致为 <code>协议类型_TLS版本_SNI标志_加密套件数量_扩展数量_ALPN首选项_加密套件哈希_扩展哈希</code>。这意味着即使不查表，也能从指纹中直接读出部分信息，例如客户端使用的是 TLS 1.3 还是 1.2，是否携带了 SNI 等。</li><li><strong>更全面的参数覆盖</strong>：JA4 在计算时考虑了更多的 Client Hello 字段，提供了更精细的区分能力。</li><li><strong>QUIC&#x2F;HTTP3 支持</strong>：JA4 明确支持 QUIC 协议中的 Client Hello 指纹提取，而 JA3 对此没有定义。随着 HTTP&#x2F;3 的普及，这一点变得越来越重要。</li><li><strong>JA4 指纹族</strong>：JA4 实际上是一个指纹家族，包括 JA4（TLS 客户端）、JA4S（TLS 服务端）、JA4H（HTTP 客户端）、JA4X（X.509 证书）等多个变体，构成了一个完整的流量指纹体系。</li></ul><p>对于代理用户来说，JA4 意味着审查者拥有了更精确、更难规避的指纹识别工具。</p><h2 id="这和代理有什么关系"><a href="#这和代理有什么关系" class="headerlink" title="这和代理有什么关系"></a>这和代理有什么关系</h2><p><strong>核心问题：代理客户端的 TLS 指纹与真实浏览器不同。</strong></p><p>大多数主流代理工具——V2Ray、Xray、Sing-box——都是用 <strong>Go 语言</strong>编写的。Go 语言的标准库 <code>crypto/tls</code> 有自己的 TLS 实现，它产生的 Client Hello 在加密套件选择、扩展排列、椭圆曲线偏好等方面与任何主流浏览器都存在明显差异。</p><p>这意味着什么？假设你使用 VLESS+TLS 协议连接到一台伪装成 <code>apple.com</code> 的服务器。从 GFW 的视角来看：</p><ol><li><strong>SNI 显示这是到 apple.com 的连接</strong>——看起来正常。</li><li><strong>但 JA3 指纹显示客户端是 Go 程序</strong>——这就不对了。正常用户用浏览器访问 apple.com，不会用 Go 程序。</li><li><strong>指纹与 SNI 的矛盾暴露了代理行为</strong>——GFW 可以据此判定这是一条代理连接，进而对该连接进行干扰、限速或封锁。</li></ol><p>这就是许多用户容易忽视的一个事实：<strong>“套 TLS” 并不等于 “安全”</strong>。TLS 加密的是握手之后的应用层数据，但握手过程本身（特别是 Client Hello）是明文的。如果你的代理工具使用了一个与浏览器截然不同的 TLS 库，那么 TLS 握手本身就在向审查者宣告：”我不是浏览器，我是一个代理程序”。</p><p>更具体地说，Go 语言 crypto&#x2F;tls 的 Client Hello 有几个典型的”泄露点”：</p><ul><li>加密套件的选择和顺序与浏览器不同</li><li>携带的 TLS 扩展集合与浏览器不同</li><li>缺少浏览器特有的 GREASE（Generate Random Extensions And Sustain Extensibility）值</li><li>椭圆曲线和签名算法的偏好列表与浏览器不同</li></ul><p>这些差异对于 GFW 来说是非常容易检测的。</p><h2 id="各协议的应对方案"><a href="#各协议的应对方案" class="headerlink" title="各协议的应对方案"></a>各协议的应对方案</h2><h3 id="uTLS：模拟浏览器指纹"><a href="#uTLS：模拟浏览器指纹" class="headerlink" title="uTLS：模拟浏览器指纹"></a>uTLS：模拟浏览器指纹</h3><p><strong><a href="https://github.com/refraction-networking/utls">uTLS</a></strong> 是目前最广泛使用的应对方案。它是一个 Go 语言库，核心功能是<strong>手动构造 Client Hello 消息</strong>，使其看起来与特定浏览器的 Client Hello 完全一致。</p><p>uTLS 的工作原理并不复杂：它预先收集了各种浏览器（Chrome、Firefox、Safari、Edge 等）在不同版本下的 Client Hello 参数模板。当代理客户端需要发起 TLS 连接时，uTLS 不使用 Go 标准库的默认参数，而是按照选定的浏览器模板来构造 Client Hello，包括完全一致的加密套件列表及顺序、扩展列表及顺序、椭圆曲线选择等。</p><p>在 <strong><a href="https://github.com/XTLS/Xray-core">Xray-core</a></strong> 和 <strong>Sing-box</strong> 中，用户可以通过 <code>fingerprint</code> 参数来启用 uTLS，并指定要模拟的浏览器类型：</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;fingerprint&quot;</span><span class="punctuation">:</span> <span class="string">&quot;chrome&quot;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><p>可选的值通常包括：<code>chrome</code>、<code>firefox</code>、<code>safari</code>、<code>edge</code>、<code>randomized</code> 等。</p><p>然而，uTLS 也存在一些<strong>局限性</strong>：</p><ul><li><strong>更新滞后</strong>：浏览器会频繁更新，每次更新都可能改变 Client Hello 参数。uTLS 需要持续跟进浏览器的变化，如果更新不及时，模拟的指纹可能与当前最新版浏览器不一致。</li><li><strong>GREASE 的模拟难度</strong>：GREASE 是一种由浏览器引入的机制，会在 Client Hello 中随机插入未知的扩展值或加密套件值，以确保服务端实现能正确忽略未知参数。浏览器每次连接时 GREASE 值都会变化，而 uTLS 的 GREASE 实现是否足够随机、是否符合真实浏览器的分布规律，是一个持续存在的挑战。</li><li><strong>只解决了 Client Hello 的问题</strong>：TLS 握手不只有 Client Hello，还有 Client 在后续阶段的行为（如密钥交换方式、Session Resumption 行为等）。uTLS 主要集中在 Client Hello 层面，对握手的其他阶段覆盖有限。</li></ul><p>尽管如此，uTLS 仍然是目前最实用且最易部署的方案，能有效对抗基于 JA3&#x2F;JA4 的被动指纹检测。</p><h3 id="Reality：从根本上解决问题"><a href="#Reality：从根本上解决问题" class="headerlink" title="Reality：从根本上解决问题"></a>Reality：从根本上解决问题</h3><p><strong>Reality</strong> 协议（由 XTLS 团队开发，集成在 Xray-core 中）采用了一种比 uTLS 更彻底的方法。它的思路不是”模拟浏览器去欺骗审查者”，而是”让审查者看到的就是一个真实的 TLS 连接”。</p><p>Reality 的工作流程如下：</p><ol><li><strong>客户端使用 uTLS 发送 Client Hello</strong>：客户端首先利用 uTLS 构造一个模拟浏览器指纹的 Client Hello，发送给 Reality 服务端。从 GFW 的角度看，这个 Client Hello 的指纹与真实浏览器一致。</li><li><strong>服务端将 Client Hello 转发给真实目标</strong>：Reality 服务端收到 Client Hello 后，将其原封不动地转发给一个预先配置的真实目标网站（例如 <code>apple.com</code> 或 <code>www.microsoft.com</code>）。</li><li><strong>真实目标返回 Server Hello 和证书</strong>：目标网站正常处理这个 Client Hello，返回自己的 Server Hello、真实的 TLS 证书以及完成握手所需的参数。</li><li><strong>服务端将真实响应转发给客户端</strong>：Reality 服务端把从目标网站收到的 Server Hello 和证书原样转发给客户端。</li><li><strong>切换到代理加密通道</strong>：在 TLS 握手表面上完成后，客户端和服务端之间切换到代理自己的加密通道进行实际数据传输。</li></ol><p>这种设计的巧妙之处在于：</p><ul><li><strong>GFW 看到的是一个完全真实的 TLS 连接</strong>：Client Hello 指纹正常（来自 uTLS），Server Hello 和证书也是真实的（来自目标网站），整个握手过程没有任何可疑之处。</li><li><strong>主动探测也无法识别</strong>：如果审查者主动连接 Reality 服务端，服务端会直接将其代理到真实目标网站。审查者看到的就是一个正常运行的网站，完全无法判断服务端背后是否运行着代理服务。</li><li><strong>不需要自己的 TLS 证书</strong>：Reality 服务端不需要申请和维护 TLS 证书，因为它使用的是目标网站的真实证书。这也消除了因证书特征（如 Let’s Encrypt 的签发模式）被识别的风险。</li></ul><p>Reality 的主要注意事项是目标网站（dest）的选择：应选择支持 TLS 1.3、有 HTTP&#x2F;2 支持、在目标地区正常可访问且不会频繁变化的大型网站。</p><h3 id="ECH-Encrypted-Client-Hello-：未来方向"><a href="#ECH-Encrypted-Client-Hello-：未来方向" class="headerlink" title="ECH (Encrypted Client Hello)：未来方向"></a>ECH (Encrypted Client Hello)：未来方向</h3><p><strong><a href="https://datatracker.ietf.org/doc/draft-ietf-tls-esni/">ECH（Encrypted Client Hello）</a></strong> 是 TLS 协议层面的一项标准化工作，其设计目的就是<strong>加密 Client Hello 中的敏感字段</strong>，从根本上消除 TLS 握手阶段的信息泄露。</p><p>ECH 的基本原理是：服务器预先通过 DNS 记录（HTTPS RR）发布一个公钥，客户端用这个公钥加密 Client Hello 中的敏感部分（称为 Inner Client Hello），只留下一个不包含有用信息的 Outer Client Hello 在明文中传输。服务器收到后用对应私钥解密 Inner Client Hello，获取客户端的真实请求参数。</p><p>如果 ECH 得到广泛部署，其影响是深远的：</p><ul><li><strong>JA3&#x2F;JA4 指纹将失去大部分价值</strong>：因为审查者只能看到 Outer Client Hello，而 Outer Client Hello 是标准化的，不再携带客户端的特征信息。</li><li><strong>SNI 也将被加密</strong>：审查者无法知道用户访问的是哪个域名。</li></ul><p>然而，ECH 在当前阶段<strong>无法作为可靠的反审查手段</strong>，原因如下：</p><ul><li><strong>GFW 已经在封锁 ECH</strong>：中国的网络审查系统已经开始检测并阻断携带 ECH 扩展的 TLS 连接。对于审查者来说，如果无法读取 Client Hello 的内容，直接阻断这类连接是最简单的策略。</li><li><strong>部署范围有限</strong>：虽然 Chrome 和 Firefox 已经在新版本中支持了 ECH，但服务端的部署率仍然较低。ECH 需要 DNS 基础设施（特别是 HTTPS 记录类型）的配合，大规模普及还需要时间。</li><li><strong>DNS 污染的连锁影响</strong>：ECH 的公钥通过 DNS 分发，而 GFW 有成熟的 DNS 污染能力。如果 DNS 查询无法返回正确的 ECH 公钥，客户端就无法启用 ECH。</li></ul><p>因此，ECH 代表的是一个正确的长期方向，但短期内用户仍然需要依赖 uTLS 和 Reality 等方案来应对 TLS 指纹检测。</p><h2 id="实践：如何检查自己的指纹"><a href="#实践：如何检查自己的指纹" class="headerlink" title="实践：如何检查自己的指纹"></a>实践：如何检查自己的指纹</h2><p>理论之外，用户应当亲自验证自己的代理连接是否存在指纹泄露问题。以下是几种实用的检测方法：</p><h3 id="方法一：使用在线检测工具"><a href="#方法一：使用在线检测工具" class="headerlink" title="方法一：使用在线检测工具"></a>方法一：使用在线检测工具</h3><ol><li><strong>直接用浏览器访问 <a href="https://ja3er.com/">ja3er.com</a></strong>，记录页面显示的 JA3 指纹值。这是你浏览器的真实指纹。</li><li><strong>通过代理访问同一网站</strong>，记录此时显示的 JA3 指纹值。这是你的代理客户端呈现给服务器的指纹。</li><li><strong>对比两个指纹</strong>：<ul><li>如果两者一致或非常接近，说明 uTLS 模拟成功，你的代理连接在 JA3 层面与浏览器无法区分。</li><li>如果两者明显不同，说明你的代理连接携带了非浏览器指纹，存在被识别的风险。</li></ul></li></ol><h3 id="方法二：使用-Wireshark-抓包分析"><a href="#方法二：使用-Wireshark-抓包分析" class="headerlink" title="方法二：使用 Wireshark 抓包分析"></a>方法二：使用 Wireshark 抓包分析</h3><p>对于需要更详细分析的用户，可以使用 <a href="https://www.wireshark.org/">Wireshark</a> 在本地抓包：</p><ol><li>启动 Wireshark，开始捕获网络流量。</li><li>在过滤器中输入 <code>tls.handshake.type == 1</code> 过滤 Client Hello 消息。</li><li>展开 Client Hello 的详细信息，逐一检查 Cipher Suites、Extensions、Supported Groups 等字段。</li><li>对比代理连接的 Client Hello 与直接浏览器连接的 Client Hello，观察是否存在差异。</li></ol><h3 id="方法三：使用命令行工具"><a href="#方法三：使用命令行工具" class="headerlink" title="方法三：使用命令行工具"></a>方法三：使用命令行工具</h3><p>一些开源工具可以直接计算和展示 TLS 指纹，例如使用 <code>curl</code> 配合支持 JA3 输出的代理服务器，或者使用专门的 TLS 指纹分析工具如 <code>ja3</code> 和 <code>ja4</code> 的开源实现。</p><p>如果检测结果显示指纹不匹配，应检查代理客户端的配置，确保 <code>fingerprint</code> 参数已正确设置且选择了合适的浏览器指纹模板。</p><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="Q-uTLS-选哪个浏览器指纹最好？"><a href="#Q-uTLS-选哪个浏览器指纹最好？" class="headerlink" title="Q: uTLS 选哪个浏览器指纹最好？"></a>Q: uTLS 选哪个浏览器指纹最好？</h3><p>推荐选择 <strong>Chrome</strong>。原因很简单：Chrome 在全球浏览器市场中占据最高的份额（超过 60%）。选择 Chrome 指纹意味着你的 TLS 连接在统计上看起来最”普通”，不会因为使用了一个罕见的浏览器指纹而引起注意。相比之下，选择 Safari 或 Firefox 虽然也能工作，但这些浏览器的市场份额较低，如果某个 IP 地址同时发起了大量看起来来自 Safari 的连接，在统计分析中可能显得异常。此外，Chrome 指纹在 uTLS 中的维护也最为积极，通常能最快跟进新版本的变化。</p><h3 id="Q-不配置-fingerprint-参数会怎样？"><a href="#Q-不配置-fingerprint-参数会怎样？" class="headerlink" title="Q: 不配置 fingerprint 参数会怎样？"></a>Q: 不配置 fingerprint 参数会怎样？</h3><p>如果不显式配置 <code>fingerprint</code> 参数，代理客户端将使用 <strong>Go 语言原生的 crypto&#x2F;tls 库</strong>发起 TLS 连接。这意味着你的连接会携带一个典型的 Go 程序指纹，与任何主流浏览器都不相同。对于 GFW 的 TLS 指纹检测系统来说，这几乎等于在明文告诉审查者”我是一个 Go 语言程序”。在当前的网络审查环境下，不配置 fingerprint 参数是一个显著的安全隐患，强烈建议所有使用 TLS 类协议的用户都明确设置此参数。</p><h3 id="Q-JA3-指纹可以完全伪造吗？"><a href="#Q-JA3-指纹可以完全伪造吗？" class="headerlink" title="Q: JA3 指纹可以完全伪造吗？"></a>Q: JA3 指纹可以完全伪造吗？</h3><p>技术上可以通过 uTLS <strong>完全伪造</strong> JA3 指纹。uTLS 允许逐字段地构造 Client Hello，理论上可以精确复制任何浏览器的参数组合。但”完美度”取决于几个因素：uTLS 库中浏览器指纹模板的更新是否及时、GREASE 等随机化机制的模拟是否足够真实、以及 TLS 握手后续阶段的行为是否与浏览器一致。在实践中，uTLS 对 JA3 指纹的模拟已经足够欺骗目前已知的大多数检测系统，但不能排除未来出现更精细的检测手段（例如结合 JA3 之外的握手行为特征进行综合分析）。</p>]]></content>
      
      
      <categories>
          
          <category> GFW 与审查 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> TLS </tag>
            
            <tag> Reality </tag>
            
            <tag> JA3 </tag>
            
            <tag> JA4 </tag>
            
            <tag> 指纹 </tag>
            
            <tag> uTLS </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>WebSocket / gRPC / HTTP/2 / XHTTP 传输层对比</title>
      <link href="/posts/transport-comparison/"/>
      <url>/posts/transport-comparison/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>: 代理协议（VLESS、VMess 等）负责认证和数据封装，但最终数据需要通过某种传输方式送达服务器。WebSocket、gRPC、HTTP&#x2F;2、XHTTP 是当前最常用的四种传输层方案。本文从 CDN 兼容性、性能表现、流量伪装能力和部署复杂度四个维度进行对比分析，帮助你在不同场景下做出合理选择。</p></blockquote><h2 id="协议层与传输层：先分清两件事"><a href="#协议层与传输层：先分清两件事" class="headerlink" title="协议层与传输层：先分清两件事"></a>协议层与传输层：先分清两件事</h2><p>很多新手在配置节点时会混淆”协议”和”传输层”这两个概念，觉得选了 VLESS 就够了，或者把 WebSocket 当成一种独立的代理方案。实际上，代理技术栈是分层设计的，搞清楚每一层做什么事情，才能理解为什么存在这么多排列组合。</p><p><strong>协议层</strong>——也就是 VLESS、VMess、Trojan 这些——负责的是身份认证和数据封装。简单说，协议层决定了”客户端怎么证明自己的身份”以及”数据包按什么格式打包”。VLESS 用 UUID 做认证，VMess 用 UUID + 时间戳校验，Trojan 用密码哈希。协议层本身不关心数据最终是怎么送到服务器的。</p><p><strong>传输层</strong>——WebSocket、gRPC、HTTP&#x2F;2、XHTTP、TCP 直连——负责的是数据包的实际传输方式。传输层决定了代理流量在网络上”看起来像什么”：是一个 WebSocket 长连接，还是一系列普通 HTTP 请求，还是一个 gRPC 调用。传输层直接影响三件事：能不能过 CDN、流量特征是否容易被识别、连接效率高不高。</p><p>一个完整的节点配置通常是 <strong>协议 + 传输层 + 安全层</strong> 的组合。例如 <code>VLESS + WebSocket + TLS</code> 表示用 VLESS 协议封装数据，通过 WebSocket 传输，外层套 TLS 加密；<code>VLESS + TCP + Reality</code> 表示用 VLESS 协议通过 TCP 直连传输，安全层用 Reality。不同的组合适用于不同的网络环境和安全需求，下面逐一分析每种传输方式的特点。</p><h2 id="TCP-直连"><a href="#TCP-直连" class="headerlink" title="TCP 直连"></a>TCP 直连</h2><p>TCP 直连是最基础的传输方式——客户端与服务器之间建立一条原始的 TCP 连接，代理数据直接在这条连接上传输，中间没有任何额外的协议封装。</p><p><strong>优势</strong>非常直观：没有中间层意味着最低的性能开销。数据不需要经过 WebSocket 帧封装、HTTP&#x2F;2 多路复用处理或 gRPC 编码，直接走 TCP 流，延迟最低、吞吐量最大。对于追求极致性能的场景（游戏加速、实时通信），TCP 直连是最优解。</p><p><strong>局限</strong>同样明显：TCP 直连不经过任何 HTTP 层，因此<strong>无法使用 CDN 中转</strong>。这意味着客户端必须直连服务器 IP，一旦 IP 被封，节点就失效了。此外，裸 TCP 流量如果不搭配 TLS 或 Reality，特征非常明显。</p><p>TCP 直连目前最常见的搭配是 <strong>VLESS + TCP + Reality</strong>。Reality 在 TLS 层提供了极强的伪装能力，加上 vision flow 控制解决 TLS-in-TLS 特征问题，这个组合在直连场景下几乎是最优解——高性能、高隐蔽性，唯一的代价是不支持 CDN 中转。如果你的服务器 IP 稳定、线路质量好，这就是首选。</p><h2 id="WebSocket-WS"><a href="#WebSocket-WS" class="headerlink" title="WebSocket (WS)"></a>WebSocket (WS)</h2><p>WebSocket 是代理领域最成熟、生态最完善的传输方式。它的工作原理是：客户端先发一个标准的 HTTP Upgrade 请求，将连接从 HTTP 协议”升级”为 WebSocket 协议，之后双方就可以在这条连接上进行全双工通信。</p><p><strong>CDN 支持是 WebSocket 最大的卖点</strong>。<a href="https://www.cloudflare.com/">Cloudflare</a> 完美支持 WebSocket 代理，这意味着你可以将服务器藏在 CDN 后面——客户端连接的是 Cloudflare 的边缘节点，再由 Cloudflare 转发到你的源站。这带来两个好处：一是服务器真实 IP 完全隐藏，即使域名被识别，更换 CDN 配置即可恢复，不需要换服务器；二是可以利用 CDN 的全球节点网络优化访问路径。</p><p><strong>但 WebSocket 有一个不可忽视的隐蔽性弱点</strong>：HTTP Upgrade 头。每个 WebSocket 连接建立时都会发送 <code>Connection: Upgrade</code> 和 <code>Upgrade: websocket</code> 这两个 HTTP 头。虽然正常的 Web 应用也使用 WebSocket（在线聊天、实时推送、协作编辑等），但审查系统可以通过统计特定 IP 上 WebSocket 连接的比例、连接持续时间、数据传输模式等特征来做二次判断。一个看起来是普通网站但 WebSocket 连接占比极高的域名，显然不太正常。</p><p><strong>性能方面</strong>，WebSocket 引入了帧封装的开销。每个数据片段都需要被包装成 WebSocket 帧（包含操作码、掩码、长度等元数据），这在高吞吐量场景下会带来一定的 CPU 和带宽开销。不过对于大多数日常使用来说，这个开销可以忽略。</p><p>WebSocket 的客户端支持极为广泛——几乎所有主流代理客户端（Clash、Clash.Meta、sing-box、v2rayN、Shadowrocket、Quantumult X 等）都支持 WS 传输。这使得 WS 成为面向最终用户最友好的传输方式。</p><h2 id="gRPC"><a href="#gRPC" class="headerlink" title="gRPC"></a>gRPC</h2><p>gRPC 是 Google 开发的远程过程调用框架，底层基于 HTTP&#x2F;2 协议。在代理场景中使用 gRPC 传输，数据会被封装为 gRPC 请求在 HTTP&#x2F;2 连接上传输。</p><p>gRPC 继承了 HTTP&#x2F;2 的多路复用能力——多个代理连接可以共享同一条底层 TCP 连接，减少了握手次数和连接管理开销。同时，gRPC 原生支持流式传输（streaming），天然适合代理这种需要持续双向数据传输的场景。</p><p><strong>CDN 支持方面</strong>，部分 CDN 服务商支持 gRPC 代理。Cloudflare 支持 gRPC，但需要在控制面板中手动开启 gRPC 支持选项，且在稳定性上不如 WebSocket——某些边缘情况下可能出现连接中断或超时的问题。其他 CDN 服务商对 gRPC 的支持参差不齐。</p><p><strong>隐蔽性方面</strong>，gRPC 有一个明显的特征：它的 HTTP 请求固定使用 <code>content-type: application/grpc</code> 这个头部。虽然 gRPC 在微服务架构中非常流行，但一个普通的个人网站域名大量传输 gRPC 流量仍然不太自然。审查系统可以通过这个 content-type 快速标记可疑流量进行进一步分析。</p><p><strong>部署复杂度</strong>中等。gRPC 需要 TLS 支持，配置上比 WebSocket 略复杂，但远不如 XHTTP。客户端支持良好，主流客户端基本都已支持 gRPC 传输。</p><h2 id="HTTP-2-H2"><a href="#HTTP-2-H2" class="headerlink" title="HTTP&#x2F;2 (H2)"></a>HTTP&#x2F;2 (H2)</h2><p>HTTP&#x2F;2 传输是指直接使用 HTTP&#x2F;2 协议来承载代理数据，而不通过 WebSocket Upgrade 或 gRPC 封装。代理数据作为 HTTP&#x2F;2 的请求&#x2F;响应体直接传输。</p><p>HTTP&#x2F;2 最大的技术优势是<strong>原生多路复用</strong>。与 HTTP&#x2F;1.1 的”一问一答”模式不同，HTTP&#x2F;2 允许在同一条 TCP 连接上同时传输多个独立的数据流（stream），且不同流之间互不阻塞。这对代理场景意味着：多个并发请求可以共享一条连接，减少 TCP 握手次数，降低延迟。HTTP&#x2F;2 还支持头部压缩（HPACK），减少了重复 HTTP 头带来的带宽浪费。</p><p><strong>但 HTTP&#x2F;2 传输有一个硬性要求：必须使用 TLS</strong>。虽然 HTTP&#x2F;2 协议规范允许明文传输（h2c），但实际应用中几乎所有浏览器和 CDN 都只支持基于 TLS 的 HTTP&#x2F;2（h2）。这意味着你必须有域名和 TLS 证书，或者搭配 Reality。</p><p><strong>CDN 兼容性方面</strong>，HTTP&#x2F;2 传输目前的 CDN 支持有限。大多数 CDN 的反向代理行为是在边缘节点终止 HTTP&#x2F;2 连接，然后以 HTTP&#x2F;1.1 回源——这会破坏代理的传输机制。因此 HTTP&#x2F;2 传输通常用于直连场景，不走 CDN。</p><p><strong>隐蔽性</strong>尚可。HTTP&#x2F;2 流量本身非常常见（大量网站已经使用 HTTP&#x2F;2），没有像 WebSocket 的 Upgrade 头或 gRPC 的特殊 content-type 那样的显眼标记。但持续的长连接和特定的流量模式仍然可能被统计分析识别。</p><h2 id="XHTTP"><a href="#XHTTP" class="headerlink" title="XHTTP"></a>XHTTP</h2><p>XHTTP 是 <a href="https://github.com/XTLS/Xray-core">Xray-core</a> 引入的新型传输方式，设计目标是实现最强的流量伪装能力。它的核心思路是：<strong>将代理数据伪装为完全标准的 HTTP 请求和响应，不使用任何特殊的协议标记</strong>。</p><p>与 WebSocket 需要 Upgrade 头、gRPC 需要特殊 content-type 不同，XHTTP 产生的流量就是普通的 HTTP 请求——GET、POST、PUT 等标准方法，标准的 HTTP 头部，标准的响应格式。对于网络中间设备（防火墙、DPI、CDN）而言，XHTTP 产生的流量与正常网站的 API 调用或文件上传下载没有区别。</p><p>XHTTP 支持多种工作模式来适应不同场景。上行数据通过一系列独立的 HTTP 请求发送，下行数据可以通过长轮询、分块传输（chunked encoding）或 Server-Sent Events（SSE）等标准 HTTP 机制接收。每一种模式都是完全合法的 HTTP 行为，不引入任何非标准特征。</p><p><strong>搭配 Reality 使用时</strong>，XHTTP 的伪装效果达到最强——外层 TLS 借用真实网站证书，内层 HTTP 请求完全标准，整个流量链路在审查者看来就是对某个真实网站的正常 API 访问。同时 XMUX 提供连接多路复用支持，优化了连接管理效率。</p><p><strong>代价</strong>也很明显：XHTTP 的部署复杂度在所有传输方式中最高。需要理解多种工作模式的差异、合理配置上下行参数、处理可能的超时问题。客户端支持方面，目前主要由 Xray 生态（v2rayN、v2rayNG 等）和 <a href="https://github.com/SagerNet/sing-box">sing-box</a> 提供支持，iOS 端支持尚不完善。</p><h2 id="对比总览"><a href="#对比总览" class="headerlink" title="对比总览"></a>对比总览</h2><table><thead><tr><th>维度</th><th>TCP 直连</th><th>WebSocket</th><th>gRPC</th><th>HTTP&#x2F;2</th><th>XHTTP</th></tr></thead><tbody><tr><td>CDN 支持</td><td>不支持</td><td>完美支持</td><td>部分支持</td><td>有限</td><td>取决于模式</td></tr><tr><td>性能</td><td>最优</td><td>良好</td><td>良好</td><td>良好</td><td>中等</td></tr><tr><td>流量伪装</td><td>依赖 Reality</td><td>有 Upgrade 特征</td><td>有 gRPC 特征</td><td>较好</td><td>最强</td></tr><tr><td>部署复杂度</td><td>简单</td><td>简单</td><td>中等</td><td>中等</td><td>复杂</td></tr><tr><td>客户端支持</td><td>全面</td><td>全面</td><td>广泛</td><td>广泛</td><td>有限</td></tr><tr><td>典型搭配</td><td>VLESS+Reality</td><td>VLESS&#x2F;VMess+TLS</td><td>VLESS+TLS</td><td>VLESS+TLS</td><td>VLESS+Reality</td></tr></tbody></table><blockquote><p>说明：”CDN 支持”指能否将流量通过 CDN（如 Cloudflare）中转以隐藏源站 IP。”流量伪装”指审查系统区分代理流量与正常流量的难度。</p></blockquote><h2 id="怎么选：三种典型场景"><a href="#怎么选：三种典型场景" class="headerlink" title="怎么选：三种典型场景"></a>怎么选：三种典型场景</h2><p>决策其实不复杂，抓住核心需求即可：</p><h3 id="场景一：需要-CDN-中转"><a href="#场景一：需要-CDN-中转" class="headerlink" title="场景一：需要 CDN 中转"></a>场景一：需要 CDN 中转</h3><p>如果你的服务器 IP 容易被封、需要频繁更换，或者希望利用 CDN 隐藏源站，<strong>WebSocket 是当前最稳妥的选择</strong>。Cloudflare 的免费方案就能用，配置简单，客户端全面支持。gRPC 虽然也能过 Cloudflare CDN，但稳定性和兼容性不如 WS，不建议作为首选。</p><p>推荐组合：<code>VLESS + WebSocket + TLS + Cloudflare CDN</code></p><h3 id="场景二：直连，追求性能与隐蔽性平衡"><a href="#场景二：直连，追求性能与隐蔽性平衡" class="headerlink" title="场景二：直连，追求性能与隐蔽性平衡"></a>场景二：直连，追求性能与隐蔽性平衡</h3><p>如果你的服务器 IP 稳定、线路质量好、不需要 CDN 中转，<strong>TCP + Reality 是最优解</strong>。零额外封装开销，Reality 提供顶级伪装，vision flow 解决 TLS-in-TLS 特征。这是当前最主流的直连方案。</p><p>推荐组合：<code>VLESS + TCP + Reality (vision)</code></p><h3 id="场景三：极端隐蔽需求"><a href="#场景三：极端隐蔽需求" class="headerlink" title="场景三：极端隐蔽需求"></a>场景三：极端隐蔽需求</h3><p>在高强度审查环境下，或者你需要最强的流量伪装能力，<strong>XHTTP + Reality</strong> 是目前的天花板。代价是部署复杂度高、客户端选择有限，但伪装效果无出其右。</p><p>推荐组合：<code>VLESS + XHTTP + Reality + XMUX</code></p><h3 id="决策速查"><a href="#决策速查" class="headerlink" title="决策速查"></a>决策速查</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">需要 CDN 中转？</span><br><span class="line">├── 是 → WebSocket + TLS + CDN</span><br><span class="line">├── 否 →</span><br><span class="line">│   ├── 追求性能？ → TCP + Reality</span><br><span class="line">│   ├── 追求最强伪装？ → XHTTP + Reality</span><br><span class="line">│   └── 需要 HTTP/2 多路复用？ → H2 + TLS / gRPC + TLS</span><br></pre></td></tr></table></figure><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="Q-WebSocket-的-Upgrade-特征会不会导致被封？"><a href="#Q-WebSocket-的-Upgrade-特征会不会导致被封？" class="headerlink" title="Q: WebSocket 的 Upgrade 特征会不会导致被封？"></a>Q: WebSocket 的 Upgrade 特征会不会导致被封？</h3><p>目前来看，单纯的 WebSocket 流量不会被直接封锁——互联网上有大量合法的 WebSocket 应用。但审查系统可能将 WebSocket 作为二次检测的触发条件之一。如果担心这个特征，可以考虑 XHTTP 作为替代。</p><h3 id="Q-gRPC-和-HTTP-2-传输有什么区别？"><a href="#Q-gRPC-和-HTTP-2-传输有什么区别？" class="headerlink" title="Q: gRPC 和 HTTP&#x2F;2 传输有什么区别？"></a>Q: gRPC 和 HTTP&#x2F;2 传输有什么区别？</h3><p>gRPC 是建立在 HTTP&#x2F;2 之上的应用层框架，会添加 <code>application/grpc</code> content-type 和 gRPC 特有的帧格式。HTTP&#x2F;2 传输则是直接使用 HTTP&#x2F;2 协议，没有 gRPC 的额外封装。从隐蔽性角度看，纯 HTTP&#x2F;2 更好；从功能成熟度角度看，gRPC 的流式传输机制更完善。</p><h3 id="Q-XHTTP-能过-CDN-吗？"><a href="#Q-XHTTP-能过-CDN-吗？" class="headerlink" title="Q: XHTTP 能过 CDN 吗？"></a>Q: XHTTP 能过 CDN 吗？</h3><p>取决于具体的工作模式。XHTTP 在某些模式下产生的是标准 HTTP 请求，理论上可以通过支持对应方法的 CDN。但这方面的实践还在探索阶段，稳定性和兼容性不如 WebSocket。如果 CDN 中转是刚需，目前仍建议使用 WebSocket。</p><h3 id="Q-可以在同一台服务器上同时部署多种传输方式吗？"><a href="#Q-可以在同一台服务器上同时部署多种传输方式吗？" class="headerlink" title="Q: 可以在同一台服务器上同时部署多种传输方式吗？"></a>Q: 可以在同一台服务器上同时部署多种传输方式吗？</h3><p>可以，而且推荐这样做。一台服务器可以同时监听 TCP 直连（Reality）、WebSocket（CDN 中转）等多种传输方式，客户端根据网络环境选择合适的连接方式。这样在某种传输方式被干扰时可以快速切换。</p><h3 id="Q-哪种传输方式延迟最低？"><a href="#Q-哪种传输方式延迟最低？" class="headerlink" title="Q: 哪种传输方式延迟最低？"></a>Q: 哪种传输方式延迟最低？</h3><p>TCP 直连延迟最低，因为没有任何额外协议封装。WebSocket 和 HTTP&#x2F;2 次之，引入了帧封装但开销有限。经过 CDN 中转的方案延迟取决于 CDN 节点位置，可能更高也可能更低（如果 CDN 节点比直连路径更优）。</p><h2 id="延伸阅读"><a href="#延伸阅读" class="headerlink" title="延伸阅读"></a>延伸阅读</h2><ul><li><a href="https://xtls.github.io/">Xray 官方文档 - 传输层配置</a> — 各传输方式的详细配置参数和示例</li><li><a href="https://www.cloudflare.com/">Cloudflare</a> — 最常用的免费 CDN 服务，支持 WebSocket 和 gRPC 代理</li><li><a href="https://github.com/SagerNet/sing-box">sing-box</a> — 新一代通用代理平台，支持多种传输方式</li></ul>]]></content>
      
      
      <categories>
          
          <category> 协议与原理 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> CDN </tag>
            
            <tag> WebSocket </tag>
            
            <tag> gRPC </tag>
            
            <tag> HTTP/2 </tag>
            
            <tag> XHTTP </tag>
            
            <tag> 传输层 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>TUN 模式不生效的常见原因</title>
      <link href="/posts/tun-not-working/"/>
      <url>/posts/tun-not-working/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>: TUN 模式能接管系统全部网络流量，但它比系统代理模式更容易出问题——权限不足、软件冲突、配置错误都可能导致 TUN 不生效。本文列出 TUN 模式最常见的故障原因和对应解决方法。</p></blockquote><hr><h2 id="问题一：权限不足"><a href="#问题一：权限不足" class="headerlink" title="问题一：权限不足"></a>问题一：权限不足</h2><p>TUN 模式的工作原理是创建一个虚拟网络适配器并修改系统路由表，这两个操作都需要操作系统的最高权限。权限不足是 TUN 不生效最常见也最容易忽略的原因。</p><h3 id="各平台的权限要求"><a href="#各平台的权限要求" class="headerlink" title="各平台的权限要求"></a>各平台的权限要求</h3><p><strong>Windows</strong>：</p><ul><li>代理客户端必须以管理员身份运行</li><li>右键客户端 → 以管理员身份运行</li><li>或者在客户端属性中勾选”以管理员身份运行此程序”，这样每次启动自动获取权限</li><li><a href="https://github.com/clash-verge-rev/clash-verge-rev">Clash Verge Rev</a> 提供了 Service Mode（服务模式），安装后客户端以系统服务运行，无需每次手动提权</li></ul><p><strong>macOS</strong>：</p><ul><li>首次开启 TUN 时，系统会弹出密码授权对话框</li><li>必须输入管理员密码才能创建虚拟网卡</li><li>如果点了取消或者授权失败，TUN 开关可能显示已开启但实际未生效</li></ul><p><strong>Linux</strong>：</p><ul><li>需要 root 权限或 <code>CAP_NET_ADMIN</code> 能力</li><li>使用 <code>sudo</code> 启动客户端，或通过 <code>setcap</code> 为二进制文件设置能力：</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> <span class="built_in">setcap</span> cap_net_admin=ep /path/to/proxy-client</span><br></pre></td></tr></table></figure><h3 id="典型症状"><a href="#典型症状" class="headerlink" title="典型症状"></a>典型症状</h3><ul><li>TUN 开关显示已开启，但流量仍然没有走代理</li><li>客户端日志中出现 <code>permission denied</code>、<code>operation not permitted</code> 等错误</li><li>虚拟网卡未创建（Windows 设备管理器或 <code>ipconfig</code> 中看不到 TUN 适配器）</li></ul><h3 id="解决方法"><a href="#解决方法" class="headerlink" title="解决方法"></a>解决方法</h3><ol><li>确认客户端是否以管理员&#x2F;root 身份运行</li><li>检查客户端日志，搜索权限相关的错误信息</li><li>Windows 用户：安装 Clash Verge Rev 的 Service Mode，一劳永逸解决权限问题（设置 → Service Mode → Install）</li><li>重启客户端后重新开启 TUN</li></ol><hr><h2 id="问题二：其他-VPN-或代理软件冲突"><a href="#问题二：其他-VPN-或代理软件冲突" class="headerlink" title="问题二：其他 VPN 或代理软件冲突"></a>问题二：其他 VPN 或代理软件冲突</h2><p>操作系统在同一时间只能有一个 TUN&#x2F;VPN 适配器正常控制路由表。当多个程序同时试图修改默认路由时，结果是不可预测的——可能一个覆盖另一个，也可能两个都不正常工作。</p><h3 id="常见冲突软件"><a href="#常见冲突软件" class="headerlink" title="常见冲突软件"></a>常见冲突软件</h3><ul><li><strong>企业 VPN</strong>：Cisco AnyConnect、GlobalProtect、FortiClient 等公司 VPN 客户端</li><li><strong>WireGuard</strong>：WireGuard 自身也会创建 TUN 设备并修改路由表</li><li><strong>Tailscale</strong>：基于 WireGuard 的组网工具，运行时会接管部分路由</li><li><strong>其他代理客户端</strong>：同时运行多个代理客户端（比如 Clash Verge 和 v2rayN 同时开启 TUN）</li><li><strong>OpenVPN</strong>：会创建 TAP&#x2F;TUN 虚拟网卡</li></ul><h3 id="典型症状-1"><a href="#典型症状-1" class="headerlink" title="典型症状"></a>典型症状</h3><ul><li>TUN 开启后失败，日志报告设备创建或路由设置错误</li><li>TUN 开启后连接全部断开——包括代理流量和直连流量都断</li><li>其他 VPN 软件突然不工作了</li><li>网络偶尔正常偶尔断开，行为不稳定</li></ul><h3 id="解决方法-1"><a href="#解决方法-1" class="headerlink" title="解决方法"></a>解决方法</h3><ol><li>在开启代理客户端的 TUN 之前，关闭所有其他 VPN 和代理软件</li><li>检查系统托盘、任务管理器中是否有残留的 VPN 进程</li><li>如果必须同时使用公司 VPN 和代理，把代理客户端切换到系统代理模式——系统代理不创建虚拟网卡，不会与 VPN 冲突</li><li>某些场景下可以让代理客户端和 VPN 共存，但需要手动调整路由优先级，操作复杂且容易出错，不推荐普通用户尝试</li></ol><hr><h2 id="问题三：虚拟化和-WSL-环境冲突"><a href="#问题三：虚拟化和-WSL-环境冲突" class="headerlink" title="问题三：虚拟化和 WSL 环境冲突"></a>问题三：虚拟化和 WSL 环境冲突</h2><p>Windows 上的 Hyper-V、WSL2 和 Docker Desktop 都依赖虚拟网络适配器。这些虚拟网络与 TUN 设备之间可能产生路由冲突，导致虚拟机或 WSL 的网络在 TUN 开启后断掉。</p><h3 id="冲突原理"><a href="#冲突原理" class="headerlink" title="冲突原理"></a>冲突原理</h3><p>WSL2 使用一个名为 <code>vEthernet (WSL)</code> 的虚拟网络适配器，通过 NAT 方式让 WSL 实例访问宿主机网络。当 TUN 模式修改了系统默认路由后，WSL 的网络流量路径被改变——原本应该通过宿主机直接出去的流量被 TUN 设备拦截，而 TUN 设备可能没有正确处理来自 WSL 虚拟网段的流量。</p><p>Docker Desktop（Windows 版）在使用 WSL2 后端时面临同样的问题。Hyper-V 虚拟机的虚拟交换机也可能因为路由变更而受影响。</p><h3 id="典型症状-2"><a href="#典型症状-2" class="headerlink" title="典型症状"></a>典型症状</h3><ul><li>开启 TUN 后，WSL2 内部无法访问网络（<code>apt update</code> 失败、<code>curl</code> 超时）</li><li>Docker 容器无法拉取镜像或访问外部网络</li><li>Hyper-V 虚拟机网络中断</li><li>关闭 TUN 后，虚拟化环境网络恢复正常</li></ul><h3 id="解决方法-2"><a href="#解决方法-2" class="headerlink" title="解决方法"></a>解决方法</h3><ol><li><strong>在 TUN 配置中排除 WSL 的虚拟网段</strong>：WSL2 通常使用 <code>172.16.0.0/12</code> 范围内的地址，确保分流规则中这些网段走 DIRECT</li><li><strong>切换到系统代理模式</strong>：如果你经常需要在 WSL 中工作，系统代理模式不会影响虚拟网络</li><li><strong>在 WSL 内部单独配置代理</strong>：在 WSL 的 shell 中设置 <code>http_proxy</code> 和 <code>https_proxy</code> 环境变量，指向宿主机的代理端口（通常是 <code>http://宿主机IP:7890</code>）</li><li><strong>调整 TUN 的路由配置</strong>：在 mihomo 配置中使用 <code>exclude-interface</code> 排除 WSL 的虚拟网卡</li></ol><hr><h2 id="问题四：TUN-协议栈选择不当"><a href="#问题四：TUN-协议栈选择不当" class="headerlink" title="问题四：TUN 协议栈选择不当"></a>问题四：TUN 协议栈选择不当</h2><p>TUN 设备接收到的是原始 IP 数据包，需要一个协议栈来处理这些数据包。mihomo（Clash Verge Rev 的内核）提供三种协议栈选项，选择不当可能导致 TUN 不正常工作。</p><h3 id="三种协议栈对比"><a href="#三种协议栈对比" class="headerlink" title="三种协议栈对比"></a>三种协议栈对比</h3><p><strong>gVisor（默认推荐）</strong>：</p><ul><li>Google 开发的用户态网络栈，在用户空间完整实现 TCP&#x2F;UDP 协议处理</li><li>优势：稳定性高、跨平台一致性好、与系统内核网络栈隔离</li><li>劣势：CPU 占用比 system 栈稍高</li><li>适用：日常使用的首选</li></ul><p><strong>system（内核栈）</strong>：</p><ul><li>直接使用操作系统内核的 TCP&#x2F;UDP 协议栈</li><li>优势：性能最好、CPU 开销最低</li><li>劣势：在某些系统或网络环境下可能出现兼容性问题</li><li>适用：高带宽需求、对性能敏感的场景</li></ul><p><strong>mixed（混合模式）</strong>：</p><ul><li>TCP 走 system 栈，UDP 走 gVisor 栈</li><li>折中方案：TCP 流量（网页、下载等大头流量）获得内核栈的性能优势，UDP 流量（DNS、游戏等）获得 gVisor 的稳定性</li><li>适用：在 system 栈出现 UDP 问题但 TCP 表现好的情况下</li></ul><h3 id="典型症状-3"><a href="#典型症状-3" class="headerlink" title="典型症状"></a>典型症状</h3><ul><li>使用 gVisor 栈时某些应用无法连接</li><li>使用 system 栈时出现不定期的连接中断或系统网络异常</li><li>UDP 流量（如游戏、DNS）工作不正常</li></ul><h3 id="解决方法-3"><a href="#解决方法-3" class="headerlink" title="解决方法"></a>解决方法</h3><p>如果 TUN 不生效或行为异常，切换协议栈是最简单的排查手段之一：</p><ol><li><strong>Clash Verge Rev</strong>：设置 → TUN → Stack，在 gVisor &#x2F; system &#x2F; mixed 之间切换</li><li><strong>配置文件方式</strong>：修改 <code>tun.stack</code> 字段</li></ol><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">tun:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">stack:</span> <span class="string">mixed</span>    <span class="comment"># 可选 gvisor / system / mixed</span></span><br></pre></td></tr></table></figure><ol start="3"><li>切换后重启客户端，观察 TUN 是否正常工作</li><li>一般建议先用 gVisor（默认），不行再试 mixed，最后试 system</li></ol><hr><h2 id="问题五：防火墙和杀毒软件拦截"><a href="#问题五：防火墙和杀毒软件拦截" class="headerlink" title="问题五：防火墙和杀毒软件拦截"></a>问题五：防火墙和杀毒软件拦截</h2><p>安全软件可能将 TUN 模式的行为——创建虚拟网卡、修改路由表、拦截所有网络流量——视为可疑操作并予以阻止。这在 Windows 上尤其常见。</p><h3 id="可能的拦截行为"><a href="#可能的拦截行为" class="headerlink" title="可能的拦截行为"></a>可能的拦截行为</h3><ul><li><strong>杀毒软件阻止虚拟网卡创建</strong>：国内安全软件（如 360、火绒）可能直接拦截虚拟设备驱动的安装或加载</li><li><strong>Windows 防火墙阻止 TUN 流量</strong>：防火墙规则可能阻止代理客户端在 TUN 虚拟网卡上的通信</li><li><strong>企业安全策略</strong>：公司电脑上的终端安全软件可能强制禁止创建 VPN&#x2F;TUN 设备</li><li><strong>Windows Defender SmartScreen</strong>：首次运行客户端时可能弹出警告并阻止执行</li></ul><h3 id="典型症状-4"><a href="#典型症状-4" class="headerlink" title="典型症状"></a>典型症状</h3><ul><li>TUN 开关开启但虚拟网卡未出现</li><li>TUN 虚拟网卡创建成功，但所有流量都无法通过——表现为全面断网</li><li>客户端日志中出现驱动加载失败或网络接口创建失败的错误</li></ul><h3 id="解决方法-4"><a href="#解决方法-4" class="headerlink" title="解决方法"></a>解决方法</h3><ol><li><strong>将代理客户端添加到杀毒软件的排除列表</strong><ul><li>Windows Defender：设置 → 隐私和安全 → Windows 安全 → 病毒和威胁防护 → 排除项 → 添加代理客户端的安装目录</li><li>火绒 &#x2F; 360：在对应的白名单或信任列表中添加客户端</li></ul></li><li><strong>检查 Windows 防火墙规则</strong><ul><li>控制面板 → Windows Defender 防火墙 → 允许应用通过防火墙 → 确认代理客户端在列表中且已勾选</li></ul></li><li><strong>临时关闭安全软件测试</strong><ul><li>暂时关闭防火墙和杀毒软件，测试 TUN 是否正常</li><li>如果关闭后正常 → 确认是安全软件导致的问题，添加排除规则后重新开启</li></ul></li><li><strong>企业环境</strong>：如果公司安全策略禁止 TUN，可能无法绕过，只能使用系统代理模式</li></ol><hr><h2 id="问题六：DNS-配置问题"><a href="#问题六：DNS-配置问题" class="headerlink" title="问题六：DNS 配置问题"></a>问题六：DNS 配置问题</h2><p>TUN 模式下，代理客户端通常会接管系统的 DNS 解析。如果 DNS 配置不正确，TUN 可能成功捕获了所有流量，但由于域名无法解析，网站仍然打不开。</p><h3 id="DNS-在-TUN-模式下的工作方式"><a href="#DNS-在-TUN-模式下的工作方式" class="headerlink" title="DNS 在 TUN 模式下的工作方式"></a>DNS 在 TUN 模式下的工作方式</h3><p>TUN 模式通过 <code>dns-hijack</code> 参数劫持系统发出的 DNS 请求（通常是发往 UDP 53 端口的查询），由代理客户端统一处理 DNS 解析。更多 TUN 和 DNS 配置细节可以参考 <a href="https://wiki.metacubex.one/">Clash Wiki</a>。这既能防止 DNS 泄漏，又能让 Fake-IP 等高级 DNS 策略生效。</p><p>如果 DNS 模块未启用或配置有误，劫持到的 DNS 请求无法得到正确的响应，所有域名访问都会失败。</p><h3 id="典型症状-5"><a href="#典型症状-5" class="headerlink" title="典型症状"></a>典型症状</h3><ul><li>TUN 开启后，直接 ping IP 地址能通（如 <code>ping 1.1.1.1</code> 正常），但网站打不开</li><li>浏览器显示”DNS_PROBE_FINISHED_NXDOMAIN”或类似的 DNS 错误</li><li>部分网站能打开但大多数不行（可能命中了 DNS 缓存的域名能用，未缓存的不行）</li></ul><h3 id="解决方法-5"><a href="#解决方法-5" class="headerlink" title="解决方法"></a>解决方法</h3><ol><li><strong>确保 DNS 模块已启用</strong>：在 mihomo 配置中确认 <code>dns.enable: true</code></li></ol><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">dns:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">enhanced-mode:</span> <span class="string">fake-ip</span>    <span class="comment"># 推荐使用 fake-ip 模式</span></span><br><span class="line">  <span class="attr">fake-ip-range:</span> <span class="number">198.18</span><span class="number">.0</span><span class="number">.1</span><span class="string">/16</span></span><br><span class="line">  <span class="attr">nameserver:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">https://dns.alidns.com/dns-query</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">https://doh.pub/dns-query</span></span><br></pre></td></tr></table></figure><ol start="2"><li><strong>确认 dns-hijack 配置正确</strong>：TUN 配置中必须包含 DNS 劫持设置</li></ol><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">tun:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">dns-hijack:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">any:53</span>    <span class="comment"># 劫持所有发往 53 端口的 DNS 请求</span></span><br></pre></td></tr></table></figure><ol start="3"><li><p><strong>检查 nameserver 是否可用</strong>：如果上游 DNS 服务器不可达，所有 DNS 请求都会超时。国内环境推荐使用国内 DoH：</p><ul><li>阿里 DNS：<code>https://dns.alidns.com/dns-query</code></li><li>腾讯 DNS：<code>https://doh.pub/dns-query</code></li></ul></li><li><p><strong>清除系统 DNS 缓存</strong>：修改 DNS 配置后，刷新系统缓存使新配置立即生效</p></li></ol><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Windows</span></span><br><span class="line">ipconfig /flushdns</span><br><span class="line"></span><br><span class="line"><span class="comment"># macOS</span></span><br><span class="line"><span class="built_in">sudo</span> dscacheutil -flushcache; <span class="built_in">sudo</span> killall -HUP mDNSResponder</span><br><span class="line"></span><br><span class="line"><span class="comment"># Linux</span></span><br><span class="line"><span class="built_in">sudo</span> systemd-resolve --flush-caches</span><br></pre></td></tr></table></figure><hr><h2 id="问题七：局域网设备不可达"><a href="#问题七：局域网设备不可达" class="headerlink" title="问题七：局域网设备不可达"></a>问题七：局域网设备不可达</h2><p>TUN 模式捕获系统的所有出站流量，包括发往局域网内部的流量。如果分流规则中没有将私有网络地址段设为直连，局域网内的打印机、NAS、本地开发服务器等设备都会变得不可达。</p><h3 id="典型症状-6"><a href="#典型症状-6" class="headerlink" title="典型症状"></a>典型症状</h3><ul><li>开启 TUN 后，网络打印机无法打印</li><li>NAS 设备（如群晖）的管理界面打不开</li><li>局域网内的文件共享（SMB）失败</li><li>本地开发服务器（如 <code>localhost:3000</code> 或 <code>192.168.1.x:8080</code>）无法访问</li><li>智能家居设备（如 HomeAssistant）失联</li></ul><h3 id="解决方法-6"><a href="#解决方法-6" class="headerlink" title="解决方法"></a>解决方法</h3><p>确保代理配置中包含以下直连规则，覆盖所有 RFC 1918 私有地址段和其他特殊地址段：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">tun:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">stack:</span> <span class="string">mixed</span></span><br><span class="line">  <span class="attr">dns-hijack:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">any:53</span></span><br><span class="line">  <span class="attr">auto-route:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">auto-detect-interface:</span> <span class="literal">true</span></span><br><span class="line"></span><br><span class="line"><span class="attr">rules:</span></span><br><span class="line">  <span class="comment"># 局域网直连 - 必须包含</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">IP-CIDR,192.168.0.0/16,DIRECT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">IP-CIDR,10.0.0.0/8,DIRECT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">IP-CIDR,172.16.0.0/12,DIRECT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">IP-CIDR,127.0.0.0/8,DIRECT</span></span><br><span class="line">  <span class="comment"># 其他特殊地址段</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">IP-CIDR,100.64.0.0/10,DIRECT</span>    <span class="comment"># CGNAT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">IP-CIDR,169.254.0.0/16,DIRECT</span>   <span class="comment"># 链路本地</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">IP-CIDR,224.0.0.0/4,DIRECT</span>      <span class="comment"># 多播</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">IP-CIDR,255.255.255.255/32,DIRECT</span>  <span class="comment"># 广播</span></span><br></pre></td></tr></table></figure><p>大多数机场订阅配置已经包含了这些规则。如果你使用自定义配置或精简过规则文件，检查是否遗漏了这些直连规则。</p><hr><h2 id="问题八：系统代理和-TUN-同时开启"><a href="#问题八：系统代理和-TUN-同时开启" class="headerlink" title="问题八：系统代理和 TUN 同时开启"></a>问题八：系统代理和 TUN 同时开启</h2><p>系统代理和 TUN 是两种不同的流量捕获机制。同时开启两者可能导致流量被重复处理——数据包先被系统代理捕获一次，再被 TUN 设备捕获一次，形成处理循环或冲突。</p><h3 id="典型症状-7"><a href="#典型症状-7" class="headerlink" title="典型症状"></a>典型症状</h3><ul><li>网络极不稳定，速度时快时慢</li><li>部分网站能打开，部分超时</li><li>客户端日志中出现大量重复连接或异常错误</li><li>CPU 占用异常升高（流量被循环处理）</li></ul><h3 id="解决方法-7"><a href="#解决方法-7" class="headerlink" title="解决方法"></a>解决方法</h3><p><strong>同一时间只使用一种模式</strong>：</p><ul><li>使用 TUN 模式时 → 关闭系统代理</li><li>使用系统代理时 → 关闭 TUN</li></ul><p>大多数现代代理客户端（如 Clash Verge Rev）在开启 TUN 时会自动关闭系统代理。但如果你的客户端没有自动处理，或者你手动开启了系统代理，需要自行确认不要同时激活两者。</p><p>在 Clash Verge Rev 中检查：界面顶部的模式切换区域应该只有一种模式处于激活状态。</p><hr><h2 id="系统排查流程"><a href="#系统排查流程" class="headerlink" title="系统排查流程"></a>系统排查流程</h2><p>如果 TUN 不生效，按照以下顺序逐步排查，可以高效定位问题：</p><h3 id="第一步：检查权限"><a href="#第一步：检查权限" class="headerlink" title="第一步：检查权限"></a>第一步：检查权限</h3><p>确认代理客户端是否以管理员权限运行。这是最常见的原因，排查成本也最低。</p><ul><li>Windows：右键客户端图标 → 以管理员身份运行</li><li>macOS：重新开启 TUN 时注意系统的密码授权弹窗</li><li>Linux：用 <code>sudo</code> 启动或确认已设置 <code>CAP_NET_ADMIN</code></li></ul><h3 id="第二步：检查软件冲突"><a href="#第二步：检查软件冲突" class="headerlink" title="第二步：检查软件冲突"></a>第二步：检查软件冲突</h3><p>打开任务管理器（Windows）或活动监视器（macOS），确认没有其他 VPN 或代理软件在运行。重点检查：WireGuard、Tailscale、公司 VPN 客户端、其他代理客户端。</p><h3 id="第三步：查看客户端日志"><a href="#第三步：查看客户端日志" class="headerlink" title="第三步：查看客户端日志"></a>第三步：查看客户端日志</h3><p>在客户端中开启 Debug 级别日志，重新开关 TUN，观察日志输出。关注以下关键词：</p><ul><li><code>permission</code>、<code>denied</code> → 权限问题</li><li><code>device</code>、<code>interface</code>、<code>create failed</code> → 虚拟网卡创建失败</li><li><code>route</code>、<code>routing</code> → 路由设置失败</li><li><code>dns</code>、<code>resolve</code> → DNS 配置问题</li></ul><h3 id="第四步：切换-TUN-协议栈"><a href="#第四步：切换-TUN-协议栈" class="headerlink" title="第四步：切换 TUN 协议栈"></a>第四步：切换 TUN 协议栈</h3><p>在客户端设置中将 TUN 协议栈从 gVisor 切换到 system 或 mixed（反之亦然），重启客户端测试。不同协议栈在不同系统环境下的兼容性不同，切换栈是低成本的排查手段。</p><h3 id="第五步：排除安全软件"><a href="#第五步：排除安全软件" class="headerlink" title="第五步：排除安全软件"></a>第五步：排除安全软件</h3><p>临时关闭防火墙和杀毒软件，重新测试 TUN。如果关闭后 TUN 正常工作 → 将客户端添加到安全软件的排除列表中，然后重新开启安全软件。</p><h3 id="第六步：检查-DNS-配置"><a href="#第六步：检查-DNS-配置" class="headerlink" title="第六步：检查 DNS 配置"></a>第六步：检查 DNS 配置</h3><p>验证 <code>dns.enable</code> 是否为 <code>true</code>，<code>dns-hijack</code> 是否包含 <code>any:53</code>，上游 DNS 服务器是否可达。DNS 配置错误的典型表现是 ping IP 正常但网站打不开。</p><h3 id="第七步：验证局域网直连规则"><a href="#第七步：验证局域网直连规则" class="headerlink" title="第七步：验证局域网直连规则"></a>第七步：验证局域网直连规则</h3><p>检查分流规则中是否包含 <code>192.168.0.0/16</code>、<code>10.0.0.0/8</code>、<code>172.16.0.0/12</code> 等私有网段的 DIRECT 规则。缺少这些规则会导致局域网设备不可达。</p><h3 id="第八步：退回系统代理测试"><a href="#第八步：退回系统代理测试" class="headerlink" title="第八步：退回系统代理测试"></a>第八步：退回系统代理测试</h3><p>把代理模式切换回系统代理。如果系统代理正常工作 → 确认问题出在 TUN 模式本身，重点排查以上 TUN 相关的配置。如果系统代理也不工作 → 问题不在 TUN，而是节点、订阅或网络本身的问题，参考<a href="./connectivity-checklist.md">节点连不上的排查流程</a>。</p><hr><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="Q：TUN-和系统代理哪个更好？"><a href="#Q：TUN-和系统代理哪个更好？" class="headerlink" title="Q：TUN 和系统代理哪个更好？"></a>Q：TUN 和系统代理哪个更好？</h3><p>没有绝对的好坏，取决于使用场景。TUN 模式更全面——它捕获系统所有流量，包括 UDP、DNS 和不读取系统代理的应用程序。系统代理更轻量——不需要管理员权限，不会与 VPN 冲突，排障也更简单。</p><p>如果你只在浏览器中使用代理、不打游戏、不需要 UDP 支持，系统代理就够了。如果你需要游戏加速、防止 DNS 泄漏、或者让所有应用都走代理，才需要开启 TUN。</p><h3 id="Q：TUN-模式会导致电脑变慢吗？"><a href="#Q：TUN-模式会导致电脑变慢吗？" class="headerlink" title="Q：TUN 模式会导致电脑变慢吗？"></a>Q：TUN 模式会导致电脑变慢吗？</h3><p>轻微影响，但正常情况下几乎感知不到。gVisor 协议栈在用户空间处理网络数据包，会占用一些 CPU 资源。在高带宽场景下（如下载大文件），CPU 占用可能会有一定上升。</p><p>如果感觉明显变慢，可以尝试以下操作：</p><ul><li>切换到 system 栈（性能最好但兼容性略低）</li><li>检查是否加载了过多的分流规则（几万条规则会增加匹配开销）</li><li>确认日志级别不是 Debug（Debug 日志的 IO 开销不可忽略）</li></ul><h3 id="Q：手机上需要开-TUN-吗？"><a href="#Q：手机上需要开-TUN-吗？" class="headerlink" title="Q：手机上需要开 TUN 吗？"></a>Q：手机上需要开 TUN 吗？</h3><p>不需要额外操作。iOS 和 Android 上的代理客户端（Shadowrocket、Surge、sing-box 等）默认通过系统提供的 VPN 接口捕获所有流量，效果等同于桌面端的 TUN 模式。当你在手机上开启代理客户端时看到的 VPN 图标，就意味着所有流量已经被接管。手机用户不存在”系统代理 vs TUN”的选择问题。</p><h3 id="Q：WSL2-网络在-TUN-下断了怎么办？"><a href="#Q：WSL2-网络在-TUN-下断了怎么办？" class="headerlink" title="Q：WSL2 网络在 TUN 下断了怎么办？"></a>Q：WSL2 网络在 TUN 下断了怎么办？</h3><p>四种解决思路：</p><ol><li><strong>排除 WSL 网段</strong>：在分流规则中将 WSL 使用的虚拟网段（通常在 <code>172.16.0.0/12</code> 范围内）设为 DIRECT</li><li><strong>切换到系统代理模式</strong>：系统代理不修改路由表，不会影响 WSL 网络</li><li><strong>在 WSL 内部手动配置代理</strong>：设置 <code>export http_proxy=http://宿主机IP:7890</code> 和 <code>export https_proxy=http://宿主机IP:7890</code>，宿主机 IP 可通过 WSL 内 <code>cat /etc/resolv.conf</code> 中的 nameserver 获取</li><li><strong>使用 mixed 栈</strong>：部分用户反馈 mixed 栈对 WSL 虚拟网络的兼容性优于 gVisor 栈</li></ol><h3 id="Q：开启-TUN-后完全断网了怎么办？"><a href="#Q：开启-TUN-后完全断网了怎么办？" class="headerlink" title="Q：开启 TUN 后完全断网了怎么办？"></a>Q：开启 TUN 后完全断网了怎么办？</h3><p>首先不要慌——关闭 TUN 模式即可恢复网络。如果客户端界面无法操作（比如客户端也依赖网络），直接在任务管理器中结束代理客户端进程，系统网络会自动恢复。</p><p>完全断网通常意味着 TUN 虚拟网卡创建成功、路由表已修改，但代理客户端无法正确处理流量。常见原因：</p><ul><li>代理节点本身就不可用（先用系统代理模式确认节点可用性）</li><li>DNS 配置错误（参考问题六的解决方法）</li><li>安全软件拦截了 TUN 虚拟网卡上的流量</li><li>系统代理和 TUN 同时开启导致流量循环</li></ul><h3 id="Q：每次开机都要重新开启-TUN-吗？"><a href="#Q：每次开机都要重新开启-TUN-吗？" class="headerlink" title="Q：每次开机都要重新开启 TUN 吗？"></a>Q：每次开机都要重新开启 TUN 吗？</h3><p>取决于客户端的设置。大多数客户端支持”开机自启动”和”启动时自动开启 TUN”两个选项。在 Clash Verge Rev 中：</p><ul><li>设置 → 开机自启 → 开启</li><li>设置 → TUN → 默认开启</li></ul><p>配合 Service Mode 使用，可以实现开机后全自动进入 TUN 模式，无需任何手动操作。</p>]]></content>
      
      
      <categories>
          
          <category> 排障手册 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> 排障 </tag>
            
            <tag> TUN </tag>
            
            <tag> VPN </tag>
            
            <tag> 权限 </tag>
            
            <tag> 冲突 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>TUN 模式 vs 系统代理：原理与选择</title>
      <link href="/posts/tun-vs-system-proxy/"/>
      <url>/posts/tun-vs-system-proxy/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：代理客户端通常提供两种工作模式：系统代理和 TUN 模式。两者的核心区别在于流量的捕获方式——系统代理只能捕获部分应用的流量，TUN 模式则接管整个系统的网络。本文解释两者的工作原理、优劣和选择建议。</p></blockquote><hr><h2 id="为什么需要理解这个区别"><a href="#为什么需要理解这个区别" class="headerlink" title="为什么需要理解这个区别"></a>为什么需要理解这个区别</h2><p>很多用户第一次用代理客户端时，打开软件、导入订阅、选好节点，以为就万事大吉了。结果发现：浏览器能翻墙了，但某个游戏的网络还是卡；或者命令行里 <code>git clone</code> 一个 GitHub 仓库，速度依然慢得像蜗牛。</p><p>问题往往出在工作模式的选择上。代理客户端（<a href="https://github.com/clash-verge-rev/clash-verge-rev">Clash Verge Rev</a>、<a href="https://github.com/SagerNet/sing-box">sing-box</a> 等）默认使用的是”系统代理”模式。这个模式并不能捕获所有应用的网络流量。要理解哪些流量被捕获、哪些被遗漏，就需要搞清楚系统代理和 TUN 模式各自的工作原理。</p><hr><h2 id="系统代理（System-Proxy）"><a href="#系统代理（System-Proxy）" class="headerlink" title="系统代理（System Proxy）"></a>系统代理（System Proxy）</h2><h3 id="工作原理"><a href="#工作原理" class="headerlink" title="工作原理"></a>工作原理</h3><p>系统代理的本质是修改操作系统的代理设置。在 Windows 上，它写入的是注册表中 <code>Internet Settings</code> 下的 <code>ProxyServer</code> 值；在 macOS 上，它修改的是”网络偏好设置”中的代理配置；在 Linux 上，它依赖的是 <code>http_proxy</code>、<code>https_proxy</code> 等环境变量。</p><p>具体流程如下：</p><ol><li><strong>代理客户端在本地启动一个 HTTP&#x2F;SOCKS 代理服务器</strong>，监听在某个端口上，比如 <code>127.0.0.1:7890</code></li><li><strong>修改操作系统的代理设置</strong>，告诉系统”所有 HTTP&#x2F;HTTPS 请求应该发送到 <code>127.0.0.1:7890</code> 这个地址”</li><li><strong>应用程序读取系统代理设置</strong>，在发起网络请求时，不再直接连接目标服务器，而是先连接到本地代理端口</li><li><strong>代理客户端接收请求</strong>，根据分流规则判断走代理还是直连，再转发到对应的目标</li></ol><p>这个机制有一个关键前提：<strong>应用程序必须主动读取并尊重操作系统的代理设置</strong>。操作系统并不会在网络层面强制所有流量走代理，它只是”通知”应用程序有一个代理可用。至于应用程序是否使用这个代理，完全取决于应用自身的实现。</p><h3 id="哪些流量会被捕获"><a href="#哪些流量会被捕获" class="headerlink" title="哪些流量会被捕获"></a>哪些流量会被捕获</h3><p>理解了系统代理的工作原理后，就能推断出哪些流量会被捕获、哪些不会：</p><p><strong>会被捕获的流量</strong>：</p><ul><li><strong>浏览器</strong>（Chrome、Edge、Firefox）：所有主流浏览器都会读取系统代理设置，这是最可靠的场景</li><li><strong>大多数现代 GUI 应用程序</strong>：包括 Electron 框架开发的应用（VS Code、Slack、Discord 等），因为 Electron 底层使用的是 Chromium 的网络栈，天然支持系统代理</li><li><strong>部分命令行工具</strong>：<code>curl</code> 默认读取 <code>http_proxy</code> &#x2F; <code>https_proxy</code> 环境变量；<code>git</code> 可以通过 <code>http.proxy</code> 配置走代理；<code>npm</code> 支持 <code>proxy</code> 配置项</li></ul><p><strong>不会被捕获的流量</strong>：</p><ul><li><strong>游戏客户端</strong>：绝大多数游戏使用自己的网络库直接建立 TCP&#x2F;UDP 连接，不会读取系统代理设置。这也是”开了代理但游戏还是卡”的根本原因</li><li><strong>系统级连接</strong>：Windows Update、时间同步、微软账户验证等系统服务通常不走系统代理</li><li><strong>UDP 流量</strong>：HTTP 代理只支持 TCP 协议。虽然 SOCKS5 协议理论上支持 UDP，但很少有应用原生支持 SOCKS5 代理，更不用说通过 SOCKS5 转发 UDP</li><li><strong>某些桌面应用程序</strong>：部分原生应用（尤其是使用底层 socket API 开发的应用）会绕过系统代理，直接发起网络连接</li><li><strong>DNS 请求</strong>：应用程序的 DNS 查询通常由操作系统的 DNS 解析器处理，不经过 HTTP 代理。这意味着即使 HTTP 请求走了代理，DNS 查询可能仍然暴露在外，造成 DNS 泄漏</li></ul><h3 id="优势"><a href="#优势" class="headerlink" title="优势"></a>优势</h3><ul><li><strong>轻量级</strong>：不需要创建虚拟网卡，不会修改系统的网络栈，对系统的侵入性最小</li><li><strong>无需管理员权限</strong>：普通用户权限即可运行，不需要以管理员身份启动客户端</li><li><strong>兼容性好</strong>：不会与 VPN 软件、虚拟机网络适配器产生冲突</li><li><strong>排障简单</strong>：流量路径清晰，出问题时容易定位——如果某个应用不走代理，大概率是该应用不读取系统代理设置</li><li><strong>应用程序可选择性绕过</strong>：某些应用可以手动配置是否使用代理，灵活性高</li></ul><h3 id="劣势"><a href="#劣势" class="headerlink" title="劣势"></a>劣势</h3><ul><li><strong>覆盖面有限</strong>：无法捕获不读取系统代理的应用流量，这是最核心的限制</li><li><strong>不支持 UDP</strong>：HTTP 代理只能处理 TCP 流量，游戏、VoIP 通话、QUIC 协议等依赖 UDP 的场景无法工作</li><li><strong>DNS 泄漏风险</strong>：DNS 查询不经过代理，ISP 或 GFW 可以看到你在查询哪些域名</li><li><strong>对命令行工具支持不一致</strong>：不同的 CLI 工具对代理的支持方式不同，有些需要设环境变量，有些需要单独配置，有些根本不支持</li></ul><hr><h2 id="TUN-模式"><a href="#TUN-模式" class="headerlink" title="TUN 模式"></a>TUN 模式</h2><h3 id="工作原理-1"><a href="#工作原理-1" class="headerlink" title="工作原理"></a>工作原理</h3><p>TUN 模式的工作层级与系统代理完全不同。它工作在操作系统的网络栈层面，通过创建一个虚拟网络适配器（TUN 设备）来拦截系统的所有网络流量。</p><p>具体流程如下：</p><ol><li><strong>代理客户端请求管理员权限</strong>，创建一个 TUN 虚拟网卡。在 Windows 上，这通常表现为一个名为 <code>Wintun</code> 或 <code>WireGuard Tunnel</code> 的虚拟网络适配器；在 macOS &#x2F; Linux 上，它是一个 <code>utun</code> &#x2F; <code>tun0</code> 设备</li><li><strong>修改系统路由表</strong>，将默认路由（<code>0.0.0.0/0</code>）指向这个虚拟网卡。这意味着系统中所有的出站网络流量，无论来自哪个应用、使用什么协议，都会先流经这个虚拟网卡</li><li><strong>代理客户端在 IP 层（OSI 第三层）接收所有数据包</strong>，解析出 TCP&#x2F;UDP 连接信息，根据分流规则决定走代理还是直连</li><li><strong>走代理的流量</strong>被封装后通过代理隧道发送到远端代理节点；<strong>直连的流量</strong>则通过真实网卡直接发出</li></ol><p>由于 TUN 工作在 IP 层，它能看到操作系统发出的每一个网络数据包，不依赖应用程序是否”配合”。这从根本上解决了系统代理的覆盖面问题。</p><h3 id="哪些流量会被捕获-1"><a href="#哪些流量会被捕获-1" class="headerlink" title="哪些流量会被捕获"></a>哪些流量会被捕获</h3><p>简短的答案：<strong>所有流量</strong>。</p><ul><li><strong>所有应用程序</strong>——浏览器、游戏、命令行工具、系统服务、后台进程，无一例外</li><li><strong>所有协议</strong>——TCP、UDP、ICMP，只要是 IP 层之上的协议都会被捕获</li><li><strong>所有端口</strong>——不仅仅是 80&#x2F;443，任何端口的流量都会经过 TUN 设备</li><li><strong>DNS 查询</strong>——系统发出的 DNS 请求（通常是 UDP 53 端口）也会被 TUN 捕获，代理客户端可以完全接管 DNS 解析过程</li></ul><p>这就是 TUN 模式被称为”全局代理”的原因——它真正做到了”全局”，不留死角。</p><h3 id="TUN-协议栈（Stack）选项"><a href="#TUN-协议栈（Stack）选项" class="headerlink" title="TUN 协议栈（Stack）选项"></a>TUN 协议栈（Stack）选项</h3><p>TUN 设备接收到的是原始 IP 数据包，需要一个 TCP&#x2F;UDP 协议栈来将这些数据包还原为应用层的连接。目前主流实现提供以下几种协议栈选项：</p><p><strong>gVisor（推荐）</strong>：</p><p>gVisor 是 Google 开发的用户态网络栈，它在用户空间完整实现了 TCP&#x2F;UDP 协议处理。代理客户端不依赖操作系统内核的网络栈，而是自己解析和管理 TCP 连接状态。</p><ul><li>优势：稳定性高，与系统网络栈隔离，不会因为内核网络模块的 bug 或策略导致异常行为；跨平台一致性好</li><li>劣势：性能开销比直接使用系统内核栈略高，CPU 占用略大</li><li>适用场景：日常使用推荐，稳定性优先</li></ul><p><strong>system（系统内核栈）</strong>：</p><p>直接利用操作系统内核的 TCP&#x2F;UDP 协议栈处理数据包。代理客户端将 TUN 接收到的数据包通过系统 socket API 转发，内核负责协议处理。</p><ul><li>优势：性能最高，CPU 开销最低，因为协议处理由经过高度优化的内核代码完成</li><li>劣势：在某些操作系统或网络环境下可能出现兼容性问题；与系统网络栈耦合度高，排障更困难</li><li>适用场景：对性能有较高要求的场景，如高带宽下载、游戏加速</li></ul><p><strong>mixed（混合模式，sing-box 特有）</strong>：</p><p>TCP 连接使用 system 栈（追求性能），UDP 连接使用 gVisor 栈（追求稳定性）。这是一个折中方案——TCP 流量通常是大头（网页浏览、文件下载），用 system 栈提升性能；UDP 流量（DNS、游戏、VoIP）用 gVisor 栈保证兼容性。</p><h3 id="优势-1"><a href="#优势-1" class="headerlink" title="优势"></a>优势</h3><ul><li><strong>真正的全局代理</strong>：所有应用、所有协议、所有端口的流量都会被捕获，不存在遗漏</li><li><strong>完整的 UDP 支持</strong>：游戏、VoIP 通话、QUIC 协议（HTTP&#x2F;3）、视频会议等 UDP 密集型应用都能正常工作</li><li><strong>完全控制 DNS</strong>：DNS 查询被 TUN 设备捕获后，由代理客户端统一处理，彻底杜绝 DNS 泄漏</li><li><strong>无需逐个配置应用</strong>：不需要为每个应用单独设置代理，开启 TUN 后所有应用自动走代理&#x2F;分流</li></ul><h3 id="劣势-1"><a href="#劣势-1" class="headerlink" title="劣势"></a>劣势</h3><ul><li><strong>需要管理员权限</strong>：创建虚拟网卡和修改路由表需要 root &#x2F; 管理员权限，客户端通常需要以管理员身份运行</li><li><strong>可能与其他网络软件冲突</strong>：TUN 设备会修改系统路由表，可能与已有的 VPN 客户端（如 WireGuard、OpenVPN）、虚拟机软件（VMware、VirtualBox 的 Host-Only &#x2F; NAT 网络）产生路由冲突</li><li><strong>资源开销略高</strong>：运行用户态协议栈（如 gVisor）会增加 CPU 和内存消耗，在低端设备上可能有感知</li><li><strong>局域网服务可能受影响</strong>：所有流量都经过 TUN 设备，包括局域网内的通信。如果配置不当，可能导致网络打印机、NAS、局域网文件共享、mDNS 设备发现等功能失效</li><li><strong>排障难度更高</strong>：流量路径涉及虚拟网卡、路由表、协议栈等多个环节，出问题时排查更复杂</li><li><strong>杀毒软件误报</strong>：某些杀毒软件会将创建虚拟网卡、修改路由表的行为标记为可疑操作</li></ul><hr><h2 id="Clash-Verge-TUN-vs-sing-box-TUN：实现差异"><a href="#Clash-Verge-TUN-vs-sing-box-TUN：实现差异" class="headerlink" title="Clash Verge TUN vs sing-box TUN：实现差异"></a>Clash Verge TUN vs sing-box TUN：实现差异</h2><p>目前桌面端最常用的两个 TUN 实现分别来自 Clash Verge Rev（基于 mihomo 内核）和 sing-box。两者在 TUN 实现上有一些值得了解的差异。</p><h3 id="Clash-Verge-Rev（mihomo-内核）"><a href="#Clash-Verge-Rev（mihomo-内核）" class="headerlink" title="Clash Verge Rev（mihomo 内核）"></a>Clash Verge Rev（mihomo 内核）</h3><p>mihomo（前身为 Clash.Meta）的 TUN 实现经过多年迭代，其配置细节可参考 <a href="https://wiki.metacubex.one/">Clash Wiki</a>。它，稳定性和兼容性在社区中得到了广泛验证。</p><ul><li><strong>与规则系统深度集成</strong>：mihomo 的 TUN 模块和规则引擎是一体化设计的，流量从 TUN 捕获到规则匹配再到分流转发的链路非常紧密，配置也更直观</li><li><strong>协议栈选项</strong>：支持 gVisor（默认）和 system 两种</li><li><strong>配置简单</strong>：在 Clash Verge Rev 的 GUI 中，开启 TUN 只需一个开关。默认的 gVisor 栈对绝大多数用户来说就是最佳选择</li><li><strong>社区资源丰富</strong>：大量的中文教程、配置模板和排障指南</li></ul><h3 id="sing-box"><a href="#sing-box" class="headerlink" title="sing-box"></a>sing-box</h3><p>sing-box 的 TUN 实现是独立设计的，在某些技术细节上与 mihomo 有所不同。</p><ul><li><strong>协议栈选项更多</strong>：除了 gVisor 和 system 之外，还提供 mixed 模式，在 TCP 性能和 UDP 稳定性之间取得平衡</li><li><strong>部分边缘场景处理更好</strong>：社区反馈 sing-box 的 TUN 在处理某些特定游戏的 UDP 连接、以及某些不常见的网络协议时，兼容性略优</li><li><strong>性能表现</strong>：sing-box 整体设计注重性能，TUN 模块的吞吐量基准测试结果通常略优于 mihomo</li><li><strong>配置灵活但门槛更高</strong>：sing-box 使用 JSON 配置文件，灵活性强，但对新手不太友好</li></ul><h3 id="实际体验差异"><a href="#实际体验差异" class="headerlink" title="实际体验差异"></a>实际体验差异</h3><p>对于绝大多数用户来说，两者的 TUN 实现在日常使用中的差异<strong>几乎感知不到</strong>。浏览网页、看视频、日常办公的场景下，两者表现基本一致。</p><p>差异主要体现在以下边缘场景：</p><ul><li><strong>某些特定游戏</strong>：少数游戏的 UDP 连接处理方式比较特殊，可能在一个实现下正常、另一个下异常。这类情况无法一概而论，需要实际测试</li><li><strong>高带宽场景</strong>：在千兆以上的带宽环境下，system 栈和 gVisor 栈之间的性能差异可能变得可感知</li><li><strong>与特定 VPN 软件共存</strong>：不同的 TUN 实现在路由表管理上的策略不同，可能导致与第三方 VPN 的兼容性差异</li></ul><p><strong>结论</strong>：选择的依据应该是你更偏好哪个客户端的整体体验（GUI、配置方式、规则管理、社区生态），而不是纠结于 TUN 实现本身的微小差异。如果你追求简单易用，Clash Verge Rev 是更好的选择；如果你偏好灵活配置且不怕折腾，sing-box 值得尝试。</p><hr><h2 id="怎么选？"><a href="#怎么选？" class="headerlink" title="怎么选？"></a>怎么选？</h2><p>以下决策流程可以帮助你快速判断应该使用哪种模式：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">你需要代理游戏、VoIP 或其他 UDP 应用吗？</span><br><span class="line">├── 是 → 必须用 TUN 模式（系统代理不支持 UDP）</span><br><span class="line">└── 否 ↓</span><br><span class="line"></span><br><span class="line">    你是否在意部分应用可能绕过代理？</span><br><span class="line">    ├── 在意（比如担心 DNS 泄漏、某些应用不走代理） → TUN 模式</span><br><span class="line">    └── 不在意（只要浏览器能翻墙就行） → 系统代理足够</span><br><span class="line">    </span><br><span class="line">你的设备上是否运行了 VPN 软件或虚拟机？</span><br><span class="line">├── 是 → 可能与 TUN 冲突，建议先试系统代理</span><br><span class="line">└── 否 → TUN 模式通常没有问题</span><br><span class="line"></span><br><span class="line">你的设备性能是否有限（老电脑、低端设备）？</span><br><span class="line">├── 是 → 系统代理更轻量</span><br><span class="line">└── 否 → TUN 模式的额外开销可以忽略</span><br></pre></td></tr></table></figure><p><strong>一般建议</strong>：先用系统代理模式。如果你发现有应用无法通过代理访问，或者需要游戏&#x2F;UDP 支持，再切换到 TUN 模式。对于大多数只在浏览器中使用代理的用户，系统代理已经够用了。</p><hr><h2 id="配置指南"><a href="#配置指南" class="headerlink" title="配置指南"></a>配置指南</h2><h3 id="Clash-Verge-Rev-开启-TUN-模式"><a href="#Clash-Verge-Rev-开启-TUN-模式" class="headerlink" title="Clash Verge Rev 开启 TUN 模式"></a>Clash Verge Rev 开启 TUN 模式</h3><ol><li>打开 Clash Verge Rev，进入”设置”页面</li><li>找到”TUN 模式”开关，点击开启</li><li>系统会弹出 UAC 提示（Windows）或要求输入密码（macOS &#x2F; Linux），授权管理员权限</li><li>推荐使用默认的 gVisor 协议栈，除非你有明确的性能需求</li></ol><p>对应的 mihomo 配置片段：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">tun:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">stack:</span> <span class="string">gvisor</span>       <span class="comment"># 推荐 gvisor，追求性能可用 system</span></span><br><span class="line">  <span class="attr">dns-hijack:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">any:53</span>          <span class="comment"># 劫持所有 DNS 请求</span></span><br><span class="line">  <span class="attr">auto-route:</span> <span class="literal">true</span>    <span class="comment"># 自动配置路由表</span></span><br><span class="line">  <span class="attr">auto-detect-interface:</span> <span class="literal">true</span>  <span class="comment"># 自动检测出站网卡</span></span><br></pre></td></tr></table></figure><p><strong>关键参数说明</strong>：</p><ul><li><code>stack</code>：协议栈选择。<code>gvisor</code> 稳定性优先，<code>system</code> 性能优先</li><li><code>dns-hijack</code>：劫持 DNS 请求，确保所有 DNS 查询都由代理客户端处理，防止 DNS 泄漏</li><li><code>auto-route</code>：自动将默认路由指向 TUN 设备，无需手动配置路由表</li><li><code>auto-detect-interface</code>：自动检测物理网卡，确保代理客户端自身的出站流量不经过 TUN（避免死循环）</li></ul><h3 id="局域网绕过配置"><a href="#局域网绕过配置" class="headerlink" title="局域网绕过配置"></a>局域网绕过配置</h3><p>开启 TUN 后，局域网流量也会被 TUN 捕获。如果你需要访问局域网内的设备（打印机、NAS、本地服务器等），需要在分流规则中添加直连规则：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">rules:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">IP-CIDR,192.168.0.0/16,DIRECT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">IP-CIDR,10.0.0.0/8,DIRECT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">IP-CIDR,172.16.0.0/12,DIRECT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">IP-CIDR,127.0.0.0/8,DIRECT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">IP-CIDR,100.64.0.0/10,DIRECT</span>  <span class="comment"># CGNAT 地址段</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">IP-CIDR,169.254.0.0/16,DIRECT</span>  <span class="comment"># 链路本地地址</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">IP-CIDR,224.0.0.0/4,DIRECT</span>     <span class="comment"># 多播地址</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">IP-CIDR,255.255.255.255/32,DIRECT</span>  <span class="comment"># 广播地址</span></span><br></pre></td></tr></table></figure><p>大多数机场提供的订阅配置已经包含了这些规则。如果你发现开启 TUN 后无法访问局域网设备，首先检查配置中是否缺少上述直连规则。</p><hr><h2 id="常见问题排查"><a href="#常见问题排查" class="headerlink" title="常见问题排查"></a>常见问题排查</h2><h3 id="TUN-模式无法正常工作"><a href="#TUN-模式无法正常工作" class="headerlink" title="TUN 模式无法正常工作"></a>TUN 模式无法正常工作</h3><p>按以下顺序检查：</p><ol><li><strong>管理员权限</strong>：确认代理客户端是否以管理员身份运行。Windows 用户可以右键客户端 → “以管理员身份运行”；也可以在客户端设置中开启”以管理员身份运行”选项</li><li><strong>VPN 软件冲突</strong>：检查是否有其他 VPN 客户端正在运行（如 WireGuard、OpenVPN、公司 VPN）。多个 VPN &#x2F; TUN 设备同时运行几乎必然导致路由冲突。解决方法是关闭其他 VPN，或将代理客户端切换到系统代理模式</li><li><strong>虚拟机软件冲突</strong>：VMware 和 VirtualBox 的虚拟网络适配器可能与 TUN 设备的路由规则冲突。如果使用虚拟机，尝试在虚拟机网络设置中切换到”桥接模式”</li><li><strong>杀毒软件拦截</strong>：某些杀毒软件（尤其是国内的安全软件）可能阻止创建虚拟网卡。尝试在杀毒软件中添加代理客户端的白名单</li></ol><h3 id="开了-TUN-后局域网设备找不到"><a href="#开了-TUN-后局域网设备找不到" class="headerlink" title="开了 TUN 后局域网设备找不到"></a>开了 TUN 后局域网设备找不到</h3><p>TUN 模式会捕获所有出站流量，包括发往局域网的流量。局域网设备发现协议（如 mDNS、SSDP、NetBIOS）依赖多播和广播，这些流量经过 TUN 后可能被代理客户端错误处理。</p><p>解决方法：</p><ul><li>确保分流规则中包含局域网 IP 段的直连规则（见上文”局域网绕过配置”部分）</li><li>在 Clash Verge Rev 中检查”绕过”设置，确认局域网地址段已被排除</li><li>如果问题仍然存在，考虑切换到系统代理模式来排除 TUN 层面的问题</li></ul><h3 id="CPU-占用过高"><a href="#CPU-占用过高" class="headerlink" title="CPU 占用过高"></a>CPU 占用过高</h3><p>TUN 模式下 CPU 占用异常升高，通常与协议栈选择有关：</p><ul><li><strong>gVisor 栈在高带宽场景下 CPU 占用较高</strong>：如果你在进行大文件下载或高速传输，gVisor 的用户态协议栈需要处理大量数据包，CPU 开销会显著增加。解决方法是切换到 system 栈</li><li><strong>规则匹配效率</strong>：如果你的分流规则数量过多（数万条），每个数据包都需要匹配规则，也会增加 CPU 负担。检查是否加载了过多的规则集</li></ul><hr><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="Q-TUN-模式会让网速变慢吗？"><a href="#Q-TUN-模式会让网速变慢吗？" class="headerlink" title="Q: TUN 模式会让网速变慢吗？"></a>Q: TUN 模式会让网速变慢吗？</h3><p>理论上 TUN 模式引入了一层额外的处理：数据包需要经过虚拟网卡 → 用户态协议栈 → 代理客户端 → 真实网卡，比系统代理多了一些环节。但在实际使用中，这个开销几乎感知不到。现代处理器处理网络数据包的速度远远高于家用带宽的速率，瓶颈几乎总是在代理节点的带宽和延迟上，而不是在 TUN 本身。</p><p>如果你感觉开了 TUN 后速度明显下降，问题大概率出在节点质量或规则匹配上，而非 TUN 模式本身。</p><h3 id="Q-可以同时开启系统代理和-TUN-模式吗？"><a href="#Q-可以同时开启系统代理和-TUN-模式吗？" class="headerlink" title="Q: 可以同时开启系统代理和 TUN 模式吗？"></a>Q: 可以同时开启系统代理和 TUN 模式吗？</h3><p>不建议。两种模式是互斥的工作方式。同时开启可能导致流量被重复处理——数据包先被系统代理捕获一次，再被 TUN 设备捕获一次，造成处理混乱、性能下降，甚至连接失败。</p><p>大多数代理客户端在开启 TUN 时会自动关闭系统代理。如果你的客户端没有自动处理，请手动关闭系统代理后再开启 TUN。</p><h3 id="Q-手机上也有-TUN-模式吗？"><a href="#Q-手机上也有-TUN-模式吗？" class="headerlink" title="Q: 手机上也有 TUN 模式吗？"></a>Q: 手机上也有 TUN 模式吗？</h3><p>是的，但实现方式有所不同。iOS 和 Android 上的代理客户端（如 Shadowrocket、Surge、sing-box 等）通过系统提供的 VPN API 来实现类似 TUN 的效果。</p><p>当你在手机上开启代理客户端时，系统会显示一个 VPN 图标——这正是因为客户端创建了一个 VPN 隧道来捕获所有流量。从效果上看，手机上的代理客户端默认就是”全局捕获”的工作模式，等同于桌面端的 TUN 模式。因此，手机用户通常不需要额外考虑”系统代理 vs TUN”的选择问题。</p><h3 id="Q-为什么我开了-TUN-后打印机-局域网设备找不到了？"><a href="#Q-为什么我开了-TUN-后打印机-局域网设备找不到了？" class="headerlink" title="Q: 为什么我开了 TUN 后打印机&#x2F;局域网设备找不到了？"></a>Q: 为什么我开了 TUN 后打印机&#x2F;局域网设备找不到了？</h3><p>TUN 模式捕获了所有出站流量，包括原本应该在局域网内部传递的流量。网络打印机、NAS、智能家居设备等局域网设备的发现和通信依赖于局域网内的多播、广播以及对特定 IP 段（如 <code>192.168.x.x</code>、<code>10.x.x.x</code>）的直接访问。</p><p>当这些流量被 TUN 设备捕获后，代理客户端可能将它们视为需要代理的流量，导致局域网通信失败。解决方法是在代理配置的分流规则中，将所有私有网络地址段（RFC 1918 定义的 <code>10.0.0.0/8</code>、<code>172.16.0.0/12</code>、<code>192.168.0.0/16</code>）设置为直连（DIRECT）。</p><h3 id="Q-TUN-模式下如何让某个应用不走代理？"><a href="#Q-TUN-模式下如何让某个应用不走代理？" class="headerlink" title="Q: TUN 模式下如何让某个应用不走代理？"></a>Q: TUN 模式下如何让某个应用不走代理？</h3><p>在 TUN 模式下，所有流量都被捕获，但你仍然可以通过分流规则来控制特定流量的去向。两种常见做法：</p><ol><li><strong>基于进程名的规则</strong>（mihomo 支持）：<code>PROCESS-NAME,app.exe,DIRECT</code>，直接指定某个进程的流量走直连</li><li><strong>基于目标 IP &#x2F; 域名的规则</strong>：如果你知道某个应用访问的目标地址，可以为该地址添加直连规则</li></ol><p>在 Clash Verge Rev 中，也可以通过”绕过”列表来排除特定的 IP 段或进程。</p><hr><h2 id="一图总结"><a href="#一图总结" class="headerlink" title="一图总结"></a>一图总结</h2><table><thead><tr><th>对比维度</th><th>系统代理</th><th>TUN 模式</th></tr></thead><tbody><tr><td>工作层级</td><td>应用层（依赖应用配合）</td><td>IP 层（系统级别强制）</td></tr><tr><td>流量覆盖</td><td>部分应用</td><td>所有应用</td></tr><tr><td>协议支持</td><td>仅 TCP（HTTP&#x2F;SOCKS）</td><td>TCP + UDP + ICMP</td></tr><tr><td>DNS 控制</td><td>无（DNS 可能泄漏）</td><td>完全控制</td></tr><tr><td>权限要求</td><td>普通用户权限</td><td>管理员&#x2F;root 权限</td></tr><tr><td>系统侵入性</td><td>低（修改代理设置）</td><td>高（虚拟网卡 + 路由表）</td></tr><tr><td>VPN 冲突风险</td><td>低</td><td>高</td></tr><tr><td>配置复杂度</td><td>低</td><td>中等</td></tr><tr><td>适合场景</td><td>浏览器翻墙、日常办公</td><td>游戏、全局代理、防 DNS 泄漏</td></tr></tbody></table><p>选择的核心逻辑很简单：如果系统代理能满足需求就用系统代理，如果不能就上 TUN。不需要过度追求”全局”——很多用户只在浏览器里用代理，系统代理完全够用。只有当你遇到了系统代理无法覆盖的场景（游戏、UDP、DNS 泄漏等），TUN 模式才是必要的。</p>]]></content>
      
      
      <categories>
          
          <category> 代理软件 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> Clash </tag>
            
            <tag> 配置 </tag>
            
            <tag> Sing-box </tag>
            
            <tag> TUN </tag>
            
            <tag> 系统代理 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>v2rayN / v2rayNG 使用指南</title>
      <link href="/posts/v2ray-clients-guide/"/>
      <url>/posts/v2ray-clients-guide/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：v2rayN 和 v2rayNG 是 V2Ray &#x2F; Xray 生态中最主流的客户端，分别面向 Windows 和 Android 平台。它们由同一位开发者（2dust）维护，界面风格和操作逻辑相近。与 Clash 系客户端相比，v2rayN&#x2F;v2rayNG 在协议支持上更加灵活，尤其是对 Xray-core 独有的 VLESS + Reality + XHTTP 等组合支持最为完善。本文将分别介绍两个客户端的安装、配置和使用方法。</p></blockquote><hr><h2 id="v2rayN-和-v2rayNG-是什么"><a href="#v2rayN-和-v2rayNG-是什么" class="headerlink" title="v2rayN 和 v2rayNG 是什么"></a>v2rayN 和 v2rayNG 是什么</h2><p>简单说：</p><ul><li><strong><a href="https://github.com/2dust/v2rayN">v2rayN</a></strong> 是 Windows 平台的代理客户端</li><li><strong><a href="https://github.com/2dust/v2rayNG">v2rayNG</a></strong> 是 Android 平台的代理客户端</li></ul><p>两者都是图形化的”壳”，底层调用代理内核来完成实际的代理工作。默认使用的内核是 <a href="https://github.com/XTLS/Xray-core">Xray-core</a>，但 v2rayN 也支持切换到 sing-box 内核。</p><h3 id="与-Clash-系客户端的核心区别"><a href="#与-Clash-系客户端的核心区别" class="headerlink" title="与 Clash 系客户端的核心区别"></a>与 Clash 系客户端的核心区别</h3><p>在 Clash 生态中（如 Clash Verge Rev），配置文件以 YAML 格式的”订阅”为核心，规则、策略组、节点都在一个文件里统一管理。而 v2rayN&#x2F;v2rayNG 的思路不同：</p><ul><li><strong>以节点为核心</strong>：每个代理节点是独立的配置单元</li><li><strong>分流规则独立管理</strong>：路由规则由内核的路由模块处理，与节点列表分离</li><li><strong>多内核切换</strong>：可以在不同的内核之间切换（Xray-core、sing-box 等）</li></ul><p>这种设计的好处是对协议的支持更直接——Xray-core 新增了什么功能，v2rayN 通常能最快跟进。缺点是分流规则的管理没有 Clash 那么直观和灵活。</p><hr><h2 id="v2rayN（Windows）"><a href="#v2rayN（Windows）" class="headerlink" title="v2rayN（Windows）"></a>v2rayN（Windows）</h2><h3 id="安装"><a href="#安装" class="headerlink" title="安装"></a>安装</h3><ol><li>打开 <a href="https://github.com/2dust/v2rayN/releases">v2rayN 的 GitHub Releases 页面</a></li><li>在最新版本的 Assets 中，找到包含 <code>v2rayN</code> 的压缩包。注意版本选择：<ul><li><code>v2rayN-windows-64.zip</code>：64 位 Windows 版本，适合绝大多数电脑</li><li>如果你看到带 <code>SelfContained</code> 字样的版本，它内置了 .NET 运行时，文件更大但不需要额外安装运行时</li></ul></li><li>下载后解压到你希望存放的目录（比如 <code>D:\v2rayN</code>）</li><li>运行文件夹中的 <code>v2rayN.exe</code></li></ol><p>v2rayN 是绿色软件，不需要安装程序。第一次运行时可能会提示需要安装 <strong>.NET Desktop Runtime</strong>，按照提示去微软官网下载安装即可。</p><p>启动后，v2rayN 会在系统托盘区显示一个图标。双击图标可以打开主界面。</p><h3 id="添加订阅"><a href="#添加订阅" class="headerlink" title="添加订阅"></a>添加订阅</h3><p>v2rayN 支持通过订阅链接批量导入节点：</p><ol><li>在主界面顶部菜单栏，点击 <strong>订阅分组 → 订阅分组设置</strong></li><li>在弹出的窗口中点击 <strong>添加</strong></li><li>填写<strong>备注</strong>（比如”我的机场”）和<strong>订阅链接（URL）</strong></li><li>点击 <strong>确定</strong> 保存</li><li>回到主界面，点击 <strong>订阅分组 → 更新全部订阅（不通过代理）</strong></li></ol><p>如果你当前还没有代理连接（第一次使用），选择”不通过代理”来更新订阅。之后有了代理连接，就可以选择”通过代理”来更新。</p><p>更新成功后，主界面的列表中会出现你的所有节点。</p><h3 id="手动添加节点"><a href="#手动添加节点" class="headerlink" title="手动添加节点"></a>手动添加节点</h3><p>除了订阅，你也可以手动添加单个节点：</p><ul><li><strong>通过分享链接</strong>：复制节点的分享链接（如 <code>vless://...</code> 或 <code>vmess://...</code>），在 v2rayN 中点击 <strong>服务器 → 从剪贴板导入批量 URL</strong></li><li><strong>通过二维码</strong>：点击 <strong>服务器 → 扫描屏幕上的二维码</strong></li><li><strong>手动填写</strong>：点击 <strong>服务器 → 添加对应协议的服务器</strong>，手动填写服务器地址、端口、UUID 等参数</li></ul><h3 id="选择内核"><a href="#选择内核" class="headerlink" title="选择内核"></a>选择内核</h3><p>v2rayN 支持切换不同的代理内核。在 <strong>设置 → 基础设置</strong> 中可以看到核心选项：</p><table><thead><tr><th>内核</th><th>说明</th></tr></thead><tbody><tr><td><strong>Xray-core</strong>（默认）</td><td>支持 VLESS、Reality、XTLS、XHTTP 等最新协议，更新最快</td></tr><tr><td><strong>sing-box</strong></td><td>另一个优秀的内核，协议支持范围广</td></tr></tbody></table><p>对于大多数用户，使用默认的 Xray-core 就好。如果你的节点使用了 Hysteria 2 或 TUIC 协议并且想用 sing-box 来处理，可以切换。</p><h3 id="路由模式"><a href="#路由模式" class="headerlink" title="路由模式"></a>路由模式</h3><p>v2rayN 提供了几种预设的路由模式，决定了哪些流量走代理、哪些直连：</p><ol><li><strong>绕过大陆</strong>：最常用。国内 IP 和域名直连，其他走代理。日常使用选这个就行</li><li><strong>全局代理</strong>：所有流量都走代理</li><li><strong>全局直连</strong>：所有流量都直连（等于没有开代理）</li><li><strong>自定义规则</strong>：使用自定义的路由规则文件</li></ol><p>在主界面底部状态栏或系统托盘右键菜单中可以快速切换路由模式。</p><h3 id="系统代理-vs-TUN-模式"><a href="#系统代理-vs-TUN-模式" class="headerlink" title="系统代理 vs TUN 模式"></a>系统代理 vs TUN 模式</h3><p>和 Clash 系客户端一样，v2rayN 也提供两种流量捕获方式：</p><p><strong>系统代理</strong>：在系统托盘右键 → 选择”自动配置系统代理”。v2rayN 会修改 Windows 的代理设置，让浏览器等支持系统代理的应用走代理。</p><p><strong>TUN 模式</strong>：在 <strong>设置 → 基础设置</strong> 中找到 TUN 模式选项并开启。TUN 模式通过虚拟网卡接管所有流量。使用 TUN 模式需要以管理员身份运行 v2rayN。</p><p>对两种模式的详细对比不再赘述，原理和 Clash 客户端中的完全一样。</p><h3 id="延迟测试"><a href="#延迟测试" class="headerlink" title="延迟测试"></a>延迟测试</h3><p>在主界面选中一个或多个节点，右键菜单中可以进行延迟测试：</p><ul><li><strong>测试 Ping 延迟</strong>：测试到服务器的 ICMP 延迟</li><li><strong>测试真连接延迟</strong>：通过实际建立代理连接来测试延迟，结果更准确</li></ul><p>建议使用”真连接延迟”测试，它反映的是实际代理连接的速度。</p><h3 id="常用设置"><a href="#常用设置" class="headerlink" title="常用设置"></a>常用设置</h3><p><strong>开机自启</strong>：设置 → 基础设置 → 勾选”开机自动启动”。</p><p><strong>自动更新订阅</strong>：在订阅分组设置中可以配置自动更新间隔。</p><p><strong>统计信息</strong>：v2rayN 主界面底部会显示实时的上传&#x2F;下载速度和总流量统计。</p><p><strong>日志</strong>：在主界面的”日志”标签页可以查看内核运行日志，排查连接问题。</p><hr><h2 id="v2rayNG（Android）"><a href="#v2rayNG（Android）" class="headerlink" title="v2rayNG（Android）"></a>v2rayNG（Android）</h2><h3 id="安装-1"><a href="#安装-1" class="headerlink" title="安装"></a>安装</h3><p>v2rayNG 没有上架中国区的应用商店（部分商店可能有非官方版本，不建议使用）。推荐从 GitHub 下载：</p><ol><li>打开 <a href="https://github.com/2dust/v2rayNG/releases">v2rayNG 的 GitHub Releases 页面</a></li><li>下载最新版本的 <code>.apk</code> 文件。大多数现代 Android 手机选 <code>arm64-v8a</code> 版本；不确定的话选 <code>universal</code> 版本（体积更大但兼容性好）</li><li>在手机上打开下载的 APK 文件进行安装。如果系统提示”不允许安装未知来源应用”，需要在设置中允许</li></ol><h3 id="添加订阅-1"><a href="#添加订阅-1" class="headerlink" title="添加订阅"></a>添加订阅</h3><ol><li>打开 v2rayNG，点击左上角菜单（三横线图标）</li><li>选择 <strong>订阅分组设置</strong></li><li>点击右上角 <strong>+</strong> 按钮</li><li>填写<strong>备注</strong>和<strong>订阅链接</strong></li><li>保存后返回主界面</li><li>点击右上角菜单（三个点）→ <strong>更新订阅</strong></li></ol><p>更新完成后，主界面会显示所有导入的节点。</p><h3 id="手动添加节点-1"><a href="#手动添加节点-1" class="headerlink" title="手动添加节点"></a>手动添加节点</h3><ul><li><strong>从剪贴板导入</strong>：复制节点链接后，在 v2rayNG 中点击右上角 <strong>+</strong> → <strong>从剪贴板导入</strong></li><li><strong>扫描二维码</strong>：点击 <strong>+</strong> → <strong>扫描二维码</strong></li><li><strong>手动输入</strong>：点击 <strong>+</strong> → 选择对应的协议类型，手动填写参数</li></ul><h3 id="连接"><a href="#连接" class="headerlink" title="连接"></a>连接</h3><ol><li>在节点列表中<strong>点击</strong>你想使用的节点（被选中的节点会高亮显示）</li><li>点击右下角的 <strong>V</strong> 形连接按钮</li><li>首次连接时 Android 会弹出 VPN 权限请求，点击”确定”</li></ol><p>连接成功后，状态栏会出现一把钥匙图标（表示 VPN 已激活）。</p><h3 id="路由设置"><a href="#路由设置" class="headerlink" title="路由设置"></a>路由设置</h3><p>在 <strong>设置</strong> 中可以配置路由模式：</p><ul><li><strong>绕过局域网和中国大陆地址</strong>：最常用，国内流量直连</li><li><strong>绕过局域网地址</strong>：只绕过局域网，其他全走代理</li><li><strong>全局</strong>：所有流量走代理</li><li><strong>自定义规则</strong>：使用自定义路由规则</li></ul><p>对于日常使用，选择”绕过局域网和中国大陆地址”即可。</p><h3 id="分应用代理"><a href="#分应用代理" class="headerlink" title="分应用代理"></a>分应用代理</h3><p>v2rayNG 支持<strong>分应用代理</strong>功能——你可以指定哪些应用走代理、哪些不走：</p><ol><li>进入 <strong>设置 → 分应用代理</strong></li><li>勾选需要走代理的应用（或反过来，勾选不需要走代理的应用）</li></ol><p>这个功能在某些场景下很实用。比如你希望只有浏览器和 Telegram 走代理，国内应用全部直连——就可以在分应用代理中只勾选这几个应用。</p><h3 id="延迟测试-1"><a href="#延迟测试-1" class="headerlink" title="延迟测试"></a>延迟测试</h3><p>在主界面点击右上角菜单 → <strong>测试全部配置真连接</strong>，可以批量测试所有节点的延迟。测试结果会显示在每个节点旁边。</p><hr><h2 id="v2rayN-v2rayNG-vs-Clash-系客户端"><a href="#v2rayN-v2rayNG-vs-Clash-系客户端" class="headerlink" title="v2rayN&#x2F;v2rayNG vs Clash 系客户端"></a>v2rayN&#x2F;v2rayNG vs Clash 系客户端</h2><p>这是很多用户在选择客户端时纠结的问题。两个生态各有优势：</p><table><thead><tr><th>对比维度</th><th>v2rayN &#x2F; v2rayNG</th><th>Clash 系（Clash Verge Rev 等）</th></tr></thead><tbody><tr><td>内核</td><td>默认 Xray-core</td><td>mihomo</td></tr><tr><td>配置核心</td><td>以节点为核心</td><td>以订阅配置文件为核心</td></tr><tr><td>协议灵活性</td><td>高——Xray 新协议第一时间支持</td><td>高——mihomo 也在积极跟进</td></tr><tr><td>规则分流</td><td>功能完整但操作不够直观</td><td>策略组 + 规则的设计非常直观</td></tr><tr><td>策略组管理</td><td>较弱，没有 Clash 那样灵活的策略组</td><td>核心优势，支持多种策略类型</td></tr><tr><td>订阅格式</td><td>V2Ray&#x2F;base64 格式、分享链接</td><td>Clash YAML 格式</td></tr><tr><td>配置管理</td><td>节点列表 + 路由预设</td><td>完整的配置文件管理</td></tr><tr><td>上手难度</td><td>中等</td><td>较低</td></tr><tr><td>适合人群</td><td>自建节点用户、需要最新协议的用户</td><td>使用机场的普通用户</td></tr></tbody></table><h3 id="简单建议"><a href="#简单建议" class="headerlink" title="简单建议"></a>简单建议</h3><ul><li><strong>如果你使用机场服务</strong>，且机场提供 Clash 格式订阅，Clash Verge Rev 通常是更好的选择——策略组和规则管理更方便</li><li><strong>如果你自建节点</strong>，尤其是使用 VLESS + Reality 或 XHTTP 等 Xray 独有功能，v2rayN&#x2F;v2rayNG 配合 Xray-core 是最自然的选择</li><li><strong>如果你两个都想试试</strong>，完全没问题——它们可以同时安装，互不干扰</li></ul><hr><h2 id="进阶：自定义路由规则"><a href="#进阶：自定义路由规则" class="headerlink" title="进阶：自定义路由规则"></a>进阶：自定义路由规则</h2><p>v2rayN 支持自定义路由规则，用来精确控制流量去向。在 <strong>设置 → 路由设置</strong> 中可以编辑规则。</p><h3 id="规则格式"><a href="#规则格式" class="headerlink" title="规则格式"></a>规则格式</h3><p>Xray-core 的路由规则格式（JSON）：</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;domainStrategy&quot;</span><span class="punctuation">:</span> <span class="string">&quot;IPIfNonMatch&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;rules&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;field&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;outboundTag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;direct&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;domain&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;geosite:cn&quot;</span><span class="punctuation">]</span></span><br><span class="line">    <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;field&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;outboundTag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;direct&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;ip&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;geoip:cn&quot;</span><span class="punctuation">,</span> <span class="string">&quot;geoip:private&quot;</span><span class="punctuation">]</span></span><br><span class="line">    <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;field&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;outboundTag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;block&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;domain&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;geosite:category-ads-all&quot;</span><span class="punctuation">]</span></span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">]</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><p>v2rayN 提供了图形化的规则编辑界面，你不需要直接编写 JSON。但理解底层的规则格式有助于排查问题。</p><h3 id="GeoIP-和-GeoSite-数据"><a href="#GeoIP-和-GeoSite-数据" class="headerlink" title="GeoIP 和 GeoSite 数据"></a>GeoIP 和 GeoSite 数据</h3><p>v2rayN 使用 GeoIP 和 GeoSite 数据库来匹配域名和 IP 归属。这些数据文件会随软件一起发布，也可以手动更新。如果你发现某个域名的分流不正确（比如一个国内网站被错误地走了代理），可能是 GeoSite 数据过时，更新一下数据文件通常能解决。</p><hr><h2 id="v2rayN-的多内核管理"><a href="#v2rayN-的多内核管理" class="headerlink" title="v2rayN 的多内核管理"></a>v2rayN 的多内核管理</h2><p>v2rayN 的一个独特优势是支持在同一个界面中管理多个内核。你可以：</p><ol><li>同时安装 Xray-core 和 sing-box</li><li>根据需要随时切换</li><li>不同的节点可以使用不同的内核</li></ol><p>切换内核的位置在 <strong>设置 → 基础设置 → Core 类型</strong>。切换后，v2rayN 会自动使用对应内核的配置格式来处理你的节点。</p><p>这个特性对于同时使用不同类型节点的用户特别有用。比如你的 VLESS + Reality 节点用 Xray-core 处理，Hysteria 2 节点用 sing-box 处理。</p><hr><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="Q-v2rayN-启动后提示缺少-NET-运行时？"><a href="#Q-v2rayN-启动后提示缺少-NET-运行时？" class="headerlink" title="Q: v2rayN 启动后提示缺少 .NET 运行时？"></a>Q: v2rayN 启动后提示缺少 .NET 运行时？</h3><p>v2rayN 需要 .NET Desktop Runtime 才能运行。去 <a href="https://dotnet.microsoft.com/download">微软官网</a> 下载最新的 .NET Desktop Runtime（x64 版本）安装即可。如果不想额外安装运行时，可以下载 SelfContained 版本的 v2rayN，它内置了运行时。</p><h3 id="Q-系统代理开了但浏览器还是打不开-Google？"><a href="#Q-系统代理开了但浏览器还是打不开-Google？" class="headerlink" title="Q: 系统代理开了但浏览器还是打不开 Google？"></a>Q: 系统代理开了但浏览器还是打不开 Google？</h3><p>几个可能的原因：</p><ol><li>节点不可用——进行延迟测试，如果超时则更换节点</li><li>浏览器安装了代理插件（如 Proxy SwitchyOmega）覆盖了系统代理——暂时禁用该插件</li><li>路由模式设置为”全局直连”——确认路由模式是”绕过大陆”或”全局代理”</li></ol><h3 id="Q-v2rayNG-连接后流量不走代理？"><a href="#Q-v2rayNG-连接后流量不走代理？" class="headerlink" title="Q: v2rayNG 连接后流量不走代理？"></a>Q: v2rayNG 连接后流量不走代理？</h3><p>检查以下几点：</p><ol><li>确认已选中一个可用节点并点击了连接按钮</li><li>确认 VPN 权限已授予（状态栏应显示钥匙图标）</li><li>检查路由设置是否正确（不要选”全局直连”）</li><li>检查分应用代理设置——如果开启了分应用代理，确认目标应用在代理名单中</li></ol><h3 id="Q-v2rayN-和-v2rayNG-可以用同一个订阅链接吗？"><a href="#Q-v2rayN-和-v2rayNG-可以用同一个订阅链接吗？" class="headerlink" title="Q: v2rayN 和 v2rayNG 可以用同一个订阅链接吗？"></a>Q: v2rayN 和 v2rayNG 可以用同一个订阅链接吗？</h3><p>可以。两者使用相同的订阅格式（V2Ray&#x2F;base64 格式或通用分享链接格式）。同一个订阅链接在两个客户端中都能正常导入和使用。</p><h3 id="Q-为什么-v2rayN-的分流规则没有-Clash-灵活？"><a href="#Q-为什么-v2rayN-的分流规则没有-Clash-灵活？" class="headerlink" title="Q: 为什么 v2rayN 的分流规则没有 Clash 灵活？"></a>Q: 为什么 v2rayN 的分流规则没有 Clash 灵活？</h3><p>这是设计哲学的差异。Clash 的配置文件将节点、策略组和规则统一在一个 YAML 文件中，形成了一套完整的流量管理体系。v2rayN&#x2F;v2rayNG 更偏向于”连接工具”的定位——它帮你连上代理，分流规则是附加功能。如果你对分流有很高的要求（多个策略组、不同服务走不同地区的节点），Clash 系客户端确实更合适。</p><h3 id="Q-v2rayN-是免费的吗？"><a href="#Q-v2rayN-是免费的吗？" class="headerlink" title="Q: v2rayN 是免费的吗？"></a>Q: v2rayN 是免费的吗？</h3><p>是的，v2rayN 和 v2rayNG 都是完全免费的开源项目，源代码在 GitHub 上公开。<a href="https://github.com/XTLS/Xray-core">Xray-core</a> 内核同样是免费开源的。</p><hr><h2 id="相关资源"><a href="#相关资源" class="headerlink" title="相关资源"></a>相关资源</h2><ul><li><a href="https://github.com/2dust/v2rayN">v2rayN GitHub 仓库</a> —— Windows 客户端下载和反馈</li><li><a href="https://github.com/2dust/v2rayNG">v2rayNG GitHub 仓库</a> —— Android 客户端下载和反馈</li><li><a href="https://github.com/XTLS/Xray-core">Xray-core GitHub 仓库</a> —— 底层代理内核</li><li><a href="https://xtls.github.io/">Xray 官方文档</a> —— Xray-core 的配置文档</li><li><a href="/posts/first-time-setup/">第一次使用代理：从零开始的配置指南</a> —— 跨平台入门指南</li></ul>]]></content>
      
      
      <categories>
          
          <category> 代理软件 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> 教程 </tag>
            
            <tag> v2rayNG </tag>
            
            <tag> Windows </tag>
            
            <tag> Android </tag>
            
            <tag> v2rayN </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>常见流媒体解锁检测工具与方法</title>
      <link href="/posts/unlock-testing-tools/"/>
      <url>/posts/unlock-testing-tools/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：代理节点能不能解锁特定的流媒体服务或 AI 平台，是很多用户最关心的问题之一。但解锁状态并非一成不变——IP 可能随时被拉黑，DNS 策略也可能调整。本文系统介绍如何检测和验证你的节点解锁能力，包括在线工具、命令行脚本和手动测试方法。</p></blockquote><h2 id="为什么需要定期测试"><a href="#为什么需要定期测试" class="headerlink" title="为什么需要定期测试"></a>为什么需要定期测试</h2><p>在介绍具体工具之前，有必要理解为什么解锁测试不是”做一次就够了”的事情。</p><h3 id="解锁状态是动态变化的"><a href="#解锁状态是动态变化的" class="headerlink" title="解锁状态是动态变化的"></a>解锁状态是动态变化的</h3><p>流媒体平台和 AI 服务对代理 IP 的封锁是一个持续的攻防过程：</p><ul><li><strong>IP 声誉变化</strong>：同一个 IP 段今天能解锁 Netflix，下周可能就被标记为代理 IP</li><li><strong>服务商策略调整</strong>：Netflix、Disney+ 等平台会定期更新其 IP 黑名单数据库</li><li><strong>IP 池变动</strong>：VPS 提供商可能重新分配 IP 地址，新 IP 的解锁情况可能不同</li><li><strong>DNS 解析变化</strong>：某些解锁依赖 DNS 返回特定区域的 IP，DNS 策略变更会影响解锁</li></ul><h3 id="不同服务的检测严格程度"><a href="#不同服务的检测严格程度" class="headerlink" title="不同服务的检测严格程度"></a>不同服务的检测严格程度</h3><p>各个服务对代理 IP 的检测力度差异很大：</p><table><thead><tr><th>服务</th><th>检测严格程度</th><th>说明</th></tr></thead><tbody><tr><td>Netflix</td><td>高</td><td>持续更新黑名单，区分原生 IP 和广播 IP</td></tr><tr><td>Disney+</td><td>中高</td><td>检测较严格，但比 Netflix 宽松一些</td></tr><tr><td>YouTube Premium</td><td>中</td><td>主要依赖 IP 地理位置判断</td></tr><tr><td>Spotify</td><td>中</td><td>注册时检测较严，日常使用相对宽松</td></tr><tr><td>ChatGPT&#x2F;OpenAI</td><td>高</td><td>封锁大量数据中心 IP</td></tr><tr><td>Claude</td><td>中</td><td>有 IP 地区限制</td></tr><tr><td>Steam 商店</td><td>低</td><td>主要看 IP 地理位置</td></tr><tr><td>TikTok</td><td>中高</td><td>结合 IP、SIM 卡、GPS 等多因素判断</td></tr></tbody></table><p>了解这些差异有助于你合理安排测试的优先级。</p><h2 id="在线检测工具"><a href="#在线检测工具" class="headerlink" title="在线检测工具"></a>在线检测工具</h2><p>在线工具是最简单的检测方式——通过浏览器访问特定网站，就能快速了解当前 IP 的解锁状态。</p><h3 id="IP-信息查询"><a href="#IP-信息查询" class="headerlink" title="IP 信息查询"></a>IP 信息查询</h3><p>在测试解锁之前，首先应该确认你的代理 IP 的基本信息：</p><p><strong><a href="https://ipinfo.io/">ipinfo.io</a></strong></p><p>这是最常用的 IP 信息查询服务。它会显示：</p><ul><li>IP 地址和地理位置</li><li>ASN（自治系统号）和运营商信息</li><li>IP 类型（ISP、hosting、business 等）</li></ul><p>其中 IP 类型非常关键——大多数流媒体服务会封锁标记为 <code>hosting</code>（托管&#x2F;数据中心）的 IP，而 <code>isp</code>（住宅）类型的 IP 通常可以解锁。</p><p><strong><a href="https://ip.sb/">ip.sb</a></strong></p><p>简洁的 IP 查询工具，支持 IPv4 和 IPv6 查询。命令行中也可以使用：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl ip.sb</span><br></pre></td></tr></table></figure><p><strong><a href="https://bgp.tools/">bgp.tools</a></strong></p><p>提供更详细的 BGP 和 ASN 信息，可以查看 IP 所属的网络运营商、上游提供商等信息。对于判断 IP 质量很有参考价值。</p><p><strong><a href="https://whoer.net/">whoer.net</a></strong></p><p>提供综合的匿名性评分，包括：</p><ul><li>IP 地理位置</li><li>DNS 泄漏检测</li><li>WebRTC 泄漏检测</li><li>浏览器指纹信息</li><li>黑名单状态</li></ul><p>如果 whoer.net 显示你的 IP 在某些黑名单中，那么流媒体解锁的可能性就较低。</p><h3 id="流媒体解锁检测"><a href="#流媒体解锁检测" class="headerlink" title="流媒体解锁检测"></a>流媒体解锁检测</h3><p><strong>Netflix 检测</strong></p><p>检测 Netflix 解锁最直接的方式是访问 Netflix 的特定测试页面：</p><ol><li>连接代理后，打开 Netflix 官网</li><li>尝试播放任意内容</li><li>如果看到”您似乎正在使用解锁工具或代理”的错误提示，说明 IP 被识别</li></ol><p>需要注意 Netflix 的解锁有两种级别：</p><table><thead><tr><th>类型</th><th>含义</th><th>说明</th></tr></thead><tbody><tr><td>完全解锁 (Full Native)</td><td>可以观看所有地区内容</td><td>通常需要原生住宅 IP</td></tr><tr><td>仅自制内容 (Self-made Only)</td><td>只能观看 Netflix 自制内容</td><td>部分数据中心 IP 也可以</td></tr></tbody></table><p><strong><a href="https://browserleaks.com/">browserleaks.com</a></strong></p><p>提供全面的浏览器隐私和泄漏检测，包括：</p><ul><li>IP 地址泄漏（IPv4&#x2F;IPv6）</li><li>WebRTC 泄漏</li><li>DNS 泄漏</li><li>Canvas 指纹</li><li>WebGL 指纹</li></ul><p>虽然这不是直接的流媒体解锁检测工具，但它能帮你发现可能导致解锁失败的隐私泄漏问题（比如 DNS 泄漏导致服务商检测到你的真实位置）。</p><p><strong><a href="https://ipleak.net/">ipleak.net</a></strong></p><p>专注于 IP 和 DNS 泄漏检测，界面直观，能快速显示：</p><ul><li>你的公网 IP 地址</li><li>DNS 服务器地址（检查是否泄漏）</li><li>WebRTC 本地 IP</li><li>地理位置信息</li></ul><p>如果 DNS 查询结果显示的地址与代理 IP 所在地区不一致，说明存在 DNS 泄漏，这会影响解锁效果。</p><h2 id="命令行检测脚本"><a href="#命令行检测脚本" class="headerlink" title="命令行检测脚本"></a>命令行检测脚本</h2><p>对于需要批量测试多个节点的用户，命令行脚本比在线工具效率高得多。</p><h3 id="media-unlock-test（RegionRestrictionCheck）"><a href="#media-unlock-test（RegionRestrictionCheck）" class="headerlink" title="media-unlock-test（RegionRestrictionCheck）"></a>media-unlock-test（RegionRestrictionCheck）</h3><p>这是目前最流行的流媒体解锁检测脚本，由社区维护，能一次性测试 30 多个流媒体和 AI 服务的解锁状态。</p><p><strong>项目地址</strong>：<a href="https://github.com/lmc999/RegionRestrictionCheck">GitHub - lmc999&#x2F;RegionRestrictionCheck</a></p><p><strong>使用方法</strong>：</p><p>在已连接代理的 VPS 或本地终端中运行：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">bash &lt;(curl -L -s check.unlock.sh)</span><br></pre></td></tr></table></figure><p>脚本运行后会逐一测试以下服务的解锁状态（节选）：</p><table><thead><tr><th>类别</th><th>测试的服务</th></tr></thead><tbody><tr><td>流媒体</td><td>Netflix, Disney+, YouTube Premium, Amazon Prime Video, HBO Max, Hulu, Paramount+, Peacock, Discovery+</td></tr><tr><td>音乐</td><td>Spotify, Apple Music, YouTube Music, Tidal, Deezer</td></tr><tr><td>AI 服务</td><td>ChatGPT, Claude, Gemini, Meta AI</td></tr><tr><td>其他</td><td>Steam, TikTok, Reddit, Wikipedia</td></tr></tbody></table><p>测试结果会用颜色标注：</p><ul><li>绿色&#x2F;YES：可以解锁</li><li>红色&#x2F;NO：无法解锁</li><li>黄色&#x2F;Org：仅限自制内容（Netflix 等）</li></ul><p><strong>注意事项</strong>：</p><ol><li>脚本需要在代理节点所在的服务器上运行，或者在本地通过 <code>proxychains</code> 等工具走代理</li><li>测试结果反映的是当前时间点的状态，不代表永久有效</li><li>部分测试项需要网络能正常访问对应服务才能得出准确结果</li></ol><h3 id="针对特定服务的检测"><a href="#针对特定服务的检测" class="headerlink" title="针对特定服务的检测"></a>针对特定服务的检测</h3><p>如果你只关心某个特定服务，可以使用更简单的命令：</p><p><strong>Netflix 检测</strong>：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl -sS --max-time 10 <span class="string">&#x27;https://www.netflix.com/title/81280792&#x27;</span> -o /dev/null -w <span class="string">&quot;%&#123;http_code&#125;&quot;</span> -H <span class="string">&#x27;User-Agent: Mozilla/5.0&#x27;</span></span><br></pre></td></tr></table></figure><p>返回 200 表示可以访问（可能解锁），返回 403 表示被拦截。</p><p><strong>ChatGPT 检测</strong>：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl -sS <span class="string">&#x27;https://chat.openai.com/cdn-cgi/trace&#x27;</span> | grep -E <span class="string">&#x27;loc=|warp=&#x27;</span></span><br></pre></td></tr></table></figure><p>查看返回的地区信息，判断是否被 ChatGPT 支持。</p><p><strong>YouTube Premium 区域检测</strong>：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl -sS <span class="string">&#x27;https://www.youtube.com/premium&#x27;</span> -H <span class="string">&#x27;Accept-Language: en&#x27;</span> | grep -o <span class="string">&#x27;countryCode&quot;:&quot;[^&quot;]*&#x27;</span> | <span class="built_in">head</span> -1</span><br></pre></td></tr></table></figure><h2 id="手动测试方法"><a href="#手动测试方法" class="headerlink" title="手动测试方法"></a>手动测试方法</h2><p>有时候，最可靠的测试方法就是直接尝试使用服务本身。</p><h3 id="Netflix-手动测试"><a href="#Netflix-手动测试" class="headerlink" title="Netflix 手动测试"></a>Netflix 手动测试</h3><ol><li>连接到代理节点</li><li>打开 Netflix 网站或 App</li><li>搜索一个已知仅在特定地区有版权的影片</li><li>尝试播放——如果能正常播放，说明解锁成功</li><li>检查播放内容库——是否能看到该地区的完整内容列表</li></ol><p><strong>判断完全解锁还是仅自制内容</strong>的方法：搜索一部非 Netflix 自制的影片（比如某个地区独家引进的电影），如果能找到并播放，说明是完全解锁；如果只能看到 Netflix Original 标记的内容，说明只是自制内容解锁。</p><h3 id="Disney-手动测试"><a href="#Disney-手动测试" class="headerlink" title="Disney+ 手动测试"></a>Disney+ 手动测试</h3><ol><li>连接代理后访问 Disney+ 网站</li><li>尝试注册或登录</li><li>随便选一个内容播放</li><li>注意：Disney+ 对 IP 的检测主要在注册和内容播放阶段</li></ol><h3 id="ChatGPT-OpenAI-手动测试"><a href="#ChatGPT-OpenAI-手动测试" class="headerlink" title="ChatGPT&#x2F;OpenAI 手动测试"></a>ChatGPT&#x2F;OpenAI 手动测试</h3><ol><li>连接代理后访问 <a href="https://chat.openai.com/">chat.openai.com</a></li><li>尝试登录或注册</li><li>如果出现”Access denied”或被要求验证码反复失败，说明 IP 被封锁</li><li>注意：即使能访问网页，API 调用可能仍受 IP 限制</li></ol><h2 id="DNS-解锁验证"><a href="#DNS-解锁验证" class="headerlink" title="DNS 解锁验证"></a>DNS 解锁验证</h2><p>有些解锁方案不是通过代理，而是通过 DNS 解锁服务实现的。验证 DNS 解锁是否生效需要额外的步骤。</p><h3 id="DNS-解锁的原理"><a href="#DNS-解锁的原理" class="headerlink" title="DNS 解锁的原理"></a>DNS 解锁的原理</h3><p>DNS 解锁服务通过自定义的 DNS 服务器，将流媒体域名解析到特定的中转 IP。例如，当你查询 <code>netflix.com</code> 时，DNS 解锁服务器返回的不是 Netflix 在你附近的 CDN 节点，而是一个位于目标地区的中转服务器。</p><h3 id="验证-DNS-解锁"><a href="#验证-DNS-解锁" class="headerlink" title="验证 DNS 解锁"></a>验证 DNS 解锁</h3><ol><li><strong>确认 DNS 服务器是否生效</strong>：</li></ol><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">nslookup netflix.com</span><br></pre></td></tr></table></figure><p>检查返回的 DNS 服务器地址是否是你配置的解锁 DNS。</p><ol start="2"><li><strong>检查解析结果</strong>：</li></ol><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">dig netflix.com +short</span><br></pre></td></tr></table></figure><p>比较走 DNS 解锁服务器和走普通 DNS 服务器的解析结果。如果结果不同，说明 DNS 解锁在生效。</p><ol start="3"><li><strong>验证解锁效果</strong>：</li></ol><p>最终还是需要实际访问流媒体服务来确认。DNS 解锁生效不等于一定能解锁——如果中转服务器的 IP 也被标记，仍然会失败。</p><h3 id="DNS-泄漏与解锁失效"><a href="#DNS-泄漏与解锁失效" class="headerlink" title="DNS 泄漏与解锁失效"></a>DNS 泄漏与解锁失效</h3><p>DNS 泄漏是导致解锁失败的常见原因之一。即使你配置了 DNS 解锁，如果系统的 DNS 查询走了其他路径（比如 IPv6 DNS、浏览器的 DoH、或者应用内置的 DNS），流媒体服务检测到的 DNS 位置就可能与代理 IP 不一致，从而触发封锁。</p><p>使用 <a href="https://ipleak.net/">ipleak.net</a> 或 <a href="https://dnsleaktest.com/">dnsleaktest.com</a> 可以快速检查是否存在 DNS 泄漏。</p><h2 id="IP-质量评估"><a href="#IP-质量评估" class="headerlink" title="IP 质量评估"></a>IP 质量评估</h2><p>解锁能力的本质是 IP 质量。以下工具可以帮你全面评估一个 IP 的质量。</p><h3 id="ipinfo-io-的-IP-类型判断"><a href="#ipinfo-io-的-IP-类型判断" class="headerlink" title="ipinfo.io 的 IP 类型判断"></a>ipinfo.io 的 IP 类型判断</h3><p><a href="https://ipinfo.io/">ipinfo.io</a> 会显示 IP 的类型分类：</p><table><thead><tr><th>IP 类型</th><th>含义</th><th>解锁概率</th></tr></thead><tbody><tr><td>isp</td><td>住宅&#x2F;ISP IP</td><td>高</td></tr><tr><td>business</td><td>商业 IP</td><td>中高</td></tr><tr><td>hosting</td><td>数据中心&#x2F;托管 IP</td><td>低</td></tr><tr><td>edu</td><td>教育机构 IP</td><td>中</td></tr></tbody></table><p>一般来说，<code>isp</code> 类型的 IP 解锁概率最高，<code>hosting</code> 类型的 IP 最容易被封锁。</p><h3 id="Scamalytics-IP-评分"><a href="#Scamalytics-IP-评分" class="headerlink" title="Scamalytics IP 评分"></a>Scamalytics IP 评分</h3><p><a href="https://scamalytics.com/ip">Scamalytics</a> 提供 IP 的”欺诈风险评分”。分数越低越好：</p><ul><li><strong>0-25</strong>：低风险，解锁概率高</li><li><strong>25-50</strong>：中等风险</li><li><strong>50-75</strong>：高风险，很可能被识别为代理</li><li><strong>75-100</strong>：极高风险</li></ul><h3 id="黑名单检查"><a href="#黑名单检查" class="headerlink" title="黑名单检查"></a>黑名单检查</h3><p>一些网站可以检查 IP 是否在各种公开黑名单中：</p><ul><li><strong><a href="https://www.abuseipdb.com/">abuseipdb.com</a></strong>：检查 IP 的滥用历史记录</li><li><strong><a href="http://multirbl.valli.org/">multirbl.valli.org</a></strong>：同时检查多个 RBL（实时黑名单）</li></ul><p>如果一个 IP 在多个黑名单中出现，解锁任何服务的可能性都很低。</p><h2 id="测试频率与建议"><a href="#测试频率与建议" class="headerlink" title="测试频率与建议"></a>测试频率与建议</h2><h3 id="何时需要测试"><a href="#何时需要测试" class="headerlink" title="何时需要测试"></a>何时需要测试</h3><p>以下情况应该重新测试节点的解锁状态：</p><ol><li><strong>刚购买&#x2F;切换了代理服务</strong>：第一时间确认解锁能力</li><li><strong>IP 地址发生变化</strong>：VPS 更换 IP 后</li><li><strong>原本能解锁的服务突然不行了</strong>：可能是 IP 被拉黑</li><li><strong>机场更新了节点列表</strong>：新节点需要测试</li><li><strong>流媒体服务出现异常</strong>：比如 Netflix 突然只显示自制内容</li></ol><h3 id="建议的测试策略"><a href="#建议的测试策略" class="headerlink" title="建议的测试策略"></a>建议的测试策略</h3><ul><li><strong>日常使用</strong>：遇到问题时再测试即可，不需要频繁检测</li><li><strong>切换节点后</strong>：先快速测试最重要的几个服务（Netflix、ChatGPT 等）</li><li><strong>批量测试</strong>：使用 CLI 脚本一次性测试所有服务，节省时间</li><li><strong>记录结果</strong>：记下哪些节点能解锁哪些服务，方便后续切换</li></ul><h3 id="测试的局限性"><a href="#测试的局限性" class="headerlink" title="测试的局限性"></a>测试的局限性</h3><p>需要注意的是，所有测试工具都有一定的局限性：</p><ul><li><strong>时间窗口</strong>：测试结果只代表当前时刻的状态</li><li><strong>协议差异</strong>：某些服务的 API 和网页端可能有不同的 IP 策略</li><li><strong>地区差异</strong>：同一个服务在不同地区的检测策略可能不同</li><li><strong>缓存影响</strong>：浏览器缓存或 DNS 缓存可能影响测试结果</li></ul><h2 id="常见问题（FAQ）"><a href="#常见问题（FAQ）" class="headerlink" title="常见问题（FAQ）"></a>常见问题（FAQ）</h2><h3 id="Q1：为什么脚本测试显示能解锁，但实际播放时却失败？"><a href="#Q1：为什么脚本测试显示能解锁，但实际播放时却失败？" class="headerlink" title="Q1：为什么脚本测试显示能解锁，但实际播放时却失败？"></a>Q1：为什么脚本测试显示能解锁，但实际播放时却失败？</h3><p>可能的原因包括：脚本测试的端点与实际播放使用的 CDN 节点不同；DNS 泄漏导致实际流量走了不同的路径；流媒体服务在测试后更新了黑名单。建议同时使用脚本测试和手动测试来交叉验证。</p><h3 id="Q2：如何测试-IPv6-的解锁情况？"><a href="#Q2：如何测试-IPv6-的解锁情况？" class="headerlink" title="Q2：如何测试 IPv6 的解锁情况？"></a>Q2：如何测试 IPv6 的解锁情况？</h3><p>可以在运行解锁测试脚本时加上 IPv6 参数。大部分在线检测工具也支持 IPv6 检测。需要注意的是，某些流媒体服务优先使用 IPv6，如果你的 IPv6 地址解锁状态与 IPv4 不同，可能会遇到间歇性问题。</p><h3 id="Q3：住宅-IP-一定能解锁吗？"><a href="#Q3：住宅-IP-一定能解锁吗？" class="headerlink" title="Q3：住宅 IP 一定能解锁吗？"></a>Q3：住宅 IP 一定能解锁吗？</h3><p>不一定。虽然住宅 IP 的解锁概率远高于数据中心 IP，但如果该住宅 IP 曾被大量代理用户使用过，仍然可能被标记。此外，某些地区的住宅 IP 整段都被封锁过。</p><h3 id="Q4：解锁测试需要登录相关服务吗？"><a href="#Q4：解锁测试需要登录相关服务吗？" class="headerlink" title="Q4：解锁测试需要登录相关服务吗？"></a>Q4：解锁测试需要登录相关服务吗？</h3><p>大部分 CLI 脚本和在线工具不需要登录就能判断基本的解锁状态。但某些服务（如 Netflix 的完全解锁 vs 自制内容解锁）可能需要登录才能准确判断。</p><h3 id="Q5：多个代理节点都测试不通过怎么办？"><a href="#Q5：多个代理节点都测试不通过怎么办？" class="headerlink" title="Q5：多个代理节点都测试不通过怎么办？"></a>Q5：多个代理节点都测试不通过怎么办？</h3><p>首先确认是否是 DNS 泄漏问题。其次检查是否所有节点都使用同一个 IP 段（如果是，可能整个段都被封了）。最后考虑更换代理服务或要求机场提供解锁节点。</p><h3 id="Q6：机场宣传的”Netflix-解锁”可信吗？"><a href="#Q6：机场宣传的”Netflix-解锁”可信吗？" class="headerlink" title="Q6：机场宣传的”Netflix 解锁”可信吗？"></a>Q6：机场宣传的”Netflix 解锁”可信吗？</h3><p>需要自己验证。部分机场确实提供稳定的解锁节点（通常是使用住宅 IP 或 DNS 解锁方案），但也有些机场的宣传有夸大成分。养成自己测试的习惯是最可靠的。</p><h2 id="工具汇总与外部链接"><a href="#工具汇总与外部链接" class="headerlink" title="工具汇总与外部链接"></a>工具汇总与外部链接</h2><h3 id="IP-信息查询-1"><a href="#IP-信息查询-1" class="headerlink" title="IP 信息查询"></a>IP 信息查询</h3><ul><li><a href="https://ipinfo.io/">ipinfo.io</a> — IP 地理位置和类型查询</li><li><a href="https://ip.sb/">ip.sb</a> — 简洁 IP 查询</li><li><a href="https://bgp.tools/">bgp.tools</a> — BGP 和 ASN 信息</li><li><a href="https://whoer.net/">whoer.net</a> — 综合匿名性评分</li></ul><h3 id="泄漏检测"><a href="#泄漏检测" class="headerlink" title="泄漏检测"></a>泄漏检测</h3><ul><li><a href="https://browserleaks.com/">browserleaks.com</a> — 浏览器隐私检测</li><li><a href="https://ipleak.net/">ipleak.net</a> — IP 和 DNS 泄漏检测</li><li><a href="https://dnsleaktest.com/">dnsleaktest.com</a> — DNS 泄漏专项检测</li></ul><h3 id="解锁检测"><a href="#解锁检测" class="headerlink" title="解锁检测"></a>解锁检测</h3><ul><li><a href="https://github.com/lmc999/RegionRestrictionCheck">RegionRestrictionCheck</a> — 综合解锁检测脚本</li></ul><h3 id="IP-质量评估-1"><a href="#IP-质量评估-1" class="headerlink" title="IP 质量评估"></a>IP 质量评估</h3><ul><li><a href="https://scamalytics.com/ip">Scamalytics</a> — IP 欺诈风险评分</li><li><a href="https://www.abuseipdb.com/">AbuseIPDB</a> — IP 滥用历史查询</li></ul><hr><p><em>解锁状态是动态变化的，定期测试是确保良好体验的关键。掌握这些工具后，你可以快速判断节点质量并做出切换决策。</em></p>]]></content>
      
      
      <categories>
          
          <category> 流媒体与解锁 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> 解锁 </tag>
            
            <tag> 工具 </tag>
            
            <tag> Netflix </tag>
            
            <tag> 检测 </tag>
            
            <tag> 测试 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>VLESS + Reality 深度解析</title>
      <link href="/posts/vless-reality-deep-dive/"/>
      <url>/posts/vless-reality-deep-dive/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>: VLESS + Reality 是当前最受推荐的代理协议组合。Reality 的核心创新在于”借用”真实网站的 TLS 证书进行伪装，使代理流量在 GFW 看来与正常 HTTPS 连接完全一致。本文深入解析 Reality 的工作原理、配置要点和最佳实践。</p></blockquote><h2 id="VLESS-协议基础"><a href="#VLESS-协议基础" class="headerlink" title="VLESS 协议基础"></a>VLESS 协议基础</h2><p>要理解 VLESS，首先需要知道它的前身 VMess 出了什么问题。</p><p>VMess 是 V2Ray 时代的核心协议，它在协议层面内置了一套完整的加密方案——AES-128-GCM 或 ChaCha20-Poly1305。这在早期是合理的设计：当时的传输层可能没有加密保护，协议自己做加密是必要的安全措施。但后来情况发生了变化。</p><p>当代理社区逐步意识到流量伪装的重要性后，TLS 成为了几乎所有代理协议的标准外层封装。这时候问题就来了：<strong>VMess 在 TLS 隧道内部又做了一层加密，而这层加密完全是多余的</strong>。TLS 1.3 本身已经提供了足够强的加密保护（AES-256-GCM 或 ChaCha20-Poly1305），VMess 的内层加密既不提供额外安全性，又白白消耗了 CPU 资源。在高并发场景下，这种双重加密的性能开销是显著的——每一个数据包都要经过两次加解密运算。</p><p>VLESS 的设计思路非常直接：<strong>既然外层已经有 TLS 了，协议本身就不需要再做加密</strong>。VLESS 剥离了 VMess 中所有与加密相关的逻辑，只保留了最基本的两个功能——身份认证和数据传输。</p><p>但有一点必须强调：<strong>VLESS 本身没有加密能力，绝对不能裸用</strong>。在没有 TLS 或 Reality 保护的情况下使用 VLESS，你的所有代理流量（包括访问的目标地址）都是明文传输的，任何中间设备都可以直接看到内容。VLESS 必须搭配安全的传输层使用——而 Reality 正是当前最好的搭配。</p><p>此外，VLESS 支持一个重要的流量控制机制：<strong>xtls-rprx-vision</strong>。这个 flow 模式解决了传统 TLS 代理的一个隐蔽性问题——TLS-in-TLS 特征。xtls-rprx-vision 通过对内层 TLS 握手包进行填充（padding），打破了这种可识别的长度模式。需要注意的是，vision 目前仅支持 TCP 传输。</p><h2 id="Reality-是什么"><a href="#Reality-是什么" class="headerlink" title="Reality 是什么"></a>Reality 是什么</h2><p>在 Reality 出现之前，如果你想让代理流量看起来像正常的 HTTPS 连接，标准做法是使用 Trojan 或者 VLESS+TLS——也就是给你的代理服务器配一个真实的域名、申请一张真实的 TLS 证书。这种方案确实能让流量在加密层面看起来像 HTTPS，但存在三个根本性的弱点：域名和证书暴露身份、TLS 指纹与真实浏览器不一致（详见 <a href="/posts/tls-fingerprinting/">TLS 指纹与 uTLS</a>）、主动探测可以暴露代理。</p><p><a href="https://github.com/XTLS/REALITY">Reality</a> 的设计目标就是<strong>一次性解决以上所有问题</strong>。它不需要你拥有任何域名，不需要你申请任何证书，也不依赖回落机制来应对探测。它的核心思路只有一句话：<strong>借用目标网站的真实 TLS 证书来伪装自己</strong>。</p><h2 id="Reality-工作原理（核心）"><a href="#Reality-工作原理（核心）" class="headerlink" title="Reality 工作原理（核心）"></a>Reality 工作原理（核心）</h2><p><img src="/images/inline/reality-flow.png" alt="VLESS+Reality 工作流程详细图"><br><em>图片来源：<a href="https://habr.com/">Habr</a></em></p><h3 id="正常客户端连接"><a href="#正常客户端连接" class="headerlink" title="正常客户端连接"></a>正常客户端连接</h3><p>当你的代理客户端连接到配置了 Reality 的服务器时，整个过程如下：</p><ol><li>客户端使用 <a href="https://github.com/refraction-networking/utls">uTLS</a> 库生成与真实浏览器完全一致的 TLS Client Hello，SNI 填写 dest 目标站的域名（如 <code>apple.com</code>）</li><li>客户端在 Client Hello 中嵌入基于 x25519 的认证数据</li><li>服务端用预配置的私钥验证客户端身份</li><li>服务端将 Client Hello 转发给真实目标站获取真实 TLS 证书</li><li>服务端将真实证书转发给客户端完成握手</li><li>TLS 握手完成后切换到代理模式，VLESS 协议开始传输数据</li></ol><p><strong>最终效果</strong>：从 GFW 的视角来看，整个过程就是一个使用最新版 Chrome 浏览器访问 <code>apple.com</code> 的标准 HTTPS 连接。TLS 证书是真的，客户端指纹是真的，SNI 是真的——因为它们本来就是真的。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line">sequenceDiagram</span><br><span class="line">    participant C as 客户端</span><br><span class="line">    participant S as Reality 服务器</span><br><span class="line">    participant T as 目标站(apple.com)</span><br><span class="line">    participant G as GFW</span><br><span class="line">    </span><br><span class="line">    C-&gt;&gt;S: TLS Client Hello (SNI: apple.com)&lt;br/&gt;+ x25519 认证</span><br><span class="line">    Note over G: 看到: 正常的到 apple.com 的连接</span><br><span class="line">    S-&gt;&gt;S: 验证认证 ✓</span><br><span class="line">    S-&gt;&gt;T: 转发 Client Hello</span><br><span class="line">    T-&gt;&gt;S: Server Hello + 真实证书</span><br><span class="line">    S-&gt;&gt;C: 转发真实 Server Hello</span><br><span class="line">    Note over G: 看到: 真实的 apple.com 证书 ✓</span><br><span class="line">    C-&gt;&gt;S: 加密代理数据</span><br><span class="line">    S-&gt;&gt;C: 加密代理数据</span><br><span class="line">    Note over G: 看到: 正常 HTTPS 流量</span><br></pre></td></tr></table></figure><h3 id="探测者连接"><a href="#探测者连接" class="headerlink" title="探测者连接"></a>探测者连接</h3><p>当 GFW 的主动探测系统向你的代理服务器发起连接时，由于探测者不知道私钥，服务端会将连接完全透明地代理到真实的目标站。探测者收到的所有响应都是直接来自目标站的真实数据。探测者无论怎么测试，都只能得出一个结论——这个 IP 上运行着一个正常的反向代理到目标站。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">sequenceDiagram</span><br><span class="line">    participant P as GFW 探测器</span><br><span class="line">    participant S as Reality 服务器</span><br><span class="line">    participant T as 目标站(apple.com)</span><br><span class="line">    </span><br><span class="line">    P-&gt;&gt;S: TLS Client Hello (SNI: apple.com)&lt;br/&gt;无有效认证</span><br><span class="line">    S-&gt;&gt;S: 认证失败 ✗</span><br><span class="line">    S-&gt;&gt;T: 透明转发整个连接</span><br><span class="line">    T-&gt;&gt;S: apple.com 网页内容</span><br><span class="line">    S-&gt;&gt;P: apple.com 网页内容</span><br><span class="line">    Note over P: 看到的就是真实的 apple.com&lt;br/&gt;无法判断这是代理服务器</span><br></pre></td></tr></table></figure><h2 id="关键配置参数"><a href="#关键配置参数" class="headerlink" title="关键配置参数"></a>关键配置参数</h2><h3 id="dest（目标站点）"><a href="#dest（目标站点）" class="headerlink" title="dest（目标站点）"></a>dest（目标站点）</h3><p>选择 dest 的硬性要求：必须支持 TLS 1.3、必须支持 HTTP&#x2F;2（H2）、目标站不能被墙。</p><p>最佳实践：选择大流量站点（如 <code>apple.com</code>、<code>www.microsoft.com</code>）、选择不太可能被封锁的站点、避免使用 CDN 分散的站点、不要使用已被广泛公开推荐的 dest。</p><h3 id="privateKey-publicKey"><a href="#privateKey-publicKey" class="headerlink" title="privateKey &#x2F; publicKey"></a>privateKey &#x2F; publicKey</h3><p>通过 <code>xray x25519</code> 生成的密钥对。<code>privateKey</code> 配置在服务端，<code>publicKey</code> 配置在客户端。<strong>privateKey 必须严格保密</strong>。</p><h3 id="shortId"><a href="#shortId" class="headerlink" title="shortId"></a>shortId</h3><p>额外的认证层，可为不同用户分配不同的 shortId，便于多用户管理。</p><h3 id="fingerprint"><a href="#fingerprint" class="headerlink" title="fingerprint"></a>fingerprint</h3><p>推荐使用 <code>chrome</code>，模拟最新版 Chrome 浏览器的 TLS 指纹。</p><h3 id="flow（xtls-rprx-vision）"><a href="#flow（xtls-rprx-vision）" class="headerlink" title="flow（xtls-rprx-vision）"></a>flow（xtls-rprx-vision）</h3><p>对内层 TLS 握手包进行智能填充，对抗流量分析。仅支持 TCP 传输。</p><h2 id="服务端配置示例（Xray-core-JSON，参考-Xray-官方文档）"><a href="#服务端配置示例（Xray-core-JSON，参考-Xray-官方文档）" class="headerlink" title="服务端配置示例（Xray-core JSON，参考 Xray 官方文档）"></a>服务端配置示例（<a href="https://github.com/XTLS/Xray-core">Xray-core</a> JSON，参考 <a href="https://xtls.github.io/">Xray 官方文档</a>）</h2><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;inbounds&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;listen&quot;</span><span class="punctuation">:</span> <span class="string">&quot;0.0.0.0&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;port&quot;</span><span class="punctuation">:</span> <span class="number">443</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;protocol&quot;</span><span class="punctuation">:</span> <span class="string">&quot;vless&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;settings&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;clients&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">          <span class="punctuation">&#123;</span></span><br><span class="line">            <span class="attr">&quot;id&quot;</span><span class="punctuation">:</span> <span class="string">&quot;your-uuid-here&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;flow&quot;</span><span class="punctuation">:</span> <span class="string">&quot;xtls-rprx-vision&quot;</span></span><br><span class="line">          <span class="punctuation">&#125;</span></span><br><span class="line">        <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;decryption&quot;</span><span class="punctuation">:</span> <span class="string">&quot;none&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;streamSettings&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;network&quot;</span><span class="punctuation">:</span> <span class="string">&quot;tcp&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;security&quot;</span><span class="punctuation">:</span> <span class="string">&quot;reality&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;realitySettings&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">          <span class="attr">&quot;dest&quot;</span><span class="punctuation">:</span> <span class="string">&quot;apple.com:443&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="attr">&quot;serverNames&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">            <span class="string">&quot;apple.com&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="string">&quot;www.apple.com&quot;</span></span><br><span class="line">          <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">          <span class="attr">&quot;privateKey&quot;</span><span class="punctuation">:</span> <span class="string">&quot;your-private-key-here&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="attr">&quot;shortIds&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">            <span class="string">&quot;6ba85179e30d4fc2&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="string">&quot;a1b2c3d4&quot;</span></span><br><span class="line">          <span class="punctuation">]</span></span><br><span class="line">        <span class="punctuation">&#125;</span></span><br><span class="line">      <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;outbounds&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;protocol&quot;</span><span class="punctuation">:</span> <span class="string">&quot;freedom&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;direct&quot;</span></span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">]</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h2 id="客户端配置（Clash-mihomo-YAML）"><a href="#客户端配置（Clash-mihomo-YAML）" class="headerlink" title="客户端配置（Clash&#x2F;mihomo YAML）"></a>客户端配置（Clash&#x2F;mihomo YAML）</h2><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">proxies:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">&quot;vless-reality&quot;</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">vless</span></span><br><span class="line">    <span class="attr">server:</span> <span class="string">your-server-ip</span></span><br><span class="line">    <span class="attr">port:</span> <span class="number">443</span></span><br><span class="line">    <span class="attr">uuid:</span> <span class="string">your-uuid-here</span></span><br><span class="line">    <span class="attr">network:</span> <span class="string">tcp</span></span><br><span class="line">    <span class="attr">udp:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">tls:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">flow:</span> <span class="string">xtls-rprx-vision</span></span><br><span class="line">    <span class="attr">servername:</span> <span class="string">apple.com</span></span><br><span class="line">    <span class="attr">reality-opts:</span></span><br><span class="line">      <span class="attr">public-key:</span> <span class="string">your-public-key-here</span></span><br><span class="line">      <span class="attr">short-id:</span> <span class="string">6ba85179e30d4fc2</span></span><br><span class="line">    <span class="attr">client-fingerprint:</span> <span class="string">chrome</span></span><br></pre></td></tr></table></figure><h2 id="最佳实践"><a href="#最佳实践" class="headerlink" title="最佳实践"></a>最佳实践</h2><ol><li><strong>使用标准端口 443</strong>：与正常 HTTPS 流量保持一致。</li><li><strong>选择高流量的 dest 目标站</strong>：不要从网上教程复制 dest 配置。</li><li><strong>启用 flow: xtls-rprx-vision</strong>：几乎没有性能开销，但能有效缓解 TLS-in-TLS 特征。</li><li><strong>客户端指纹使用 chrome</strong>：Chrome 是全球使用量最大的浏览器。</li><li><strong>定期检查 dest 站点的可达性</strong>：至少准备 3 个以上备选 dest。</li><li><strong>为不同用户分配独立的 shortId</strong>：便于权限管理和问题排查。</li><li><strong>代理服务器上不要运行其他公开服务</strong>：保持”干净”。</li></ol><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="Q-使用-Reality-需要购买域名吗？"><a href="#Q-使用-Reality-需要购买域名吗？" class="headerlink" title="Q: 使用 Reality 需要购买域名吗？"></a>Q: 使用 Reality 需要购买域名吗？</h3><p>不需要。这是 Reality 相对于 Trojan 和传统 TLS 方案最大的优势之一。</p><h3 id="Q-如果-dest-目标站被封了怎么办？"><a href="#Q-如果-dest-目标站被封了怎么办？" class="headerlink" title="Q: 如果 dest 目标站被封了怎么办？"></a>Q: 如果 dest 目标站被封了怎么办？</h3><p>切换 dest。在服务端修改 <code>dest</code> 和 <code>serverNames</code> 配置，客户端同步更新 <code>servername</code>。提前准备 3 到 5 个经过测试的备选 dest 站点。</p><h3 id="Q-dest-目标站能看到我的代理流量吗？"><a href="#Q-dest-目标站能看到我的代理流量吗？" class="headerlink" title="Q: dest 目标站能看到我的代理流量吗？"></a>Q: dest 目标站能看到我的代理流量吗？</h3><p>不能。Reality 在 TLS 握手阶段与 dest 站点通信获取证书，但握手完成后，代理数据的传输完全在客户端和你的代理服务器之间进行，与 dest 站点没有任何数据交互。</p><h3 id="Q-能通过-Reality-解锁-Netflix-等流媒体吗？"><a href="#Q-能通过-Reality-解锁-Netflix-等流媒体吗？" class="headerlink" title="Q: 能通过 Reality 解锁 Netflix 等流媒体吗？"></a>Q: 能通过 Reality 解锁 Netflix 等流媒体吗？</h3><p>Reality 是传输层协议，它本身不影响流媒体解锁。能否解锁取决于你代理服务器的 IP 地址。</p><h3 id="Q-Reality-和-Trojan-相比，哪个更好？"><a href="#Q-Reality-和-Trojan-相比，哪个更好？" class="headerlink" title="Q: Reality 和 Trojan 相比，哪个更好？"></a>Q: Reality 和 Trojan 相比，哪个更好？</h3><p>在 2026 年的环境下，VLESS+Reality 在几乎所有维度上都优于 Trojan——抗检测能力更强、不需要域名和证书、运维成本更低。更多协议的横向对比参见 <a href="/posts/protocol-comparison/">主流代理协议横向对比</a>。</p>]]></content>
      
      
      <categories>
          
          <category> 协议与原理 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> 协议 </tag>
            
            <tag> TLS </tag>
            
            <tag> Xray </tag>
            
            <tag> VLESS </tag>
            
            <tag> Reality </tag>
            
            <tag> 深度解析 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>从 VMess 到 VLESS：协议演进史</title>
      <link href="/posts/vmess-to-vless-evolution/"/>
      <url>/posts/vmess-to-vless-evolution/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>: 从 2015 年的 VMess 到 2023 年的 VLESS+Reality+XHTTP，代理协议经历了快速演进。每一次升级都是为了应对 GFW 不断增强的检测能力。本文梳理这段演进历史，帮助你理解为什么当前推荐 VLESS+Reality。</p></blockquote><h2 id="为什么要了解协议演进"><a href="#为什么要了解协议演进" class="headerlink" title="为什么要了解协议演进"></a>为什么要了解协议演进</h2><p>很多人选择代理协议的逻辑是”别人推荐什么就用什么”。这在大部分时间没问题，但当封锁来临、节点批量失效时，不理解协议原理的用户往往无法判断问题出在哪里，也无法做出有效的应对决策。</p><p>理解协议演进的过程，本质上是理解 GFW 检测手段的进化过程。每一次协议升级都不是凭空发生的——它背后对应着一种新的封锁策略。掌握了这条时间线，你就能建立起”为什么要用这个协议”的判断框架，而不只是记住一个结论。</p><p>本文按时间线梳理从 VMess 到 VLESS+Reality 的完整演进历程，覆盖关键技术节点和社区事件。</p><hr><h2 id="2015-2017-VMess-时代"><a href="#2015-2017-VMess-时代" class="headerlink" title="2015-2017: VMess 时代"></a>2015-2017: VMess 时代</h2><p>2015 年，Victoria Raymond 发布了 V2Ray 项目，其核心协议 VMess（V2Ray Message Protocol）成为 Shadowsocks 之后最重要的代理协议。</p><p>VMess 的设计思路与 Shadowsocks 有根本区别。SS 追求极简——只做加密转发；而 VMess 在协议层面加入了更多功能：基于 UUID 的用户认证、自带的加密层、以及指令头的时间戳校验机制来防止重放攻击。</p><p>这一阶段的 GFW 主要依靠端口封锁和 IP 黑名单，对协议层面的识别能力有限。VMess 的设计在当时是足够安全的。</p><hr><h2 id="2018-2019-Clash-与生态成熟"><a href="#2018-2019-Clash-与生态成熟" class="headerlink" title="2018-2019: Clash 与生态成熟"></a>2018-2019: Clash 与生态成熟</h2><p>2018 年，Dreamacro 发布了 Clash，这个项目带来的变革不在协议层面，而在用户体验层面——它将代理从”能用”推向了”好用”。</p><p>Clash 的核心创新是基于规则的流量分流：根据域名、IP、地理位置、进程名等条件，将不同的流量路由到不同的代理节点或直连。YAML 配置文件格式让规则编写和分享变得容易。</p><p>这一时期，VMess + WebSocket + TLS 成为主流部署方案。Clash 的规则分流 + VMess&#x2F;WS&#x2F;TLS 的传输方案 + CDN 中转的部署架构，构成了这个时代最典型的代理方案。</p><hr><h2 id="2020-VLESS-与-Xray-分裂"><a href="#2020-VLESS-与-Xray-分裂" class="headerlink" title="2020: VLESS 与 Xray 分裂"></a>2020: VLESS 与 Xray 分裂</h2><p>2020 年是代理协议发展的关键转折点，技术和社区两条线同时发生了重大变化。</p><p><strong>技术线：XTLS 与 VLESS 的诞生</strong></p><p>开发者 RPRX 提出了 XTLS 的概念。基于”TLS 之上不需要再做加密”的思路，VLESS 协议被设计出来——去掉了协议层的加密，将加密完全交给外层的 TLS；精简了协议头，减少了协议指纹；保留了 UUID 认证机制。</p><p><strong>社区线：<a href="https://www.v2fly.org/">V2Fly</a> 与 Xray 的分裂</strong></p><p>RPRX 从 v2ray-core fork 出了 <a href="https://github.com/XTLS/Xray-core">Xray-core</a>，并以此为基础独立发展。Xray 成为 VLESS 和 XTLS 的主要载体，并逐渐在功能和性能上超越了原版 V2Ray。</p><hr><h2 id="2021-2022-TLS-指纹成为焦点"><a href="#2021-2022-TLS-指纹成为焦点" class="headerlink" title="2021-2022: TLS 指纹成为焦点"></a>2021-2022: TLS 指纹成为焦点</h2><p>GFW 开始利用 JA3&#x2F;JA4 TLS 指纹来识别代理流量。Go 语言标准库的 TLS 实现产生的 JA3 指纹与主流浏览器完全不同，即使用了完美的 TLS 加密，握手阶段的指纹就已经暴露了非浏览器客户端身份。</p><p>uTLS 库的出现是对这一检测手段的直接回应。Xray-core 和后来的 <a href="https://github.com/SagerNet/sing-box">sing-box</a> 都集成了 uTLS，用户只需要配置 <code>fingerprint: chrome</code> 就能模拟 Chrome 的 TLS 指纹。</p><p>Trojan 协议在这个时期经历了从崛起到逐渐边缘化的过程——它依赖真实域名和证书，带来了域名可能被封锁、证书续签可能暴露身份等运维风险。</p><hr><h2 id="2023-Reality-革命"><a href="#2023-Reality-革命" class="headerlink" title="2023: Reality 革命"></a>2023: Reality 革命</h2><p>2023 年初，RPRX 发布了 Reality，同时攻克了三个长期困扰代理部署的核心难题：</p><p><strong>第一：消除域名依赖。</strong> Reality 通过”借用”目标网站的 TLS 证书来完成握手，不需要自己的域名和证书。</p><p><strong>第二：解决 TLS 指纹问题。</strong> Reality 配合 uTLS，整个 TLS 握手过程从指纹层面看与真实访问目标网站几乎无法区分。</p><p><strong>第三：抵抗主动探测。</strong> 未认证的连接会被直接转发到目标网站，返回真实响应。探测者无法区分这是代理服务器还是正常的反向代理。</p><p>Reality 的部署比传统 TLS 方案更简单：不需要购买域名、不需要申请和维护 TLS 证书、不需要运行 Web 服务器做回落。发布后迅速成为社区推荐的首选方案。</p><hr><h2 id="2024-2025-XHTTP-与-AnyTLS"><a href="#2024-2025-XHTTP-与-AnyTLS" class="headerlink" title="2024-2025: XHTTP 与 AnyTLS"></a>2024-2025: XHTTP 与 AnyTLS</h2><p>社区在传输层面继续探索。XHTTP 将代理数据封装为标准的 HTTP 请求，流量模式更接近正常的网页浏览行为。AnyTLS 通过在 TLS 连接内部引入填充和分片机制来扰乱流量模式。sing-box 逐步成为跨平台的主流核心。</p><hr><h2 id="2026-当前格局"><a href="#2026-当前格局" class="headerlink" title="2026: 当前格局"></a>2026: 当前格局</h2><p><strong>第一梯队：VLESS + Reality</strong> —— 当前社区的首选推荐，在抗检测能力、部署便捷性、性能表现三个维度上达到最佳平衡。</p><p><strong>第二梯队：<a href="https://hysteria.network/">Hysteria2</a>（UDP 场景补充）</strong> —— 在 UDP 友好的网络环境中性能极为出色。推荐与 VLESS+Reality 同时部署。</p><p><strong>统一平台：sing-box</strong> —— 正在成为跨平台的统一代理核心。</p><hr><h2 id="演进的规律"><a href="#演进的规律" class="headerlink" title="演进的规律"></a>演进的规律</h2><p><strong>第一阶段：协议加密（2015-2019）</strong> —— 核心策略是加密流量内容。局限性：加密流量本身就是一个特征。</p><p><strong>第二阶段：流量伪装（2019-2022）</strong> —— 核心策略是让代理流量看起来像正常的 HTTPS 流量。突破口被 GFW 找到：TLS 指纹。</p><p><strong>第三阶段：身份借用（2023-至今）</strong> —— 核心策略是借用真实网站的身份，让审查者即使进行主动探测也无法区分代理服务器和真实网站。</p><p>演进的方向始终是从”隐藏内容”到”隐藏身份”——从”让你看不懂我在做什么”变成”让你根本不知道我在这里”。</p><hr><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="Q-VMess-彻底淘汰了吗？"><a href="#Q-VMess-彻底淘汰了吗？" class="headerlink" title="Q: VMess 彻底淘汰了吗？"></a>Q: VMess 彻底淘汰了吗？</h3><p>技术上已经过时，但仍有大量存量用户和节点在使用。不推荐新部署使用 VMess。如果你现有的节点还在用 VMess，建议在下次维护时迁移到 VLESS+Reality。</p><h3 id="Q-下一个革命性协议会是什么？"><a href="#Q-下一个革命性协议会是什么？" class="headerlink" title="Q: 下一个革命性协议会是什么？"></a>Q: 下一个革命性协议会是什么？</h3><p>几个值得关注的方向：ECH（Encrypted Client Hello）的普及、QUIC 协议的成熟、AI 驱动的流量分析。</p><h3 id="Q-我需要关心协议演进吗？"><a href="#Q-我需要关心协议演进吗？" class="headerlink" title="Q: 我需要关心协议演进吗？"></a>Q: 我需要关心协议演进吗？</h3><p>取决于你的使用方式。使用商业机场的用户不太需要关注。个人自建的用户建议关注 Xray-core 和 sing-box 的 Release 页面。技术爱好者强烈建议深入了解。</p>]]></content>
      
      
      <categories>
          
          <category> 协议与原理 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> 协议 </tag>
            
            <tag> VLESS </tag>
            
            <tag> Reality </tag>
            
            <tag> VMess </tag>
            
            <tag> 历史 </tag>
            
            <tag> 演进 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>科学上网是什么？一篇讲清楚</title>
      <link href="/posts/what-is-proxy/"/>
      <url>/posts/what-is-proxy/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：科学上网是指通过技术手段绕过网络审查限制，访问被屏蔽的境外网站和服务。它的核心原理是将你的网络流量通过一台位于境外的中间服务器进行中转，让审查系统无法识别你的真实访问目标。本文从零开始，帮你建立对科学上网的完整认知。</p></blockquote><h2 id="互联网本来的样子"><a href="#互联网本来的样子" class="headerlink" title="互联网本来的样子"></a>互联网本来的样子</h2><p>互联网最初的设计理念非常简单：<strong>任何一台联网设备都能与其他任何联网设备通信。</strong> 这不是理想主义的口号，而是互联网协议（TCP&#x2F;IP）的底层架构决定的。</p><p>1969 年，美国国防部的 ARPANET 项目奠定了互联网的基础。这个网络被设计成去中心化的——没有单一的控制节点，没有”总开关”。数据以”包”的形式在网络中自由流动，路由器自动选择最优路径将数据包送达目的地。</p><p>在这个设计下，你在北京打开浏览器访问一个纽约的网站，和你访问一个北京本地的网站，在技术层面没有本质区别。你的请求被拆分成数据包，经过若干路由器的转发，到达目标服务器，服务器再把响应数据包沿路径返回给你。整个过程不需要任何人的”许可”。</p><p>这种开放性让互联网在短短几十年内从学术实验变成了人类文明的基础设施。搜索引擎、社交网络、电子邮件、在线教育、远程办公——所有这些都建立在”任意节点可达”的前提之上。</p><h2 id="为什么有些网站打不开"><a href="#为什么有些网站打不开" class="headerlink" title="为什么有些网站打不开"></a>为什么有些网站打不开</h2><p>然而，并非所有国家和地区都愿意保持互联网的完全开放。出于政治、安全、意识形态等各种原因，一些国家建立了网络审查系统，限制本国用户访问特定的境外网站和服务。</p><p>其中最为人知的，就是中国的<strong>防火长城</strong>（Great Firewall，简称 GFW）。</p><p>如果你身在中国大陆，以下这些服务你无法直接访问：</p><ul><li><strong>搜索引擎</strong>：Google、DuckDuckGo</li><li><strong>视频平台</strong>：YouTube、Vimeo</li><li><strong>社交媒体</strong>：Twitter&#x2F;X、Facebook、Instagram、Reddit</li><li><strong>通讯工具</strong>：Telegram、WhatsApp、Signal</li><li><strong>AI 服务</strong>：ChatGPT、Claude、Gemini</li><li><strong>开发工具</strong>：部分 GitHub 功能、Stack Overflow（间歇性）</li><li><strong>新闻媒体</strong>：BBC、纽约时报、路透社等境外媒体</li><li><strong>其他</strong>：Wikipedia（中文版）、Notion（曾被短暂屏蔽）等</li></ul><p>GFW 是怎么做到的？它并不是一个简单的”黑名单”，而是多种技术手段的组合：</p><ul><li><strong>DNS 污染</strong>：当你的设备查询被屏蔽域名的 IP 地址时，GFW 抢先返回一个错误的 IP，让你根本连不到正确的服务器。</li><li><strong>IP 封锁</strong>：直接屏蔽目标网站服务器的 IP 地址，TCP 连接在建立阶段就被阻断。</li><li><strong>深度包检测（DPI）</strong>：分析网络数据包的内容和格式特征，识别并阻断特定协议的流量。</li><li><strong>主动探测</strong>：GFW 会主动连接可疑的服务器，测试它是否在运行代理服务。</li></ul><blockquote><p>想深入了解 GFW 的技术细节，可以阅读 <a href="../gfw/gfw-detection-overview.md">GFW 工作原理全解</a>。</p></blockquote><h2 id="“科学上网”到底是什么"><a href="#“科学上网”到底是什么" class="headerlink" title="“科学上网”到底是什么"></a>“科学上网”到底是什么</h2><p>理解了”墙”是什么，”翻墙”的逻辑就很直观了。</p><p>科学上网的核心原理可以用一句话概括：<strong>让你的网络流量先到达一台墙外的中间服务器，由它替你访问目标网站，再把结果传回给你。</strong></p><p>具体的流程是这样的：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">你的设备 ──加密隧道──→ 境外代理服务器 ──正常请求──→ Google / YouTube / ChatGPT</span><br><span class="line">                                        ←──响应数据──</span><br><span class="line">         ←──加密隧道──</span><br></pre></td></tr></table></figure><p>在这个过程中：</p><ol><li><strong>你的设备</strong>和<strong>代理服务器</strong>之间建立一条加密通道。GFW 能看到你在和代理服务器通信，但无法知道你通过它访问了什么。</li><li><strong>代理服务器</strong>位于中国大陆以外（比如日本、美国、新加坡），不受 GFW 的管辖。它收到你的请求后，以自己的身份去访问目标网站。</li><li><strong>目标网站</strong>（如 Google）只看到代理服务器的 IP 地址，不知道你的真实 IP。</li><li>代理服务器把网站的响应通过加密通道传回给你。</li></ol><p>从 GFW 的视角看，你只是在和某个境外 IP 通信——只要这条通信不被识别为”代理流量”，审查系统就不会干预。</p><p><img src="/images/inline/proxy-diagram.webp" alt="代理服务器工作原理示意图"><br><em>图片来源：<a href="https://www.geeksforgeeks.org/">GeeksforGeeks</a></em></p><p>这就引出了一个关键问题：<strong>如何让代理流量不被 GFW 识别？</strong> 这正是各种代理协议不断演进的核心动力，也是本 Wiki 后续很多文章要深入讨论的内容。</p><p>关于”科学上网”这个名字本身——它是中文互联网社区创造的委婉说法，字面意思是”用科学的方式上网”。另一个常见说法是”翻墙”，更直白但也更敏感。两者说的是同一件事。</p><h2 id="常见的实现方式"><a href="#常见的实现方式" class="headerlink" title="常见的实现方式"></a>常见的实现方式</h2><h3 id="VPN（虚拟私人网络）"><a href="#VPN（虚拟私人网络）" class="headerlink" title="VPN（虚拟私人网络）"></a>VPN（虚拟私人网络）</h3><p>VPN 并非为翻墙而生。它最初的用途是让远程员工安全地接入公司内网——你在家里，通过 VPN 连接到公司的网络，就像你坐在办公室一样。</p><p>VPN 的原理是在你的设备和 VPN 服务器之间建立一条加密隧道，<strong>所有流量</strong>都经过这条隧道。这意味着你的互联网服务提供商（ISP）无法看到你在访问什么。</p><p>看起来很适合用来翻墙，对不对？问题在于：</p><ul><li><strong>VPN 协议有明显的流量特征。</strong> OpenVPN、L2TP、PPTP、IKEv2 这些协议的握手过程都有固定的格式，GFW 的 DPI 很容易识别它们。</li><li><strong>一旦被识别，直接封 IP。</strong> 你连接的 VPN 服务器 IP 会被加入黑名单。</li><li><strong>商业 VPN 服务经常失效。</strong> ExpressVPN、NordVPN 等知名服务在中国大陆的可用性时好时坏。它们的服务器 IP 段是公开的，GFW 可以批量封禁。</li></ul><p>总结：VPN 是通用的网络安全工具，但在对抗专业审查系统时，它不是最优选择。</p><h3 id="代理协议（Proxy-Protocols）"><a href="#代理协议（Proxy-Protocols）" class="headerlink" title="代理协议（Proxy Protocols）"></a>代理协议（Proxy Protocols）</h3><p>与 VPN 不同，代理协议是专门为绕过审查而设计的。它们的核心设计目标只有一个：<strong>让代理流量看起来和普通的网页浏览流量一模一样。</strong></p><p>目前主流的代理协议包括：</p><ul><li><strong>Shadowsocks</strong>：最早的现代翻墙协议之一，由中国开发者创建。轻量、快速，但抗检测能力在逐渐下降。</li><li><strong>VMess</strong>：V2Ray 项目的原生协议。曾经是主流选择，但目前已暴露出安全问题，不再推荐。</li><li><strong>VLESS</strong>：VMess 的继任者，去掉了冗余的加密层，搭配 Reality 技术后抗检测能力极强。</li><li><strong>Trojan</strong>：将代理流量伪装成正常的 HTTPS 访问，简单有效。</li><li><strong>Hysteria2</strong>：基于 QUIC 协议（UDP），在高延迟、高丢包的网络环境下表现优异。</li></ul><p>这些协议的共同特点是：GFW 很难把它们的流量和正常的网页浏览流量区分开来。它们比传统 VPN 难封锁得多。</p><blockquote><p>各协议的详细对比见 <a href="../protocols/protocol-comparison.md">主流代理协议横向对比</a>。</p></blockquote><h3 id="机场（Proxy-Services）"><a href="#机场（Proxy-Services）" class="headerlink" title="机场（Proxy Services）"></a>机场（Proxy Services）</h3><p>“机场”是中文社区对代理服务提供商的俗称（因为早期的客户端界面有飞机图标）。</p><p>自建代理服务器需要一定的技术能力：租境外 VPS、安装代理软件、配置协议、维护服务器。对大多数人来说，这个门槛太高了。</p><p>机场就是帮你做了这些事的第三方服务。你付费订阅后，会得到一个<strong>订阅链接</strong>。把这个链接导入客户端软件，就能自动获取所有可用的代理节点，一键连接。</p><p>机场通常提供：</p><ul><li><strong>多个节点</strong>：分布在不同国家和地区，你可以根据需要选择。</li><li><strong>协议更新</strong>：当 GFW 升级检测策略时，机场会更新协议配置来应对。</li><li><strong>IP 轮换</strong>：当某个节点 IP 被封时，机场会更换新的 IP。</li><li><strong>流媒体解锁</strong>：部分节点支持访问 Netflix、Disney+ 等有地区限制的服务。</li></ul><p>需要注意的是：</p><ul><li><strong>免费机场风险较高。</strong> 运营代理服务有成本（服务器、带宽），免费服务的盈利方式值得警惕——你的流量数据可能被收集出售，连接速度和稳定性也无法保证。</li><li><strong>付费机场质量参差不齐。</strong> 选择时需要关注口碑、运营时长、节点质量等因素。</li></ul><blockquote><p>如何评估机场质量，参见 <a href="../guide/how-to-evaluate.md">如何评估一个机场的质量</a>。</p></blockquote><h2 id="你需要准备什么"><a href="#你需要准备什么" class="headerlink" title="你需要准备什么"></a>你需要准备什么</h2><p>如果你想开始使用科学上网，需要准备三样东西：</p><h3 id="1-一个代理客户端软件"><a href="#1-一个代理客户端软件" class="headerlink" title="1. 一个代理客户端软件"></a>1. 一个代理客户端软件</h3><p>客户端是安装在你设备上的软件，负责接管你的网络流量，将其通过代理服务器转发。常见的选择包括：</p><table><thead><tr><th>平台</th><th>推荐客户端</th></tr></thead><tbody><tr><td>Windows</td><td><a href="https://github.com/clash-verge-rev/clash-verge-rev">Clash Verge Rev</a>、v2rayN</td></tr><tr><td>macOS</td><td>Clash Verge Rev、<a href="https://nssurge.com/">Surge</a></td></tr><tr><td>Linux</td><td>Clash Verge Rev、sing-box</td></tr><tr><td>iOS</td><td>Shadowrocket（付费，App Store 购买）、Surge（付费）</td></tr><tr><td>Android</td><td><a href="https://github.com/2dust/v2rayNG">v2rayNG</a>、<a href="https://github.com/MetaCubeX/ClashMetaForAndroid">Clash Meta for Android</a></td></tr></tbody></table><h3 id="2-一个订阅链接"><a href="#2-一个订阅链接" class="headerlink" title="2. 一个订阅链接"></a>2. 一个订阅链接</h3><p>订阅链接是机场提供给你的一串 URL。客户端通过这个链接获取代理节点的配置信息（服务器地址、端口、加密方式等）。</p><p>获取方式有两种：</p><ul><li><strong>从机场购买订阅</strong>：适合大多数用户，省心省力。</li><li><strong>自建代理服务器</strong>：适合有技术能力且追求完全控制的用户。</li></ul><h3 id="3-基础网络知识"><a href="#3-基础网络知识" class="headerlink" title="3. 基础网络知识"></a>3. 基础网络知识</h3><p>严格来说，你不需要理解任何技术原理也能用上科学上网——导入订阅链接、选个节点、点击连接，就这么简单。</p><p>但当你遇到问题的时候（节点连不上、速度很慢、某个网站打不开），一点基础知识会让你从”只能干等”变成”能自己排查”。这正是本 Wiki 存在的意义。</p><h2 id="合法性与风险"><a href="#合法性与风险" class="headerlink" title="合法性与风险"></a>合法性与风险</h2><p>这是很多人关心的问题，这里给出客观的信息供参考。</p><p><strong>关于法律层面：</strong></p><ul><li>在中国大陆，<strong>个人使用 VPN&#x2F;代理访问境外网站</strong>处于法律灰色地带。目前没有明确的法律条文将个人使用行为定义为犯罪。</li><li><strong>未经许可经营 VPN 业务是违法的。</strong> 已有多起因出售 VPN&#x2F;代理服务被处罚的案例，法律依据通常是《计算机信息网络国际联网管理暂行规定》。</li><li>部分地区曾出现过个人因使用 VPN 被行政处罚的案例，但这属于少数且通常与其他违规行为关联。</li></ul><p><strong>实际建议：</strong></p><ul><li>用于正常目的（工作、学习、获取信息、娱乐）时，个人使用的实际风险很低。</li><li>不要通过代理从事任何违法活动——代理只是改变了你的网络路径，不会让违法行为变得合法。</li><li>不要公开传播或出售代理服务和翻墙工具。</li><li>了解你所在地区的具体政策，不同省份的执法力度可能不同。</li></ul><p><strong>隐私方面的考虑：</strong></p><p>你的代理服务提供商（机场）在技术上可以看到你的流量元数据——你访问了哪些网站、什么时间访问、流量大小等。虽然 HTTPS 加密保护了具体的传输内容，但访问记录本身是可见的。这意味着选择一个可信赖的代理服务很重要。关于代理的隐私边界，详见 <a href="/posts/privacy-boundaries/">代理的隐私边界</a>。</p><h2 id="这个-Wiki-能帮你什么"><a href="#这个-Wiki-能帮你什么" class="headerlink" title="这个 Wiki 能帮你什么"></a>这个 Wiki 能帮你什么</h2><p>你正在阅读的是 Proxy Wiki 的第一篇文章。接下来，这个 Wiki 会带你逐步深入：</p><ul><li><strong><a href="/posts/terminology/">VPN、代理、机场——这些词到底什么意思</a></strong>：搞清楚你会反复遇到的术语。</li><li><strong><a href="./software-overview.md">V2Ray、Xray、Clash、Sing-box……我该用哪个？</a></strong>：了解各个软件的定位和区别。</li><li><strong><a href="/posts/first-time-setup/">第一次使用代理：从零开始的配置指南</a></strong>：手把手完成你的第一次连接。</li></ul><p>本 Wiki 的目标不只是教你”怎么做”，更重要的是让你理解”为什么”。当你理解了代理的工作原理、协议的设计思路、GFW 的检测逻辑，你就不再是一个只会点”连接”按钮的用户，而是一个真正掌握了这项技术的人。</p><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="Q-科学上网和翻墙是一个意思吗？"><a href="#Q-科学上网和翻墙是一个意思吗？" class="headerlink" title="Q: 科学上网和翻墙是一个意思吗？"></a>Q: 科学上网和翻墙是一个意思吗？</h3><p>是的，完全一样的意思。”翻墙”更口语化、更直白；”科学上网”是社区更常用的委婉说法。你可能还会看到”魔法上网””加速器”等其他说法，都指同一件事。使用哪个词纯粹是个人习惯。</p><h3 id="Q-用了代理就完全安全了吗？"><a href="#Q-用了代理就完全安全了吗？" class="headerlink" title="Q: 用了代理就完全安全了吗？"></a>Q: 用了代理就完全安全了吗？</h3><p>不是。代理加密的是你的设备到代理服务器之间的通信，防止 GFW 和你的 ISP 看到你的访问内容。但代理服务器本身可以看到你的流量元数据。如果你有极高的匿名性需求（如记者、活动人士），应该考虑 <a href="https://www.torproject.org/">Tor</a> 等更专业的工具。对于绝大多数普通用户，一个信誉良好的付费代理服务已经足够。</p><h3 id="Q-免费的代理能用吗？"><a href="#Q-免费的代理能用吗？" class="headerlink" title="Q: 免费的代理能用吗？"></a>Q: 免费的代理能用吗？</h3><p>一般不建议。免费代理服务的常见问题包括：速度慢且不稳定、节点经常失效、存在隐私风险（你的浏览数据可能被记录和出售）、可能存在安全漏洞。天下没有免费的午餐——如果你不是客户，那你可能就是产品。预算有限的话，可以寻找价格较低但口碑尚可的付费机场，月费通常在几元到几十元不等。</p><h3 id="Q-科学上网需要很强的技术能力吗？"><a href="#Q-科学上网需要很强的技术能力吗？" class="headerlink" title="Q: 科学上网需要很强的技术能力吗？"></a>Q: 科学上网需要很强的技术能力吗？</h3><p>不需要。现在的客户端软件已经做得非常友好了。实际操作通常就三步：安装客户端软件、导入订阅链接、点击连接。整个过程可能不到五分钟。本 Wiki 的存在不是因为科学上网有多难，而是因为当你想优化速度、排查故障、理解为什么某些配置更好的时候，你会需要更深层的知识。你可以先用起来，再慢慢学。</p>]]></content>
      
      
      <categories>
          
          <category> 入门指南 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> 代理 </tag>
            
            <tag> 新手入门 </tag>
            
            <tag> VPN </tag>
            
            <tag> 科学上网 </tag>
            
            <tag> 翻墙 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>什么是分流规则？为什么需要它</title>
      <link href="/posts/what-are-rules/"/>
      <url>/posts/what-are-rules/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>：分流规则决定了哪些流量走代理、哪些直连、哪些走特定节点。它是代理客户端的核心能力之一，直接影响上网速度、稳定性和使用体验。本文从零解释分流的概念、工作原理和基本配置方法。</p></blockquote><h2 id="为什么不能”全部走代理”"><a href="#为什么不能”全部走代理”" class="headerlink" title="为什么不能”全部走代理”"></a>为什么不能”全部走代理”</h2><p>很多刚接触科学上网的人会有一个直觉想法：<strong>既然代理能让我访问被墙的网站，那我把所有流量都走代理不就完了？</strong></p><p>这个想法听起来合理，实际操作却会带来一系列问题。</p><p><strong>第一，国内网站会变慢。</strong> 当你访问百度、淘宝、B站这些国内网站时，如果流量走代理，数据包的路径会变成这样：你的设备 → 境外代理服务器 → 国内目标网站 → 境外代理服务器 → 你的设备。本来一步直达的事情，现在绕了一大圈。延迟从几毫秒变成几十甚至上百毫秒，打开网页明显变慢。</p><p><strong>第二，浪费代理流量。</strong> 大多数机场按流量计费。如果你看B站、刷抖音这些国内流量全部走代理，每月几十 GB 的流量消耗会非常快。这些流量本不需要代理，白白浪费了钱。</p><p><strong>第三，部分国内服务可能异常。</strong> 一些网站和 App 会检查用户的 IP 地址。当它们发现你从一个境外 IP 访问时，可能触发安全验证、限制功能，甚至直接拒绝服务。比如微信支付、银行网银、政务服务网站等，使用境外 IP 访问可能导致账户异常或需要额外验证。</p><p><strong>第四，安全和隐私考虑。</strong> 银行网站、政务网站等涉及敏感操作的服务，最好走直连。你不需要也不应该让这些流量经过第三方代理服务器。</p><p>所以，正确的做法不是”全部走代理”，而是<strong>只代理需要代理的流量，其他一切直连</strong>。这就是分流的核心目标。</p><h2 id="分流的基本逻辑"><a href="#分流的基本逻辑" class="headerlink" title="分流的基本逻辑"></a>分流的基本逻辑</h2><p>理解分流的原理并不复杂。</p><p>你的设备发出的每一个网络请求，都有一个明确的目标——一个域名（比如 <code>google.com</code>）或一个 IP 地址（比如 <code>142.250.80.46</code>）。代理客户端会拦截这些请求，把目标信息和一系列规则逐条比对，找到第一条匹配的规则，然后按这条规则指定的方式处理这个请求。</p><p>处理方式通常有三种：</p><ul><li><strong>PROXY（代理）</strong>：通过代理服务器转发这个请求。用于被墙的或需要境外 IP 的网站。</li><li><strong>DIRECT（直连）</strong>：不经过代理，直接连接目标。用于国内网站和不需要代理的服务。</li><li><strong>REJECT（拒绝）</strong>：直接丢弃这个请求。通常用于广告拦截和隐私保护。</li></ul><p>规则的匹配顺序是<strong>从上到下，逐条检查，命中即停</strong>。这和你在餐厅菜单上从第一行往下看是一样的——看到想吃的就停下来点单，不会再往下翻了。</p><p>一个简化的例子：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">规则1: DOMAIN-SUFFIX,google.com → Proxy     ← 访问 Google，走代理</span><br><span class="line">规则2: DOMAIN-SUFFIX,baidu.com → Direct     ← 访问百度，直连</span><br><span class="line">规则3: GEOIP,CN → Direct                    ← 目标 IP 属于中国，直连</span><br><span class="line">规则4: MATCH → Proxy                        ← 以上都没匹配，走代理（兜底）</span><br></pre></td></tr></table></figure><p>当你访问 <code>mail.google.com</code> 时，客户端从第一条规则开始检查：<code>google.com</code> 是不是 <code>mail.google.com</code> 的后缀？是的，匹配成功。于是这个请求走代理，后面的规则不再检查。</p><p>当你访问 <code>www.baidu.com</code> 时，第一条规则不匹配（后缀不是 <code>google.com</code>），继续检查第二条：<code>baidu.com</code> 是不是 <code>www.baidu.com</code> 的后缀？是的，匹配成功。这个请求走直连。</p><p><img src="/images/inline/clash-rules-tab.webp" alt="Clash Verge 规则界面"><br><em>图片来源：<a href="https://clashverge.net/">Clash Verge</a></em></p><p>当你访问一个规则里没有明确列出的境外网站时，前面的域名规则都不匹配。客户端查到第三条 <code>GEOIP,CN</code>，检查目标 IP 的所属国家——如果不是中国，继续往下。最终命中第四条 <code>MATCH</code>（匹配一切），走代理。</p><p>这就是分流的全部核心逻辑。</p><h2 id="规则类型详解"><a href="#规则类型详解" class="headerlink" title="规则类型详解"></a>规则类型详解</h2><p>不同的代理客户端支持的规则类型略有差异，但以下几类是几乎所有主流客户端（如 <a href="https://github.com/MetaCubeX/mihomo">mihomo</a> 等）都支持的。</p><h3 id="域名规则"><a href="#域名规则" class="headerlink" title="域名规则"></a>域名规则</h3><p>域名规则是最常用、最精准的规则类型。它通过匹配请求的目标域名来决定路由。</p><p><strong>DOMAIN（精确匹配）</strong></p><p>只匹配完全相同的域名，不包含子域名。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">DOMAIN,www.google.com,Proxy</span><br></pre></td></tr></table></figure><p>这条规则只匹配 <code>www.google.com</code>，不会匹配 <code>mail.google.com</code> 或 <code>google.com</code>。适用于你需要精确控制某一个具体域名的场景。</p><p><strong>DOMAIN-SUFFIX（后缀匹配）</strong></p><p>匹配指定域名及其所有子域名。这是实际使用中最常见的规则类型。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">DOMAIN-SUFFIX,google.com,Proxy</span><br></pre></td></tr></table></figure><p>这条规则会匹配 <code>google.com</code>、<code>www.google.com</code>、<code>mail.google.com</code>、<code>drive.google.com</code> 等所有以 <code>google.com</code> 结尾的域名。绝大多数情况下，你想代理一个网站时，用 <code>DOMAIN-SUFFIX</code> 就够了。</p><p><strong>DOMAIN-KEYWORD（关键词匹配）</strong></p><p>只要域名中包含指定的关键词，就匹配。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">DOMAIN-KEYWORD,google,Proxy</span><br></pre></td></tr></table></figure><p>这条规则会匹配所有域名中包含 <code>google</code> 这个词的请求——<code>www.google.com</code>、<code>googleapis.com</code>、<code>googleusercontent.com</code> 都会命中。它的覆盖范围很广，但也可能产生误伤。比如，如果一个国内网站的域名碰巧包含这个关键词，也会被代理。使用时需要注意。</p><h3 id="IP-规则"><a href="#IP-规则" class="headerlink" title="IP 规则"></a>IP 规则</h3><p>有些网络请求的目标不是域名，而是直接的 IP 地址（某些应用或服务就是这样工作的）。或者，你想根据目标服务器所在的国家来决定路由。这时候需要 IP 规则。</p><p><strong>IP-CIDR（IP 段匹配）</strong></p><p>匹配一个特定的 IP 地址范围。CIDR 是一种标准的 IP 段表示方法。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">IP-CIDR,91.108.0.0/16,Proxy</span><br></pre></td></tr></table></figure><p>这条规则匹配所有以 <code>91.108</code> 开头的 IP 地址（<code>91.108.0.0</code> 到 <code>91.108.255.255</code>）。上面这个例子是 Telegram 的 IP 段——Telegram 的服务器用的就是这个 IP 范围，把它走代理可以确保 Telegram 正常连接。</p><p><strong>GEOIP（地理位置匹配）</strong></p><p>根据目标 IP 地址对应的国家或地区代码来匹配。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">GEOIP,CN,Direct</span><br></pre></td></tr></table></figure><p>这条规则的含义是：如果目标 IP 属于中国，就直连。这是一条非常实用的兜底规则——即使某个国内网站没有被其他规则命中，只要它的服务器在中国，就会被这条规则捞住并直连。</p><p>客户端内置了 IP 地理位置数据库（通常是 MaxMind 的 GeoIP 数据库或 GeoLite2），通过查询数据库来判断 IP 的所属国家。更多规则类型的说明可以参考 <a href="https://wiki.metacubex.one/">Clash Wiki</a>。</p><h3 id="进程规则"><a href="#进程规则" class="headerlink" title="进程规则"></a>进程规则</h3><p>进程规则不看你访问的目标是什么，而是看是<strong>哪个应用程序</strong>发出的请求。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">PROCESS-NAME,telegram.exe,Proxy</span><br><span class="line">PROCESS-NAME,wechat.exe,Direct</span><br></pre></td></tr></table></figure><p>第一条规则的意思是：只要是 Telegram 这个程序发出的网络请求，不管它连接的是什么地址，全部走代理。第二条则让微信的所有流量直连。</p><p>进程规则在某些场景下很有用。比如你有一个程序，它连接的地址不固定或者很难通过域名&#x2F;IP 规则覆盖全，用进程规则可以一刀切地解决。</p><p>需要注意的是，进程规则需要客户端具备读取进程信息的权限，在移动设备上的支持可能受限。在 Windows 和 macOS 上通常都能正常工作。</p><h3 id="其他规则"><a href="#其他规则" class="headerlink" title="其他规则"></a>其他规则</h3><p><strong>RULE-SET &#x2F; Rule Provider（规则集）</strong></p><p>规则集是将大量规则打包成一个外部文件或在线列表。客户端定期从 URL 下载并更新这些规则。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">RULE-SET,https://example.com/proxy-list.yaml,Proxy</span><br></pre></td></tr></table></figure><p>规则集的好处是：你不需要自己维护成百上千条规则。社区维护的规则集会持续更新，新的被墙网站或广告域名会被及时加入。这是目前最推荐的规则管理方式。关于规则集的详细使用方法，会在单独的文章中介绍。</p><p><strong>MATCH（兜底规则）</strong></p><p><code>MATCH</code> 匹配一切请求，不做任何条件判断。它的作用是作为最后一条规则，处理前面所有规则都没有命中的流量。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">MATCH,Proxy</span><br></pre></td></tr></table></figure><p>这意味着”如果前面的规则都没匹配上，那就走代理”。你也可以设置成 <code>MATCH,Direct</code>，让默认行为变成直连——这取决于你的使用习惯和需求。</p><p>把 <code>MATCH</code> 设为代理意味着”宁可多代理，也不漏掉需要代理的”。设为直连意味着”宁可多直连，也不浪费代理流量”。两种策略各有取舍。</p><p><strong>DST-PORT &#x2F; SRC-PORT（端口匹配）</strong></p><p>按目标端口或源端口来匹配。使用场景不多，一般用于特殊用途。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">DST-PORT,22,Direct</span><br></pre></td></tr></table></figure><p>这条规则表示所有目标端口为 22（SSH）的流量走直连。</p><h2 id="代理策略组（Proxy-Groups）"><a href="#代理策略组（Proxy-Groups）" class="headerlink" title="代理策略组（Proxy Groups）"></a>代理策略组（Proxy Groups）</h2><p>到目前为止我们讨论的规则，最终都指向一个”策略”——Proxy、Direct 或 Reject。但在实际使用中，”走代理”这件事还可以更细致：你可能有多个代理节点，该选哪一个？</p><p>这就是策略组（Proxy Group）解决的问题。策略组是一组代理节点的集合，加上一个选择策略。规则不直接指向某个具体节点，而是指向一个策略组，由策略组来决定最终使用哪个节点。</p><h3 id="select（手动选择）"><a href="#select（手动选择）" class="headerlink" title="select（手动选择）"></a>select（手动选择）</h3><p>最直观的策略组。你自己从列表中选一个节点。</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="bullet">-</span> <span class="attr">name:</span> <span class="string">&quot;Overseas&quot;</span></span><br><span class="line">  <span class="attr">type:</span> <span class="string">select</span></span><br><span class="line">  <span class="attr">proxies:</span> [<span class="string">HK-01</span>, <span class="string">HK-02</span>, <span class="string">JP-01</span>, <span class="string">US-01</span>, <span class="string">SG-01</span>]</span><br></pre></td></tr></table></figure><p>适合对节点有明确偏好的用户。比如你知道某个香港节点速度最好，就手动选它。</p><h3 id="url-test（自动选最快）"><a href="#url-test（自动选最快）" class="headerlink" title="url-test（自动选最快）"></a>url-test（自动选最快）</h3><p>客户端定期测试组内所有节点到指定 URL 的延迟，自动选择延迟最低的节点。</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="bullet">-</span> <span class="attr">name:</span> <span class="string">&quot;Auto-Fast&quot;</span></span><br><span class="line">  <span class="attr">type:</span> <span class="string">url-test</span></span><br><span class="line">  <span class="attr">proxies:</span> [<span class="string">HK-01</span>, <span class="string">HK-02</span>, <span class="string">JP-01</span>, <span class="string">US-01</span>]</span><br><span class="line">  <span class="attr">url:</span> <span class="string">http://www.gstatic.com/generate_204</span></span><br><span class="line">  <span class="attr">interval:</span> <span class="number">300</span></span><br></pre></td></tr></table></figure><p><code>interval: 300</code> 表示每 300 秒（5 分钟）测试一次。如果当前节点变慢了，客户端会自动切换到更快的节点。这是懒人首选——设置好之后基本不用管。</p><h3 id="fallback（故障转移）"><a href="#fallback（故障转移）" class="headerlink" title="fallback（故障转移）"></a>fallback（故障转移）</h3><p>按列表顺序优先使用第一个可用的节点。如果第一个节点挂了，自动切换到第二个，依此类推。</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="bullet">-</span> <span class="attr">name:</span> <span class="string">&quot;Reliable&quot;</span></span><br><span class="line">  <span class="attr">type:</span> <span class="string">fallback</span></span><br><span class="line">  <span class="attr">proxies:</span> [<span class="string">HK-01</span>, <span class="string">HK-02</span>, <span class="string">JP-01</span>]</span><br><span class="line">  <span class="attr">url:</span> <span class="string">http://www.gstatic.com/generate_204</span></span><br><span class="line">  <span class="attr">interval:</span> <span class="number">300</span></span><br></pre></td></tr></table></figure><p>和 url-test 的区别是：fallback 不追求最快，只追求可用。只有当前节点不可用时才切换。适合追求稳定性的用户。</p><h3 id="load-balance（负载均衡）"><a href="#load-balance（负载均衡）" class="headerlink" title="load-balance（负载均衡）"></a>load-balance（负载均衡）</h3><p>将流量分散到组内多个节点上，避免单个节点负载过高。</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="bullet">-</span> <span class="attr">name:</span> <span class="string">&quot;Balance&quot;</span></span><br><span class="line">  <span class="attr">type:</span> <span class="string">load-balance</span></span><br><span class="line">  <span class="attr">proxies:</span> [<span class="string">HK-01</span>, <span class="string">HK-02</span>, <span class="string">HK-03</span>]</span><br><span class="line">  <span class="attr">strategy:</span> <span class="string">consistent-hashing</span></span><br></pre></td></tr></table></figure><p>一般用户用到 load-balance 的场景不多。它更适合有大量并发连接需求的用户。</p><h3 id="策略组的嵌套"><a href="#策略组的嵌套" class="headerlink" title="策略组的嵌套"></a>策略组的嵌套</h3><p>在实际配置中，策略组是可以嵌套的。一个策略组的成员可以是另一个策略组：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">规则                    → 策略组              → 实际节点</span><br><span class="line">google.com              → &quot;Overseas&quot; (select)  → [Auto-HK, Auto-JP, Auto-US, Direct]</span><br><span class="line">netflix.com             → &quot;Streaming&quot; (select) → [US-Netflix, SG-Netflix]</span><br><span class="line">openai.com / claude.ai  → &quot;AI-Services&quot; (select) → [US-01, JP-01]</span><br><span class="line">baidu.com               → DIRECT</span><br></pre></td></tr></table></figure><p>这个结构的逻辑是：</p><ul><li>访问 Google 时，流量进入”Overseas”策略组。你可以在”Auto-HK”（自动选最快的香港节点）、”Auto-JP”（自动选最快的日本节点）等子组之间手动切换。</li><li>访问 Netflix 时，流量进入”Streaming”策略组。因为 Netflix 对 IP 有严格限制，这里放的是专门能解锁 Netflix 的节点。</li><li>访问 OpenAI 或 Claude 时，进入”AI-Services”策略组。这些 AI 服务对 IP 地区有要求，需要特定地区的节点。</li><li>访问百度等国内网站时，直连。</li></ul><p>这种分层设计让你可以对不同类型的流量使用不同的节点策略，灵活且清晰。</p><h2 id="一个典型的分流方案"><a href="#一个典型的分流方案" class="headerlink" title="一个典型的分流方案"></a>一个典型的分流方案</h2><p>把前面讲的所有内容组合起来，一个实际的分流配置看起来是这样的：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">rules:</span></span><br><span class="line">  <span class="comment"># 第一层：广告拦截（优先级最高）</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,reject-list,REJECT</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># 第二层：国内直连</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,cn-direct,DIRECT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,cn,DIRECT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">DOMAIN-SUFFIX,com.cn,DIRECT</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># 第三层：流媒体（需要特定地区节点）</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,netflix,Streaming</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,disney,Streaming</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,youtube,Overseas</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># 第四层：AI 服务（需要特定节点）</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,openai,AI-Services</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,claude,AI-Services</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># 第五层：其他常见代理需求</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,telegram,Overseas</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,twitter,Overseas</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">RULE-SET,google,Overseas</span></span><br><span class="line"></span><br><span class="line">  <span class="comment"># 第六层：兜底</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">GEOIP,CN,DIRECT</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">MATCH,Overseas</span></span><br></pre></td></tr></table></figure><p>这个方案的逻辑层次非常清晰：</p><ol><li><strong>最先处理广告</strong>。已知的广告域名和追踪器直接拒绝，不浪费任何带宽。</li><li><strong>然后处理国内流量</strong>。已知的国内域名直连，不走代理。</li><li><strong>接着处理特殊需求的境外流量</strong>。流媒体和 AI 服务需要特定地区的节点，分别指向专门的策略组。</li><li><strong>再处理其他常见的境外流量</strong>。Google、Telegram、Twitter 等常用服务走通用的”Overseas”策略组。</li><li><strong>最后兜底</strong>。通过 GEOIP 确保所有中国 IP 直连，其余所有未命中的流量走代理。</li></ol><h2 id="分流规则从哪来"><a href="#分流规则从哪来" class="headerlink" title="分流规则从哪来"></a>分流规则从哪来</h2><p>作为普通用户，你不需要也不应该自己一条条手写几千条规则。规则的来源通常有以下几种：</p><p><strong>机场订阅自带规则。</strong> 很多机场的订阅链接里已经包含了基本的分流规则。你导入订阅后，客户端会自动应用这些规则。对于大多数用户来说，这些自带的规则已经够用了。</p><p><strong>社区维护的规则集（Rule Providers）。</strong> 开源社区维护着大量高质量的规则集，覆盖各种常见网站和服务。知名的规则集项目包括：</p><ul><li><strong><a href="https://github.com/Loyalsoldier/clash-rules">Loyalsoldier clash-rules</a></strong>：基于 v2ray&#x2F;Clash 的规则集，分类清晰，更新及时。</li><li><strong><a href="https://github.com/ACL4SSR/ACL4SSR">ACL4SSR</a></strong>：老牌规则集项目，适用于 Clash 系列客户端，提供多种预配置方案。</li><li><strong>blackmatrix7</strong>：覆盖面很广的规则集合，按应用和服务分类。</li></ul><p>这些规则集通常以在线 URL 的形式提供，你只需要在客户端配置中引用它们的地址，客户端会自动下载和定期更新。</p><p><strong>自定义规则。</strong> 当你发现某个特定网站没有被现有规则覆盖时，可以自己添加规则。比如一个小众网站被墙了但不在任何规则集里，你可以手动加一条 <code>DOMAIN-SUFFIX</code> 规则来解决。</p><p><strong>客户端内置规则。</strong> 一些客户端软件自带默认的分流规则或规则模板。比如 Clash Verge Rev 提供了内置的规则配置模板，新手可以直接使用。</p><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="规则越多越好吗？"><a href="#规则越多越好吗？" class="headerlink" title="规则越多越好吗？"></a>规则越多越好吗？</h3><p>不是。规则的数量直接影响匹配速度。每一个网络请求都需要从第一条规则开始逐条检查，规则越多，检查的时间越长。虽然现代设备的性能足以应对几千条规则，但组织良好的规则集远比杂乱无章的大量规则更高效。质量比数量重要。</p><p>好的做法是使用规则集（Rule Provider）而不是把所有规则直接写在配置文件里。规则集在加载时会被优化为高效的数据结构，匹配速度远快于逐条检查。</p><h3 id="规则顺序重要吗？"><a href="#规则顺序重要吗？" class="headerlink" title="规则顺序重要吗？"></a>规则顺序重要吗？</h3><p>非常重要。分流规则是”先到先得”的——第一条匹配的规则决定了流量的去向，后面的规则不会再被检查。</p><p>举个例子：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">规则1: DOMAIN-KEYWORD,google,Proxy</span><br><span class="line">规则2: DOMAIN-SUFFIX,google.cn,Direct</span><br></pre></td></tr></table></figure><p>如果你访问 <code>google.cn</code>（谷歌中国），规则1会先匹配成功（因为域名包含”google”这个关键词），导致 <code>google.cn</code> 走了代理。但实际上 <code>google.cn</code> 是可以直连访问的国内服务，走代理反而变慢了。正确的做法是把更具体的规则放在更通用的规则前面：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">规则1: DOMAIN-SUFFIX,google.cn,Direct    ← 具体规则在前</span><br><span class="line">规则2: DOMAIN-KEYWORD,google,Proxy       ← 通用规则在后</span><br></pre></td></tr></table></figure><p>记住两个原则：<strong>具体规则在前，通用规则在后</strong>；<strong><code>MATCH</code> 永远放最后一条</strong>。</p><h3 id="怎么知道某个网站走了代理还是直连？"><a href="#怎么知道某个网站走了代理还是直连？" class="headerlink" title="怎么知道某个网站走了代理还是直连？"></a>怎么知道某个网站走了代理还是直连？</h3><p>大多数代理客户端都提供了连接日志功能，可以实时查看每一个网络请求匹配了哪条规则、最终走了代理还是直连。</p><p>以 Clash Verge Rev 为例，在”连接”（Connections）标签页中，你可以看到所有活跃的网络连接。每条连接会显示目标地址、匹配的规则、使用的策略组和具体节点。如果某个网站的路由不符合你的预期，在这里可以快速定位原因。</p><p>其他客户端也有类似功能：v2rayN 有日志面板，Surge 有请求查看器，Shadowrocket 有日志页面。</p><h3 id="我的机场订阅已经有规则了，还需要自己配吗？"><a href="#我的机场订阅已经有规则了，还需要自己配吗？" class="headerlink" title="我的机场订阅已经有规则了，还需要自己配吗？"></a>我的机场订阅已经有规则了，还需要自己配吗？</h3><p>对于大多数用户来说，机场自带的规则已经足够覆盖日常使用。它们通常已经包含了常见国内网站直连、常见国外网站代理的规则。</p><p>你需要自定义规则的场景通常是：</p><ul><li>某个特定网站路由不正确（应该直连的走了代理，或者应该代理的直连了）</li><li>你想对特定服务使用特定地区的节点（比如 Netflix 走美国节点）</li><li>你想添加广告拦截规则</li><li>你有一些小众需求，机场默认规则没有覆盖</li></ul><p>遇到这些情况时，在现有规则的基础上添加几条自定义规则就够了，不需要从头配置整套规则。</p><h3 id="不同客户端的规则语法一样吗？"><a href="#不同客户端的规则语法一样吗？" class="headerlink" title="不同客户端的规则语法一样吗？"></a>不同客户端的规则语法一样吗？</h3><p>大致相同，但有细微差异。<code>DOMAIN-SUFFIX</code>、<code>DOMAIN</code>、<code>IP-CIDR</code>、<code>GEOIP</code>、<code>MATCH</code> 这些基本规则类型在 Clash、Surge、Shadowrocket、Quantumult X 等主流客户端中都通用。差异主要在配置文件格式（YAML vs JSON vs 自有格式）和一些高级规则类型上。</p><p>如果你使用机场提供的订阅链接，客户端通常会自动转换为适合自己的格式，你不需要手动处理这些差异。</p>]]></content>
      
      
      <categories>
          
          <category> 规则与分流 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> 路由 </tag>
            
            <tag> Clash </tag>
            
            <tag> 配置 </tag>
            
            <tag> 分流 </tag>
            
            <tag> 规则 </tag>
            
        </tags>
      
    </entry>
    
    
    
    <entry>
      <title>VLESS + XHTTP + Reality + XMUX：当前技术天花板</title>
      <link href="/posts/xhttp-reality/"/>
      <url>/posts/xhttp-reality/</url>
      
        <content type="html"><![CDATA[<blockquote><p><strong>摘要</strong>: VLESS+Reality 已经是公认的优秀方案，但它仍然有一个潜在弱点——长时间保持的 TLS 隧道本身就是一种流量特征。XHTTP 将代理流量进一步伪装为标准 HTTP 请求，配合 XMUX 多路复用降低连接开销，构成当前代理技术栈的天花板组合。本文深入解析 XHTTP 的设计原理、与其他传输方式的核心区别、完整配置方案以及实际部署中的注意事项。</p></blockquote><h2 id="XHTTP-是什么"><a href="#XHTTP-是什么" class="headerlink" title="XHTTP 是什么"></a>XHTTP 是什么</h2><p>XHTTP 是 <a href="https://github.com/XTLS/Xray-core">Xray-core</a> 在 2024 年推出的一种全新传输方式（transport）。它的核心思路非常直接：<strong>将代理流量封装为普通的 HTTP 请求体（PUT&#x2F;POST body），而不是通过 WebSocket 升级或 gRPC 流来传输数据</strong>。</p><p>要理解 XHTTP 的设计动机，首先需要知道现有传输方式在 GFW 视角下暴露了什么。</p><p>在 VLESS+Reality 的经典配置中，代理流量通过一条持久的 TLS 隧道传输。虽然 Reality 让这条隧道在 TLS 层面完美伪装成访问真实网站，但隧道本身的行为模式——长时间保持连接、双向持续传输数据——与普通用户浏览网页的行为模式存在差异。GFW 的流量分析系统可以通过统计连接持续时间、数据包大小分布、传输时序等特征来标记可疑连接。</p><p>XHTTP 的解决方案是改变代理流量的传输形态。它不再使用持久隧道，而是将每一段代理数据包装成一个独立的 HTTP 请求。从网络层面看，这就是一系列标准的 HTTP PUT 或 POST 请求——与用户上传文件、提交表单、调用 API 的行为完全一致。每个请求都有明确的开始和结束，没有长连接特征。</p><p>XHTTP 支持三种工作模式，适应不同的网络环境：</p><ul><li><strong>packet-up</strong>：上行数据通过多个短 HTTP 请求发送，下行通过一个长连接流式返回。这是最基本的模式，兼容性最好。</li><li><strong>stream-up</strong>：上行数据也通过流式传输发送，双向都使用长连接。性能更好，但要求中间网络设备支持流式上传。</li><li><strong>stream-one</strong>：上下行合并在同一个 HTTP 流中双向传输。性能最优，但对网络环境要求最高，需要完整的 HTTP&#x2F;2 双向流支持。</li></ul><h2 id="为什么比-WebSocket-和-gRPC-更好"><a href="#为什么比-WebSocket-和-gRPC-更好" class="headerlink" title="为什么比 WebSocket 和 gRPC 更好"></a>为什么比 WebSocket 和 gRPC 更好</h2><p>这个问题需要从 GFW 的检测视角来回答。每种传输方式都有自己的协议层特征，而 GFW 正是通过这些特征来识别和标记代理流量的。</p><h3 id="WebSocket-的弱点"><a href="#WebSocket-的弱点" class="headerlink" title="WebSocket 的弱点"></a>WebSocket 的弱点</h3><p>WebSocket 传输需要一个从 HTTP 到 WebSocket 协议的升级过程。这个过程会在请求头中包含 <code>Upgrade: websocket</code> 和 <code>Connection: Upgrade</code> 这两个特殊字段。虽然 WebSocket 是一个合法的 Web 技术，但在实际互联网流量中，使用 WebSocket 的站点占比并不高。当 GFW 看到大量到同一个 IP 的 WebSocket 连接时，这本身就是一个值得关注的信号。</p><p>更关键的是，WebSocket 升级完成后会建立一条持久的双向通信通道，其流量模式（大量小包、双向交替传输）与代理流量的行为高度吻合。GFW 可以通过协议升级头 + 流量行为模式的组合来精准标记 WebSocket 代理。</p><h3 id="gRPC-的弱点"><a href="#gRPC-的弱点" class="headerlink" title="gRPC 的弱点"></a>gRPC 的弱点</h3><p>gRPC 基于 HTTP&#x2F;2，但它使用特定的 <code>content-type: application/grpc</code> 头部。这是一个非常明确的协议指纹——gRPC 主要用于微服务间通信和 API 调用，普通用户的浏览器几乎不会产生 gRPC 流量。当 GFW 在一个看似普通的 HTTPS 连接中检测到 gRPC 特征时，基本可以确定这不是正常的网页浏览行为。</p><p>此外，gRPC 的流式传输模式也有独特的帧结构（以 5 字节长度前缀开头的 gRPC 消息帧），这在流量分析中可以被用作额外的识别依据。</p><h3 id="XHTTP-的优势"><a href="#XHTTP-的优势" class="headerlink" title="XHTTP 的优势"></a>XHTTP 的优势</h3><p>XHTTP 发出的请求就是标准的 HTTP PUT 或 POST 请求，使用 <code>application/octet-stream</code> 等通用的 content-type。没有协议升级头，没有特定的 content-type 指纹，没有特殊的帧结构。从 GFW 的视角看，这就是用户在上传文件或调用 RESTful API——互联网上最常见、最普通的 HTTP 行为。</p><table><thead><tr><th>特征维度</th><th>WebSocket</th><th>gRPC</th><th>XHTTP</th></tr></thead><tbody><tr><td>协议升级头</td><td>有（Upgrade: websocket）</td><td>无</td><td>无</td></tr><tr><td>特殊 content-type</td><td>无</td><td>有（application&#x2F;grpc）</td><td>无</td></tr><tr><td>长连接特征</td><td>明显</td><td>明显</td><td>可选（packet-up 模式无长连接）</td></tr><tr><td>帧结构特征</td><td>WebSocket 帧</td><td>gRPC 帧</td><td>标准 HTTP body</td></tr><tr><td>在真实流量中的占比</td><td>低</td><td>极低</td><td>高</td></tr><tr><td>GFW 识别难度</td><td>中等</td><td>较易</td><td>困难</td></tr></tbody></table><h2 id="XMUX：多路复用"><a href="#XMUX：多路复用" class="headerlink" title="XMUX：多路复用"></a>XMUX：多路复用</h2><p>XHTTP 将代理流量拆分成多个独立的 HTTP 请求，这意味着每一段数据都需要建立连接、发送请求、等待响应。如果不做优化，这个过程的开销会很大——每次 HTTP 请求都需要经过 TCP 握手和 TLS 握手，延迟会显著增加。</p><p>XMUX（eXtended Multiplexing）正是为了解决这个问题而设计的。它的核心功能是<strong>在一个底层 HTTP&#x2F;2 连接中同时传输多条代理流</strong>。HTTP&#x2F;2 原生支持多路复用——多个请求和响应可以在同一条 TCP 连接上并行传输而互不干扰。XMUX 利用了这个特性，让多个 XHTTP 请求共享同一条已经建立好的连接，避免了重复的握手开销。</p><p>XMUX 提供了几个关键的配置参数来控制多路复用的行为：</p><ul><li><strong>maxConcurrency</strong>：单个底层连接上允许同时传输的最大流数。设置得太高可能导致连接拥塞，太低则无法充分利用连接复用的优势。</li><li><strong>maxConnections</strong>：允许建立的最大底层连接数。多个连接可以分担负载，避免单点瓶颈。</li><li><strong>cMaxReuseTimes</strong>：每条底层连接的最大复用次数。达到上限后关闭旧连接并建立新连接，防止长时间使用同一连接导致的特征积累。</li><li><strong>cMaxLifetimeMs</strong>：每条底层连接的最大存活时间。超时后自动轮换连接，进一步降低被识别的风险。</li></ul><p>XMUX 的连接轮换机制特别值得注意。传统代理通常会维持一条长连接传输所有数据，而 XMUX 通过定期建立新连接并关闭旧连接，使代理流量的连接模式更接近真实用户行为——真实用户也会不断地打开新页面、建立新连接。</p><h2 id="完整协议栈：四层架构"><a href="#完整协议栈：四层架构" class="headerlink" title="完整协议栈：四层架构"></a>完整协议栈：四层架构</h2><p>VLESS + XHTTP + Reality + XMUX 这个组合中，每一层解决一个特定的问题。以下是它们如何协同工作的：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">graph TB</span><br><span class="line">    subgraph 协议栈</span><br><span class="line">        A[&quot;VLESS 协议层&lt;br/&gt;身份认证 + 数据传输&quot;] --&gt; B[&quot;XHTTP 传输层&lt;br/&gt;HTTP 请求封装&quot;]</span><br><span class="line">        B --&gt; C[&quot;XMUX 多路复用层&lt;br/&gt;连接复用 + 轮换&quot;]</span><br><span class="line">        C --&gt; D[&quot;Reality / TLS 层&lt;br/&gt;加密 + 证书伪装&quot;]</span><br><span class="line">        D --&gt; E[&quot;TCP 网络层&lt;br/&gt;底层连接&quot;]</span><br><span class="line">    end</span><br><span class="line"></span><br><span class="line">    style A fill:#5b8def,color:#fff</span><br><span class="line">    style B fill:#f5a623,color:#fff</span><br><span class="line">    style C fill:#7b61ff,color:#fff</span><br><span class="line">    style D fill:#4a9,color:#fff</span><br><span class="line">    style E fill:#888,color:#fff</span><br></pre></td></tr></table></figure><p><strong>VLESS（协议层）</strong>：负责用户身份认证（通过 UUID）和代理数据的基本传输。VLESS 本身不做加密——加密由下层的 Reality 负责。这种设计避免了 VMess 时代双重加密的性能浪费。</p><p><strong>XHTTP（传输层）</strong>：将 VLESS 的代理数据封装为标准的 HTTP 请求。每一段数据变成一个 PUT 或 POST 请求的 body，从外部看就是普通的 HTTP 流量。</p><p><strong>XMUX（多路复用层）</strong>：管理底层 HTTP&#x2F;2 连接的复用。多条代理流共享一个底层连接，定期轮换连接以降低特征暴露风险。</p><p><strong>Reality（TLS 伪装层）</strong>：提供 TLS 加密，并借用真实网站的证书进行伪装。GFW 看到的是使用真实证书、真实 TLS 指纹的标准 HTTPS 连接。</p><p><strong>最终效果</strong>：从 GFW 的视角来看，这是一个使用 Chrome 浏览器通过 HTTPS 向某个知名网站发送一系列普通 HTTP 请求的行为。TLS 证书是真的，浏览器指纹是真的，HTTP 请求格式是标准的——没有任何一个环节存在可识别的代理特征。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line">sequenceDiagram</span><br><span class="line">    participant C as 客户端</span><br><span class="line">    participant S as Xray 服务器</span><br><span class="line">    participant T as 目标站(microsoft.com)</span><br><span class="line">    participant G as GFW</span><br><span class="line"></span><br><span class="line">    C-&gt;&gt;S: TLS Client Hello (SNI: microsoft.com)&lt;br/&gt;+ Reality 认证</span><br><span class="line">    Note over G: 看到: 正常访问 microsoft.com</span><br><span class="line">    S-&gt;&gt;T: 转发 Client Hello</span><br><span class="line">    T-&gt;&gt;S: 真实证书 + Server Hello</span><br><span class="line">    S-&gt;&gt;C: 转发真实证书</span><br><span class="line">    Note over G: TLS 证书验证通过 ✓</span><br><span class="line"></span><br><span class="line">    C-&gt;&gt;S: HTTP PUT /upload (XHTTP 封装的代理数据)</span><br><span class="line">    Note over G: 看到: 普通文件上传请求</span><br><span class="line">    S-&gt;&gt;C: HTTP 200 (返回数据)</span><br><span class="line"></span><br><span class="line">    C-&gt;&gt;S: HTTP POST /api (更多代理数据)</span><br><span class="line">    Note over G: 看到: 普通 API 调用</span><br><span class="line">    S-&gt;&gt;C: HTTP 200 (返回数据)</span><br><span class="line"></span><br><span class="line">    Note over C,S: XMUX: 所有请求复用同一条 H2 连接</span><br></pre></td></tr></table></figure><h2 id="服务端配置示例（Xray-core-JSON，参考-Xray-官方文档）"><a href="#服务端配置示例（Xray-core-JSON，参考-Xray-官方文档）" class="headerlink" title="服务端配置示例（Xray-core JSON，参考 Xray 官方文档）"></a>服务端配置示例（<a href="https://github.com/XTLS/Xray-core">Xray-core</a> JSON，参考 <a href="https://xtls.github.io/">Xray 官方文档</a>）</h2><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;inbounds&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;listen&quot;</span><span class="punctuation">:</span> <span class="string">&quot;0.0.0.0&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;port&quot;</span><span class="punctuation">:</span> <span class="number">443</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;protocol&quot;</span><span class="punctuation">:</span> <span class="string">&quot;vless&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;settings&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;clients&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">          <span class="punctuation">&#123;</span></span><br><span class="line">            <span class="attr">&quot;id&quot;</span><span class="punctuation">:</span> <span class="string">&quot;your-uuid-here&quot;</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;flow&quot;</span><span class="punctuation">:</span> <span class="string">&quot;&quot;</span></span><br><span class="line">          <span class="punctuation">&#125;</span></span><br><span class="line">        <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;decryption&quot;</span><span class="punctuation">:</span> <span class="string">&quot;none&quot;</span></span><br><span class="line">      <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;streamSettings&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;network&quot;</span><span class="punctuation">:</span> <span class="string">&quot;xhttp&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;xhttpSettings&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">          <span class="attr">&quot;mode&quot;</span><span class="punctuation">:</span> <span class="string">&quot;auto&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="attr">&quot;path&quot;</span><span class="punctuation">:</span> <span class="string">&quot;/your-custom-path&quot;</span></span><br><span class="line">        <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;security&quot;</span><span class="punctuation">:</span> <span class="string">&quot;reality&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;realitySettings&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">          <span class="attr">&quot;dest&quot;</span><span class="punctuation">:</span> <span class="string">&quot;www.microsoft.com:443&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="attr">&quot;serverNames&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">            <span class="string">&quot;www.microsoft.com&quot;</span></span><br><span class="line">          <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">          <span class="attr">&quot;privateKey&quot;</span><span class="punctuation">:</span> <span class="string">&quot;your-private-key-here&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="attr">&quot;shortIds&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">            <span class="string">&quot;6ba85179e30d4fc2&quot;</span></span><br><span class="line">          <span class="punctuation">]</span></span><br><span class="line">        <span class="punctuation">&#125;</span></span><br><span class="line">      <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;outbounds&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">    <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;protocol&quot;</span><span class="punctuation">:</span> <span class="string">&quot;freedom&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;direct&quot;</span></span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">]</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><p><strong>配置要点说明</strong>：</p><ul><li><code>network</code> 设为 <code>xhttp</code>，启用 XHTTP 传输。</li><li><code>mode</code> 设为 <code>auto</code>，让 Xray 根据网络环境自动选择最优的 XHTTP 工作模式（packet-up &#x2F; stream-up &#x2F; stream-one）。也可以手动指定。</li><li><code>path</code> 是 HTTP 请求的路径前缀，客户端和服务端必须一致。建议使用不容易被猜到的随机路径。</li><li><code>flow</code> 留空——XHTTP 传输不支持 xtls-rprx-vision（vision 仅支持 TCP 传输）。这是从 VLESS+Reality（TCP）迁移到 VLESS+XHTTP+Reality 时最容易犯的配置错误。</li><li>Reality 相关参数（<code>dest</code>、<code>privateKey</code>、<code>shortIds</code>）的配置原则与 VLESS+Reality 完全一致。</li></ul><h2 id="客户端配置示例（Clash-mihomo-YAML）"><a href="#客户端配置示例（Clash-mihomo-YAML）" class="headerlink" title="客户端配置示例（Clash&#x2F;mihomo YAML）"></a>客户端配置示例（Clash&#x2F;mihomo YAML）</h2><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">proxies:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">&quot;vless-xhttp-reality&quot;</span></span><br><span class="line">    <span class="attr">type:</span> <span class="string">vless</span></span><br><span class="line">    <span class="attr">server:</span> <span class="string">your-server-ip</span></span><br><span class="line">    <span class="attr">port:</span> <span class="number">443</span></span><br><span class="line">    <span class="attr">uuid:</span> <span class="string">your-uuid-here</span></span><br><span class="line">    <span class="attr">network:</span> <span class="string">xhttp</span></span><br><span class="line">    <span class="attr">udp:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">tls:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">servername:</span> <span class="string">www.microsoft.com</span></span><br><span class="line">    <span class="attr">xhttp-opts:</span></span><br><span class="line">      <span class="attr">mode:</span> <span class="string">auto</span></span><br><span class="line">      <span class="attr">path:</span> <span class="string">/your-custom-path</span></span><br><span class="line">    <span class="attr">reality-opts:</span></span><br><span class="line">      <span class="attr">public-key:</span> <span class="string">your-public-key-here</span></span><br><span class="line">      <span class="attr">short-id:</span> <span class="string">6ba85179e30d4fc2</span></span><br><span class="line">    <span class="attr">client-fingerprint:</span> <span class="string">chrome</span></span><br></pre></td></tr></table></figure><p><strong>注意事项</strong>：</p><ul><li>客户端不要配置 <code>flow: xtls-rprx-vision</code>，XHTTP 传输下该选项不可用。</li><li><code>path</code> 必须与服务端保持完全一致。</li><li><code>client-fingerprint</code> 推荐 <code>chrome</code>，与 Reality 的最佳实践一致。</li><li>并非所有 Clash 分支都支持 XHTTP 传输，确认你使用的客户端版本支持此配置。</li></ul><h2 id="与其他传输方式的对比"><a href="#与其他传输方式的对比" class="headerlink" title="与其他传输方式的对比"></a>与其他传输方式的对比</h2><table><thead><tr><th>对比维度</th><th>TCP（裸）</th><th>WebSocket</th><th>gRPC</th><th>H2 (HTTP&#x2F;2)</th><th>XHTTP</th></tr></thead><tbody><tr><td>协议特征</td><td>无伪装</td><td>升级头暴露</td><td>content-type 暴露</td><td>较少特征</td><td>无特殊特征</td></tr><tr><td>多路复用</td><td>不支持</td><td>不支持</td><td>支持</td><td>支持</td><td>支持（XMUX）</td></tr><tr><td>CDN 兼容性</td><td>不兼容</td><td>兼容</td><td>部分兼容</td><td>部分兼容</td><td>兼容</td></tr><tr><td>抗流量分析</td><td>弱</td><td>中等</td><td>中等</td><td>较强</td><td>强</td></tr><tr><td>连接轮换</td><td>不支持</td><td>不支持</td><td>不支持</td><td>不支持</td><td>支持（XMUX）</td></tr><tr><td>性能开销</td><td>最低</td><td>低</td><td>低</td><td>低</td><td>中等</td></tr><tr><td>配置复杂度</td><td>简单</td><td>简单</td><td>中等</td><td>中等</td><td>较复杂</td></tr><tr><td>flow(vision) 支持</td><td>支持</td><td>不支持</td><td>不支持</td><td>不支持</td><td>不支持</td></tr><tr><td>推荐搭配</td><td>Reality</td><td>CDN 中转</td><td>CDN 中转</td><td>Reality</td><td>Reality</td></tr></tbody></table><p><strong>选择建议</strong>：</p><ul><li><strong>最高隐蔽性</strong>需求：XHTTP + Reality + XMUX</li><li><strong>平衡性能与安全</strong>：TCP + Reality + vision（经典方案，仍然非常可靠）</li><li><strong>需要 CDN 中转</strong>：WebSocket（兼容性最好）或 XHTTP（隐蔽性更好）</li><li><strong>简单部署</strong>：TCP + Reality</li></ul><h2 id="性能考量"><a href="#性能考量" class="headerlink" title="性能考量"></a>性能考量</h2><p>XHTTP 的 HTTP 封装不可避免地引入了额外开销，但在实际使用中，这些开销是否值得关注取决于你的使用场景。</p><p><strong>额外开销来源</strong>：</p><ol><li>HTTP 请求头和响应头的字节开销。每个 XHTTP 请求都需要附带标准的 HTTP 头部信息，这些数据不携带任何代理流量但占用带宽。</li><li>请求-响应模型的延迟开销。在 packet-up 模式下，每段数据都需要等待服务端的 HTTP 响应，增加了一个 RTT 的延迟。</li><li>XMUX 的连接管理开销。连接轮换、流调度等逻辑需要消耗额外的 CPU 和内存。</li></ol><p><strong>实际影响评估</strong>：</p><ul><li>对于日常网页浏览、视频流媒体等场景，XHTTP 的额外开销几乎不可感知。现代网页本身就包含大量 HTTP 请求，额外几个字节的头部开销可以忽略不计。</li><li>对于大文件下载或高带宽传输场景，stream-up 或 stream-one 模式可以显著降低开销，性能接近传统 TCP 传输。</li><li>对于延迟敏感型应用（如在线游戏），packet-up 模式的额外 RTT 可能有一定影响。建议对延迟极度敏感的场景仍使用 TCP + Reality + vision。</li></ul><p>总的来说，XHTTP 用可接受的性能代价换取了显著更高的隐蔽性。在当前 GFW 检测能力持续提升的背景下，这个权衡对大多数用户来说是值得的。</p><h2 id="客户端支持情况"><a href="#客户端支持情况" class="headerlink" title="客户端支持情况"></a>客户端支持情况</h2><p>XHTTP 作为 Xray-core 推出的传输方式，客户端支持仍在逐步扩展中。</p><p><strong>完整支持</strong>：</p><ul><li><a href="https://github.com/XTLS/Xray-core">Xray-core</a> 原生支持，这是 XHTTP 的参考实现</li><li>基于 Xray-core 的 GUI 客户端（如 v2rayN、v2rayA 等）通常可以通过自定义配置使用</li></ul><p><strong>部分支持</strong>：</p><ul><li>部分 sing-box 版本已经实现了 XHTTP 的基本支持，但 XMUX 的实现进度可能落后于 Xray-core</li><li>mihomo（Clash.Meta）对 XHTTP 的支持取决于具体版本，建议关注项目更新日志</li></ul><p><strong>暂不支持</strong>：</p><ul><li>原版 Clash（已停止维护）</li><li>部分较旧的移动端客户端</li></ul><p>使用 XHTTP 之前，务必确认你的客户端和内核版本是否支持。建议直接使用最新版 Xray-core 以获得最完整的功能支持。</p><h2 id="部署注意事项"><a href="#部署注意事项" class="headerlink" title="部署注意事项"></a>部署注意事项</h2><ol><li><strong>flow 必须留空</strong>：这是最常见的配置错误。XHTTP 传输不兼容 <code>xtls-rprx-vision</code>，如果你从 TCP + Reality 迁移过来，一定要删除 flow 配置。</li><li><strong>path 保持一致</strong>：服务端和客户端的 <code>path</code> 必须完全一致，包括大小写和前缀斜杠。</li><li><strong>端口使用 443</strong>：与标准 HTTPS 保持一致，避免使用非常规端口引起注意。</li><li><strong>XMUX 参数调优</strong>：初始配置使用默认值即可，后续根据实际使用情况调整 <code>maxConcurrency</code> 和 <code>cMaxLifetimeMs</code>。不建议将 <code>maxConcurrency</code> 设得过高。</li><li><strong>mode 选择</strong>：建议使用 <code>auto</code> 让 Xray 自动选择。如果你确定网络环境支持，可以手动指定 <code>stream-one</code> 以获得最佳性能。</li><li><strong>监控连接质量</strong>：XHTTP 的 HTTP 封装对网络质量有一定要求，如果发现频繁断连，尝试切换到 <code>packet-up</code> 模式或降低 XMUX 的并发参数。</li></ol><h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="Q-XHTTP-需要额外的-Web-服务器（如-Nginx）吗？"><a href="#Q-XHTTP-需要额外的-Web-服务器（如-Nginx）吗？" class="headerlink" title="Q: XHTTP 需要额外的 Web 服务器（如 Nginx）吗？"></a>Q: XHTTP 需要额外的 Web 服务器（如 Nginx）吗？</h3><p>不需要。Xray-core 内置了对 XHTTP 的完整处理能力，不需要前置 Nginx 或 Caddy。Reality 本身就充当了 TLS 终端，Xray 直接处理解密后的 HTTP 请求。</p><h3 id="Q-XHTTP-和-H2（HTTP-2）传输有什么区别？"><a href="#Q-XHTTP-和-H2（HTTP-2）传输有什么区别？" class="headerlink" title="Q: XHTTP 和 H2（HTTP&#x2F;2）传输有什么区别？"></a>Q: XHTTP 和 H2（HTTP&#x2F;2）传输有什么区别？</h3><p>H2 传输是利用 HTTP&#x2F;2 的流机制来传输代理数据，但它仍然是一条持久连接。XHTTP 则是将数据封装为独立的 HTTP 请求，可以利用 packet-up 模式实现短连接特征。此外 XHTTP 支持 XMUX 连接轮换，H2 不具备这个能力。</p><h3 id="Q-从-VLESS-Reality-迁移到-VLESS-XHTTP-Reality-复杂吗？"><a href="#Q-从-VLESS-Reality-迁移到-VLESS-XHTTP-Reality-复杂吗？" class="headerlink" title="Q: 从 VLESS+Reality 迁移到 VLESS+XHTTP+Reality 复杂吗？"></a>Q: 从 VLESS+Reality 迁移到 VLESS+XHTTP+Reality 复杂吗？</h3><p>迁移本身不复杂，主要修改三个地方：将 <code>network</code> 从 <code>tcp</code> 改为 <code>xhttp</code>，添加 <code>xhttpSettings</code> 配置，删除 <code>flow</code> 配置。但需要注意的是，客户端也需要同步更新配置并确认支持 XHTTP。</p><h3 id="Q-是否所有用户都应该升级到-XHTTP？"><a href="#Q-是否所有用户都应该升级到-XHTTP？" class="headerlink" title="Q: 是否所有用户都应该升级到 XHTTP？"></a>Q: 是否所有用户都应该升级到 XHTTP？</h3><p>不一定。如果你当前使用 VLESS+Reality+vision 方案运行稳定且未受到干扰，不必急于迁移。XHTTP 更适合以下场景：所在地区对长连接有针对性检测、需要通过 CDN 中转流量、追求极致的流量伪装效果。对于大多数用户，经典的 TCP+Reality+vision 方案在 2026 年仍然是足够可靠的选择。</p><h3 id="Q-XHTTP-能配合-CDN-使用吗？"><a href="#Q-XHTTP-能配合-CDN-使用吗？" class="headerlink" title="Q: XHTTP 能配合 CDN 使用吗？"></a>Q: XHTTP 能配合 CDN 使用吗？</h3><p>可以。XHTTP 封装的就是标准 HTTP 请求，理论上可以通过支持 HTTP&#x2F;2 的 CDN 进行中转。但使用 CDN 时无法使用 Reality（CDN 需要自己的 TLS 证书），安全性会有所降低。CDN 中转主要用于 IP 被封后的应急方案，不建议作为日常方案。</p><h3 id="Q-XMUX-的连接轮换会不会影响稳定性？"><a href="#Q-XMUX-的连接轮换会不会影响稳定性？" class="headerlink" title="Q: XMUX 的连接轮换会不会影响稳定性？"></a>Q: XMUX 的连接轮换会不会影响稳定性？</h3><p>正常情况下不会。XMUX 在轮换连接时会确保当前正在传输的数据流不受影响，新的数据流会被分配到新建的连接上。如果发现轮换过程中出现短暂断连，可以适当增大 <code>cMaxLifetimeMs</code> 参数来降低轮换频率。</p><h2 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h2><ul><li><a href="https://github.com/XTLS/Xray-core">Xray-core GitHub 仓库</a> - XHTTP 和 XMUX 的参考实现</li><li><a href="https://xtls.github.io/">Xray 官方文档</a> - 完整的配置文档和参数说明</li><li><a href="https://github.com/XTLS/REALITY">REALITY 项目</a> - Reality 协议的设计文档和技术细节</li></ul>]]></content>
      
      
      <categories>
          
          <category> 协议与原理 </category>
          
      </categories>
      
      
        <tags>
            
            <tag> Xray </tag>
            
            <tag> VLESS </tag>
            
            <tag> Reality </tag>
            
            <tag> XHTTP </tag>
            
            <tag> XMUX </tag>
            
        </tags>
      
    </entry>
    
    
  
  
</search>
