华硕RT-AX58U路由器中持久化手动添加的WireGuard IP路由的方法咨询
华硕RT-AX58U路由器中持久化手动添加的WireGuard IP路由的方法咨询
兄弟,我太懂你这个糟心的问题了——WireGuard隧道打通后,两端局域网设备互访都正常,偏偏从A的LAN没法访问B的管理界面,手动在B上SSH加个回程路由就好使,但路由器一重启就得重新加,真的麻烦。先给你捋清楚根因:其实就是路由器B的路由表里,默认没把192.168.0.0/24这个网段的回程流量导向WireGuard隧道,导致从A的LAN过来的管理请求,B不知道该怎么把响应包发回去,自然就访问不通了。
你手动加临时路由能生效,说明路由规则本身没问题,现在核心就是怎么把这个路由持久化,让路由器重启后自动生效。针对华硕RT-AX58U这类支持SSH的路由器,我给你几个实测有效的办法:
方法一:用开机自定义脚本自动添加(官方/梅林固件通用)
华硕路由器大多支持开机自动执行自定义脚本,把路由命令写进去就行:
- 先SSH登录路由器B,确认你之前用的临时路由命令是有效的(比如类似
ip route add 192.168.0.0/24 via 10.5.0.1 dev wg0,这里的wg0是你的WireGuard设备名,要对应实际情况) - 先创建自定义脚本的目录(如果没有的话):
mkdir -p /jffs/scripts/ - 新建开机启动脚本
services-start:vi /jffs/scripts/services-start - 把下面的内容写进去(记得替换成你实际的路由命令):
#!/bin/sh # 等10秒再执行,确保WireGuard隧道完全启动后再加路由 sleep 10 ip route add 192.168.0.0/24 via 10.5.0.1 dev wg0 - 给脚本加执行权限:
chmod +x /jffs/scripts/services-start - 保存后重启路由器,测试从A的LAN访问B的管理界面,应该就能正常访问了,而且重启后路由会自动加载。
方法二:直接在WireGuard配置文件里添加路由(更推荐)
其实WireGuard本身支持在配置文件里定义路由,这样不需要依赖开机脚本,更贴合VPN的使用场景:
- SSH登录路由器B,找到WireGuard的配置文件,一般在
/etc/wireguard/目录下,文件名通常是wg0.conf - 编辑这个配置文件,找到对应路由器A的
[Peer]段落,把192.168.0.0/24加入到AllowedIPs里。比如原来的Peer段可能是这样:
你需要改成:[Peer] PublicKey = [路由器A的WireGuard公钥] Endpoint = [路由器A的公网IP:端口] AllowedIPs = 10.5.0.1/32
这样WireGuard每次启动时,会自动为[Peer] PublicKey = [路由器A的WireGuard公钥] Endpoint = [路由器A的公网IP:端口] AllowedIPs = 10.5.0.1/32, 192.168.0.0/24192.168.0.0/24网段创建对应的回程路由,完全不用手动干预。 - 保存配置后,重启WireGuard服务生效:
wg-quick down wg0 && wg-quick up wg0,然后测试访问是否正常,重启路由器后再验证一次就稳了。
方法三:Web界面添加静态路由(适合不想碰命令行的情况)
如果你的华硕路由器是官方固件或者梅林固件,Web界面里一般有“静态路由”的设置项,直接在界面里加就行:
- 目标网络:
192.168.0.0 - 子网掩码:
255.255.255.0 - 网关:
10.5.0.1(也就是路由器A在WireGuard隧道里的IP) - 接口:选择WireGuard对应的接口(比如
wg0或者显示为“WireGuard”的选项)
保存设置后,路由器会自动把这条路由加入系统,而且重启后不会丢失。
小提醒
不管用哪种方法,都要确认WireGuard的设备名(比如wg0)和隧道网关IP(10.5.0.1)是正确的,写错的话路由肯定不生效。另外如果用的是梅林固件,记得先在「系统管理」->「系统设置」里开启“启用JFFS自定义脚本和配置文件”,不然自定义脚本不会执行。
备注:内容来源于stack exchange,提问作者Hannah Vernon
相关产品推荐
相关产品推荐

