<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Shadowsocks on TechLog 技术日志</title><link>https://techlog.122113.xyz/tags/shadowsocks/</link><description>Recent content in Shadowsocks on TechLog 技术日志</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Sat, 22 Aug 2026 20:00:00 +0800</lastBuildDate><atom:link href="https://techlog.122113.xyz/tags/shadowsocks/index.xml" rel="self" type="application/rss+xml"/><item><title>从零打造 Linux TUN 全局代理客户端:sscli 架构与踩坑记录</title><link>https://techlog.122113.xyz/posts/2026-08-22-shadowsocks-linux-cli/</link><pubDate>Sat, 22 Aug 2026 20:00:00 +0800</pubDate><guid>https://techlog.122113.xyz/posts/2026-08-22-shadowsocks-linux-cli/</guid><description>&lt;blockquote&gt;
&lt;p&gt;一个轻量、原生 Linux、无 GUI 的 Shadowsocks 分流工具的诞生过程。从需求分析到架构选型,从核心实现到踩过的每一个坑。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="为什么要做这个"&gt;为什么要做这个&lt;/h2&gt;
&lt;p&gt;市面上的代理工具很多,但很少有同时满足以下条件的:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;纯命令行、无 GUI&lt;/strong&gt;——跑在服务器/WSL 上,没有桌面环境&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;全局接管&lt;/strong&gt;——所有应用流量自动分流,不需要每个程序单独设置代理环境变量&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;规则分流&lt;/strong&gt;——国内直连、被墙的走代理,而不是一刀切全代理或全直连&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;轻量可控&lt;/strong&gt;——不依赖 Clash/mihomo 那套大而全的框架,只要核心功能&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Clash 系太重,simple-tun2socks 没有分流,tun2socks 只做协议转换不做路由决策。于是决定自己造一个。&lt;/p&gt;
&lt;h2 id="架构设计"&gt;架构设计&lt;/h2&gt;
&lt;p&gt;核心思路: &lt;strong&gt;TUN 网卡 + 用户态 TCP/IP 栈 + 规则引擎 + Shadowsocks 子进程&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Linux / WSL
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │ 所有应用流量（无需设置任何代理环境变量）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ▼
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; TUN 网卡 (sscli0)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ▼
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sscli 路由引擎（gvisor 用户态 TCP/IP 栈 + 规则匹配）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├──── DIRECT ──→ 直接出网（fwmark 防回环）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; │
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └──── PROXY ───→ 本地 SOCKS5 → sslocal → VPS
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="关键选型"&gt;关键选型&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;组件&lt;/th&gt;
&lt;th&gt;选型&lt;/th&gt;
&lt;th&gt;理由&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;TUN 设备&lt;/td&gt;
&lt;td&gt;&lt;code&gt;wireguard/tun&lt;/code&gt; (MIT)&lt;/td&gt;
&lt;td&gt;WireGuard 同款,稳定可靠,MIT 许可&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;用户态 TCP/IP 栈&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;gvisor netstack&lt;/strong&gt; (Apache-2.0)&lt;/td&gt;
&lt;td&gt;sing-box/mihomo/tun2socks 同款,200 行就能桥接 TUN&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SOCKS5 客户端&lt;/td&gt;
&lt;td&gt;&lt;code&gt;x/net/proxy&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Go 标准库扩展,支持 UDP ASSOCIATE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shadowsocks 加密&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;shadowsocks-rust 的 sslocal&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;不自己实现加密,复用官方预编译二进制,安全可靠&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;为什么用 gvisor netstack 而不是直接处理 IP 包?因为 gvisor 提供了完整的 TCP/IP 协议栈——你只需要处理&amp;quot;这个连接走代理还是直连&amp;quot;,TCP 三次握手、拥塞控制、重传这些脏活累活全由 gvisor 在用户态搞定。&lt;/p&gt;</description></item></channel></rss>