681 字
3 分钟
在 OpenWrt 上使用 WireGuard
在使用 Tailscale 的过程中,我发现两地互访速度被限制在了1Mbps,严重丢包。经过排查,在天津联通使用IPv6上传时,会出现这个情况,而IPv4上传速度正常。
在检查 Tailscale 的配置后,没有办法优先使用IPv4。或者在路由器上禁用掉IPv6也是可行的。但是我不想禁用掉IPv6。
所以我想到了使用 WireGuard 代替 Tailscale。OpenWrt 固件上已经集成了 WireGuard ,并且是内核级支持,性能更好。另一个好处是与 OpenWrt 的集成很完善,备份升级也更方便。
配置过程
1. 基本条件
- 两台 R5s 路由器,一台在北京,一台在天津
- 两台路由器都有公网 IP,使用 DDNS 配置动态域名
2. 新增接口
分别在两台路由器上新增接口
- 名称:wg0
- 协议:WireGuard VPN
常规设置,如下图所示:
- 点击生成新的密钥对
- 监听端口,我设置为 43120
- IP地址,我设置为 北京 10.0.0.2/24,天津 10.0.0.3/24
- 保存。 再次打开配置,点击对端,添加对端,填写对方的公钥、IP地址、端口,如下图所示:
- 公钥:对方的公钥在wg0的常规设置中可以获得
- 允许的IP:我设置为对方的IP地址和子网,如10.0.0.3/32和 192.168.40.0/24
- 勾选路由允许的IP
- 端点主机:填写对方的DDNS域名
- 端点端口:我设置为43120
- 持续 Keep-Alive:我设置为 25
- 保存
3. 防火墙设置
在北京、天津的路由器上,添加一个新的防火墙区域 vpn,如下图所示: 设置好后保存。
4. 查看链接状态
设置好后,在luci的 状态-WireGuard 中可以看到wg0的状态,如下图所示: 上次握手时间,可以看到连接状态。说明已经OK。 在luci的 状态-路由表 中可以看到路由表,如下图所示: 可以看到wg0的相关路由表:
- 对端的子网段
- wg0的子网段
- wan中中增加了对端的公网IP,网关是当前公网的网关
当前两个路由器已经可以互访了,内网的设备也可以互访。
5. DDNS域名刷新
当DDNS域名更新后,WireGuard需要重新解析对端的IP地址。 OpenWrt 已经集成了wireguard_watchdog,配置到定时任务就可以。IP变更后的时延取决于DNS生效的时间。 在luci的 系统-计划任务 中添加一个新的任务,如下所示:
* * * * * /usr/bin/wireguard_watchdog
保存后就会在DDNS域名更新后,自动更新对端的IP地址。
NOTEwireguard_watchdog生效的前提是对端的持续 Keep-Alive 必须大于0。
在 OpenWrt 上使用 WireGuard
https://www.jianyun.run/posts/use-wireguard-on-openwrt/