家庭网络的策略重构:从自建网关看透明代理与网络主权
-
家庭网络的策略重构:从自建网关看透明代理与网络主权
目录一、引子:一个网关脚本的架构野心
一个数百行的 bash 脚本,把一台普通 PC 变成了 VPN 透明网关 + Wi-Fi 热点。它没有修改一行内核代码,没有刷写固件,没有更换硬件。完成这个转换的是四个抽象层:策略链、DHCP 服务、无线配置和一个状态机。
这不是一个"配置工具"。它是一个网络操作系统的控制面实现——只不过这个控制面是用 shell 脚本搭的,跑在通用 Linux 上。
二、家庭网络的演化:从连通设备到策略引擎
家庭网络的核心抽象经历了一次清晰的三阶段跃迁:
时期 核心抽象 控制面 策略粒度 用户接口 固件路由器(2000s) NAT 路由 固化在固件 IP:端口 Web 页面 可刷机系统(2010s) iptables 规则 内核 netfilter IP:端口 + 有限 L7 SSH + 脚本 策略引擎(2020s) 流量分类 + 执行 用户态进程 域名/URL/应用/协议 YAML / 声明式配置 传统路由器的策略控制面嵌入在固件中。它的"策略"是厂商预设的:NAT 怎么做、QoS 如何分配、DNS 走谁的服务器。用户能改的只有几个表单字段。
刷机(OpenWrt/DD-WRT)将控制面从厂商手里夺回,代价是仍然工作在 iptables 层级——要表达"所有 Netflix 流量走 VPN"这样的策略,需要在四个链里写五条规则,且不同版本的 iptables 语法不兼容。
透明代理方案代表的是第三次跃迁:策略控制面从内核网络栈中被抽离出来,变成了一个独立的应用层引擎。网络策略不再是路由表 + 防火墙规则,而是一份可版本控制、可编程、可共享的策略声明。
关键架构选择是:不修改一行核心代码。服务组件全是标准发行版,编排只在组织层面。这意味着这台机器可以同时运行其他服务——它不是一台"路由器",而是一台偶尔执行路由功能的通用计算机。
三、架构模式
自建网关的核心架构由几个正交维度组成,每个维度都有若干可选策略。
流量策略链
内核包过滤规则被组织为自定义链,与标准链解耦:
- NAT 链:将 LAN 侧流量伪装为 VPN 接口的出站流量
- 转发控制链:管理 LAN 与 VPN 之间的转发,以及故障时的流量阻断
- MSS 链:对 TCP SYN 做 MSS clamping,适配隧道封装带来的 MTU 变化
- DNS 链:劫持下游设备的 DNS 请求,重定向到指定服务器
每条链独立可开关、独立可审计,可在不触及标准链的前提下完全替换。
无线接入点
无线配置需要根据频段、带宽、标准世代动态生成 hostapd 配置。不同搭配对应不同物理层标准,在配置生成时需处理中心信道偏移索引的计算。
DHCP 的生命期耦合
DHCP 作为独立实例运行,绑定到 LAN 接口。当网关停止时,DHCP 随之消失,下游设备自动失去 IP。断网信号内建在服务生命期中,而非依赖外部心跳检测。
状态持久化
网关维护三类持久化状态:用户配置、系统快照(start 前保存,stop 后恢复)、运行标志。stop 是 start 的精确逆操作,确保可反复启停而不产生残留。
VPN 接口抽象
VPN 接口的发现被推迟到运行时,支持自动检测、静态绑定、启动前等待三种模式。这种抽象使 VPN 提供商可替换——只要最终暴露一个网络接口,架构就无需改动。
四、范式移转
旧模型 vs 新模型
维度 旧模型(家用路由器) 新模型(自建网关) 控制面所有权 固件厂商 用户 策略表达 Web 表单 声明式规则 状态持久化 NVRAM 文件系统 升级路径 刷固件 → 变砖风险 编辑配置 → 重启 故障恢复 重置按钮 git revert 可观测性 厂商日志 tcpdump + API 与 VPN 的关系 固件插件 标准网络接口 硬件依赖 专用芯片 通用 CPU + 软件转发 旧模型的本质是"购买一个网络服务"——付钱给厂商,接受它预设的策略和控制粒度。新模型的本质是运营一个策略域——物理连接不变,变的是"谁来决定数据包怎么走"。
密码朋克的实践传统
自建网关不是新想法。它是密码朋克运动三十年来一条持续演进的技术路线的最新节点:
时期 形态 核心对抗目标 1990s PGP、匿名转发器 内容审查、密钥托管 2000s Tor、I2P 流量分析、大规模监控 2010s VPN 门禁、WireGuard 协议简化、可审计加密 2020s 自建 VPN 网关 + 策略引擎 流量画像、边界控制 每一代都在做同一件事:将通信链路上某一层的控制权从中心化实体手中拿回个人手里。PGP 拿回的是消息加密层,Tor 拿回的是路由匿名层,自建网关拿回的是策略决策层。
自建 VPN 网关的特殊之处在于,它是所有这些技术路线的汇聚点。它并不发明新的密码学原语,而是将已有的工具(WireGuard、iptables、无状态防火墙)组合为一个完整的出口策略执行单元。组合本身不是技术突破,但组合的权力归属是。
规避大规模监控的实践意义
大规模监控依赖的核心前提不是"能看到你的内容"(加密已经让这越来越难),而是能建立你的流量行为画像:
- 你什么时间访问哪些服务
- 你的设备使用哪些协议和指纹
- 你的 DNS 查询暴露了哪些意图
- 你的流量模式与哪些已知网络特征匹配
厂商固件路由器在这些环节中扮演的角色常被低估。它不只是流量通道——它在出厂时就预配置了 DNS 上游(可能是运营商或厂商合作伙伴的)、启用了特定遥测协议、运行着不可审计的闭源固件。用户对数据包离开 WAN 口之后的行为有认知,但对数据包在路由器的 CPU 内被谁处理过、被记录了什么是完全没有可知性的。
自建网关在这条链上做了三件事:
- DNS 本地终结:不再依赖上游 ISP 或第三方 DNS,查询在本地处理并转发到可信递归服务器,消除了 DNS 层面的流量分析入口
- 隧道化出口:所有流量通过加密隧道汇聚到单一出口点,将内部多设备的独立流量模式合并为单一隧道流,增加了流量关联的难度
- 可审计的策略平面:每一条规则、每一个跳转都是明文存盘的文本文件,可在任意时刻审查"这台机器在替我做哪些决策"
这三件事都不需要新的技术。它们只是将默认由厂商控制的三项操作,移动到了用户自己控制的执行环境中。
主权个人视角
自建网关对个人主权的意义体现在几个维度:
- 数据控制权:DNS 查询在本机终结,不经过第三方。流量的去向由本地策略决定,而非运营商的路由策略。
- 计算环境控制权:路由器是家庭网络中唯一一个通常不可审计的黑盒。自建网关将这个盒子替换为一个可以逐行审查配置的操作系统进程。
- 对第三方的依赖程度:核心依赖只有几个开源组件和一个 VPN 提供商。没有厂商固件锁定,没有硬件代际强制升级,没有 EOL 倒计时。
- 可退出成本:迁移到另一台机器只需复制配置文件,重新运行初始化。不锁定硬件、不锁定发行版、不锁定 VPN 供应商。
这些维度的共同特征是:降低了用户对供应链中任意单一环节的依赖度。家用路由器的供应链依赖度极高——固件更新、安全补丁、功能迭代全部取决于厂商的意愿和存续。自建网关将每层依赖拆开,使每一层都可独立替换。
五、约束
自建网关的约束也不是技术问题,而是所有权问题的另一面:
- 维护责任转移:策略面控制权的获得,同时意味着故障面责任的全部内化。没有厂商客服可以打,每条超时不响应的 DNS 查询都可能需要你自己 tcpdump。
- 物理层性能折让:通用 CPU 无法与硬件 NAT 和无线 offloading 的专用芯片竞争。千兆以上的链路或高密度 Wi-Fi 场景,软件转发的延迟和吞吐上限明显低于同价位专用设备。
- 供应链仍然存在:自建网关消除的是对路由器固件厂商的依赖,但引入了对 Linux 发行版、内核主线、hostapd 上游的新依赖。每一层都有自己的缺陷和发布时间表。
- 策略即事故面:声明式规则的灵活性意味着出错面也更大。一条规则的顺序错误可能导致整个 LAN 离线。版本控制可以减少这个风险,但不能消除它。
- 无线标准的兼容性开销:Wi-Fi 协议栈在通用操作系统上的实现(hostapd + nl80211 + 驱动固件)的测试覆盖远不及闭源路由器 SDK。某些客户端设备的漫游行为、节能模式、MU-MIMO 兼容性可能不如预期。
六、小结
自建 VPN 网关不是"用软件模拟了一台路由器"。它是一个运行在通用操作系统上的网络控制面,将家庭网络从购买的硬件服务转变为可编程、可审计、可版本控制的策略域。
这个选择的前提不是技术优越性——专用硬件在性能上仍然领先。它的前提是所有权:你愿意牺牲多少吞吐量,来换取对数据包在到达公网前所经过的所有代码都有可知性?
密码朋克运动的历史告诉我们,通信架构的控制权不会自动流向用户。每一层抽象——加密、路由、策略——都需要主动安装。自建网关是这一传统在家庭网络边界上的最新实践:将策略面从固件中提取出来,放在一个你可以逐行审查的文件里。
歡迎留言回复交流。
Log in to reply.