跳到主要内容

树莓派(Raspberry Pi)是一台小巧、便宜、功耗很低、运行 Linux 的计算机,因此很受欢迎,适合那些需要全天开着的小项目。VPN 与它很搭:电视下面或路由器旁边放一个安静的小盒子,不用任何人动手就能保护流量。不过“在树莓派上设置 VPN”可以指三种不同的事情,哪一种合适,取决于你想保护什么。

本文依次讲解角色选择、前期准备、可用的网关配置,以及用来证明它确实在工作的检查方法。内容刻意保持通用,因为不同 VPN 服务的连接方式并不相同。隧道本身的设置请始终以你自己的服务商提供的细节为准。如果你正在把这样的盒子与其他方案做比较,建议先读 VPN 路由器与 VPN 应用对比。

树莓派可以扮演的三种角色

先确定角色再安装任何东西,因为每种角色需要不同的软件,风险也不同。

角色 树莓派做什么 适合谁 难度
客户端 自己连接 VPN,保护树莓派本机的流量 把树莓派当下载机、媒体服务器或小型自动化设备的人 低
网关 连接 VPN,并把其他设备的流量转发进隧道 希望一批固定设备(如电视或游戏主机)使用隧道的家庭 中等
服务器 接受你自己手机和笔记本的连接,以便在外面访问家里 想自建通往家庭网络的隧道的人 较高

前两种使用别人运营的 VPN 服务。第三种意味着你自己运营另一端,需要负责更新、防火墙和可访问的地址,相关比较见 自建 VPN 与商业 VPN。本文聚焦客户端和网关两种角色。

准备树莓派

在准备不充分的板子上跑隧道只会带来烦恼,请先花十分钟打好基础。

  1. 安装最新的 64 位 Raspberry Pi OS Lite(如果你的型号支持)。Lite 镜像没有桌面,占用内存更少,很适合作为服务型设备。
  2. 在烧录工具的高级选项里开启 SSH,并设置强密码或使用密钥,首次启动之前就配置好。密钥可用后再关闭密码登录。
  3. 作为网关时使用网线。 同一块无线电既负责上行又负责下行,既慢又脆弱。
  4. 给它一个固定地址,可以在路由器里做 DHCP 保留,也可以静态配置。其他设备必须知道到哪里找网关。
  5. 全部更新。 运行 sudo apt update && sudo apt full-upgrade,然后重启。
  6. 检查处理器类型:运行 uname -m,64 位系统会显示 aarch64,32 位显示 armv7l。下载的软件必须与之匹配,只为桌面电脑构建的软件包无法运行。
  7. 使用可靠的电源适配器和像样的 SD 卡或 SSD。 欠压和磨损的存储卡导致的随机故障,比任何软件问题都多。

为你的服务安装客户端

怎样连接,完全取决于你的 VPN 服务提供了什么。通常有三种情形。

  • 服务提供标准隧道类型的配置文件,例如 WireGuard 或 OpenVPN。从树莓派的包管理器安装对应的开源客户端并导入文件即可。这是对树莓派最友好的路线。
  • 服务提供 Linux 应用。 请查看下载页面,确认支持哪些处理器类型。树莓派是 ARM 板,只为 x86 电脑制作的安装程序无法在上面运行,不要想当然地认为可以。
  • 服务只提供手机和电脑应用。 这种情况下树莓派无法作为客户端加入,路由器或设备自带的应用是更好的选择。

使用 XPASS 时,用户通过免费的 VPNclient 应用连接,My Pass 页面会显示该通行证的设置说明和支持的连接方式。购买硬件前请先在那里确认,并参阅 Linux 设置指南 了解桌面版 Linux 的步骤。在确认你的服务支持之前,不要假定这块板子一定能与通行证配合使用。

安装完成后,先在树莓派本机上确认隧道:

ip -brief address
curl -s https://example.com -o /dev/null -w "%{http_code}\n"
ip route get 1.1.1.1

当隧道承载所有流量时,路由查询应显示隧道接口,比如 tun0 或 wg0。如何测试 VPN 汇总了在能正常使用后应重复执行的泄漏与地址检查。

把树莓派变成网关

如果其他设备也要使用隧道,树莓派就必须转发它们的数据包。结构是:局域网设备把流量发给树莓派,树莓派再送进隧道,应答沿原路返回。需要三个部分。

开启转发。 创建文件 /etc/sysctl.d/90-forward.conf,内容为 net.ipv4.ip_forward=1,然后运行 sudo sysctl --system。

地址转换。 来自局域网的数据包使用隧道不认识的私有地址,树莓派必须把它们改写成自己的隧道地址,这叫作伪装(masquerading)。

限制转发。 只允许从局域网到隧道的流量,这就是断线保护。隧道一断,接口就不存在,也就没有任何被允许的路径,设备会失去连接,而不是悄悄泄漏。

下面是同时完成这两件事的最小 nftables 规则集:

table ip nat {
  chain postrouting {
    type nat hook postrouting priority 100; policy accept;
    oifname "tun0" masquerade
  }
}

table inet gwfilter {
  chain forward {
    type filter hook forward priority 0; policy drop;
    iifname "eth0" oifname "tun0" accept
    iifname "tun0" oifname "eth0" ct state established,related accept
  }
}

把 tun0 换成你实际的接口名,例如 wg0。保存到 /etc/nftables.conf,运行 sudo nft -f /etc/nftables.conf,并启用 nftables 服务让它在开机时加载。由于 forward 链的策略是 drop,没有任何流量会意外地从 eth0 漏到路由器。这种设计背后的原理见 VPN 断线保护(Kill Switch)是什么。

让设备把流量发给树莓派

只有设备真的把流量发过来,树莓派才有用。有两种方式,各有取舍。

  1. 逐台设备手动设置网关。 在电视、游戏主机或笔记本上把网络改为手动,填入树莓派的地址作为网关和 DNS。这样只影响你选定的设备,而这正是很多人想要的。
  2. 在路由器上修改。 如果路由器允许设置通过 DHCP 下发的默认网关,所有设备都会跟随树莓派。这样很方便,但会让树莓派成为全家的单点故障,路由器也可能不支持。

不管选哪种,都要考虑 DNS。如果设备继续用路由器解析域名,这些查询就会绕开隧道。可以下发隧道的解析器,或者在树莓派上安装 dnsmasq 之类的小型解析器,转发到隧道的 DNS。VPN 分离 DNS 一文解释了两个解析器并存时可能出的问题。

自动启动与故障恢复

每次断电后都需要接键盘的网关,算不上合格的网关。请把下面这些习惯纳入配置。

  • 把隧道设为服务,让它在开机且网络就绪后启动。使用 systemd 管理的客户端时,一条 systemctl enable 命令就够了。
  • 添加重启策略,让短暂故障不会使全家断网。
  • 只有在发现性能逐渐下降时,才设定定期重启的时间窗口,并避开大家看视频或办公的时段。
  • 准备一个廉价的备用方案,比如在路由器上贴一张便条,写明如何让设备改回以路由器为网关。
  • 配置完成后备份 SD 卡镜像。克隆的卡几分钟就能替换损坏的卡。

你需要了解的限制

树莓派是一台性能有限的计算机,坦率地认识这些限制很重要。

  • 吞吐量。 加密要占用 CPU。较新的板子对典型家庭宽带游刃有余,但老型号和使用 Wi-Fi 的板子可能成为瓶颈。请用通过隧道的测速来衡量,而不是猜测。
  • 单点故障。 树莓派、电源或存储卡一旦出问题,所有依赖它的设备都会断网。
  • 只覆盖指向它的设备。 在外使用移动数据的手机完全不在家庭配置的范围内。
  • 不是隐私万能药。 隧道可以对本地网络隐藏你的访问目标,但账户登录、Cookie 和浏览器指纹依然能识别你。参见 VPN 无法保护你的哪些方面。
  • 维护。 常开的设备需要更新,建议每月检查一次。
  • 服务规则。 部分流媒体、银行和游戏服务不喜欢 VPN 连接。这是这些服务自己的规则,并不是树莓派的故障。

常见错误

  • 只需要客户端,却选了服务器角色。
  • 使用为另一种处理器类型构建的软件包。
  • 忘记开启转发,然后疑惑设备为什么没网。
  • 把 forward 策略留成 accept,隧道断开时流量改走路由器。
  • 把设备指向树莓派,却让 DNS 仍留在路由器上。
  • 用功率不足的手机充电器给树莓派供电。
  • 更换路由器后从不重新测试。

总结

先决定树莓派是客户端、网关还是服务器。对于客户端和网关角色:准备一个干净的 Lite 系统,接网线并使用固定地址,安装你的 VPN 服务所支持的客户端方式,用严格的 nftables 规则开启转发,再把选定的设备(包括 DNS)指向它。用与其他环境相同的检查来测试,并记住速度、可用性和隐私方面的限制。

如果想在规划硬件之前了解通行证包含什么,价格页面 有详细信息,拥有通行证之后,My Pass 页面会列出支持的连接方式。

常见问题

树莓派能为家里所有设备提供 VPN 吗?

可以。树莓派可以作为网关,把其他设备的流量转发进隧道,前提是这些设备把它设为默认网关。此时会共用树莓派自己的 CPU 和网口,所以老型号往往比你的宽带先成为瓶颈。

需要哪种型号的树莓派?

如果只是一个客户端或几台家用设备,使用有线连接的 Pi 3、4 或 5 就很从容。Wi-Fi 很慢的超小型号也能用,但吞吐量会远低于现代家庭宽带。

这套方案里树莓派是客户端还是服务器?

取决于你选的角色。作为客户端,它主动连接到 VPN 服务;作为网关,它是一个同时为其他设备转发流量的客户端;作为服务器,它接受你自己设备的连接,那是另一个项目。

树莓派上需要断线保护吗?

如果树莓派要为其他设备转发流量,需要。只允许局域网流量转发到隧道接口的规则,会在隧道断开时让流量停止,而不是悄悄改走普通连接。

树莓派能使用商业 VPN 服务吗?

取决于该服务提供哪些连接方式。请先查看服务商给出的设置信息。对于 XPASS,My Pass 页面会显示你这份通行证支持的连接方式。

关于作者

Bob Kanokphon Thongdee,XPASS VPN 创始人

Bob Kanokphon Thongdee

  • XPASS VPN 创始人
  • eSIMonline.asia 联合创始人
  • 7 年以上网络营销经验
  • Cojourney Visa 与 Cojourney Travel 创始人

短途出行或忙碌的一个月,需要 VPN?

XPASS 提供按天数计算的预付通行证。一次付款,不会自动续费。

查看通行证

继续阅读

VPN 基础

路由器 VPN 还是 VPN 应用:哪种方式适合你的家?

VPN 应该装在路由器上,还是装在每台设备上?本文从速度、智能家居设备、Mesh Wi-Fi、分流和日常便利性几个方面比较两种做法。

阅读约 10 分钟

选购指南

自建 VPN 与商业 VPN 服务怎么选

家里的服务器与商业服务解决的是不同的问题。对比树莓派或 NAS 上的 VPN 与现成服务,包括 CGNAT、维护和安全。

阅读约 9 分钟

VPN 安全

什么是 VPN 断网保护(Kill Switch)?

Kill Switch 能防止 VPN 断开时设备悄悄改用不受保护的连接。本文介绍它的原理,以及如何检查它是否有效。

阅读约 12 分钟

VPN 安全

如何自己评测 VPN:一份测试清单

许多 VPN 评测是为赚取佣金而写的。这份清单教你自己测试任何 VPN:哪些能验证,哪些不能,以及如何给结果打分。

阅读约 9 分钟

VPN 基础

VPN 隧道是什么?数据是怎样被层层包起来的

VPN 隧道不是一个地方,而是一种封装方法:你的数据被包进另一层数据里送到服务器。了解它的结构、生命周期与局限。

阅读约 9 分钟