跳到主要内容

OpenWrt 是一个免费、开源的路由器操作系统。你得到的不是厂商写死的菜单,而是一个带软件包管理器的小型 Linux 系统、名为 LuCI 的网页界面,以及可以当作纯文本阅读的配置模型。这种灵活性,正是搜索“OpenWrt VPN”的人通常熟悉网络的原因:路由器几乎什么都能做,但没有什么是替你做好的。

本文介绍如何在 OpenWrt 上用 WireGuard 或 OpenVPN 配置 VPN 客户端,讲清接口与防火墙区域如何配合,演示如何构建断网保护,并涵盖 DNS、MTU 和测试。我们不保证某项 VPN 服务一定能这样使用:XPASS 尚未验证过路由器方案,受支持的方式是免费的 VPNclient 应用。如果想先看一份不绑定固件的概述,请阅读路由器 VPN 指南。

先确认你的 OpenWrt 设备胜任

安装任何东西之前,先回答三个问题。

  1. 路由器是否受支持,并运行着当前版本? 记下 LuCI 概览页面显示的版本,与项目网站上列出的版本对比。旧版本会缺少修复。
  2. 存储空间够吗? VPN 软件包需要闪存空间。只剩几兆空间的廉价设备可能装不下带依赖库的 OpenVPN;WireGuard 要小得多。在概览页面或用命令 df -h 查看剩余空间。
  3. 处理器够强吗? 加密是 CPU 的活。性能一般的单核设备,通过隧道可能只能跑到线路速度的一小部分。带加密加速的硬件或更快的芯片会更从容。决定之前先实测。

同时备份你的配置。在 LuCI 里,系统菜单下的备份选项会下载一个包含你全部设置的压缩包。请保存在电脑上,而不是路由器上。

最后是访问方面:确保你可以用网线连上路由器,以防防火墙改错导致你从 Wi-Fi 上被挡在外面。OpenWrt 有用于恢复的 failsafe 模式,但最好永远用不上。

理解 OpenWrt 如何组织网络

OpenWrt 把其他固件常常混在一起的三个概念分开了。

  • **接口(Interface)**是逻辑网络。常见的有 LAN(你的家)、WAN(互联网一侧),以及你另外创建的,例如 VPN 接口。
  • **设备(Device)**是背后的物理或虚拟端口和隧道。
  • **防火墙区域(Firewall zone)**把接口分组,并规定它们之间可以转发什么。典型默认值是允许 LAN 转发到 WAN,并阻止从 WAN 进来的流量。

VPN 客户端其实就是一个新接口加一个新的防火墙区域。来自 LAN 的流量被允许转发进 VPN 区域,之后由路由表决定哪些流量真正走隧道。家庭网络使用 RFC 1918 所述的私有地址,所以要让 LAN 的地址段与 VPN 一侧不同,避免重叠。

如果你对这个模型还陌生,开始前不妨花几分钟在 LuCI 里逛逛“网络”“接口”和“防火墙”。后文假定你能找到这些页面。

安装软件包

不同版本的包管理器不同:较旧的版本用 opkg,较新的用 apk,所以请查阅项目文档,找到和你的版本匹配的命令。在 LuCI 中,“系统”下的“软件包”页面可以更新包列表并按名称搜索。

对于 WireGuard,一般需要 WireGuard 工具和 LuCI 的协议支持包;对于 OpenVPN,需要用你选定的加密库编译的 OpenVPN 包及其 LuCI 应用。具体包名见项目的软件包列表。要点如下:

  • 先在可信的连接上更新包列表。
  • 只装需要的。每多一个包就多占一份闪存空间。
  • 如果之后 LuCI 里没出现新的接口类型,就重启或重启网络服务;协议下拉菜单里没有新协议时,清一下浏览器缓存。

格式的细节见 WireGuard 官网和 OpenVPN 社区资源。当两种都可行时,可参考 WireGuard 与 OpenVPN 对比来选择。

VPN 服务必须提供什么

OpenWrt 需要原始信息,而不是应用登录。典型的信息集合如下:

隧道类型 通常会收到什么
WireGuard 你自己的私钥和服务端公钥、隧道地址、带端口的服务器端点,以及允许的地址范围
OpenVPN 一个配置文件,常含证书,若服务使用的话还有用户名和密码

你的服务能提供哪一种,要问服务本身。对 XPASS 而言,“My Pass”页面显示适用于你通行证的设置说明和连接方式,应用使用页面上的用户名和密码登录。我们没有测试过 OpenWrt,所以不要想当然地认为这些信息适用。永远不要把私钥贴到公开论坛、截图或聊天里,把它当作密码。

配置 WireGuard 客户端

LuCI 的路径是:网络、接口、添加新接口,选择 WireGuard 协议,然后填入信息。网络配置文件里的文本形式大致如下,大写部分是占位符:

config interface 'vpn'
    option proto 'wireguard'
    option private_key 'YOUR_PRIVATE_KEY'
    list addresses 'TUNNEL_ADDRESS/32'
    option mtu '1380'

config wireguard_vpn
    option public_key 'SERVICE_PUBLIC_KEY'
    option endpoint_host 'SERVER_ADDRESS'
    option endpoint_port 'PORT'
    option route_allowed_ips '1'
    list allowed_ips '0.0.0.0/0'
    option persistent_keepalive '25'

各部分的作用:

  • private_key 和 addresses 标识隧道里你这一侧。
  • public_key 和 endpoint 标识服务端,请原样复制。
  • allowed_ips 0.0.0.0/0 配合 route_allowed_ips,告诉路由器把所有 IPv4 流量送进隧道;更窄的范围则只送部分目的地。
  • persistent_keepalive 帮助隧道穿过路由器前面的 NAT 网关。
  • mtu 设得稍低,为隧道开销留出空间,必要时之后再调整。

应用更改后,在 LuCI 或用命令 wg show 查看状态。出现最近的握手时间,说明两端已经找到彼此;没有握手通常意味着密钥不对、端点不对或端口被阻断。

配置 OpenVPN 客户端

对于 OpenVPN,在 LuCI 的 OpenVPN 部分上传或粘贴配置文件,或把文件放进 OpenVPN 的配置目录。然后为隧道设备创建一个接口,否则防火墙没有可以挂靠区域的对象。

要点:

  • 如果服务需要用户名和密码,把它们存放在权限受限的单独 auth 文件里,并在配置中引用。
  • 确认配置不会推送你没预料到的路由。逐行审阅文件,不要盲目信任。
  • 启动实例并阅读日志。成功启动的结尾会有表示初始化完成的信息。
  • 确认隧道设备存在,然后把它分配给一个新接口,这样才能把它放进防火墙区域。

OpenVPN 提供了很多设置,但在基础隧道稳定之前,别急着调优。一次只改一处,并记下来。

防火墙区域、路由与断网保护

这是整个配置的核心。

  1. 创建防火墙区域,以隧道命名,VPN 接口作为唯一成员。启用伪装(masquerading),让 LAN 设备共用隧道地址,并启用 MSS 钳制。
  2. 允许从 LAN 转发到 VPN 区域。
  3. 删除从 LAN 到 WAN 的转发。 这就是断网保护。只剩 LAN 到 VPN 的转发时,设备只有在隧道开启时才有出网路径;隧道一断,数据包就无处可去。
  4. 保证路由器自身仍可访问。 WAN 区域仍要能到达 VPN 端点,因为隧道是承载在你的正常互联网连接上的。路由器自身的流量与被转发的流量是分开的,所以这样可行。
  5. 应用并测试,最好在有线连接的设备上进行。

这里的思路与VPN 断网保护一文所述相同:故障时关闭,而不是开放。代价是隧道不稳定时设备会断网,而不是悄悄回退。

如果希望某些设备或目的地绕过隧道,OpenWrt 可通过额外的软件包和规则实现基于策略的路由。这是进阶话题:记下你排除了哪些地址,先在 DHCP 设置中保留这些地址,并在每次修改后测试。

DNS、IPv6 与 MTU

有三个细节常常决定一套配置是否可信。

DNS。 如果设备仍然向运营商请求域名解析,你访问的目的地仍然会被它看到。把路由器的 DNS 转发指向能通过隧道访问的解析器,或你的 VPN 服务提供的解析器,并用测试检查。DNS 泄露一文说明了该看什么。

IPv6。 如果运营商提供 IPv6,而你的隧道只承载 IPv4,设备可能在隧道之外使用 IPv6。要么让 IPv6 也走隧道(前提是你的信息支持),要么在使用 VPN 期间关闭 LAN 上的 IPv6。完整的情况参见 IP 泄露。

MTU。 隧道会增加开销,在普通连接上刚好合适的数据包,在隧道里可能过大。症状是网页只加载一半、大文件下载停滞,以及 HTTPS 网站卡住。其机制见 RFC 1191。一点点调小隧道 MTU,重新测试,并保持 MSS 钳制开启。

测试、监控与排错

每次修改之后都做下面这些检查。

  1. **握手或日志:**隧道报告最近成功连接过。
  2. **公网 IP:**LAN 中的设备显示的公网 IP 与之前不同。关闭隧道对比一下。
  3. **DNS 测试:**测试网站看到的解析器属于隧道路径,而不是运营商的。
  4. **断网保护测试:**禁用隧道接口,设备应该断网,而不是继续可用。
  5. **重启测试:**重启路由器,确认一切无需手动操作就恢复。设置接口开机启用。
  6. **速度测试:**在有线连接的电脑上,分别在关闭和开启隧道时测速。

如果出现故障:

  • **没有握手:**重新检查密钥、端点和端口。确认路由器的时钟正确。
  • **有握手但没有流量:**检查允许地址、伪装和转发规则。
  • **能用,过一阵子就不行:**加上 keepalive,检查 WAN 地址是否变化,并查看系统日志。
  • **慢:**与另一种隧道类型对比,减少走隧道的内容,或者接受 CPU 就是上限。
  • **把自己锁在外面:**用网线,或启动进入 failsafe 模式,然后恢复之前保存的备份。

局限与合理预期

  • 路由器上的隧道只保护家里的设备,出了门的笔记本需要自己的应用。
  • OpenWrt 在给你能力的同时也给你责任。防火墙配置错误可能暴露你的网络。
  • 更新可能改变软件包和行为。请阅读发行说明,并保留配置备份。
  • 它不能阻止钓鱼或弱密码,也不会让你匿名。
  • 速度取决于 CPU 和隧道类型。
  • 网站和应用仍有各自的规则,有些会不信任 VPN 地址。

总结

在 OpenWrt 上运行 VPN 客户端,意味着根据服务提供的信息选择 WireGuard 或 OpenVPN,装好对应的软件包,创建接口和专用防火墙区域,通过删除 LAN 到 WAN 的转发实现断网保护,再处理好 DNS、IPv6 和 MTU。每次修改后都要测试,保留备份,并预期路由器的 CPU 会决定速度上限。XPASS 尚未验证过路由器方案。

如果你想要更简单的方式,在每台设备上用应用就不需要这些步骤,价格页面也说明了固定天数的预付通行证是如何运作的。

常见问题

在 OpenWrt 上设置 VPN 一定要用命令行吗?

不一定。LuCI 网页界面可以安装软件包、创建 WireGuard 或 OpenVPN 接口并编辑防火墙区域。命令行更方便查看状态、读取日志和快速应用配置,许多教程使用它是因为文字便于分享。

OpenWrt 上该选 WireGuard 还是 OpenVPN?

选你的 VPN 服务提供了相应信息的那一种。如果两者都可行,WireGuard 通常对性能较弱的路由器处理器更轻,而 OpenVPN 被更多服务支持,选项也更丰富。选择还取决于路由器的 CPU 和可用存储空间。

隧道断开时如何避免流量泄露?

在防火墙里做断网保护:只允许 LAN 区域转发到 VPN 区域,并删除 LAN 到 WAN 的转发。隧道断开时就没有任何被允许的上网路径,设备会断网而不是泄露。

XPASS 能在 OpenWrt 上使用吗?

XPASS 尚未验证过路由器方案,所以不能保证。受支持的方式是 iOS、Android、Windows 和 macOS 上的 VPNclient 应用,“My Pass”页面会显示适用于你通行证的连接信息和方式。

为什么经过隧道后有些网页只加载一半?

这是 MTU 不匹配的典型表现。请逐步调小隧道接口的 MTU 并重新测试,同时考虑在 VPN 防火墙区域启用 MSS 钳制。

关于作者

Bob Kanokphon Thongdee,XPASS VPN 创始人

Bob Kanokphon Thongdee

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

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

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

查看通行证

继续阅读

设备指南

如何在路由器上设置 VPN

一份不绑定具体固件的通用指南:设置前先检查什么、常见设置步骤、DNS 与 kill switch、旅行路由器和常见故障处理。

阅读约 7 分钟

VPN 安全

WireGuard 与 OpenVPN 有什么区别

WireGuard 和 OpenVPN 都能建立加密隧道,但设计、复杂度和灵活性不同。本文用通俗的方式比较,并说明该怎样选择。

阅读约 9 分钟

VPN 安全

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

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

阅读约 12 分钟

VPN 安全

什么是 DNS 泄漏?

DNS 泄漏是指设备在 VPN 隧道之外查询网站地址。本文说明它为什么发生、如何检测,以及该怎么处理。

阅读约 10 分钟

VPN 安全

什么是 IP 泄漏?IPv4 与 IPv6 泄漏详解

VPN 已连接,网站却可能仍然看到你的真实 IP 地址。本文说明 IPv4 与 IPv6 泄漏是怎么发生的、如何测试,以及该怎么处理。

阅读约 9 分钟