681 字
3 分钟
在 OpenWrt 上使用 WireGuard

在使用 Tailscale 的过程中,我发现两地互访速度被限制在了1Mbps,严重丢包。经过排查,在天津联通使用IPv6上传时,会出现这个情况,而IPv4上传速度正常。

在检查 Tailscale 的配置后,没有办法优先使用IPv4。或者在路由器上禁用掉IPv6也是可行的。但是我不想禁用掉IPv6。

所以我想到了使用 WireGuard 代替 Tailscale。OpenWrt 固件上已经集成了 WireGuard ,并且是内核级支持,性能更好。另一个好处是与 OpenWrt 的集成很完善,备份升级也更方便。

image-20241127183549645

配置过程#

1. 基本条件#

  • 两台 R5s 路由器,一台在北京,一台在天津
  • 两台路由器都有公网 IP,使用 DDNS 配置动态域名

2. 新增接口#

分别在两台路由器上新增接口

  • 名称:wg0
  • 协议:WireGuard VPN

常规设置,如下图所示: image-01

  1. 点击生成新的密钥对
  2. 监听端口,我设置为 43120
  3. IP地址,我设置为 北京 10.0.0.2/24,天津 10.0.0.3/24
  4. 保存。 再次打开配置,点击对端,添加对端,填写对方的公钥、IP地址、端口,如下图所示: image-02
  5. 公钥:对方的公钥在wg0的常规设置中可以获得
  6. 允许的IP:我设置为对方的IP地址和子网,如10.0.0.3/32和 192.168.40.0/24
  7. 勾选路由允许的IP
  8. 端点主机:填写对方的DDNS域名
  9. 端点端口:我设置为43120
  10. 持续 Keep-Alive:我设置为 25
  11. 保存

3. 防火墙设置#

在北京、天津的路由器上,添加一个新的防火墙区域 vpn,如下图所示: image-03 设置好后保存。

4. 查看链接状态#

设置好后,在luci的 状态-WireGuard 中可以看到wg0的状态,如下图所示: image-04 上次握手时间,可以看到连接状态。说明已经OK。 在luci的 状态-路由表 中可以看到路由表,如下图所示: image-05 可以看到wg0的相关路由表:

  1. 对端的子网段
  2. wg0的子网段
  3. wan中中增加了对端的公网IP,网关是当前公网的网关

当前两个路由器已经可以互访了,内网的设备也可以互访。

5. DDNS域名刷新#

当DDNS域名更新后,WireGuard需要重新解析对端的IP地址。 OpenWrt 已经集成了wireguard_watchdog,配置到定时任务就可以。IP变更后的时延取决于DNS生效的时间。 在luci的 系统-计划任务 中添加一个新的任务,如下所示:

* * * * * /usr/bin/wireguard_watchdog

保存后就会在DDNS域名更新后,自动更新对端的IP地址。

NOTE

wireguard_watchdog生效的前提是对端的持续 Keep-Alive 必须大于0。

在 OpenWrt 上使用 WireGuard
https://www.jianyun.run/posts/use-wireguard-on-openwrt/
作者
唐长老日志
发布于
2025-01-22
许可协议
CC BY-NC-SA 4.0