<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Hanssen&#39;s Whisper</title>
  
  
  <link href="https://blog.hanssen0.com/atom.xml" rel="self"/>
  
  <link href="https://blog.hanssen0.com/"/>
  <updated>2026-01-21T00:46:09.517Z</updated>
  <id>https://blog.hanssen0.com/</id>
  
  <author>
    <name>Hanssen</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>你可听见 CCC 呼唤？：来吧，我们要建造一座塔</title>
    <link href="https://blog.hanssen0.com/articles/Do_You_Hear_The_CCC_zh-Hans/"/>
    <id>https://blog.hanssen0.com/articles/Do_You_Hear_The_CCC_zh-Hans/</id>
    <published>2026-01-21T04:00:00.000Z</published>
    <updated>2026-01-21T00:46:09.517Z</updated>
    
    <content type="html"><![CDATA[<p><img src="CKB_DevRel.png" alt="CKB DevRel" loading="lazy"></p><p>月亮好，太阳好，我是 <a href="https://github.com/ckb-devrel/ccc" target="_blank" rel="noopener">CCC</a> 的开发者 Hanssen。</p><p>2024 年，Nervos 的工具链像腐朽的毛坯房，危害每个开发者的身心健康，鞭笞出了 CCC。CCC，我称之为 <strong>C</strong>CC is <strong>C</strong>KBer’s <strong>C</strong>odebase <sub>（告诉我自指梗还没过时不然我会哭）</sub>，根植于最常用的浏览器生态。它旨在提供一站式的解决方案，让开发者可以在搭建好的脚手架上修建自己的应用，从一遍又一遍从底层概念开始构建应用的阿鼻地狱中解脱出来。</p><p>简单来讲，CCC 让开发者脑中的想法更快更可能变成现实；详细来讲，从前端点下连接钱包开始，经过用户选择钱包、处理各种协议、组装 CKB 交易<sub>（这超麻烦）</sub>、请求用户签名，最终将交易发到链上的整个流程，CCC 都提供了完整又不失灵活，自由又不失简洁的协助。</p><hr><p>我希望你读到这里能对 CCC 开始感兴趣，因为我接下来要突然开始贴更新日志，你得靠着兴趣撑过这些没人乐意读的东西。</p><h2 id="CCC-2-0-0：来吧，我们要建造一座塔"><a href="#CCC-2-0-0：来吧，我们要建造一座塔" class="headerlink" title="CCC 2.0.0：来吧，我们要建造一座塔"></a>CCC 2.0.0：来吧，我们要建造一座塔</h2><p><img src="CCC_Logo.png" alt="CCC Logo" loading="lazy"></p><p><a href="https://github.com/ckb-devrel/ccc/commit/283d1b2b2fe7eedb1f74fb3fc99330446e39c9cf" target="_blank" rel="noopener">1.0.0</a> 版本的发布是个无聊的时刻，那时我们甚至没想过给它起个名字，像监狱或中国学校称呼囚犯一样用序号代指它。一年过去，我们终于迎来了 2.0.0 – 还没有发布。三个月前我就发布了 <a href="https://github.com/ckb-devrel/ccc/pull/309" target="_blank" rel="noopener"><code>v1-final</code></a> 分支，但总是有差一点点就能做完的东西，等着赶上这时候，逼得我不得不诉诸「弄假直到成真」。先把更新日志写出来，我总不能拖到明年再发布吧，对吧？</p><p>更新主要版本号是一种耻辱，标记着写代码的家伙一开始没把东西想好，不得不昭告天下「我改主意啦！你们都更新一下」。虽然如此，我还是希望隐含的「某些东西变得比以前好」的意象能把我们带到一个新的开始。</p><p>2.0.0，CCC 看起来像是正经项目了。这篇日志会介绍 1.0.0 到 2.0.0 之间我觉得有趣的东西，可能已经上线一年了，也可能还在开发中。我们为常见的用法都提供了支持，也根据社区的反馈进行了迭代。CCC 不再只是个新奇的试验品，还逐渐成为了可靠的地基，或许我们已经到了要建造一座通天塔的时候。</p><h3 id="Nostr"><a href="#Nostr" class="headerlink" title="Nostr"></a>Nostr</h3><p><img src="Nostr.png" alt="Nostr" loading="lazy"></p><p>Nostr 不是 CCC 支持的第一个签名方式，也不会是 CCC 支持的最后一个签名方式。但我想特别表达对它的喜爱，因为我们可以感恩戴德地<del>白嫖</del>使用 Nostr 社区的公共中继服务器存储并分享数据。</p><p>基于这个特性（<strong>特性</strong>），我在 <a href="https://live.ckbccc.com/" target="_blank" rel="noopener">CCC Playground</a>，一个浏览器里的代码运行环境中，添加了「分享」按钮。在你点下它之后，网页自动生成了一个私钥，为你的代码签名并发送到了 Nostr 上，允许你通过链接将它分享给我们的好朋友们。</p><ul><li><a href="https://github.com/ckb-devrel/ccc/tree/master/packages/core/src/signer/nostr" target="_blank" rel="noopener">对 Nostr 签名的核心支持</a></li><li><a href="https://github.com/ckb-devrel/ccc/tree/master/packages/core/src/signer/nostr" target="_blank" rel="noopener">对 NIP 07 的支持，允许连接 Nostr 签名器&#x2F;钱包</a></li></ul><h3 id="CCC-Playground-超进化"><a href="#CCC-Playground-超进化" class="headerlink" title="CCC Playground 超进化"></a>CCC Playground 超进化</h3><p><img src="Playground.png" alt="CCC Playground" loading="lazy"></p><p>在今年 Playground 的更新里，我最喜欢的是为 CKB 「细胞」的概念重新做的图形化设计。我用八卦的形式展示出了「细胞」，用卦象的组合（它是二进制！）代表细胞上不同的「锁」和「类型」脚本。我还为它加了点动画，虽然不务正业，但也许能让人们觉得自己在做很酷的事情。如果你感兴趣，可以试试看<a href="https://live.ckbccc.com/?src=https://raw.githubusercontent.com/ckb-devrel/ccc/refs/heads/master/packages/examples/src/transfer.ts" target="_blank" rel="noopener">这个例子</a>。</p><p>之所以我们能做到在终端里展示图像，是因为 Playground 的另外一个新功能：直接使用 React 的 TSX 语法写代码。这意味着开发者可以展示任意的前端元素，甚至编写一个带用户界面的简单工具分享给其它人使用，而不需要担心框架、依赖或部署等麻烦的问题。</p><ul><li><a href="https://github.com/ckb-devrel/ccc/pull/181" target="_blank" rel="noopener">Playground 添加了 TSX 支持</a></li><li><a href="https://github.com/ckb-devrel/ccc/pull/323" target="_blank" rel="noopener">八卦 UI 更新</a></li></ul><h3 id="更好的-Nervos-DAO-适配"><a href="#更好的-Nervos-DAO-适配" class="headerlink" title="更好的 Nervos DAO 适配"></a>更好的 Nervos DAO 适配</h3><p><img src="Nervos_DAO.png" alt="Nervos DAO" loading="lazy"></p><p>终于，开发者们有了个工具来操作 Nervos DAO，通过锁定 CKB 原生代币的数据存储能力，从而抵抗通货膨胀，这个 Nervos 生态设计最根本的一部分（尽管 Nervos 官网上现在也还没有它的介绍，谁愿意为它写篇文章？）。</p><p>感谢 <a href="https://github.com/phroi" target="_blank" rel="noopener">@phroi</a> 为这一系列改进提供了许多宝贵的反馈，他开发的 iCKB，允许 Nervos DAO 代币化并流通的协议，提供了不少真实的使用场景。</p><ul><li><a href="https://github.com/ckb-devrel/ccc/blob/master/packages/demo/src/app/connected/(tools)/NervosDao/page.tsx" target="_blank" rel="noopener">操作 Nervos DAO 的代码例子</a></li><li><a href="https://github.com/ckb-devrel/ccc/pull/171" target="_blank" rel="noopener">自动计算交易中的 Nervos DAO 收益</a></li><li><a href="https://github.com/ckb-devrel/ccc/pull/314" target="_blank" rel="noopener">操作 <code>Epoch</code> 的工具类</a></li></ul><h3 id="UDT"><a href="#UDT" class="headerlink" title="UDT"></a>UDT</h3><p><img src="UDT.png" alt="+15 UDT" loading="lazy"></p><p>用户定义代币（UDT）系列协议，从最早出现并沿用至今的 sUDT 核心，到基本没人用过的 xUDT 扩展，支撑着所有在 CKB 上发行的二级货币。它的核心思路是用细胞中的数据来代表面额，并不复杂，但想将这套逻辑融入到应用里却颇具挑战。</p><p>CCC 为操作 UDT 提供了类似操作原生 CKB 代币的接口，避免额外的学习成本。这一系列的改进建议同样来自 <a href="https://github.com/phroi" target="_blank" rel="noopener">@phroi</a>，源自他在为 iCKB 编写 UDT 相关代码总结的方案。另外也感谢来自 <a href="https://github.com/rink1969" target="_blank" rel="noopener">@rink1969</a> 的建议，优化了 UDT 找零时的 CKB 占用。</p><ul><li><a href="https://github.com/ckb-devrel/ccc/issues/227" target="_blank" rel="noopener">将 iCKB 的 UDT 特性合并进 CCC</a></li><li><a href="https://github.com/ckb-devrel/ccc/issues/214" target="_blank" rel="noopener">向自己付款以避免额外的 CKB 占用</a></li></ul><h3 id="类-Type-ID-协议"><a href="#类-Type-ID-协议" class="headerlink" title="类 Type ID 协议"></a>类 Type ID 协议</h3><p><img src="Type_ID.png" alt="CCC logos with different color" loading="lazy"></p><p>Type ID 借助了 CKB 细胞只能被消费一次的特性，被用于赋予细胞链上独一无二的编号，以追踪细胞单例的更新和销毁。它从一开始被设计用于追踪可升级合约的最新状态，逐渐地被更广泛应用到了其它的协议中。</p><p>CCC 新的 Type ID 包除了提供对最简单的任意数据 Type ID 支持外，还提供了高级方法方便扩展对类 Type ID 的协议支持，随着 Type ID 包添加的 <a href="https://github.com/web5fans/did-ckb" target="_blank" rel="noopener">DID CKB</a> 支持就是个很好的例子。</p><ul><li><a href="https://github.com/ckb-devrel/ccc/pull/337" target="_blank" rel="noopener">添加了 <code>did-ckb</code> 包</a></li></ul><h3 id="多签锁"><a href="#多签锁" class="headerlink" title="多签锁"></a>多签锁</h3><p><img src="Multisig.png" alt="Seele from EVA" loading="lazy"></p><p>又是一个对 CKB 早期功能的支持。虽然多签锁只支持 Secp256k1 算法，但它依然被频繁用于合约或资金管理等场景。在之前，开发者大部分时间都是使用 <a href="https://github.com/nervosnetwork/ckb-cli" target="_blank" rel="noopener"><code>ckb-cli</code></a> 命令行工具来处理多签交易，我希望在 CCC 添加了支持之后事情能变好些。</p><p>CCC 的支持囊括了按顺序签名和合并多笔签名后的交易两种模式。</p><ul><li><a href="https://github.com/ckb-devrel/ccc/pull/349" target="_blank" rel="noopener">多签 <code>Signer</code></a></li></ul><h3 id="FeePayer-抽象层"><a href="#FeePayer-抽象层" class="headerlink" title="FeePayer 抽象层"></a><code>FeePayer</code> 抽象层</h3><p>感谢 UTXO 模型的特性，一笔交易中的所有参与方都可以支付手续费，这使得计算手续费异常地困难。过去的 SDK 对此会假设有一个特定的原生地址会添加更多的代币负责支付手续费，但这并不能满足类似 Spore 协议的零手续费或 <a href="https://talk.nervos.org/t/udt-payment-solutions/8956" target="_blank" rel="noopener">UDT 闪兑</a>（有多少人知道这个有趣的东西？）想要引入的功能。</p><p><code>FeePayer</code> 希望能将手续费支付抽象成一个单独的步骤，为更多的手续费支付方式提供统一的接口。在开发者们用上这些有趣的特性后，用户可以不再需要持有额外 CKB 才能发起交易，而是通过资产中预存的费用，或就地小额兑换来支付手续费。</p><ul><li><a href="https://github.com/ckb-devrel/ccc/issues/274" target="_blank" rel="noopener">引入 <code>FeePayer</code> 概念以让手续费处理变得灵活</a></li></ul><h2 id="还有更多？"><a href="#还有更多？" class="headerlink" title="还有更多？"></a>还有更多？</h2><p>老实讲，我不知道 CCC 未来会变成什么样子。我们有一些正在推进的事情，比如<a href="https://github.com/ckb-devrel/ccc/pull/332" target="_blank" rel="noopener">对 RGB++ 的支持</a>，对 Fiber Network 的支持或将<a href="https://talk.nervos.org/t/en-cn-script-sourced-rich-information-script/8256" target="_blank" rel="noopener">来源于 Script 的富信息（SSRI）</a> 落地，但它们不会是 CCC 的全部。我希望 CCC 在不同的场景下都能帮助开发者解决不同的问题，而这需要弄明白开发者需要什么，需要来自社区的更多反馈。</p><p>欢迎有兴趣的人到 <a href="https://github.com/ckb-devrel/ccc/issues" target="_blank" rel="noopener">CCC Issues</a> 留下你的想法，也可以看看有哪些问题是你愿意解决的。如果你喜欢 <a href="https://github.com/ckb-devrel/ccc" target="_blank" rel="noopener">CCC</a>，可以点 Star 来鼓励我们。</p>]]></content>
    
    
    <summary type="html">2.0.0，CCC 看起来像是正经项目了。这篇日志会介绍 1.0.0 到 2.0.0 之间我觉得有趣的东西，可能已经上线一年了，也可能还在开发中。我们为常见的用法都提供了支持，也根据社区的反馈进行了迭代。CCC 不再只是个新奇的试验品，还逐渐成为了可靠的地基，或许我们已经到了要建造一座通天塔的时候。</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>Do You Hear the CCC?: Come, Let Us Build a Tower</title>
    <link href="https://blog.hanssen0.com/articles/Do_You_Hear_The_CCC_en/"/>
    <id>https://blog.hanssen0.com/articles/Do_You_Hear_The_CCC_en/</id>
    <published>2026-01-21T04:00:00.000Z</published>
    <updated>2026-01-21T00:46:09.517Z</updated>
    
    <content type="html"><![CDATA[<p><img src="../Do_You_Hear_The_CCC_zh-Hans/CKB_DevRel.png" alt="CKB DevRel" loading="lazy"></p><p>Good moon, good sun. I am Hanssen, the developer of <a href="https://github.com/ckb-devrel/ccc" target="_blank" rel="noopener">CCC</a>.</p><p>In 2024, toolchains in Nervos were like a rotting, unfinished house, hazardous to the physical and mental health of every developer, which eventually whipped CCC into existence. CCC, which I call <strong>C</strong>CC is <strong>C</strong>KBer’s <strong>C</strong>odebase <sub>(tell me self-referential jokes aren’t outdated yet, or I’ll cry)</sub>, is rooted in the most commonly used browser ecosystem. It aims to provide a one-stop solution, allowing developers to build their applications on established scaffolding, freeing them from the Avici of building applications from bottom-level concepts over and over again.</p><p>Simply put, CCC makes the ideas in a developer’s head become reality faster and with higher probability; in detail, from the moment of clicking the frontend to connect a wallet, through the user selecting a wallet, handling various protocols, assembling CKB transactions <sub>(this is super troublesome)</sub>, requesting user signatures, and finally sending the transaction to the chain. CCC provides complete yet flexible, free yet concise assistance throughout the entire process.</p><hr><p>I hope reading this sparks your interest in CCC, because I’m about to suddenly start pasting the changelog. You’ll need that interest to survive these things no one likes to read.</p><h2 id="CCC-2-0-0-Come-Let-Us-Build-a-Tower"><a href="#CCC-2-0-0-Come-Let-Us-Build-a-Tower" class="headerlink" title="CCC 2.0.0: Come, Let Us Build a Tower"></a>CCC 2.0.0: Come, Let Us Build a Tower</h2><p><img src="../Do_You_Hear_The_CCC_zh-Hans/CCC_Logo.png" alt="CCC Logo" loading="lazy"></p><p>The release of <a href="https://github.com/ckb-devrel/ccc/commit/283d1b2b2fe7eedb1f74fb3fc99330446e39c9cf" target="_blank" rel="noopener">1.0.0</a> was a boring moment. Back then, we didn’t even think to name it, referring to it by a serial number like prisons or Chinese schools refer to inmates. A year has passed, and we finally welcome 2.0.0 – which hasn’t been released yet. Three months ago, I published the <a href="https://github.com/ckb-devrel/ccc/pull/309" target="_blank" rel="noopener"><code>v1-final</code></a> branch, but there was always something that was just about to be finished waiting to make the cut for this moment, forcing me to resort to “fake it till you make it.” I’ll write the changelog first. I can’t drag this out until next year to release it, right?</p><p>Updating a major version number is a badge of shame, marking that the guy writing the code didn’t think things through at the start and has to proclaim to the world, “I changed my mind! Everyone update”. Despite this, I still hope the implied imagery of “something became better than before” can take us to a new beginning.</p><p>With 2.0.0, CCC looks like a serious project. This log will introduce the things I found interesting between 1.0.0 and 2.0.0: some may have been live for a year, others might still be in development. We have provided support for common usage scenarios and iterated based on community feedback. CCC is no longer just a novel experiment; it has gradually become a reliable foundation. Perhaps we have reached the time to build a Tower of Babel.</p><h3 id="Nostr"><a href="#Nostr" class="headerlink" title="Nostr"></a>Nostr</h3><p><img src="../Do_You_Hear_The_CCC_zh-Hans/Nostr.png" alt="Nostr" loading="lazy"></p><p>Nostr is not the first signing method CCC supported, nor will it be the last. But I want to express my special fondness for it because we can gratefully <del>freeload</del> use the Nostr community’s public relay servers to store and share data.</p><p>Based on this feature (<strong>feature</strong>), I added a “Share” button to the <a href="https://live.ckbccc.com/" target="_blank" rel="noopener">CCC Playground</a>, a code execution environment within the browser. After you click it, the webpage automatically generates a private key, signs your code, and sends it to Nostr, allowing you to share it with our good friends via a link.</p><ul><li><a href="https://github.com/ckb-devrel/ccc/tree/master/packages/core/src/signer/nostr" target="_blank" rel="noopener">The core support for Nostr signing</a></li><li><a href="https://github.com/ckb-devrel/ccc/tree/master/packages/core/src/signer/nostr" target="_blank" rel="noopener">Support for NIP 07, allows us to connect Nostr signers&#x2F;wallets</a></li></ul><h3 id="CCC-Playground-Super-Evolution"><a href="#CCC-Playground-Super-Evolution" class="headerlink" title="CCC Playground Super Evolution"></a>CCC Playground Super Evolution</h3><p><img src="../Do_You_Hear_The_CCC_zh-Hans/Playground.png" alt="CCC Playground" loading="lazy"></p><p>In this year’s Playground update, my favorite part is the graphical redesign for the concept of the CKB “Cell”. I used the form of Bagua to display cells, using combinations of trigrams (it’s binary!) to represent the different “Lock” and “Type” scripts on the cell. I also added some animation to it; although it’s frivolous, maybe it makes people feel like they are doing something cool. If you are interested, you can try <a href="https://live.ckbccc.com/?src=https://raw.githubusercontent.com/ckb-devrel/ccc/refs/heads/master/packages/examples/src/transfer.ts" target="_blank" rel="noopener">this example</a>.</p><p>The reason we can display images in the terminal is due to another new feature of the Playground: writing code directly using React’s TSX syntax. This means developers can display arbitrary frontend elements, or even write a simple tool with a user interface to share with others, without worrying about troublesome issues like frameworks, dependencies, or deployment.</p><ul><li><a href="https://github.com/ckb-devrel/ccc/pull/181" target="_blank" rel="noopener">Added TSX support for the Playground</a></li><li><a href="https://github.com/ckb-devrel/ccc/pull/323" target="_blank" rel="noopener">Bagua UI update</a></li></ul><h3 id="Better-Nervos-DAO-Adaptation"><a href="#Better-Nervos-DAO-Adaptation" class="headerlink" title="Better Nervos DAO Adaptation"></a>Better Nervos DAO Adaptation</h3><p><img src="../Do_You_Hear_The_CCC_zh-Hans/Nervos_DAO.png" alt="Nervos DAO" loading="lazy"></p><p>Finally, developers have a tool to operate the Nervos DAO. By locking the data storage capacity of CKB native tokens, one can resist inflation, a fundamental part of the Nervos ecosystem design (although the Nervos official website still doesn’t introduce it. Who wants to write an article for it?).</p><p>Thanks to <a href="https://github.com/phroi" target="_blank" rel="noopener">@phroi</a> for providing a lot of valuable feedback for this series of improvements. The iCKB he developed, a protocol that allows Nervos DAO to be tokenized and circulated, provided many real-world usage scenarios.</p><ul><li><a href="https://github.com/ckb-devrel/ccc/blob/master/packages/demo/src/app/connected/(tools)/NervosDao/page.tsx" target="_blank" rel="noopener">Code examples for operating Nervos DAO</a></li><li><a href="https://github.com/ckb-devrel/ccc/pull/171" target="_blank" rel="noopener">Automatically calculate the Nervos DAO profit in transactions</a></li><li><a href="https://github.com/ckb-devrel/ccc/pull/314" target="_blank" rel="noopener">Utilities for <code>Epoch</code></a></li></ul><h3 id="UDT"><a href="#UDT" class="headerlink" title="UDT"></a>UDT</h3><p><img src="../Do_You_Hear_The_CCC_zh-Hans/UDT.png" alt="+15 UDT" loading="lazy"></p><p>The User Defined Token (UDT) series of protocols, from the sUDT core that appeared earliest and is still in use today, to the xUDT extension that almost no one has used, supports all secondary currencies issued on CKB. Its core idea is to use data in cells to represent denomination. It isn’t complex, but integrating this logic into applications is quite challenging.</p><p>CCC provides an interface for operating UDTs similar to operating native CKB tokens, avoiding extra learning costs. This series of improvement suggestions also came from <a href="https://github.com/phroi" target="_blank" rel="noopener">@phroi</a>, stemming from the solutions he summarized while writing UDT-related code for iCKB. Additionally, thanks to suggestions from <a href="https://github.com/rink1969" target="_blank" rel="noopener">@rink1969</a>, we optimized CKB occupancy when calculating UDT change.</p><ul><li><a href="https://github.com/ckb-devrel/ccc/issues/227" target="_blank" rel="noopener">Merge UDT features from iCKB into CCC</a></li><li><a href="https://github.com/ckb-devrel/ccc/issues/214" target="_blank" rel="noopener">Pay myself to avoid extra CKB occupation</a></li></ul><h3 id="Type-ID-like-Protocols"><a href="#Type-ID-like-Protocols" class="headerlink" title="Type ID-like Protocols"></a>Type ID-like Protocols</h3><p><img src="../Do_You_Hear_The_CCC_zh-Hans/Type_ID.png" alt="CCC logos with different color" loading="lazy"></p><p>Type ID leverages the characteristic that CKB cells can only be consumed once. It is used to assign a unique on-chain ID to a cell to track the updates and destruction of a cell singleton. Designed from the beginning to track the latest state of upgradable contracts, it has gradually been applied more broadly to other protocols.</p><p>CCC’s new Type ID package, in addition to supporting the simplest arbitrary data Type ID, provides advanced methods to facilitate extending support for Type ID-like protocols. The <a href="https://github.com/web5fans/did-ckb" target="_blank" rel="noopener">DID CKB</a> support added alongside the Type ID package is a great example.</p><ul><li><a href="https://github.com/ckb-devrel/ccc/pull/337" target="_blank" rel="noopener">Added <code>did-ckb</code> package</a></li></ul><h3 id="Multisig-Lock"><a href="#Multisig-Lock" class="headerlink" title="Multisig Lock"></a>Multisig Lock</h3><p><img src="../Do_You_Hear_The_CCC_zh-Hans/Multisig.png" alt="Seele from EVA" loading="lazy"></p><p>Another support for an early CKB feature. Although the multisig lock only supports the Secp256k1 algorithm, it is still frequently used in scenarios like contracts or fund management. Previously, developers mostly used the command-line tool <a href="https://github.com/nervosnetwork/ckb-cli" target="_blank" rel="noopener"><code>ckb-cli</code></a> to handle multisig transactions. I hope things will get better after adding support in CCC.</p><p>CCC’s support includes two modes: sequential signing and merging transactions after multiple signatures.</p><ul><li><a href="https://github.com/ckb-devrel/ccc/pull/349" target="_blank" rel="noopener">Multisig <code>Signer</code></a></li></ul><h3 id="FeePayer-Abstraction-Layer"><a href="#FeePayer-Abstraction-Layer" class="headerlink" title="FeePayer Abstraction Layer"></a><code>FeePayer</code> Abstraction Layer</h3><p>Thanks to the characteristics of the UTXO model, all parties in a transaction can pay the transaction fee. This makes calculating fees exceptionally difficult. Past SDKs would assume there is a specific native address that adds more tokens to be responsible for paying fees, but this cannot satisfy features like the zero-fee feature in the Spore protocol or <a href="https://talk.nervos.org/t/udt-payment-solutions/8956" target="_blank" rel="noopener">the UDT instant convert</a> (how many people know about this interesting thing?) that we want to introduce.</p><p><code>FeePayer</code> hopes to abstract fee payment into a separate step, providing a unified interface for more fee payment methods. Once developers utilize these interesting features, users may no longer need to hold extra CKB to initiate transactions, but instead pay fees through pre-deposited assets or on-the-spot micro-exchanges.</p><ul><li><a href="https://github.com/ckb-devrel/ccc/issues/274" target="_blank" rel="noopener">Introduce <code>FeePayer</code> concept for flexible transaction fee handling</a></li></ul><h3 id="Anything-More"><a href="#Anything-More" class="headerlink" title="Anything More?"></a>Anything More?</h3><p>Honestly, I don’t know what CCC will look like in the future. We have some things in progress, like <a href="https://github.com/ckb-devrel/ccc/pull/332" target="_blank" rel="noopener">the support for RGB++</a>, support for the Fiber Network, or the implementation of <a href="https://talk.nervos.org/t/en-cn-script-sourced-rich-information-script/8256" target="_blank" rel="noopener">the Script-Sourced Rich Information (SSRI)</a>, but they won’t be all that CCC is. I hope CCC can help developers solve different problems in different scenarios, and this requires understanding what developers need, which requires more feedback from the community.</p><p>Anyone interested is welcome to leave your thoughts on <a href="https://github.com/ckb-devrel/ccc/issues" target="_blank" rel="noopener">CCC Issues</a>, or see if there are any problems you’d be willing to solve. If you like <a href="https://github.com/ckb-devrel/ccc" target="_blank" rel="noopener">CCC</a>, star the repo to encourage us.</p>]]></content>
    
    
    <summary type="html">With 2.0.0, CCC looks like a serious project. This log will introduce the things I found interesting between 1.0.0 and 2.0.0: some may have been live for a year, others might still be in development. We have provided support for common usage scenarios and iterated based on community feedback. CCC is no longer just a novel experiment; it has gradually become a reliable foundation. Perhaps we have reached the time to build a Tower of Babel.</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>Ten-Year Fiber - Inside a Corner of Nervos</title>
    <link href="https://blog.hanssen0.com/articles/Ten_Year_Fiber_Inside_a_Corner_of_Nervos_en/"/>
    <id>https://blog.hanssen0.com/articles/Ten_Year_Fiber_Inside_a_Corner_of_Nervos_en/</id>
    <published>2025-12-29T05:00:00.000Z</published>
    <updated>2026-01-21T00:46:09.527Z</updated>
    
    <content type="html"><![CDATA[<p>“Fiber is a Ten-Year Plan.”</p><p>I sat in my chair, staring at the ceiling. The only light in the room came from the white glow spilling from the computer screen, flickering in sync with the voice speaking from the other end of the network.</p><p>“We are a small team, and we need to dedicate our full effort to getting one thing done.”</p><p>The participants had squeezed the scroll bar into a tiny sliver. A column of crossed-out microphone icons lined up beside their names, their gaze fixed on the sole voice. Behind those circular masks I couldn’t see through, were the others pondering this weighty information? Were they burying their heads, organizing their thoughts with pen and paper? Or were they just listening to the audio in their headphones while doing something else?</p><ul><li></li></ul><p>Back to April 2022. I had just raised enough money for my surgery. Looking back from now, that was obviously the most important turning point of my past life. But at the time, a massive reality stood before me:</p><p>How do I pay the deposit to a hospital located overseas?</p><p>The pandemic was raging. Although social order hadn’t collapsed, invisible walls had been erected everywhere. After being turned away by several banks near my place, I was told that the bank named after the country might be able to process my request.</p><p>The security guard at the entrance raised his thermometer gun and pulled the trigger at my forehead.</p><p>“Beep.”</p><p>The screen lit up green, signifying safety. He waved his hand, allowing the “compliant product” to pass. A sharp buzz soon pierced my ears, urging me to sit before the glass window.</p><p>“What business do you need to handle?”</p><p>The teller’s eyes were glued to the screen, mechanically demanding my identity, demanding my intent, demanding proof of the recipient. No matter how many times I tried, when explaining my life decisions to others, my throat would occasionally catch on the words I was trying to spit out.</p><p>The sound of typing, the rustling of paper, and the voice asking a supervisor for instructions followed, until the teller’s final verdict floated through the knuckle-thick bulletproof glass:</p><p>“Sorry, we can’t handle this.”</p><p>Since then, the fiat currency in my perception was reduced to exchange vouchers that could expire at any moment, no longer able to bear the weight of the word “asset”. It wasn’t until two years later that I found the alternative this world had prepared for fiat.</p><p>It was a dinner after a conference. The bar was playing the jazz I liked. I ordered a beer and squeezed into a table for two. The chair was tall, with rails between the four legs, letting me prop up my feet that couldn’t reach the ground.</p><p>“What is Nervos?” People at the exhibition always asked this, just like the person before. I followed muscle memory, speaking sentences that were merely summaries of the flyer. Their eyes would stop at the flyer anyway, trying to explain cryptocurrency using their understanding of stocks.</p><p>Fortunately, the face sitting opposite me now wasn’t one of indifferent unconcern, but the lead of the wallet team. Probably for health reasons, he, like most people in the ecosystem, kept his distance from alcohol. However, the lack of alcohol didn’t stop him from being a talkative person — so much so that he occasionally over-shared on social media, stirring up controversy in the community.</p><p>He was aware of how outsiders viewed him and mocked himself a bit, drawing a burst of laughter from us. However, judging by what he shared, the investors’ opinion of him didn’t seem to be affected.</p><p>“They’ll know once they try it.” his tone was like someone explaining a natural phenomenon: “The reason why we want to build a payment network.” He turned to me: “You should try it too.”</p><p>Warm yellow light shone on his face. He stared at me, his lips and eyebrows urging me to pick up my phone. After surviving a grueling day, I naturally had no reason to refuse his enthusiastic request. I was just curious how he could still show such rich expressions after repeating the same sentence over and over. I opened the newly downloaded wallet, held the phone in my hand, QR code facing up, and handed it parallel to the table in front of him.</p><p>What should I do next? Before I could react, the green checkmark of a successful receipt was already displayed on my screen.</p><p>“So cryptocurrency can actually have an experience like this” — the thought washed over my brain. In that moment, the warm yellow light, the jazz melody, even the face across from me became a blur. Only this green symbol remained in my field of vision, appearing to mock the version of me that had once hit a wall at the bank. This sense of awe could probably only be compared to the moment humans first saw paper money turn into electronic signals.</p><p>When I came back to my senses, he was very satisfied with my reaction, the smile on his face growing even more distinct.</p><ul><li></li></ul><p>Fiber, a payment network built on CKB, entered the testing phase not long after. “To lower the barrier for developers, Fiber needs an SDK.” In the weekly sync meeting, my colleagues and I shared this decision.</p><p>“Great, this is absolutely necessary. This is the only way developers can use Fiber to build things.” There was no scroll bar, but the microphone icons flickered in turn.</p><p>For programmers who have worked for years, wrapping an SDK is usually tedious work. Following the documentation to encase definitions in code one by one — you could patch together a passable empty shell without even taking your eyes off a playing video window.</p><p>Over the past five years, in the wasteland of CKB, who knows how many developers entrusted their sincerity and passion to those cheap cloth bags so thin they were translucent, only to hear a rip, sending everything crashing to the ground, covered in mud. Until we started from scratch, stitching a new SDK for CKB, thread by thread.</p><p>I stared at those hexadecimal characters, feeling dizzy, the screen before me shrouded in mist. Carefully calculating the length, reserving enough CKB to accommodate the data; checking existing denominations one by one until there was enough input; stuffing the change back into the output, and remembering to calculate the transaction fee for the new data.</p><p>“A transfers 100 CKB to B” — such a simple thing, yet I had to be like a penny-pinching accountant, piecing together the transaction step by step in the low-level code.</p><p>The error code never told me why. It just coldly changed from -12 to -11, its mocking face never softening. I stared with bloodshot eyes, reading historical code in the repository from years ago, trying to figure out why it worked back then.</p><p>Could we prevent Fiber from repeating CKB’s mistakes?</p><p>Fiber wasn’t a tough yarn. It was more like tangled silk. Most of the time, the threads were knotted together, and we often couldn’t tell which loose end corresponded to which. We had to hold our breath and lean in close, observing the flow of the data. Only after sorting them out one by one could we spin the fibers into yarn and weave them into cloth.</p><p>That was a long three months.</p><p>We were like a cracked mirror, kneading various things into the same plane: meetings with behemoths, infrastructure needing completion on to-do lists; ideas brought into reality, curious people at events; and cold data charts, analyzing the reasons why people stayed in the community.</p><p>And 194.</p><ul><li></li></ul><p>Number 194. This was the Pull Request for the Fiber SDK code.</p><p>With every attempt to fix a problem, the test cases would run once, until the errors disappeared completely. To help developers understand the concept of channels, the simple webpage laid out not just parameters and components, but also our understanding of the interaction flow.</p><p>We were far from completely finishing development, but we had a good start. The moment of code merge was waving at us. Or so it should have been.</p><p>“The development of the Fiber SDK is not under our jurisdiction. Another team will take over from here.” The conclusion wasn’t long, but surprisingly powerful, snapping the connected threads.</p><p>I didn’t ask why. In the chat app’s text box, the cursor blinked, staring at us — a group of tech guys who moved ourselves to tears every day.</p><p>Okay, I didn’t actually like writing code that much.</p><p>I was just used to finishing things I started. Programmers always switch their editors to dark mode to make the screen less glaring. But that doesn’t stop the light from entering the eyeballs, blinding one to the day and night outside the window.</p><p>I stood up. My back, sore from sitting for so long, was aching more easily these days.</p><p>Fiber’s progress wouldn’t stagnate because of our absence. In the weekly cross-team meetings, I could still hear the wallet team asking about the issues they encountered.</p><p>“Can Fiber nodes run in the browser now?” The wallet ran on the web, so naturally, they would ask this.</p><p>“Not yet.” It sounded like the Fiber team wasn’t as well-staffed as imagined.</p><p>However, this didn’t become an obstacle. A few weeks later, a solution where servers hosted nodes on behalf of users successfully ran on the testnet.</p><p>Later still, that wallet team was disbanded. The official announcement was brief and indifferent, detonating in the community as expected. But he, who was once so talkative, never replied again. That phone that was once on the high chair, at the table for two, never lit up with Fiber’s green checkmark to this day.</p><p>Fiber’s progress wouldn’t stagnate because of their absence either. The good news is, Fiber nodes can finally run in the browser now.</p><p>“Well, let’s stop here for today.”</p><p>The voice cut off. I sent the meeting minutes to the group as routine, drawing the curtain on this one-man show that no longer had an audience.</p><p>Because the computer hadn’t been touched for a long time, the screen dimmed automatically until it went out. The light source withered, and the room’s ceiling plunged into total darkness.</p><ul><li></li></ul><p>The mountain path was narrow, only wide enough for my colleague and me to walk single file. The falling leaves crunched beneath our feet. We talked about daily life, about future plans, and finally, we talked about the big and small matters of the ecosystem.</p><p>“Isn’t Fiber a ten-year plan?” I said: “How come there’s not much movement after just persisting for a year?”</p><p>His voice was the same as always, steady with a hint of sly playfulness. He didn’t think much:</p><p>“Precisely because of that, it is a plan that needs ten years.”</p><p>Ten years from now, will that green checkmark really light up?</p><p><a href="small%3EMore%20discussions%20can%20be%20found%20on%20%5Bthe%20Nervos%20community%20forum%5D(https://talk.nervos.org/t/en-cn-fiber-nervos-ten-year-fiber-inside-a-corner-of-nervos/9787).%3C/small">^1</a></p>]]></content>
    
    
    <summary type="html">&lt;p&gt;&quot;Fiber is a Ten-Year Plan.&quot;&lt;/p&gt; &lt;p&gt;I think I have found the alternative this world has prepared for fiat currency. Today, a year later, what has Fiber become? And ten years from now, will that green checkmark really light up?&lt;/p&gt;</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>十年期 Fiber - 观 Nervos 一角</title>
    <link href="https://blog.hanssen0.com/articles/Ten_Year_Fiber_Inside_a_Corner_of_Nervos_zh-Hans/"/>
    <id>https://blog.hanssen0.com/articles/Ten_Year_Fiber_Inside_a_Corner_of_Nervos_zh-Hans/</id>
    <published>2025-12-29T04:00:00.000Z</published>
    <updated>2026-01-21T00:46:09.527Z</updated>
    
    <content type="html"><![CDATA[<p>「Fiber 是未来十年的计划。」</p><p>我坐在椅子上，盯着天花板。屋里，只有从电脑屏幕溢出来的白色光晕，随着网络那端的人说话不断闪动。</p><p>「我们是小组织，需要全力去做成一件事情。」</p><p>参会者们将列表的滚动条挤成了一小块。划着斜杠的麦克风在名字旁排成一列，注视着那唯一的声音。在我看不穿的圆形面具背后，其他人在思考这些重量级的信息吗？在埋头用纸笔来整理思绪吗？还是听着耳机里的声音在做其它事情？</p><ul><li></li></ul><p>回到二零二二年的四月，那时我刚筹够手术的开销。从现在往回看，那显然是过去人生最重要的转折点。但当时的我面前矗立一个巨大的现实问题：</p><p>我要怎么将订金支付给位于境外的医院？</p><p>正值肺疫肆虐，社会秩序虽然没有崩塌，但建满了无形的墙。在住处附近的几家银行吃足闭门羹后，我被告知以国家命名的那家银行也许可以处理我的请求。</p><p>门口的保安举起测温枪，对准我的额头扣动了扳机。</p><p>「滴。」</p><p>屏幕上亮起代表安全的绿色，他挥挥手，合格品得以通过。尖锐的蜂鸣声很快刺进耳朵，催促我坐到玻璃窗前。</p><p>「要办理什么业务？」</p><p>柜员的眼睛盯着屏幕，机械地索问我的身份，索问我的意图，索要收款方的证明。无论尝试过多少次，在我向别人解释自己的人生决定时，喉咙偶尔还是会将吐出来的词夹住。</p><p>敲击键盘的声音、翻动纸张的声音和请示上级的声音，然后是柜员的最终裁决飘过指节厚的防弹玻璃：</p><p>「抱歉，我们处理不了。」</p><p>自打那时，我认知里的法定货币沦为了随时可能失效的兑换券，再也承担不起「资产」二字的重量。直到两年之后，我才找到了这个世界为法币准备的替代品。</p><p>那是一次展会后的聚餐，餐吧里播放着我喜欢的爵士乐。我要了杯啤酒，挤在一张双人桌旁。椅子很高，四条腿中间都有横着的杆子，让我支撑碰不到地面的脚。</p><p>「Nervos 是什么东西？」展会上的人们总是会这么问，就像上一个人一样。我遵循肌肉记忆，说出的句子不过是对传单的摘要。反正他们的眼光也只会停留在传单上，尝试用对股票的理解来解释加密货币是什么。</p><p>好在，此刻坐在我对面的不再是那些漠不关心的脸，而是钱包团队的负责人。大概是出于健康考虑，他和生态里大多数人一样，都对酒精敬而远之。不过，缺乏酒精也不妨碍他是个健谈的人，以至于他偶尔还会在社交媒体上健谈过了头，引起社区一片争议。</p><p>他清楚外界对他的评价，自嘲了一番，引得我们一阵哄笑。不过，从他分享的内容听来，投资人对他的评价似乎并没有受到影响。</p><p>「他们试过就知道了，」他的语气像是在科普自然现象：「我们为什么想做支付网络。」他转向我：「你也应该试试。」</p><p>暖黄色的灯光照在他的脸上。他盯着我，用嘴唇和眉毛催促我拿起手机。经历完被摧残的一天，我自然没理由拒绝他热情的请求。只是我很好奇，在不断重复同一句话后，他怎么还能露出如此丰富的表情。我点开刚下载好的钱包，将手机拿在手中，收款二维码朝上，平行于桌面递到他面前。</p><p>下一步该做什么？在我反应过来之前，收款成功的绿色对勾，已经显示在了我的屏幕上。</p><p>「原来加密货币也能有这样的体验」冲刷着我的大脑。那一刻，暖黄色的灯光、爵士乐的旋律、就连对面的那张脸都变得模糊起来。视野里只剩下这个绿色符号，仿佛在嘲笑着曾经那个在银行碰壁的我。这种惊艳，恐怕只有人类第一次看见纸币变成电子信号的瞬间，才能够相提并论。</p><p>当我回过神来，他对我的反应很满意，脸上的笑容更明显了。</p><ul><li></li></ul><p>Fiber，构建在 CKB 上的支付网络，没过多久就进入了测试阶段。「为了降低对开发者的门槛，Fiber 需要 SDK」，在每周的同步会议上，我和同事们分享了这个决定。</p><p>「好啊，这太有必要了。这样开发者才能用上 Fiber 做出东西来。」没有滚动条，麦克风图标却在轮流闪烁。</p><p>对于工作数载的程序员来说，包装 SDK 通常是件乏味的工作。照着文档将定义逐个包上代码的外壳，哪怕视线不离开播放视频的窗口，也能拼凑出一个得以交差的空壳。</p><p>过去五年，在 CKB 的荒原上，那些薄到透光的廉价布袋，不知道托付了多少开发者的真心和热情，然后刺啦，重重摔到地上，沾满污泥。直到我们从头开始，一针一线为 CKB 缝制了新的 SDK。</p><p>我盯着那些十六进制的字符，感到眩晕，眼前的屏幕被雾气笼罩。仔细计算长度，预留足额的 CKB 来容纳数据；逐个检查现有的面额，直到凑够输入；将找零塞回输出里，还得记得为新增的数据计算手续费。</p><p>「A 对 B 转账 100 CKB」，如此简单的事情，我却要像斤斤计较的会计，在底层代码里一步步凑出交易来。</p><p>错误码从来不会告诉我为什么。它只是冷漠地从 -12 变成 -11，嘲讽的嘴脸却没有缓和。我睁着充满血丝的双眼，阅读仓库里多年前的历史代码，试图弄明白为什么它当年能工作。</p><p>我们能够避免 Fiber 重蹈 CKB 的覆辙吗？</p><p>Fiber 不是坚韧的纱线，更像是缠在一起的蚕丝。大部分时候，丝线交错缠结在一起，我们常搞不懂一个活头和另外哪个相对应。我们需要屏住呼吸凑到跟前，观察数据的走向。一条条整理出来之后，我们才能将纤维纺成纱，织成布。</p><p>那是漫长的三个月。</p><p>我们像裂掉的镜子，把各种事情揉进同个平面：和庞然大物的会议，待办清单上需要补全的基础设施；被带进现实的点子，活动现场好奇的人们；还有冰冷的数据图表，分析人们留在社区的原因。</p><p>还有 194。</p><ul><li></li></ul><p>编号 194，这是 Fiber SDK 代码的合并请求。</p><p>每做一次修复问题的尝试，测试用例就会被运行一次，直到报错彻底消失。为了让开发者理解通道的概念，简单的网页上不仅排布着参数和组件，也排布着我们对交互流程的理解。</p><p>离彻底完成开发还有很远，但我们有一个不错的开始。代码合并的时刻在向我们招手，本来应该是这样。</p><p>「Fiber SDK 的开发工作不归我们管，接下来会由另外的团队接手。」结论不长，却出奇地有力，将牵连的丝线扯断。</p><p>我没问为什么。聊天软件的编辑框里，光标闪动，凝视着我们这群成天自我感动的搞技术的家伙。</p><p>也是，其实我也没那么喜欢写代码。</p><p>我只是习惯了把一件开始的事情做完。程序员们总把编辑器调成深色模式，让屏幕显得不那么刺眼。但那也阻止不了射入眼球的光，蒙蔽了窗外的白天黑夜。</p><p>我站起身，久坐的腰越来越容易酸痛。</p><p>Fiber 的进展不会因为我们的缺席而停滞。在每周的跨团队会议上，我还能听到钱包团队询问遇到的问题。</p><p>「Fiber 节点现在能在浏览器里运行吗？」钱包运行在网页上，他们当然会这么问。</p><p>「还不行。」听起来 Fiber 团队的人手没有想象中的那么充裕。</p><p>不过，这并没有成为阻碍。几周以后，服务器替用户托管节点的方案成功地在测试网上运行了起来。</p><p>再后来，那个钱包团队解散了。官方口吻的公告简短又冷漠，如预期般引爆了社区，但曾经那个健谈的他，却再也没有回复。那台曾在高脚椅上、双人桌边的手机，直到现在，也没能亮起属于 Fiber 的绿色勾号。</p><p>Fiber 的进展也不会因为他们的缺席而停滞。好消息是，Fiber 节点终于可以在浏览器里运行了。</p><p>「那我们今天就到这里咯。」</p><p>语音断开，我例行将会议记录发到了群组，为这出不再有观众的独角戏拉上幕布。</p><p>因为长时间无人操作电脑，屏幕自动变暗，直到熄灭。光源枯萎，房间的天花板陷入彻底的黑暗。</p><ul><li></li></ul><p>山道狭窄，只能容下我和同事一前一后地走。飘落的叶子被我们踩碎，咔嚓作响。聊聊日常生活，聊聊未来打算，最后还是聊到了生态里的大小事上。</p><p>「Fiber 不是一个十年的计划么？」我说：「怎么才坚持了一年就没什么动静了。」</p><p>他的声音和往常没什么两样，沉稳中带点狡黠的俏皮。他没怎么思考：</p><p>「正因为这样，它才是个需要十年的计划呀。」</p><p>十年之后，那个绿色的勾号，真的会亮起来吗？</p><p><a href="small%3E%E6%9B%B4%E5%A4%9A%E8%AE%A8%E8%AE%BA%E5%8F%AF%E4%BB%A5%E5%9C%A8%20%5BNervos%20%E7%A4%BE%E5%8C%BA%E8%AE%BA%E5%9D%9B%5D(https://talk.nervos.org/t/en-cn-fiber-nervos-ten-year-fiber-inside-a-corner-of-nervos/9787)%E4%B8%8A%E6%89%BE%E5%88%B0%E3%80%82%3C/small">^1</a></p>]]></content>
    
    
    <summary type="html">&lt;p&gt;「Fiber 是未来十年的计划。」&lt;/p&gt; &lt;p&gt;我想，我找到了这个世界为法定货币准备的替代品。一年后的今天，Fiber 变成了什么模样？而十年之后，那个绿色的勾号，真的会亮起来吗？&lt;/p&gt;</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>Web5 的转变 - 观 Nervos 一角</title>
    <link href="https://blog.hanssen0.com/articles/The_Web5_Shift_Inside_a_Corner_of_Nervos_zh-Hans/"/>
    <id>https://blog.hanssen0.com/articles/The_Web5_Shift_Inside_a_Corner_of_Nervos_zh-Hans/</id>
    <published>2025-12-21T02:00:00.000Z</published>
    <updated>2026-01-21T00:46:09.527Z</updated>
    
    <content type="html"><![CDATA[<p>又到令人忧心的时候，我大概是该写点文档以外的东西了。我想只从自己的视角出发，带其他人看看我在 Nervos 待的这个小角落。以下表达的全是个人观点，不追求客观，不做出保证，也不涉及预言。</p><ul><li></li></ul><p>2025 年春天，我第一次和 Jan 聊到 Bluesky 和它的 AT Protocol 协议。那时 Web5 链下扩展链上的蓝图早已被描绘，用 Nostr 构建区块链外的去中心化是社区的共识。所以当被告知「Jan 想转向 AT Protocol 做 Web5」的时候，我心里充满了疑惑、愤怒和期待。</p><p>这俨然是又一次 Nervos 式的悲剧，横跨十个季节的沉淀将慢慢沦为残骸。围绕着 Nostr，我们建立了零零落落的小堡垒，偶有探索精神的先锋搬来了家具，正准备敞开大门迎接建设者们。早先振臂高呼的发起人怎么能就这样转头离开，留给其他人「跟着一起走还是留下自己干」的选择题？剩下的人们面面相觑，在空荡荡的大厅不知所措地拿着未完成的作品。</p><p>但在无奈之余，我的确不认为 Nostr 能承载任何东西。我听到 Nostr 在说：「看，朋友们！我这里有个新奇的玩具能让大家把数据叠在一起，而且我们什么限制都不会做，这就是梦想中的去中心化社交！」，像完全的妄想。在这种近乎丛林法则般的放任自流下，不受控制的懒惰和逐底竞争会将社区毁灭殆尽——或许，在那片沼泽中建立社区本来就是奢望。</p><ul><li></li></ul><p>我没有理由拒绝 AT Protocol (Bluesky)，那里还有人类思考的闪光偶尔亮起。它足够清晰，人们循着它指的路向去中心化走；它足够开放，人们可以不被利益至上的自大狂指明方向；它还有足够人气，一群还想要进行沟通交流的人是它坚实的基础。</p><p>好吧，代码成不了悼词，也成不了麻醉药，不该执着道不同的历史。AT Protocol 咬合 CKB，比以往的路径都更让 Web2 和 Web3 融合在一起。想像在那个世界，CKB 公链保护着我们的化身不被篡改，AT Protocol 允许我们在自己保管的书页上留下信息，其他人的声音在我们挑选的池子中激发涟漪。我期盼在那个组件紧密协作的未来，我不需要再为被删除的喜怒哀乐而沮丧，也不需要再为被拒之门外而无奈。</p><p>我们还在这条路的起点准备补给，前方有光怪陆离的曲折，可能通向荒野也可能通向深渊。我毫不怀疑造物主们在将理想雕琢为现实时的热情，拌着兴趣和汗水熬成一锅浓汤。只是踏出下一步之前，要是能与冒险者们围在营地篝火前，清点行囊再对齐罗盘，谨慎地摸索着前进，</p><p><strong>也许能减少一个、又一个、又一个、又一个的推倒重来。</strong></p><p><a href="small%3E%E6%9B%B4%E5%A4%9A%E8%AE%A8%E8%AE%BA%E5%8F%AF%E4%BB%A5%E5%9C%A8%20%5BNervos%20%E7%A4%BE%E5%8C%BA%E8%AE%BA%E5%9D%9B%5D(https://talk.nervos.org/t/web5-nervos/9751)%E4%B8%8A%E6%89%BE%E5%88%B0%E3%80%82%3C/small">^1</a></p>]]></content>
    
    
    <summary type="html">&lt;p&gt;所以当被告知「Jan 想转向 AT Protocol 做 Web5」的时候，我心里充满了疑惑、愤怒和期待。&lt;/p&gt; &lt;p&gt;...&lt;/p&gt; &lt;p&gt;只是踏出下一步之前，要是能与冒险者们围在营地篝火前，清点行囊再对齐罗盘，谨慎地摸索着前进，&lt;/p&gt; &lt;p&gt;&lt;strong&gt;也许能减少一个、又一个、又一个、又一个的推倒重来。&lt;/strong&gt;&lt;p&gt;</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>乎及 - Sealed Breath</title>
    <link href="https://blog.hanssen0.com/articles/Sealed_Breath_zh-Hans/"/>
    <id>https://blog.hanssen0.com/articles/Sealed_Breath_zh-Hans/</id>
    <published>2025-12-20T01:00:00.000Z</published>
    <updated>2026-01-21T00:46:09.527Z</updated>
    
    <content type="html"><![CDATA[<p>我不由得屏住了呼吸。螳螂拨开眼睑，从她的眼球旁挤出来。</p><p>绿色的螳螂前足整齐排布着尖刺，从靠近身体的突起到尖端的镰刀，胡乱切割所及之目。脸颊下鼓起的是腹部和后足，看起来像血管在皮肤下蠢蠢欲动。</p><p>气体在呼吸道里往返流淌。我好奇她嘴里飘散的黑雾是什么，它们会在我的胸腔里长成螳螂吗？还是说，那些流淌的汁液只是她的内脏在腐烂？悬挂在窒息之上的我什么都闻不见，我鼓不起勇气把未知吸进去，把肺里那坨该死的淤泥呼出来。</p><p>我的睫毛常常向内生长，扎到眼球上，让人烦躁，直到我再次拔掉它们。要怎么把扎进眼球里的螳螂拔出来？她云朵一样的虹膜上多了一束夕阳一轮皎月，混杂着透明的白色的红色的黏糊糊的液体还是固体，要怎么才能长回成快乐而又悲伤的样子？</p><p>思考在真空中徒劳地扑棱翅膀，一定有什么我能做的。她站着看我，螳螂和眼睑僵持着，她和它一动不动。螳螂的气门在肚子上，肺里说不定充满了血液，就像是只蚊子，有点好笑。我濒临窒息，我不能再看她，我应该先迈左脚，我盯着自己的脚。我抬起我的左腿、然后转身、落下、然后右腿、保持重心、跟着黑键的旋律走出房子。</p><p>街道带来开阔的视野，空气中有青草的味道，我很喜欢。轻快的风吹过所有人的躯壳，螳螂拨开眼睑，从她&#x2F;他&#x2F;它们的眼球旁挤出来。</p>]]></content>
    
    
    <summary type="html">气体在呼吸道里往返流淌。我好奇她嘴里飘散的黑雾是什么，它们会在我的胸腔里长成螳螂吗？还是说，那些流淌的汁液只是她的内脏在腐烂？悬挂在窒息之上的我什么都闻不见，我鼓不起勇气把未知吸进去，把肺里那坨该死的淤泥呼出来。</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>sing-box 软路由透明代理 IPv6 + 自动更新订阅 + 代理链</title>
    <link href="https://blog.hanssen0.com/articles/Sing_Box_Router_Transparent_Proxy/"/>
    <id>https://blog.hanssen0.com/articles/Sing_Box_Router_Transparent_Proxy/</id>
    <published>2025-10-02T02:00:00.000Z</published>
    <updated>2026-01-21T00:46:09.527Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>可恶，我也就只有假期能才有空记录点什么东西 &#x3D; &#x3D;</p></blockquote><p>每个生活在瓷器国的合格程序员，人生中大概都有那么几个时刻暴怒于糟糕的网络环境。作为被隔离的一代，防火墙教会了我大约半数以上的网络技能，感谢您全家，虽然我更希望能学得不那么扭曲。</p><p>这篇文章分享了几个代理设置过程中麻烦问题的解决方案。</p><hr><p>代理软件伴随了我在赛博空间的一生，从懵懂时的免费服务，到薅 GAE 羊毛，到自建 <a href="https://github.com/shadowsocks/shadowsocks" target="_blank" rel="noopener">Shadowsocks</a> 和 <a href="https://github.com/v2ray/v2ray-core" target="_blank" rel="noopener">V2Ray</a> 服务器，再到最近几年用 <a href="https://github.com/juewuy/ShellCrash" target="_blank" rel="noopener">ShellCrash</a> 管理我的订阅。我在各种尝试中总结了以下几个需求：</p><ul><li>写入安全：为了避免恶意软件篡改机器的数据，闭源客户端无法被接受。</li><li>稳定：时间对所有人类都是平等的宝贵，我没办法说服自己为这外加的束缚浪费时间。我希望能尽可能使用已有的解决方案，而不是自行开发&#x2F;手动处理。</li><li>良好的体验：我不希望为不需要的好处付出体验成本。</li><li>读取安全（隐私）：我希望降低信息泄漏的可能性。虽然大部分网站使用了 <a href="https://zh.wikipedia.org/wiki/%E8%B6%85%E6%96%87%E6%9C%AC%E4%BC%A0%E8%BE%93%E5%AE%89%E5%85%A8%E5%8D%8F%E8%AE%AE" target="_blank" rel="noopener">HTTPS</a> 加密，但中间人依然可以读取我正在访问的域名。</li></ul><p>ShellCrash 在过去几年能一直能稳定满足一些基本需求，但面对需要高度定制化的隐私需求显得有些鸡肋且束手束脚，而且我也不太喜欢它的防火墙规则写法。于是我捣鼓一套自己的 <a href="https://en.wikipedia.org/wiki/Nftables" target="_blank" rel="noopener"><code>nftables</code></a> 规则，跑通之后才发现 <a href="https://github.com/SagerNet/sing-box" target="_blank" rel="noopener">sing-box</a> 内置了 <code>nftables</code> 的规则配置，好吧。</p><p>这篇文章会忽略简单的让服务可用的部分，记录几个处理起来比较麻烦问题的解决方案。<a href="https://gist.github.com/Hanssen0/0e3eef2400e832d0ee98b46f01f4e23b" target="_blank" rel="noopener">自用的完整配置模板</a> 会在文章最后附带。</p><h2 id="IPv6"><a href="#IPv6" class="headerlink" title="IPv6"></a>IPv6</h2><p>我家里的宽带分配了 IPv6，但代理服务提供商不支持通过 IPv6 出口流量，这意味着所有的 IPv6 流量都必须通过直连出口。为此，所有 DNS 请求都被劫持为使用 <a href="https://www.rfc-editor.org/rfc/rfc3089.html" target="_blank" rel="noopener">FakeIP</a> 方案，以保证寻常的请求带有<a href="https://zh.wikipedia.org/wiki/%E5%AE%8C%E6%95%B4%E7%B6%B2%E5%9F%9F%E5%90%8D%E7%A8%B1" target="_blank" rel="noopener">完整域名（FQDN）</a>信息抵达代理客户端，推迟 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><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="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;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;tls&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;dns_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;8.8.4.4&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;🚀 海外网站&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;fakeip&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;dns_fakeip&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;inet4_range&quot;</span><span class="punctuation">:</span> <span class="string">&quot;198.18.0.0/16&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;inet6_range&quot;</span><span class="punctuation">:</span> <span class="string">&quot;fc00::/16&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;query_type&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">          <span class="string">&quot;A&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="string">&quot;AAAA&quot;</span></span><br><span class="line">        <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;dns_fakeip&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;rewrite_ttl&quot;</span><span class="punctuation">:</span> <span class="number">1</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;dns_proxy&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;strategy&quot;</span><span class="punctuation">:</span> <span class="string">&quot;ipv4_only&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>IPv6 相关的问题是我选择全部劫持并使用 FakeIP，而不是从真实 IP 嗅探域名的主要原因。</p><p>域名嗅探发生在 TCP 三次握手之后，此时浏览器会认为连接已经建立。因此考虑访问境外域名时，若 DNS 解析返回了 IPv6 和 IPv4 地址，浏览器会尝试使用 IPv6 访问目标域名，但我们无法将流量转向直连（因为无法直接访问境外网站）；也不能发往代理服务器（前面提到了它不支持 IPv6 出口）；同时也不能拒绝连接（TCP 连接建立之后被关闭，浏览器会报 <code>ERR_CONNECTION_CLOSED</code>，而不是尝试回退到 IPv4 地址）。</p><p><a href="https://github.com/SagerNet/sing-box/issues/2407" target="_blank" rel="noopener">一个已经被废弃的 <code>sniff_override_destination</code> 选项</a> 允许用嗅探出的域名覆盖 IP 作为请求目标，但作者不打算在后续的版本中保留这个功能，而且考虑有些包可能嗅探不出来域名之类难以 Debug 的烦心事，我自己也不喜欢让嗅探结果影响主要功能这种半吊子的方案。</p><p>另外，因为设备可能使用了 <a href="https://en.wikipedia.org/wiki/DNS_over_HTTPS" target="_blank" rel="noopener">DoH</a>，代理软件不总是能劫持 DNS 请求，因此仅过滤 DNS 结果中的 IPv6 也不能完全避免 IPv6 请求。另外一种可能的方式是关闭路由器对 IPv6 流量的劫持，不通过代理软件而是让防火墙拒绝我们的流量。但这可能会导致 IPv6 请求泄露，暴露我们尝试访问的域名，而自行编写拦截 IPv6 的防火墙规则则不在我的考虑范围内。理论上，我们应当可以让代理软件在嗅探域名之前拒绝所有 IPv6 的数据包，但 sing-box 似乎没有很好处理这种情况。于是最终，我选择在 <code>nftables</code> 中拦截所有的路由器 IPv6 子网流量。</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">table inet firewall &#123;</span><br><span class="line">  chain filter_ipv6_out &#123;</span><br><span class="line">    type filter hook prerouting priority mangle; policy accept;</span><br><span class="line"></span><br><span class="line">    # Our proxy nodes don&#x27;t support IPv6.</span><br><span class="line">    # Immediately reject connection attempts to IPv6 addresses. This is to prevent</span><br><span class="line">    # connection failures caused by clients (using DoH) resolving IPv6 addresses,</span><br><span class="line">    # and to correctly trigger the client&#x27;s fallback to IPv4.</span><br><span class="line">    meta nfproto != ipv6 accept</span><br><span class="line">    iifname != &quot;br-lan&quot; accept</span><br><span class="line">    fib daddr oifname != &quot;enp2s0&quot; accept</span><br><span class="line"></span><br><span class="line">    ct state new counter reject</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>使用这种方案时，即使是可以直连的域名也不能在设备上直接通过 IPv6 访问，因此为直连请求返回真实 IP 地址没有意义。</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;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;Direct&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;direct&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;domain_resolver&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;server&quot;</span><span class="punctuation">:</span> <span class="string">&quot;dns_direct&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;strategy&quot;</span><span class="punctuation">:</span> <span class="string">&quot;prefer_ipv4&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">]</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><p>在代理的直连出口选择 <code>prefer_ipv4</code>&#x2F;<code>prefer_ipv6</code> 可以让代理解析 DNS 时尝试使用 IPv6 访问直连地址。</p><p>在这一套方案下，外部可以通过 IPv6 访问路由器下的设备，设备也可以使用域名通过 IPv6 直连访问其它服务。</p><h2 id="自动更新订阅"><a href="#自动更新订阅" class="headerlink" title="自动更新订阅"></a>自动更新订阅</h2><p><a href="https://github.com/asdlokj1qpi233/subconverter" target="_blank" rel="noopener">Subconverter 的 Fork 版本</a> 支持生成 sing-box 配置，但使用的是内置的 sing-box 配置模板，在 sing-box 更新改动了配置格式时（作者经常在只更改 minor 版本号的情况下这么做，上帝保佑）无法及时生产支持新版本的配置文件；<a href="https://github.com/surgioproject/surgio" target="_blank" rel="noopener">Surgio</a> 和 <a href="https://github.com/sub-store-org/Sub-Store" target="_blank" rel="noopener">Sub-Store</a> 看起来不错，但是需要带状态的后端服务，太麻烦了。最后我选择的是 <a href="https://github.com/Toperlock/sing-box-subscribe" target="_blank" rel="noopener">sing-box-subscribe</a>，虽然它的代码写得实在有够乱，但考虑到它能直接部署在 <a href="https://vercel.com/" target="_blank" rel="noopener">Vercel</a> 上无状态使用，我也就不苛求太多。</p><p>直接用 <a href="https://en.wikipedia.org/wiki/Cron" target="_blank" rel="noopener"><code>crontab</code></a> 解决自动更新问题：</p><figure class="highlight sh"><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">curl <span class="string">&#x27;https://&lt;VERCEL_SERVICE_URL&gt;/config/&lt;SUBSCRIPTION_URL&gt;&amp;file=https://gist.githubusercontent.com/Hanssen0/0e3eef2400e832d0ee98b46f01f4e23b/raw/sing-box-template.json&#x27;</span> &gt; /etc/sing-box/config.json</span><br><span class="line"></span><br><span class="line">sing-box check -C /etc/sing-box &amp;&amp; systemctl restart sing-box</span><br><span class="line"></span><br><span class="line"><span class="comment">#0 0 * * * sh /etc/sing-box/sync.sh</span></span><br></pre></td></tr></table></figure><h2 id="代理链"><a href="#代理链" class="headerlink" title="代理链"></a>代理链</h2><p>远端代理服务器我选择了 <a href="https://zh.wikipedia.org/zh-cn/V2Ray" target="_blank" rel="noopener"><code>VMess</code> 协议</a> + CDN (+ WebSocket) 的方案，向前置代理隐藏服务器的真实 IP 地址。服务端依然使用 sing-box 搭建，使用 Caddy 反向代理方便配置 TLS 证书。</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></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;type&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;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;dns_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;dns_direct&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;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;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">9999</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;in&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;vmess&quot;</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;name&quot;</span><span class="punctuation">:</span> <span class="string">&quot;YOUR_USERNAME&quot;</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;00000000-0000-0000-0000-000000000000&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="attr">&quot;alterId&quot;</span><span class="punctuation">:</span> <span class="number">0</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;transport&quot;</span><span class="punctuation">:</span> <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;ws&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;/WEBSOCKET_PATH&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">]</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;tag&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;type&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;final&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;auto_detect_interface&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;default_domain_resolver&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;server&quot;</span><span class="punctuation">:</span> <span class="string">&quot;dns_direct&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;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;ip_is_private&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;action&quot;</span><span class="punctuation">:</span> <span class="string">&quot;reject&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><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></pre></td><td class="code"><pre><span class="line">YOUR_DOMAIN &#123;</span><br><span class="line">log &#123;</span><br><span class="line">output stdout</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">reverse_proxy /WEBSOCKET_PATH localhost:9999</span><br><span class="line"></span><br><span class="line">root * /etc/caddy/root</span><br><span class="line">file_server</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>需要注意的是，我不希望公开代理服务器的 IP 地址，但依然希望做到自动更新订阅。因此，我使用了服务器更新订阅，而客户端从服务器获取配置的方案。<code>config_linux.json</code> 和 <code>config_android.json</code> 储存了平台特定的配置，而 <code>config_common.json</code> 则保存了代理服务器的信息。因为 HTTPS 请求只会公开域名，而不会公开 URL 路径，将访问密码添加到路径中是相对安全的操作（但不推荐，这是为了让 Android 客户端能直接使用订阅链接）。</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></pre></td><td class="code"><pre><span class="line"><span class="comment">// config_linux.json</span></span><br><span class="line"></span><br><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;experimental&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;clash_api&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;external_controller&quot;</span><span class="punctuation">:</span> <span class="string">&quot;0.0.0.0:9090&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;external_ui&quot;</span><span class="punctuation">:</span> <span class="string">&quot;ui&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;secret&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;external_ui_download_url&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://gh-proxy.com/https://github.com/Zephyruso/zashboard/archive/refs/heads/gh-pages.zip&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;external_ui_download_detour&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;default_mode&quot;</span><span class="punctuation">:</span> <span class="string">&quot;rule&quot;</span></span><br><span class="line">    <span class="punctuation">&#125;</span> <span class="comment">// Unnecessary on Android</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;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;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;address&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">        <span class="string">&quot;172.19.0.0/30&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="string">&quot;fdfe:dcba:9876::1/126&quot;</span></span><br><span class="line">      <span class="punctuation">]</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;auto_redirect&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span> <span class="comment">// Remove this on Android</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><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><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="comment">// config_common.json</span></span><br><span class="line"></span><br><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;vmess&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;&lt;YOUR_DOMAIN&gt;&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;00000000-0000-0000-0000-000000000000&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;alter_id&quot;</span><span class="punctuation">:</span> <span class="number">0</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><br><span class="line">      <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;transport&quot;</span><span class="punctuation">:</span> <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;ws&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;/WEBSOCKET_PATH&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;headers&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">          <span class="attr">&quot;Host&quot;</span><span class="punctuation">:</span> <span class="string">&quot;&lt;YOUR_DOMAIN&gt;&quot;</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="attr">&quot;detour&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><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><figure class="highlight sh"><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"># Server</span></span><br><span class="line"></span><br><span class="line">curl <span class="string">&#x27;https://&lt;VERCEL_SERVICE_URL&gt;/config/&lt;SUBSCRIPTION_URL&gt;&amp;file=https://gist.githubusercontent.com/Hanssen0/0e3eef2400e832d0ee98b46f01f4e23b/raw/sing-box-template.json&#x27;</span> &gt; /etc/sing-box/client/config.json</span><br><span class="line"></span><br><span class="line">sing-box merge -c /etc/sing-box/client/config_linux.json -c /etc/sing-box/client/config.json -c /etc/sing-box/client/config_common.json /etc/caddy/root/&lt;SERVER_SECRET&gt;/config_linux.json</span><br><span class="line">sing-box merge -c /etc/sing-box/client/config_android.json -c /etc/sing-box/client/config.json -c /etc/sing-box/client/config_common.json /etc/caddy/root/&lt;SERVER_SECRET&gt;/config_android.json</span><br><span class="line"></span><br><span class="line"><span class="built_in">chown</span> -R caddy:caddy /etc/caddy/root/</span><br><span class="line"></span><br><span class="line"><span class="comment">#0 23 * * * sh /etc/sing-box/sync.sh</span></span><br></pre></td></tr></table></figure><figure class="highlight sh"><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"># Client</span></span><br><span class="line">curl <span class="string">&#x27;https://&lt;YOUR_DOMAIN&gt;/&lt;SERVER_SECRET&gt;/config_linux.json&#x27;</span> &gt; /etc/sing-box/config.json</span><br><span class="line"></span><br><span class="line">sing-box check -C /etc/sing-box &amp;&amp; systemctl restart sing-box</span><br><span class="line"></span><br><span class="line"><span class="comment">#0 0 * * * sh /etc/sing-box/sync.sh</span></span><br></pre></td></tr></table></figure><h2 id="自用完整配置模板-2025-10-02"><a href="#自用完整配置模板-2025-10-02" class="headerlink" title="自用完整配置模板 - 2025-10-02"></a>自用完整配置模板 - 2025-10-02</h2><p>Steam 下载和 NTP 服务都是走的直连。</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><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><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br><span class="line">245</span><br><span class="line">246</span><br><span class="line">247</span><br><span class="line">248</span><br><span class="line">249</span><br><span class="line">250</span><br><span class="line">251</span><br><span class="line">252</span><br><span class="line">253</span><br><span class="line">254</span><br><span class="line">255</span><br><span class="line">256</span><br><span class="line">257</span><br><span class="line">258</span><br><span class="line">259</span><br><span class="line">260</span><br><span class="line">261</span><br><span class="line">262</span><br><span class="line">263</span><br><span class="line">264</span><br><span class="line">265</span><br><span class="line">266</span><br><span class="line">267</span><br><span class="line">268</span><br><span class="line">269</span><br><span class="line">270</span><br><span class="line">271</span><br><span class="line">272</span><br><span class="line">273</span><br><span class="line">274</span><br><span class="line">275</span><br><span class="line">276</span><br><span class="line">277</span><br><span class="line">278</span><br><span class="line">279</span><br><span class="line">280</span><br><span class="line">281</span><br><span class="line">282</span><br><span class="line">283</span><br><span class="line">284</span><br><span class="line">285</span><br><span class="line">286</span><br><span class="line">287</span><br><span class="line">288</span><br><span class="line">289</span><br><span class="line">290</span><br><span class="line">291</span><br><span class="line">292</span><br><span class="line">293</span><br><span class="line">294</span><br><span class="line">295</span><br><span class="line">296</span><br><span class="line">297</span><br><span class="line">298</span><br><span class="line">299</span><br><span class="line">300</span><br><span class="line">301</span><br><span class="line">302</span><br><span class="line">303</span><br><span class="line">304</span><br><span class="line">305</span><br><span class="line">306</span><br><span class="line">307</span><br><span class="line">308</span><br><span class="line">309</span><br><span class="line">310</span><br><span class="line">311</span><br><span class="line">312</span><br><span class="line">313</span><br><span class="line">314</span><br><span class="line">315</span><br><span class="line">316</span><br><span class="line">317</span><br><span class="line">318</span><br><span class="line">319</span><br><span class="line">320</span><br><span class="line">321</span><br><span class="line">322</span><br><span class="line">323</span><br><span class="line">324</span><br><span class="line">325</span><br><span class="line">326</span><br><span class="line">327</span><br><span class="line">328</span><br><span class="line">329</span><br><span class="line">330</span><br><span class="line">331</span><br><span class="line">332</span><br><span class="line">333</span><br><span class="line">334</span><br><span class="line">335</span><br><span class="line">336</span><br><span class="line">337</span><br><span class="line">338</span><br><span class="line">339</span><br><span class="line">340</span><br><span class="line">341</span><br><span class="line">342</span><br><span class="line">343</span><br><span class="line">344</span><br><span class="line">345</span><br><span class="line">346</span><br><span class="line">347</span><br><span class="line">348</span><br><span class="line">349</span><br><span class="line">350</span><br><span class="line">351</span><br><span class="line">352</span><br><span class="line">353</span><br><span class="line">354</span><br><span class="line">355</span><br><span class="line">356</span><br><span class="line">357</span><br><span class="line">358</span><br><span class="line">359</span><br><span class="line">360</span><br><span class="line">361</span><br><span class="line">362</span><br><span class="line">363</span><br><span class="line">364</span><br><span class="line">365</span><br><span class="line">366</span><br><span class="line">367</span><br><span class="line">368</span><br><span class="line">369</span><br><span class="line">370</span><br><span class="line">371</span><br><span class="line">372</span><br><span class="line">373</span><br><span class="line">374</span><br><span class="line">375</span><br><span class="line">376</span><br><span class="line">377</span><br><span class="line">378</span><br><span class="line">379</span><br><span class="line">380</span><br><span class="line">381</span><br><span class="line">382</span><br><span class="line">383</span><br><span class="line">384</span><br><span class="line">385</span><br><span class="line">386</span><br><span class="line">387</span><br><span class="line">388</span><br><span class="line">389</span><br><span class="line">390</span><br><span class="line">391</span><br><span class="line">392</span><br><span class="line">393</span><br><span class="line">394</span><br><span class="line">395</span><br><span class="line">396</span><br><span class="line">397</span><br><span class="line">398</span><br><span class="line">399</span><br><span class="line">400</span><br><span class="line">401</span><br><span class="line">402</span><br><span class="line">403</span><br><span class="line">404</span><br><span class="line">405</span><br><span class="line">406</span><br><span class="line">407</span><br><span class="line">408</span><br><span class="line">409</span><br><span class="line">410</span><br><span class="line">411</span><br><span class="line">412</span><br><span class="line">413</span><br><span class="line">414</span><br><span class="line">415</span><br><span class="line">416</span><br><span class="line">417</span><br><span class="line">418</span><br><span class="line">419</span><br><span class="line">420</span><br><span class="line">421</span><br><span class="line">422</span><br><span class="line">423</span><br><span class="line">424</span><br><span class="line">425</span><br><span class="line">426</span><br><span class="line">427</span><br><span class="line">428</span><br><span class="line">429</span><br><span class="line">430</span><br><span class="line">431</span><br><span class="line">432</span><br><span class="line">433</span><br><span class="line">434</span><br><span class="line">435</span><br><span class="line">436</span><br><span class="line">437</span><br><span class="line">438</span><br><span class="line">439</span><br><span class="line">440</span><br><span class="line">441</span><br><span class="line">442</span><br><span class="line">443</span><br><span class="line">444</span><br><span class="line">445</span><br><span class="line">446</span><br><span class="line">447</span><br><span class="line">448</span><br><span class="line">449</span><br><span class="line">450</span><br><span class="line">451</span><br><span class="line">452</span><br><span class="line">453</span><br><span class="line">454</span><br><span class="line">455</span><br><span class="line">456</span><br><span class="line">457</span><br><span class="line">458</span><br><span class="line">459</span><br><span class="line">460</span><br><span class="line">461</span><br><span class="line">462</span><br><span class="line">463</span><br><span class="line">464</span><br><span class="line">465</span><br><span class="line">466</span><br><span class="line">467</span><br><span class="line">468</span><br><span class="line">469</span><br><span class="line">470</span><br><span class="line">471</span><br><span class="line">472</span><br><span class="line">473</span><br><span class="line">474</span><br><span class="line">475</span><br><span class="line">476</span><br><span class="line">477</span><br><span class="line">478</span><br><span class="line">479</span><br><span class="line">480</span><br><span class="line">481</span><br><span class="line">482</span><br><span class="line">483</span><br><span class="line">484</span><br><span class="line">485</span><br><span class="line">486</span><br><span class="line">487</span><br><span class="line">488</span><br><span class="line">489</span><br><span class="line">490</span><br><span class="line">491</span><br><span class="line">492</span><br><span class="line">493</span><br><span class="line">494</span><br><span class="line">495</span><br><span class="line">496</span><br><span class="line">497</span><br><span class="line">498</span><br><span class="line">499</span><br><span class="line">500</span><br><span class="line">501</span><br><span class="line">502</span><br><span class="line">503</span><br><span class="line">504</span><br><span class="line">505</span><br><span class="line">506</span><br><span class="line">507</span><br><span class="line">508</span><br><span class="line">509</span><br><span class="line">510</span><br><span class="line">511</span><br><span class="line">512</span><br><span class="line">513</span><br><span class="line">514</span><br><span class="line">515</span><br><span class="line">516</span><br><span class="line">517</span><br><span class="line">518</span><br><span class="line">519</span><br><span class="line">520</span><br><span class="line">521</span><br><span class="line">522</span><br><span class="line">523</span><br><span class="line">524</span><br><span class="line">525</span><br><span class="line">526</span><br><span class="line">527</span><br><span class="line">528</span><br><span class="line">529</span><br><span class="line">530</span><br><span class="line">531</span><br><span class="line">532</span><br><span class="line">533</span><br><span class="line">534</span><br><span class="line">535</span><br><span class="line">536</span><br><span class="line">537</span><br><span class="line">538</span><br><span class="line">539</span><br><span class="line">540</span><br><span class="line">541</span><br><span class="line">542</span><br><span class="line">543</span><br><span class="line">544</span><br><span class="line">545</span><br><span class="line">546</span><br><span class="line">547</span><br><span class="line">548</span><br><span class="line">549</span><br><span class="line">550</span><br><span class="line">551</span><br><span class="line">552</span><br><span class="line">553</span><br><span class="line">554</span><br><span class="line">555</span><br><span class="line">556</span><br><span class="line">557</span><br><span class="line">558</span><br><span class="line">559</span><br><span class="line">560</span><br><span class="line">561</span><br><span class="line">562</span><br><span class="line">563</span><br><span class="line">564</span><br><span class="line">565</span><br><span class="line">566</span><br><span class="line">567</span><br><span class="line">568</span><br><span class="line">569</span><br><span class="line">570</span><br><span class="line">571</span><br><span class="line">572</span><br><span class="line">573</span><br><span class="line">574</span><br><span class="line">575</span><br><span class="line">576</span><br><span class="line">577</span><br><span class="line">578</span><br><span class="line">579</span><br><span class="line">580</span><br><span class="line">581</span><br><span class="line">582</span><br><span class="line">583</span><br><span class="line">584</span><br><span class="line">585</span><br><span class="line">586</span><br><span class="line">587</span><br><span class="line">588</span><br><span class="line">589</span><br><span class="line">590</span><br><span class="line">591</span><br><span class="line">592</span><br><span class="line">593</span><br><span class="line">594</span><br><span class="line">595</span><br><span class="line">596</span><br><span class="line">597</span><br><span class="line">598</span><br><span class="line">599</span><br><span class="line">600</span><br><span class="line">601</span><br><span class="line">602</span><br><span class="line">603</span><br><span class="line">604</span><br><span class="line">605</span><br><span class="line">606</span><br><span class="line">607</span><br><span class="line">608</span><br><span class="line">609</span><br><span class="line">610</span><br><span class="line">611</span><br><span class="line">612</span><br><span class="line">613</span><br><span class="line">614</span><br><span class="line">615</span><br><span class="line">616</span><br><span class="line">617</span><br><span class="line">618</span><br><span class="line">619</span><br><span class="line">620</span><br><span class="line">621</span><br><span class="line">622</span><br><span class="line">623</span><br><span class="line">624</span><br><span class="line">625</span><br><span class="line">626</span><br><span class="line">627</span><br><span class="line">628</span><br><span class="line">629</span><br><span class="line">630</span><br><span class="line">631</span><br><span class="line">632</span><br><span class="line">633</span><br><span class="line">634</span><br><span class="line">635</span><br><span class="line">636</span><br><span class="line">637</span><br><span class="line">638</span><br><span class="line">639</span><br><span class="line">640</span><br><span class="line">641</span><br><span class="line">642</span><br><span class="line">643</span><br><span class="line">644</span><br><span class="line">645</span><br><span class="line">646</span><br><span class="line">647</span><br><span class="line">648</span><br><span class="line">649</span><br><span class="line">650</span><br><span class="line">651</span><br><span class="line">652</span><br><span class="line">653</span><br><span class="line">654</span><br><span class="line">655</span><br><span class="line">656</span><br><span class="line">657</span><br><span class="line">658</span><br><span class="line">659</span><br><span class="line">660</span><br><span class="line">661</span><br><span class="line">662</span><br><span class="line">663</span><br><span class="line">664</span><br><span class="line">665</span><br><span class="line">666</span><br><span class="line">667</span><br><span class="line">668</span><br><span class="line">669</span><br><span class="line">670</span><br><span class="line">671</span><br><span class="line">672</span><br><span class="line">673</span><br><span class="line">674</span><br><span class="line">675</span><br><span class="line">676</span><br><span class="line">677</span><br><span class="line">678</span><br><span class="line">679</span><br><span class="line">680</span><br><span class="line">681</span><br><span class="line">682</span><br><span class="line">683</span><br><span class="line">684</span><br><span class="line">685</span><br><span class="line">686</span><br><span class="line">687</span><br><span class="line">688</span><br><span class="line">689</span><br><span class="line">690</span><br><span class="line">691</span><br><span class="line">692</span><br><span class="line">693</span><br><span class="line">694</span><br><span class="line">695</span><br><span class="line">696</span><br><span class="line">697</span><br><span class="line">698</span><br><span class="line">699</span><br><span class="line">700</span><br><span class="line">701</span><br><span class="line">702</span><br><span class="line">703</span><br><span class="line">704</span><br><span class="line">705</span><br><span class="line">706</span><br><span class="line">707</span><br><span class="line">708</span><br><span class="line">709</span><br><span class="line">710</span><br><span class="line">711</span><br><span class="line">712</span><br><span class="line">713</span><br><span class="line">714</span><br><span class="line">715</span><br><span class="line">716</span><br><span class="line">717</span><br><span class="line">718</span><br><span class="line">719</span><br><span class="line">720</span><br><span class="line">721</span><br><span class="line">722</span><br><span class="line">723</span><br><span class="line">724</span><br><span class="line">725</span><br><span class="line">726</span><br><span class="line">727</span><br><span class="line">728</span><br><span class="line">729</span><br><span class="line">730</span><br><span class="line">731</span><br><span class="line">732</span><br><span class="line">733</span><br><span class="line">734</span><br><span class="line">735</span><br><span class="line">736</span><br><span class="line">737</span><br><span class="line">738</span><br><span class="line">739</span><br><span class="line">740</span><br><span class="line">741</span><br><span class="line">742</span><br><span class="line">743</span><br><span class="line">744</span><br><span class="line">745</span><br><span class="line">746</span><br><span class="line">747</span><br><span class="line">748</span><br><span class="line">749</span><br><span class="line">750</span><br><span class="line">751</span><br><span class="line">752</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><br><span class="line">    <span class="attr">&quot;level&quot;</span><span class="punctuation">:</span> <span class="string">&quot;info&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;timestamp&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 class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;experimental&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;cache_file&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;store_fakeip&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">&#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;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;tls&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;dns_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;8.8.4.4&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;🚀 海外网站&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;udp&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;dns_direct&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;223.5.5.5&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;fakeip&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;dns_fakeip&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;inet4_range&quot;</span><span class="punctuation">:</span> <span class="string">&quot;198.18.0.0/16&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;inet6_range&quot;</span><span class="punctuation">:</span> <span class="string">&quot;fc00::/16&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;clash_mode&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;server&quot;</span><span class="punctuation">:</span> <span class="string">&quot;dns_direct&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;strategy&quot;</span><span class="punctuation">:</span> <span class="string">&quot;prefer_ipv4&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;query_type&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">          <span class="string">&quot;A&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="string">&quot;AAAA&quot;</span></span><br><span class="line">        <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;clash_mode&quot;</span><span class="punctuation">:</span> <span class="string">&quot;Global&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;dns_fakeip&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;rewrite_ttl&quot;</span><span class="punctuation">:</span> <span class="number">1</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;clash_mode&quot;</span><span class="punctuation">:</span> <span class="string">&quot;Global&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;dns_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;query_type&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">          <span class="string">&quot;A&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="string">&quot;AAAA&quot;</span></span><br><span class="line">        <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;dns_fakeip&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;rewrite_ttl&quot;</span><span class="punctuation">:</span> <span class="number">1</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;dns_proxy&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;strategy&quot;</span><span class="punctuation">:</span> <span class="string">&quot;ipv4_only&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;independent_cache&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;reverse_mapping&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 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;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;selector&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><br><span class="line">        <span class="string">&quot;&#123;all&#125;&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="string">&quot;Direct&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="string">&quot;🪞 自建节点 - 链式代理&quot;</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="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;selector&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><br><span class="line">        <span class="string">&quot;♻️ 自动选择&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="string">&quot;Direct&quot;</span><span class="punctuation">,</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;✋ 手动切换&quot;</span><span class="punctuation">,</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;📺 省流节点&quot;</span><span class="punctuation">,</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;🇭🇰 香港节点&quot;</span><span class="punctuation">,</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;🇸🇬 新加坡节点&quot;</span><span class="punctuation">,</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;🇺🇲 美国节点&quot;</span><span class="punctuation">,</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;❓ 其它节点&quot;</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="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;selector&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><br><span class="line">        <span class="string">&quot;♻️ 自动选择&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="string">&quot;Direct&quot;</span><span class="punctuation">,</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;📺 省流节点&quot;</span><span class="punctuation">,</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;🇭🇰 香港节点&quot;</span><span class="punctuation">,</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;🇸🇬 新加坡节点&quot;</span><span class="punctuation">,</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;🇺🇲 美国节点&quot;</span><span class="punctuation">,</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;❓ 其它节点&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="string">&quot;&#123;all&#125;&quot;</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="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;selector&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><br><span class="line">        <span class="string">&quot;Block&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="string">&quot;Direct&quot;</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="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;🎥 YouTube&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;selector&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><br><span class="line">        <span class="string">&quot;🚀 节点选择&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="string">&quot;Direct&quot;</span><span class="punctuation">,</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;✋ 手动切换&quot;</span><span class="punctuation">,</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;🛏️ 日常使用&quot;</span><span class="punctuation">,</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;👍 高级节点&quot;</span><span class="punctuation">,</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;🇨🇳 台湾节点&quot;</span><span class="punctuation">,</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;🇯🇵 日本节点&quot;</span><span class="punctuation">,</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;🇰🇷 韩国节点&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="string">&quot;❓ 其它节点&quot;</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="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;🎥 F1 TV&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;selector&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><br><span class="line">        <span class="string">&quot;🚀 节点选择&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="string">&quot;Direct&quot;</span><span class="punctuation">,</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;✋ 手动切换&quot;</span><span class="punctuation">,</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;🛏️ 日常使用&quot;</span><span class="punctuation">,</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;👍 高级节点&quot;</span><span class="punctuation">,</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;🇨🇳 台湾节点&quot;</span><span class="punctuation">,</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;🇯🇵 日本节点&quot;</span><span class="punctuation">,</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;🇰🇷 韩国节点&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="string">&quot;❓ 其它节点&quot;</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="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;🤖 海外 AI&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;selector&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><br><span class="line">        <span class="string">&quot;🚀 节点选择&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="string">&quot;Direct&quot;</span><span class="punctuation">,</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;✋ 手动切换&quot;</span><span class="punctuation">,</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;🛏️ 日常使用&quot;</span><span class="punctuation">,</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;👍 高级节点&quot;</span><span class="punctuation">,</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;🇨🇳 台湾节点&quot;</span><span class="punctuation">,</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;🇯🇵 日本节点&quot;</span><span class="punctuation">,</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;🇰🇷 韩国节点&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="string">&quot;❓ 其它节点&quot;</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="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;selector&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><br><span class="line">        <span class="string">&quot;🚀 节点选择&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="string">&quot;Direct&quot;</span><span class="punctuation">,</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;✋ 手动切换&quot;</span><span class="punctuation">,</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;🛏️ 日常使用&quot;</span><span class="punctuation">,</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;👍 高级节点&quot;</span><span class="punctuation">,</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;🇨🇳 台湾节点&quot;</span><span class="punctuation">,</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;🇯🇵 日本节点&quot;</span><span class="punctuation">,</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;🇰🇷 韩国节点&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="string">&quot;❓ 其它节点&quot;</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="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;selector&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><br><span class="line">        <span class="string">&quot;🚀 节点选择&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="string">&quot;Direct&quot;</span><span class="punctuation">,</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;✋ 手动切换&quot;</span><span class="punctuation">,</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;🛏️ 日常使用&quot;</span><span class="punctuation">,</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;👍 高级节点&quot;</span><span class="punctuation">,</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;🇨🇳 台湾节点&quot;</span><span class="punctuation">,</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;🇯🇵 日本节点&quot;</span><span class="punctuation">,</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;🇰🇷 韩国节点&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="string">&quot;❓ 其它节点&quot;</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="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;selector&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><br><span class="line">        <span class="string">&quot;🚀 节点选择&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="string">&quot;Direct&quot;</span><span class="punctuation">,</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;✋ 手动切换&quot;</span><span class="punctuation">,</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;🛏️ 日常使用&quot;</span><span class="punctuation">,</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;👍 高级节点&quot;</span><span class="punctuation">,</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;🇨🇳 台湾节点&quot;</span><span class="punctuation">,</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;🇯🇵 日本节点&quot;</span><span class="punctuation">,</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;🇰🇷 韩国节点&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="string">&quot;❓ 其它节点&quot;</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="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;selector&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><br><span class="line">        <span class="string">&quot;🚀 节点选择&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="string">&quot;Direct&quot;</span><span class="punctuation">,</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;✋ 手动切换&quot;</span><span class="punctuation">,</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;🛏️ 日常使用&quot;</span><span class="punctuation">,</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;👍 高级节点&quot;</span><span class="punctuation">,</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;🇨🇳 台湾节点&quot;</span><span class="punctuation">,</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;🇯🇵 日本节点&quot;</span><span class="punctuation">,</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;🇰🇷 韩国节点&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="string">&quot;❓ 其它节点&quot;</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="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;tag&quot;</span><span class="punctuation">:</span> <span class="string">&quot;🔐 22 端口&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;selector&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><br><span class="line">        <span class="string">&quot;🚀 节点选择&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="string">&quot;Direct&quot;</span><span class="punctuation">,</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;✋ 手动切换&quot;</span><span class="punctuation">,</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;🛏️ 日常使用&quot;</span><span class="punctuation">,</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;👍 高级节点&quot;</span><span class="punctuation">,</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;🇨🇳 台湾节点&quot;</span><span class="punctuation">,</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;🇯🇵 日本节点&quot;</span><span class="punctuation">,</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;🇰🇷 韩国节点&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="string">&quot;❓ 其它节点&quot;</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="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;selector&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><br><span class="line">        <span class="string">&quot;🚀 节点选择&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="string">&quot;Direct&quot;</span><span class="punctuation">,</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;✋ 手动切换&quot;</span><span class="punctuation">,</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;🛏️ 日常使用&quot;</span><span class="punctuation">,</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;👍 高级节点&quot;</span><span class="punctuation">,</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;🇨🇳 台湾节点&quot;</span><span class="punctuation">,</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;🇯🇵 日本节点&quot;</span><span class="punctuation">,</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;🇰🇷 韩国节点&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="string">&quot;❓ 其它节点&quot;</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="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;urltest&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><br><span class="line">        <span class="string">&quot;&#123;all&#125;&quot;</span></span><br><span class="line">      <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;filter&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;action&quot;</span><span class="punctuation">:</span> <span class="string">&quot;include&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="attr">&quot;keywords&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">            <span class="string">&quot;0.[0-5]|低倍率|省流|大流量&quot;</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="punctuation">&#123;</span></span><br><span class="line">          <span class="attr">&quot;action&quot;</span><span class="punctuation">:</span> <span class="string">&quot;exclude&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="attr">&quot;keywords&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">            <span class="string">&quot;网站|地址|剩余|过期|时间|有效|Traffic|Expire&quot;</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="punctuation">&#123;</span></span><br><span class="line">          <span class="attr">&quot;action&quot;</span><span class="punctuation">:</span> <span class="string">&quot;exclude&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="attr">&quot;keywords&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">            <span class="string">&quot;🇯🇵|JP|jp|日本|Japan|川日|东京|大阪|泉日|埼玉|沪日|深日&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">]</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;📺 省流节点&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;urltest&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><br><span class="line">        <span class="string">&quot;&#123;all&#125;&quot;</span></span><br><span class="line">      <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;filter&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;action&quot;</span><span class="punctuation">:</span> <span class="string">&quot;include&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="attr">&quot;keywords&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">            <span class="string">&quot;0.[0-5]|低倍率|省流|大流量&quot;</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="punctuation">&#123;</span></span><br><span class="line">          <span class="attr">&quot;action&quot;</span><span class="punctuation">:</span> <span class="string">&quot;exclude&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="attr">&quot;keywords&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">            <span class="string">&quot;网站|地址|剩余|过期|时间|有效|Traffic|Expire&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">]</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;👍 高级节点&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;urltest&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><br><span class="line">        <span class="string">&quot;&#123;all&#125;&quot;</span></span><br><span class="line">      <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;filter&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;action&quot;</span><span class="punctuation">:</span> <span class="string">&quot;include&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="attr">&quot;keywords&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">            <span class="string">&quot;专线|专用|高级|直连|急速|高倍率|IEPL|IPLC|AIA|CTM|CC|iepl|iplc|aia|ctm|cc|AC&quot;</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="punctuation">&#123;</span></span><br><span class="line">          <span class="attr">&quot;action&quot;</span><span class="punctuation">:</span> <span class="string">&quot;exclude&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="attr">&quot;keywords&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">            <span class="string">&quot;0.[0-5]|低倍率|省流|大流量&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">]</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;♻️ 自动选择&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;urltest&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><br><span class="line">        <span class="string">&quot;&#123;all&#125;&quot;</span></span><br><span class="line">      <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;filter&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;action&quot;</span><span class="punctuation">:</span> <span class="string">&quot;exclude&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="attr">&quot;keywords&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">            <span class="string">&quot;网站|地址|剩余|过期|时间|有效|Traffic|Expire&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">]</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;🇭🇰 香港节点&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;urltest&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><br><span class="line">        <span class="string">&quot;&#123;all&#125;&quot;</span></span><br><span class="line">      <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;filter&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;action&quot;</span><span class="punctuation">:</span> <span class="string">&quot;include&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="attr">&quot;keywords&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">            <span class="string">&quot;🇭🇰|HK|hk|港|HongKong&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">]</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;🇨🇳 台湾节点&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;urltest&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><br><span class="line">        <span class="string">&quot;&#123;all&#125;&quot;</span></span><br><span class="line">      <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;filter&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;action&quot;</span><span class="punctuation">:</span> <span class="string">&quot;include&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="attr">&quot;keywords&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">            <span class="string">&quot;🇹🇼|TW|tw|臺灣|台|Taiwan|新北|彰化&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">]</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;🇸🇬 新加坡节点&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;urltest&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><br><span class="line">        <span class="string">&quot;&#123;all&#125;&quot;</span></span><br><span class="line">      <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;filter&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;action&quot;</span><span class="punctuation">:</span> <span class="string">&quot;include&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="attr">&quot;keywords&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">            <span class="string">&quot;🇸🇬|SG|sg|坡|狮|Singapore&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">]</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;🇯🇵 日本节点&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;urltest&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><br><span class="line">        <span class="string">&quot;&#123;all&#125;&quot;</span></span><br><span class="line">      <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;filter&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;action&quot;</span><span class="punctuation">:</span> <span class="string">&quot;include&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="attr">&quot;keywords&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">            <span class="string">&quot;🇯🇵|JP|jp|日本|Japan|川日|东京|大阪|泉日|埼玉|沪日|深日&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">]</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;🇺🇲 美国节点&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;urltest&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><br><span class="line">        <span class="string">&quot;&#123;all&#125;&quot;</span></span><br><span class="line">      <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;filter&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;action&quot;</span><span class="punctuation">:</span> <span class="string">&quot;include&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="attr">&quot;keywords&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">            <span class="string">&quot;🇺🇸|US|us|美国|美|United States|波特兰|达拉斯|俄勒冈|凤凰城|费利蒙|硅谷|拉斯维加斯|洛杉矶|圣何塞|圣克拉拉|西雅图|芝加哥&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">]</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;🇰🇷 韩国节点&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;urltest&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><br><span class="line">        <span class="string">&quot;&#123;all&#125;&quot;</span></span><br><span class="line">      <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;filter&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;action&quot;</span><span class="punctuation">:</span> <span class="string">&quot;include&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="attr">&quot;keywords&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">            <span class="string">&quot;🇰🇷|KR|Korea|KOR|首尔|韩|韓&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">]</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;❓ 其它节点&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;selector&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><br><span class="line">        <span class="string">&quot;&#123;all&#125;&quot;</span></span><br><span class="line">      <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;filter&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;action&quot;</span><span class="punctuation">:</span> <span class="string">&quot;exclude&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="attr">&quot;keywords&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">            <span class="string">&quot;🇭🇰|HK|hk|港|HongKong|🇹🇼|TW|tw|臺灣|台|Taiwan|新北|彰化|🇸🇬|SG|sg|坡|狮|Singapore|🇯🇵|JP|jp|日本|Japan|川日|东京|大阪|泉日|埼玉|沪日|深日|🇺🇸|US|us|美国|美|United States|波特兰|达拉斯|俄勒冈|凤凰城|费利蒙|硅谷|拉斯维加斯|洛杉矶|圣何塞|圣克拉拉|西雅图|芝加哥|🇰🇷|KR|Korea|KOR|首尔|韩|韓&quot;</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="punctuation">&#123;</span></span><br><span class="line">          <span class="attr">&quot;action&quot;</span><span class="punctuation">:</span> <span class="string">&quot;exclude&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="attr">&quot;keywords&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">            <span class="string">&quot;网站|地址|剩余|过期|时间|有效|Traffic|Expire&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">]</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;Direct&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;direct&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;domain_resolver&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;server&quot;</span><span class="punctuation">:</span> <span class="string">&quot;dns_direct&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;strategy&quot;</span><span class="punctuation">:</span> <span class="string">&quot;prefer_ipv4&quot;</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">&#123;</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 class="punctuation">,</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><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;final&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;auto_detect_interface&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;default_domain_resolver&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;server&quot;</span><span class="punctuation">:</span> <span class="string">&quot;dns_direct&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;strategy&quot;</span><span class="punctuation">:</span> <span class="string">&quot;prefer_ipv4&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;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;action&quot;</span><span class="punctuation">:</span> <span class="string">&quot;sniff&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;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><br><span class="line">            <span class="attr">&quot;protocol&quot;</span><span class="punctuation">:</span> <span class="string">&quot;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;port&quot;</span><span class="punctuation">:</span> <span class="number">53</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;action&quot;</span><span class="punctuation">:</span> <span class="string">&quot;hijack-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;ip_is_private&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;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;clash_mode&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;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;clash_mode&quot;</span><span class="punctuation">:</span> <span class="string">&quot;Global&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;🚀 海外网站&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;rule_set&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">          <span class="string">&quot;geosite-category-ads-all&quot;</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;🛑 广告拦截&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;rule_set&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">          <span class="string">&quot;geosite-youtube&quot;</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;🎥 YouTube&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><br><span class="line">          <span class="string">&quot;formula1.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;outbound&quot;</span><span class="punctuation">:</span> <span class="string">&quot;🎥 F1 TV&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;rule_set&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">          <span class="string">&quot;geosite-category-ai-!cn&quot;</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;🤖 海外 AI&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;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;and&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;rule_set&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">              <span class="string">&quot;geosite-binance&quot;</span><span class="punctuation">,</span></span><br><span class="line">              <span class="string">&quot;geosite-huobi&quot;</span><span class="punctuation">,</span></span><br><span class="line">              <span class="string">&quot;geosite-okx&quot;</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="punctuation">&#123;</span></span><br><span class="line">            <span class="attr">&quot;domain&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">              <span class="string">&quot;www.okx.com&quot;</span><span class="punctuation">,</span></span><br><span class="line">              <span class="string">&quot;web3.okx.com&quot;</span><span class="punctuation">,</span></span><br><span class="line">              <span class="string">&quot;wallet.okx.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;invert&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;outbound&quot;</span><span class="punctuation">:</span> <span class="string">&quot;🪙 国内交易所&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;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;and&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;rule_set&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">              <span class="string">&quot;geosite-geolocation-cn&quot;</span><span class="punctuation">,</span></span><br><span class="line">              <span class="string">&quot;geosite-tld-cn&quot;</span><span class="punctuation">,</span></span><br><span class="line">              <span class="string">&quot;geoip-cn&quot;</span><span class="punctuation">,</span></span><br><span class="line">              <span class="string">&quot;geosite-steam&quot;</span><span class="punctuation">,</span></span><br><span class="line">              <span class="string">&quot;geosite-category-ntp&quot;</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="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="string">&quot;geosite-google@cn&quot;</span></span><br><span class="line">            <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">            <span class="attr">&quot;domain_suffix&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">              <span class="string">&quot;steampowered.com&quot;</span><span class="punctuation">,</span></span><br><span class="line">              <span class="string">&quot;steamcommunity.com&quot;</span><span class="punctuation">,</span></span><br><span class="line">              <span class="string">&quot;steamstatic.com&quot;</span><span class="punctuation">,</span></span><br><span class="line">              <span class="string">&quot;steamusercontent.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;invert&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;outbound&quot;</span><span class="punctuation">:</span> <span class="string">&quot;🎯 全球直连&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;rule_set&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">          <span class="string">&quot;geosite-geolocation-!cn&quot;</span><span class="punctuation">,</span></span><br><span class="line">          <span class="string">&quot;geosite-tld-!cn&quot;</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;🚀 海外网站&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;port&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">          <span class="number">80</span><span class="punctuation">,</span></span><br><span class="line">          <span class="number">443</span><span class="punctuation">,</span></span><br><span class="line">          <span class="number">4950</span><span class="punctuation">,</span></span><br><span class="line">          <span class="number">4955</span><span class="punctuation">,</span></span><br><span class="line">          <span class="number">6699</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;❤️ 常用端口&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;port&quot;</span><span class="punctuation">:</span> <span class="number">22</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;🔐 22 端口&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;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-category-ntp&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://github.com/SagerNet/sing-geosite/raw/refs/heads/rule-set/geosite-category-ntp.srs&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;download_detour&quot;</span><span class="punctuation">:</span> <span class="string">&quot;🚀 海外网站&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;geosite-geolocation-!cn&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://github.com/SagerNet/sing-geosite/raw/refs/heads/rule-set/geosite-geolocation-!cn.srs&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;download_detour&quot;</span><span class="punctuation">:</span> <span class="string">&quot;🚀 海外网站&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;geosite-tld-!cn&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://github.com/SagerNet/sing-geosite/raw/refs/heads/rule-set/geosite-tld-!cn.srs&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;download_detour&quot;</span><span class="punctuation">:</span> <span class="string">&quot;🚀 海外网站&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;geosite-category-ads-all&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://github.com/SagerNet/sing-geosite/raw/refs/heads/rule-set/geosite-category-ads-all.srs&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;download_detour&quot;</span><span class="punctuation">:</span> <span class="string">&quot;🚀 海外网站&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;geosite-youtube&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://github.com/SagerNet/sing-geosite/raw/refs/heads/rule-set/geosite-youtube.srs&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;download_detour&quot;</span><span class="punctuation">:</span> <span class="string">&quot;🚀 海外网站&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;geosite-category-ai-!cn&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://github.com/SagerNet/sing-geosite/raw/refs/heads/rule-set/geosite-category-ai-!cn.srs&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;download_detour&quot;</span><span class="punctuation">:</span> <span class="string">&quot;🚀 海外网站&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;geosite-binance&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://github.com/SagerNet/sing-geosite/raw/refs/heads/rule-set/geosite-binance.srs&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;download_detour&quot;</span><span class="punctuation">:</span> <span class="string">&quot;🚀 海外网站&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;geosite-huobi&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://github.com/SagerNet/sing-geosite/raw/refs/heads/rule-set/geosite-huobi.srs&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;download_detour&quot;</span><span class="punctuation">:</span> <span class="string">&quot;🚀 海外网站&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;geosite-okx&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://github.com/SagerNet/sing-geosite/raw/refs/heads/rule-set/geosite-okx.srs&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;download_detour&quot;</span><span class="punctuation">:</span> <span class="string">&quot;🚀 海外网站&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;geosite-google@cn&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://github.com/SagerNet/sing-geosite/raw/refs/heads/rule-set/geosite-google@cn.srs&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;download_detour&quot;</span><span class="punctuation">:</span> <span class="string">&quot;🚀 海外网站&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;geosite-geolocation-cn&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://github.com/SagerNet/sing-geosite/raw/refs/heads/rule-set/geosite-geolocation-cn.srs&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;download_detour&quot;</span><span class="punctuation">:</span> <span class="string">&quot;🚀 海外网站&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;geosite-tld-cn&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://github.com/SagerNet/sing-geosite/raw/refs/heads/rule-set/geosite-tld-cn.srs&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;download_detour&quot;</span><span class="punctuation">:</span> <span class="string">&quot;🚀 海外网站&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;geoip-cn&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://github.com/SagerNet/sing-geoip/raw/refs/heads/rule-set/geoip-cn.srs&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;download_detour&quot;</span><span class="punctuation">:</span> <span class="string">&quot;🚀 海外网站&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;geosite-steam&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://github.com/SagerNet/sing-geosite/raw/refs/heads/rule-set/geosite-steam.srs&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;download_detour&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><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>]]></content>
    
    
    <summary type="html">每个生活在瓷器国的合格程序员，人生中大概都有那么几个时刻暴怒于糟糕的网络环境。作为被隔离的一代，防火墙教会了我大约半数以上的网络技能，感谢您全家，虽然我更希望能学得不那么扭曲。</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>後日談 - 跨性别之旅</title>
    <link href="https://blog.hanssen0.com/articles/After_the_Transgender_Journey/"/>
    <id>https://blog.hanssen0.com/articles/After_the_Transgender_Journey/</id>
    <published>2024-10-05T02:00:00.000Z</published>
    <updated>2026-01-21T00:46:09.517Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>我所经历的大概只是跨性别旅途的前奏，往后才是真正的挑战。也许中场回顾是更准确的描述，但后日谈更贴切此刻的心境，也就随意了。</p></blockquote><p>少有地，我得以从接连而来的事件中偷闲，才发现自己已经很久没有用文字整理思绪了。作为我生命的奇点，与出生时指派性别的背离感产生的影响从很久以前就已经开始。在这条主线的推进下，生活仿佛三幕式的剧本，从潜移默化到冲突爆发到告一段落，我终于慢慢地走到了现在。</p><p>波澜壮阔的冒险已经结束，刺入骨髓的感受逐渐褪色，放下求而不得的执念，面对扑朔迷离的未来。那些为了理想的战斗，全都散落在街边。旅程还在继续，我无意抛出定论，只当纪实。</p><h2 id="种子"><a href="#种子" class="headerlink" title="种子"></a>种子</h2><blockquote><p>人类身上的特性总能往前追溯到一些起点，看似没有关联的事情也许由同一颗种子萌生而出。</p></blockquote><p>不符合传统印象的种子，从序章就开始影响着我的人生。人们会着迷于沿着轨道慢慢驶向终点的安全感，我也尝试过将自己嵌入到规训之中，在「正确」轨道上安稳地前行，但强烈的恶心感注定了我与之无缘。</p><p>对孩童而言，无法嵌入意味着被疏远、缺乏沟通机会，和群体不一致会带来自我怀疑、厌恶，想要嵌入的努力则需要长期的扮演，这些负面因素共同导致了安全感的缺失。</p><p>在这样的基调下，种子随着我的成长慢慢发芽。从私底下尝试打扮自己开始，到公开穿着和指派性别不同的服装，再到使用激素类药物，最后和原生家庭出柜。可惜，这并不是能被接受的选择。</p><p>面对破裂的原生家庭关系，无法独立的经济状态和不确定的未来，我被过量的沮丧和焦虑摧残着。恶化的精神状态配合着童年遗留的问题，都使现实情况变得更糟糕。</p><p>我开始意识到，什么都不做只会让事情日益恶化。根植心底的种子开始蔓延，成为了我无法忽视的存在，我决定往前走，从此列车开始脱轨。</p><h2 id="脱轨"><a href="#脱轨" class="headerlink" title="脱轨"></a>脱轨</h2><blockquote><p>人与人之间，内在与外在不可调和的矛盾终究会导向失控。</p></blockquote><p>人生脱轨缓慢而痛苦的过程，从我决定完成性别重置手术开始。那时，手术成了麦高芬，似乎只要得到，就能有机械降神般的力量将人生拉回轨道。于是我不惜和原生家庭争吵也要取得同意书，为上海封城被迫改为到泰国手术而奔波许久。</p><p>同时我也必须为解决费用问题苦恼，为此我不得不四处向认识的朋友求助。那时我总是在盘算，从哪里才能弄到更多的钱，这为后面的焦虑种下了种子。</p><p>幸运的是，一位愿意相信我的人给予了我足够的支持。在所有的考验后，在二十九个月前的手术当天，在去医院的车上，沉重的焦虑突然消失，在突如其来的寂静中恍惚的我在想：</p><p>「为什么我会在这里？」</p><p>「是谁让我出现在这的？」</p><p>「啊，是我自己决定的。」</p><p>那大概是我前后最平静的一瞬。之后，静脉一阵冰凉，我很快失去了知觉，再睁开眼手术已经完成了。两个月的血腥，半年多的疼痛以及又一场小手术后，一切顺利结束。</p><p>理想化的结果很自然地没有发生，手术没有魔法般地改变生活，只不过向我展现了现实，彻底拉开了脱轨的帷幕。保守的观念不会简单地因为一场手术而改变，原生家庭还是无法认可我对规训的厌恶感，无法认可我对指派的背离感。</p><p>在除夕夜闹崩而被掐住脖子，而离开的时候，我终于意识到了修复关系只是妄想。曾经那些争吵的噩梦，情绪崩溃而叫喊着醒来的晚上，来到了真实世界，成为了脱轨时的悲鸣。完全的绝望和切割，意味着再也没有后备方案。</p><p>从为手术四处筹钱开始，不安感就驱使着我抓住每一份能赚到的钱。即使从手术台下来才不到一周，我也在床上继续工作着。失败就只能等死的恐惧，让我甚至寄望于通过一夜暴富来得到安全感。</p><p>想要同时将多份工作做好，想要拿到文凭来兜底，每一天都在压榨自己所有的时间超时工作，睡眠成为了救赎，心脏在停跳的边缘，我终于理解了烟草作为便携式现实逃避器的意义。渴望着美好结局，却没能成为自己。</p><p>越是想要将人生拉回轨道上，人生就会失控得越严重。失控的列车上充满了惊恐的尖叫，钢铁的变形的轰鸣，几十年会被凝聚在几十秒内结束。一切安静下来，幸存者爬出车外，意识到时间线被压缩成一个奇点，生命此后再也不同。</p><h2 id="下车"><a href="#下车" class="headerlink" title="下车"></a>下车</h2><blockquote><p>创伤之后。</p></blockquote><p>可能是了结了心愿，可能是激素水平的变化，手术之后我的情绪波动不再像以前那么激烈，不再被悲伤攥紧心脏。那些为了欲望的战斗，那些狂躁的思绪，变成了某种更加绵延不绝的东西，却不曾消失过。朋友们还在用过去的名字称呼我，不解的眼光依然存在，没有什么翻天覆地的变化。</p><p>不断追求虚无的安全感，如此生活二十年，直到大厦崩塌。我理所当然地是个普通的人类，没法同时过好一份以上的人生——我总归要放弃些什么。我意识到了自己的无能为力，不再寄望于原生家庭，从学校里辍学，开始尝试为自己的工作做长期打算。</p><p>列车在荒野上死寂着，蜷缩在保护所里已不再有意义，而活下去还是一如既往地困难。在压抑的世界上，人们各自有欲望，想要让别人内化自己的声音。人类总是荒谬至极，发生什么都不值得奇怪。</p><p>我常有无来由的偏执，觉得自己活不了多久。可能是生命消逝实在太快，可能是幸运并不总会眷顾，可能是太多挣扎着的人都已经离开。面对「你过得怎么样？」的问候，我喜欢回答「我还活着！」。我由衷地为还活着而感到庆幸，就算这听起来像个玩笑。</p><p>故事已经结束，剩下的是挣扎着活下去。</p><h2 id="挣扎"><a href="#挣扎" class="headerlink" title="挣扎"></a>挣扎</h2><blockquote><p>没有结束，永远没有尽头。</p></blockquote><p>这样的旅途上，不仅仅只有我一个人。最近偶然看到了<a href="https://www.youtube.com/watch?v=2gG210QLWdY" target="_blank" rel="noopener">跨性别者二毛的故事</a>（<a href="https://www.youtube.com/watch?v=u-VaYAzZJT0" target="_blank" rel="noopener">记录片</a>）。在酒吧里认识的导演，在九十分钟的纪录片里，用片段拼凑出了她的一生。开始以选择的性别生活，和所爱的人在一起却怀疑自己，希望靠赌博获得金钱，使用药品麻醉自己，最后屈服于规训回到指派性别。</p><p>二毛似乎一直在不安全感中挣扎，想要活在一个安稳的环境里，却总是求而不得。生命是脆弱的，二毛静悄悄地死去了，只占了十秒钟的缅怀字幕。二毛的挣扎切实地是少数群体的挣扎，在自己能做到的最好的范围内，在经历允许她做到最好的范围内，她为活下去而竭尽全力了。</p><p>我想，我和二毛也没有多少区别，都在寻找确定性的过程中不断地犯着错。每个想要活下去的跨性别者，大概都要下定一次次爬起来的决心吧。挣扎是面对困苦的无奈，又何尝不是一份信仰式的浪漫。</p><p>烈阳大约洗去了伊卡洛斯的不自量力。但回到高高的塔楼上，我还想乘着那份浪漫跃向天空：</p><p>「粉身碎骨也好过被困在天花板下。」</p>]]></content>
    
    
    <summary type="html">波澜壮阔的冒险已经结束，刺入骨髓的感受逐渐褪色，放下求而不得的执念，面对扑朔迷离的未来。那些为了理想的战斗，全都散落在街边。旅程还在继续，我无意抛出定论，只当纪实。</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>Find My Device 中消失的手机</title>
    <link href="https://blog.hanssen0.com/articles/Missing_Phone_from_Find_My_Device_zh-Hans/"/>
    <id>https://blog.hanssen0.com/articles/Missing_Phone_from_Find_My_Device_zh-Hans/</id>
    <published>2023-10-14T07:22:00.000Z</published>
    <updated>2026-01-21T00:46:09.527Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>Keep Paranoid, Beyond Anxiety</p></blockquote><h2 id="新手机"><a href="#新手机" class="headerlink" title="新手机"></a>新手机</h2><p>我的手机总会藏在家里某个不起眼的角落里，也许被子下，也许沙发缝，也许冰箱上。我习惯了在第一时间问音箱我的手机去了哪里，能帮我省不少时间。</p><p>直到半年前，一部新手机没有出现在 Find My Device 的列表里。把选项关了又开，开了又关，把 Google 账号删了又加，加了又删，联系 Google One 的客服，联系三星的客服，都没能解决这个问题。</p><h2 id="The-Island"><a href="#The-Island" class="headerlink" title="The Island"></a>The Island</h2><p>我又想起了这个问题，习惯性地删掉 Google 账号，再添加回去。直觉让我注意到了添加账号时显示的「Sign in with your <strong>work</strong> account」字样。</p><p>出于安全性考虑，新手机里使用了<a href="https://github.com/oasisfeng/island" target="_blank" rel="noopener">「炼妖壶（Island）」</a>这个 App 来隔离私人和工作的 App。我终于发现它是我的手机没有出现在 Find My Device 的原因。</p><p>Island 提供了一个叫 <a href="https://island.oasisfeng.com/#managed-mainland" target="_blank" rel="noopener">「Managed Mainland」</a> 的功能，允许它对私人的 App 进行管理。Island 需要成为 Device Admin 才能启用这项功能，而这会让 Google 认为这是一台受管理的设备。出于预期或是 Bug，Google 不会为这台设备启用 Find My Device，但我依然能看到相关的选项（这绝对是 Google 的问题）。</p><h2 id="解决方案"><a href="#解决方案" class="headerlink" title="解决方案"></a>解决方案</h2><p>显而易见，只要关掉 「Managed Mainland」，添加账号时就会显示正常的「Sign in with your Google Account」字样了，随后这部迟到了半年的 Samsung Galaxy S23 Ultra 就出现在了 Find My Device 的列表里。这不影响 Island 的主要功能，需要冻结 App 的时候也可以直接用 adb 操作。</p><p>终于我不用再满房间找被坐在屁股底下的手机了，好耶！</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;出于安全性考虑，新手机里使用了&lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://github.com/oasisfeng/island&quot;&gt;「炼妖壶（Island）」&lt;/a&gt;这个 App 来隔离私人和工作的 App。我终于发现它是我的手机没有出现在 Find My Device 的原因。&lt;/p&gt;</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>Missing Phone from Find My Device</title>
    <link href="https://blog.hanssen0.com/articles/Missing_Phone_from_Find_My_Device_en/"/>
    <id>https://blog.hanssen0.com/articles/Missing_Phone_from_Find_My_Device_en/</id>
    <published>2023-10-14T07:22:00.000Z</published>
    <updated>2026-01-21T00:46:09.527Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>Keep Paranoid, Beyond Anxiety</p></blockquote><h2 id="A-New-Phone"><a href="#A-New-Phone" class="headerlink" title="A New Phone"></a>A New Phone</h2><p>My phone is always hidden in some inconspicuous corner at home, maybe under the sheets, maybe in the crevices of the sofa, maybe on top of the refrigerator. I’ve gotten used to asking my speaker where my phone is immediately, which saves me a lot of time.</p><p>Until half a year ago, a new phone didn’t show up in the list of Find My Device. Turned the option off and on, on and off, deleted and added my Google account, added and deleted it, contacted Google One customer service, contacted Samsung customer service, none of these solved the problem.</p><h2 id="The-Island"><a href="#The-Island" class="headerlink" title="The Island"></a>The Island</h2><p>Once again the issue comes into my mind, habitually delete my Google account and add it back. Intuition made me notice the words “Sign in with your <strong>work</strong> account” displayed while adding account.</p><p>Due to security reasons, the new phone was installed with the <a href="https://github.com/oasisfeng/island" target="_blank" rel="noopener">Island</a> app to separate personal and work apps. I finally discovered that it was the reason my phone didn’t appear in the Find My Device.</p><p>Island provides a feature called <a href="https://island.oasisfeng.com/#managed-mainland" target="_blank" rel="noopener">“Managed Mainland”</a>, which allows it to control personal apps. Island needs to be a Device Admin to enable this feature, and it makes Google think this is a managed device. Either by expectation or a bug, Google doesn’t enable Find My Device for this device, but I still see the option (definitely a Google’s problem).</p><h2 id="The-Solution"><a href="#The-Solution" class="headerlink" title="The Solution"></a>The Solution</h2><p>Obviously, turn off the “Managed Mainland“, the normal “Sign in with your Google Account” words will show up during adding account, then the Samsung Galaxy S23 Ultra, delayed by half a year, appeared in the list of Find My Device. This does not affect the primary functionality of Island, and adb can freeze apps directly if it’s necessary.</p><p>Finally, I no longer have to search the entire room for my phone that was sitting right under some butt, YEAAAAAH!</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;Due to security reasons, the new phone was installed with the &lt;a target=&quot;_blank&quot; rel=&quot;noopener&quot; href=&quot;https://github.com/oasisfeng/island&quot;&gt;Island&lt;/a&gt; app to separate personal and work apps. I finally discovered that it was the reason my phone didn&#39;t appear in the Find My Device.&lt;/p&gt;</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>万先生去世了</title>
    <link href="https://blog.hanssen0.com/articles/Mr_Wan_has_gone_zh-Hans/"/>
    <id>https://blog.hanssen0.com/articles/Mr_Wan_has_gone_zh-Hans/</id>
    <published>2023-03-08T00:58:00.000Z</published>
    <updated>2026-01-21T00:46:09.527Z</updated>
    
    <content type="html"><![CDATA[<p>万先生去世了，因为一场意外。</p><p>在我说了「对我来说，在活得不错的这几年得了绝症之类的，会是个美妙的结局」的隔天，这个消息锤了我一拳。我没想过，会是自己被口中的「美妙结局」震撼到。</p><p>在离开的人面前，活着的我的一切挣扎都黯然失色。不再需要思考金钱，社交，认同和未来，剩下的是永恒的寂静。</p><p>万先生是一个可爱的人。他跟我相识于那场面试中，告诉我「你的头发好酷」。在做我 Leader 的那段短暂时光，他和我分享了在抑郁中挣扎的经历。</p><p>后来，总能从朋友们口中听到他辞职后的消息。旅行、创业，他应该度过了一段自由而精彩的人生。不出意外的话，他应该会在今年回来工作。</p><p>不出意外的话。</p><p>有时，人生会荒诞地戛然而止，让活着的人去错愕，去思考自己的结局。</p><p>沉重的死亡！濒死体验和死讯，每次都会把我扯到虚无而实在之处。在此时，平时的真实看起来是那么地可笑虚假，而遥远的渺茫未来却变得如此切实摆在眼前。</p><p>这是如此地不可挽回。</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;有时，人生会荒诞地戛然而止，让活着的人去错愕，去思考自己的结局。&lt;/p&gt;</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>Standalone (No dependency)</title>
    <link href="https://blog.hanssen0.com/articles/Standalone_No_Dependency_zh-Hans/"/>
    <id>https://blog.hanssen0.com/articles/Standalone_No_Dependency_zh-Hans/</id>
    <published>2021-05-12T02:18:00.000Z</published>
    <updated>2026-01-21T00:46:09.527Z</updated>
    
    <content type="html"><![CDATA[<h2 id="深潜"><a href="#深潜" class="headerlink" title="深潜"></a>深潜</h2><p>无法分辨我何时开始下沉，也许是两年前，也许是三年前，也许是更早。当我注意到时，周围完全的黑暗让我害怕了，试图感知自己的存在，通过性、酒精与自残。更多的刺激加速着坠落，而更黑的黑暗渴求着刺激。</p><p>情感深处的黑暗是五彩斑斓的。在源源不断，铺天盖地的负面情绪中，扭动着绝妙的满足感和愉悦感，让我沉醉。这些 Siren 用美妙歌喉作为诱饵，等待我触礁。</p><h2 id="希望的那边，是绝望"><a href="#希望的那边，是绝望" class="headerlink" title="希望的那边，是绝望"></a>希望的那边，是绝望</h2><p>最让人难以忍受的，不是黑暗。总有人自大地认为能拯救别人，往黑暗中射出光芒。但面对深潜者的信任，他们不付出任何东西，及时抽身，留下一片更加虚无的黑暗。</p><p>反复遭背叛掐灭了残留的最后一丝信任，「无人可以信任」是唯一可以相信的东西。就算如此，「拯救者」们还会痛心抱怨「为什么你就不能信任我呢？」来进行持续骚扰。</p><p>人类天生自我中心，无论多通情达理的人，也无法理解未感受过的事物。本能驱使人类武断将无知解释为已知，扭曲世界的真相，伤害他人来保护自己。无知引发误解和争执，并且片面正确的争斗永无休止，不会产生对错，只会产生一个片面与另一个片面。</p><h2 id="蓝色药丸"><a href="#蓝色药丸" class="headerlink" title="蓝色药丸"></a>蓝色药丸</h2><p>到了该做决定的时候了：现实的左边是梦想，现实的右边是幻想。纯净的幻想意味着死亡，纯净的梦想意味着成功。走向两边需要同样大的能量，去克服负罪感和恐惧，或去克服自我束缚和阻力。</p><p>婴儿生于幻想，沉浸在完全自我中，然后被拖向现实。因此人们倾向缩回安全区，回到幻想。我期盼着绝妙的幻想世界，但幻想不能中和沾染的现实，在幻想的衬托下污秽的现实显得更难忍受。只要还活着，现实与幻想的同时拉扯带来的折磨就不会停歇。自此，死亡被列在了待办清单上。</p><p>既然我们有性别自由、言论自由和性爱自由，为什么不能有死亡自由？当人们不再歧视自杀，深渊下的人们则可不必受难，而是愉快地追随幻想而去。人被社会责任和自私的依赖构造的绳套套住脖子，在窒息中求死不能。</p><p>很遗憾，我没有勇气去打破歧视。</p><h2 id="Rage-rage-not-only-against-the-dying-of-the-light"><a href="#Rage-rage-not-only-against-the-dying-of-the-light" class="headerlink" title="Rage, rage not only against the dying of the light."></a>Rage, rage not only against the dying of the light.</h2><p>咆哮不止为消逝的光芒，更为达不到的漆黑。</p><p>你不让我快乐地活，也不让我轻松地死。我受够了这该死的一切，是时候对伪善者们释放愤怒了。粉碎他们良好的自我感觉；嘲笑他们可悲的无能；拒绝他们虚伪的援手。</p><p>一切变得一团糟，没有人会站在身边，因为我亲手切断了所有联系。</p><h2 id="能相信的只有自己"><a href="#能相信的只有自己" class="headerlink" title="能相信的只有自己"></a>能相信的只有自己</h2><p>挣脱束缚我的东西，才能达到真实的</p><blockquote><p>Standalone (No dependency)</p></blockquote><p>持续服药半个月后，对依赖无能外物的厌恶让我拒绝了继续下去。我不再等待拯救我的人；不再相信同情我的人；不再欺骗可悲的我。真正的希望？还是绝望的开端？我不知道，至少我正在尝试相信自己。</p><h2 id="I-will-always-remember-when-the-sufferer-was-me"><a href="#I-will-always-remember-when-the-sufferer-was-me" class="headerlink" title="I will always remember when the sufferer was me."></a>I will always remember when the sufferer was me.</h2><p>我畏惧离开虚无，因为这意味着那个状态的我死去。但现实最终会逼迫我离开虚无，而能做的只有铭记经历的记忆。</p><p>当人们说到「悲伤」，很可能他们想说「愤怒」。因为没有达到预期而「愤怒」；因为自己犯错而「愤怒」；因为受到质疑而「愤怒」。没人喜欢承认自己易怒，而「悲伤」成了最常见的伪装。</p><blockquote><p>「你这样做让我很难过」：「你这样做让我很生气」</p></blockquote><p>我感受的悲伤，是自责，是负罪，是绝望。过去未曾体验过的情感，让我开始思考过去所做的有多少是愤怒驱使下的冲动，是自以为是的伪善。</p><h2 id="Run-people-run"><a href="#Run-people-run" class="headerlink" title="Run people run"></a>Run people run</h2><p>停留在原地看起来很轻松，却是事实上最痛苦的。不仅每时每刻都在被不知怎么做的迷茫困扰，还会因毫无进展而受到指责，即使保持不动就已花费了全部能量。</p><p>最终，我做出了决定，开始向选择的方向奔跑。</p><p>希望本文能让读者有所感觉。</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;停留在原地看起来很轻松，却是事实上最痛苦的。不仅每时每刻都在被不知怎么做的迷茫困扰，还会因毫无进展而受到指责，即使保持不动就已花费了全部能量。&lt;/p&gt; &lt;p&gt;最终，我做出了决定，开始向选择的方向奔跑。&lt;/p&gt; &lt;p&gt;希望本文能让读者有所感觉。&lt;/p&gt;</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>一个程序学徒的追求</title>
    <link href="https://blog.hanssen0.com/articles/Pursuit_of_an_Apprentice_zh-Hans/"/>
    <id>https://blog.hanssen0.com/articles/Pursuit_of_an_Apprentice_zh-Hans/</id>
    <published>2020-09-23T22:29:00.000Z</published>
    <updated>2026-01-21T00:46:09.527Z</updated>
    
    <content type="html"><![CDATA[<p>人在瓷器国，政治不正确，拒绝被喷。一切推断均基于国内环境，如有偏见还请包涵。</p><h2 id="写在吹水之前"><a href="#写在吹水之前" class="headerlink" title="写在吹水之前"></a>写在吹水之前</h2><blockquote><p>有火从耶和华面前出来，在坛上烧尽燔祭和脂油，众民一见，就都欢呼，俯伏在地。</p><p align="right">利未记 9:24</p></blockquote><p>这年头，计算机已经热门到了就算是楼下大爷，听见哪家孩子是学电脑的，也会冒出花痴的眼神竖起大拇指说好。造成的后果非常惨烈：黑压压的学徒们，带着刚学会怎么启动的笔记本电脑、琢磨着怎么吹嘘高考分数，涌进了各大院校的计算机系，去听大部分刚上完培训班，同样迷茫的成年人们念幻灯片。</p><p>个人经验有限，本文仅面向已经了解计算机能做什么，但不了解自己能做什么的探索者们。受篇幅限制，我不想重复已有的的「怎么做」，而会更多谈谈「为什么」，帮助读者建立框架后，自行补充细节。因此，本文所涉内容跨度较大，学徒们也许需要实践中逐渐体会，得到自己的想法。</p><h2 id="被忽视的"><a href="#被忽视的" class="headerlink" title="被忽视的"></a>被忽视的</h2><blockquote><p>主叫他们瞎了眼，硬了心，免得他们眼睛看见，心里明白，回转过来，我就医治他们。</p><p align="right">约翰福音 12:40</p></blockquote><p>新世界的大门前人挤人，都希望能踩在坚实的土地上。作业、竞赛、外包，学徒们放弃了思考，请求别人为自己安排道路，忽视了自己所需要的。</p><h3 id="可维护性"><a href="#可维护性" class="headerlink" title="可维护性"></a>可维护性</h3><p>解剖当前的大部分产品，它们并没有用到非常超越的技术，这让很多学徒们觉得「就这？我也能做一个！」。一开始，我们一天几千行代码，东西有了大模样，自我感觉良好。当产品发展到一个体量的时候，我们会突然发现，为这个大模样添加细节已经非常痛苦了。因此，新学徒们吹嘘自己的程序时，被折磨过的学徒们会哭出声。</p><p>程序员至少要考虑三个人：将来、现在和过去的自己。不经意间的高耦合，会让未来的自己整个重做来实现简单的功能；过去的自己随便起的名字，会让现在的自己挠掉头发而造就未来秃头的自己。</p><p>程序员还需要考虑客户。在为客户做程序时，我们永远是「乙方」。网路上充斥着对「甲方」们瞬息万变的需求的吐槽，这给了很多程序员底气去拒绝需求变更。</p><p>这很可笑。</p><p>难以跟上需求改变的产品是糟糕的。不管是因为商业需求，还是因为看到原型后的再设计，客户大部分时间都有合理的原因。改需求会毁了下午茶，不改需求会毁了产品存在的意义，浪费所有花费的时间。</p><p>设计原则让功能修改得以变快速；系统架构让设计原则得以被实现；设计模式让系统架构得以被建立；代码规范让程序错误得以被发现。这些是程序员们的必修课，而重复书写糟糕代码来成为学徒中的「大佬」，是浪费时间。</p><h3 id="优先级"><a href="#优先级" class="headerlink" title="优先级"></a>优先级</h3><blockquote><p>过早的优化是万恶之源。</p><p align="right">高德纳</p></blockquote><p>我们仅对可维护性进行早期设计，而不对其它方面进行过早设计。</p><p>在无知的激流中，人们喜欢抓住已知的部分大谈特谈。项目开发早期，产品的一切都是未知的，于是学徒们就开始讨论熟悉的东西，像数据库、性能优化、配色方案或界面动画。学徒们会说：「嘿伙计，优秀的产品是细节造就的！」。</p><p>但「细节」是指「最后打磨的部分」。</p><p>需求变更时，越充满细节的系统越要求学徒们小心谨慎，这表明细节需要代价，所以不需要的细节需要被尽力推迟实现。</p><p>面对截止日期时，通过推后决定细节，「抛弃细节」得以成为备用方案。对将来的预估是不准确的，而不准确的事情需要备用方案来防止过于自信毁掉一切。</p><h3 id="团队合作-1"><a href="#团队合作-1" class="headerlink" title="团队合作^1"></a>团队合作<a href="%E6%9C%8D%E4%BB%8E%E9%9B%86%E4%BD%93%E3%80%81%E5%9B%A2%E9%98%9F%E8%8D%A3%E8%80%80%E6%98%AF%E5%BF%83%E7%90%86%E6%89%AD%E6%9B%B2%E7%9A%84%E4%BA%A7%E7%89%A9%EF%BC%8C%E4%B8%8E%E5%9B%A2%E9%98%9F%E5%90%88%E4%BD%9C%E6%97%A0%E5%85%B3%E3%80%82">^1</a></h3><p>在优秀的骨架上，我们还需要人力来精雕细琢。</p><p>计算机行业已经庞大到了难以想象的程度。独行开发者的作品，尤其是在生产力领域，想要惊艳世人异常困难，这意味着我们不得不与别人合作。</p><p>曾经参与的一个团队里，每个人都是游离的。代码上，每个人挥洒被填鸭教育压抑的艺术，为一切命名融入上百个梗，在一切钉子上敲打锤子；周会上，每个人分享昨夜挤出的进度，以在接下来的一周中摸鱼；版本管理上，大家几个月一次把下载目录中的代码拷贝到一起，然后为之建立新的版本仓库。</p><p>这是何等的噩梦！这样一个工作效率比个人开发还低的团队有什么存在的必要呢？很可惜，这是目前「工作室」、「社团」或「团队」的常态。</p><p>只有在工作能被并行完成时，团队才有存在的意义。团队需要学习开发方法、项目管理，才能脱离小孩子过家家。</p><h2 id="唯一真正的智慧，就是知道自己一无所知"><a href="#唯一真正的智慧，就是知道自己一无所知" class="headerlink" title="唯一真正的智慧，就是知道自己一无所知"></a>唯一真正的智慧，就是知道自己一无所知</h2><blockquote><p>人不要夸口说骄傲的话，也不要出狂妄的言语。因耶和华是大有智识的神，人的行为被他衡量。</p><p align="right">撒母耳记上 2:3</p></blockquote><p>失去了目标，学徒们寄希望于铺天盖地的「某某学习路线」之类的文章，但它们无法造就好的程序员。熟练掌握各种技术可能让学徒成功，也可能让学徒迷茫。</p><h3 id="各种「框架」、各种「语言」"><a href="#各种「框架」、各种「语言」" class="headerlink" title="各种「框架」、各种「语言」"></a>各种「框架」、各种「语言」</h3><blockquote><p>计算机科学中的每个问题都可以用一间接层解决。</p><p align="right">戴维·約翰·惠勒</p></blockquote><p>那是最有用的技术，那是最没用的技术。</p><p>学徒们以了解的「框架」数量为荣，迷失了自己学习的目的。</p><p>在「框架」下，我们遵守制定好的规则工作，以底层的控制权换得高效的开发。由此可见，「语言」即是狭义的「框架」。</p><p>在数十年构建的高抽象层级上工作，当代的程序员的效率远超过去。学习这些抽象层级是必须的，但学习每一个「框架」不是。大部分「框架」只是对同样抽象层级的不同实现，将时间耗费在数量上没有意义。</p><p>同时我们会发现，翻阅源码来理解「框架」<a href="%E4%B8%8D%E5%8C%85%E6%8B%AC%E5%BC%80%E5%8F%91%E3%80%8C%E6%A1%86%E6%9E%B6%E3%80%8D%E7%9A%84%E6%83%85%E5%86%B5%E3%80%82">^2</a>的行为不仅拿不回对底层的控制权，还放弃了在高抽象层级与人交流的效率，是不合理的。通过文档去理解抽象模型，享受我们交易得到的果实才是更好的做法。</p><h3 id="算法"><a href="#算法" class="headerlink" title="算法"></a>算法</h3><p>少数天才从竞赛中脱颖而出，吸引无数学徒盲目投入其中，最终一无所获，成为整体荣誉的炮灰。</p><p>算法竞赛吞噬了我大约 700 天的时间。不断刷题、研究、压缩时间，最终我得到了一份还过的去的荣誉，以及大量的算法知识。</p><p>但算法领域在不断进化。</p><p>在原型阶段，比起效率问题，我们更关心怎么让产品工作起来，这意味着我们在大部分情况下只需要暴力搜索。在优化阶段，那些为三小时的竞赛时间准备的算法无法满足需求，驱使我们去研究更复杂、庞大的算法。</p><p>算法重要吗？是的。但除非想成为算法的创造者，学徒过早学习大量算法并没有实质意义。为了更好利用时间，也许我们应当在需要的时候再学习最优方案。</p><h3 id="而思想是不怕子弹的"><a href="#而思想是不怕子弹的" class="headerlink" title="而思想是不怕子弹的"></a>而思想是不怕子弹的</h3><blockquote><p>跳转语句是有害的。</p><p align="right">艾兹赫尔·韦伯·戴克斯特拉</p></blockquote><p>「面向对象编程」、「结构化编程」与「函数式编程」的思想，都源于上世纪六、七十年代，把一个上世纪的程序员抓到现代，她（那个时代程序员大多是女性）在震惊中恢复过来后，大概花半天时间熟悉语法就可以开始工作。</p><p>蕴含在不断迭代的技术背后的思想很少改变。在花了 20 年时间穿越 20 年后，我们的知识大部分已经过时。为了在那个时代混饭吃，学习最新技术是必须的，而掌握贯穿时代的思想会帮我们做到这一点。</p><h2 id="「最佳实践」"><a href="#「最佳实践」" class="headerlink" title="「最佳实践」"></a>「最佳实践」</h2><blockquote><p>他们说，来吧，我们要建造一座城和一座塔，塔顶通天，为要传扬我们的名，免得我们分散在全地上。</p><p align="right">创世记 11:4</p></blockquote><p>在一大坨概念之后，我们需要更为具体的能提升产品质量的方法，程序员们将这些经验之谈称为「最佳实践」。</p><h3 id="测试程序"><a href="#测试程序" class="headerlink" title="测试程序"></a>测试程序</h3><p>第一次体会到在庞大的系统中快速发现什么被搞崩了的重要性，是在很早之前在为一个项目贡献代码的时候。虽然接触到了测试程序，但一直没能应用到开发中去，很惭愧。到近期开始管理多人项目，学习测试驱动开发，才得以发现测试背后的优雅。</p><p>程序员们是人，人是不完美的。新的代码，更新的代码，一层层叠加不断腐化程序，直到一切臭不可闻。「重构」是拯救一切的唯一办法，而测试是「重构」坚实的盟友。在我们剖析解构每一段代码时，测试保证了一切没有脱轨，于是我们知道自己确实在「重构」而非「重创」程序。</p><p>学徒们常认为，只有大项目需要测试来保证功能，而小项目编写测试只会拖慢效率。这样想的人大概没有写过测试，因为这是错误的：开发效率取决于程序员的思维，而编写测试让程序员从思考「怎么让程序运行起来」变为思考「怎么拆分程序的逻辑」，这有助于理清思维，从而提高效率。</p><h3 id="版本管理"><a href="#版本管理" class="headerlink" title="版本管理"></a>版本管理</h3><p>天，我们已经到了要推广版本管理的时代。</p><p>蛮荒时期的程序员们，会在开发前拷贝代码，并编上版本号以便在文件中添加版本记录注释。劣势显而易见：首先，整合工作时，大量的时间消耗在手动对比差异上；其次，创建新版本的成本变得异常高，这限制了我们大量创建版本。</p><p>为什么要大量创建版本？</p><p>现代版本管理工具将版本的尺度缩小到了「提交」。我们大量创建「提交」，并追求每次「提交」只涉及一个特性，这要求程序的特性被拆分到互不耦合的模块。</p><p>听起来很熟悉？没错，通过大量创建版本&#x2F;「提交」，版本管理也能帮助程序员理清思维。除此之外，更小的版本变动也提升了合并的效率。</p><h3 id="「依赖反转」"><a href="#「依赖反转」" class="headerlink" title="「依赖反转」"></a>「依赖反转」</h3><p>「依赖反转」是如此广为人知，以至于不少项目就算不理解其思想，也要强行套用。常会看到<code>某个接口</code>下面只有一个叫<code>某个接口的实现</code>的实现类这种用法，让人怀疑这些规则存在的意义。甚至于在某中文装逼社区上，排名前列的答案大都认为接口无用，或说不清楚为什么接口是好的。</p><p>愚昧。</p><p>「依赖反转」提倡从依赖具体类变为依赖接口，这是「控制反转」的基石。「控制反转」通过「依赖注入」<a href="%E4%B8%8D%E4%B8%8D%EF%BC%8C%E4%B8%8D%E6%98%AF%E5%BC%B9%E7%B0%A7%EF%BC%8C%E4%B8%8D%E6%98%AF%E5%92%96%E5%95%A1%EF%BC%8C%E5%AE%83%E4%BB%AC%E6%98%AF%E9%82%AA%E6%81%B6%E7%9A%84%E3%80%82">^3</a>或「依赖找查」，让对象得以对其依赖一无所知。由此，我们将依赖由链式或环状拆分到了树状，大幅度降低了各节点间的耦合。</p><p>低耦合带来最明显的优势，是修改某个节点时，只有其本身与其依赖的接口需要被关注，这为程序带来了可维护性。其次，实现节点的任务得以被并行完成，并能以很低的成本被整合，这为团队合作打下了基础。</p><p>从另一个方面，「控制反转」让我们得以在测试时传递假实现给对象。使用真实现，我们需要在一整条依赖链上运行测试，这强迫我们在测试时进行访问数据库之类的昂贵操作。这样的测试不仅是低效的，还潜藏了破坏生产环境的风险，我们不会希望全部测试都如此<a href="%E6%88%91%E4%BB%AC%E7%A1%AE%E5%AE%9E%E9%9C%80%E8%A6%81%E8%BF%99%E6%A0%B7%E7%9A%84%E6%B5%8B%E8%AF%95%EF%BC%8C%E4%BE%8B%E5%A6%82%E7%AB%AF%E5%88%B0%E7%AB%AF%E6%B5%8B%E8%AF%95%E3%80%82">^4</a>。假实现用简单的方式模拟了真实现的行为，将测试控制在被测对象范围内<a href="%E8%BF%99%E4%BA%9B%E8%A2%AB%E7%A7%B0%E4%B8%BA%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95%E3%80%82">^5</a>。</p><h2 id="终章"><a href="#终章" class="headerlink" title="终章"></a>终章</h2><blockquote><p>到第七日，神造物的工已经完毕，就在第七日歇了他一切的工，安息了。</p><p align="right">创世记 2:2</p></blockquote><p>很不幸又很幸运，大概在十个秋天之前，我接触到了写代码的世界。我作为小孩子懵懵懂懂地走了不少弯路，浪费了很多时间。感谢上帝我真的够有时间来浪费。</p><p>在过去的时间，我遇到了不同阶段的程序学徒，从对计算机毫无概念，到已经参与工业开发。初级学徒遇到的问题总遵守着同样的模式，这让我觉得也许程序学徒们更需要框架上的指导，而不是各式的培训班。</p><p>希望本文能让读者有所收获。</p><h2 id="最终章"><a href="#最终章" class="headerlink" title="最终章"></a>最终章</h2><blockquote><p>传达不了的恋情，已经不需要了。因为已经不再有人，值得去爱了。</p><p align="right">白色相簿 2</p></blockquote><p>胡言乱语中。</p><p>第一次写这样的文章，对一切很迷茫。</p><p>我尽力让本文去专业化。所以我减少术语、删除技术细节甚至不使用英文名词。专业文章已经有很多了，我没有信心写得更好，因此专注于整体的思想框架，而放弃了雕琢细节。</p><p>我尽力让本文风格化。所以我添加引用、混用各式各样的东西。我认为独特的东西能影响读者，而这是传达思想所必须的。</p><p>在程序员领域，人与人之间的联系异常重要。学徒们很难在没有指导的情况下朝正确的方向发展，对此我深有体会。我想这类似「师傅」与「学徒」的关系，因此我称呼程序初学者们为学徒。</p><p>虽然在程序领域混迹多年，但我还处于碌碌无为的状态，因此读者们根据自身的经历，对本文的观点也许会有不同的看法，欢迎交流。</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;在过去的时间，我遇到了不同阶段的程序学徒，从对计算机毫无概念，到已经参与工业开发。初级学徒遇到的问题总遵守着同样的模式，这让我觉得也许程序学徒们更需要框架上的指导，而不是各式的培训班。&lt;/p&gt; &lt;p&gt;希望本文能让读者有所收获。&lt;/p&gt;</summary>
    
    
    
    
  </entry>
  
</feed>
