找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 8483|回复: 125

[红米ax6000] 为红米 AX6000 路由器官方固件增加 wireguard server 并支持自启动

[复制链接]
本帖最后由 silverzhaojr 于 2024-1-11 21:52 编辑

拿到红米 AX6000 路由器也有一段时间了,一直都在用官方固件,主要是为了稳定。最近申请到了宽带公网 IP,因此花了好几天时间,研究了下怎样在官方固件上加上 wireguard 支持,这样可以在外面连接到家里的路由器,访问家里的内网资源。

这里主要用到了 "wireguard-go",不需要内核编译支持 wireguard 模块。测试支持的路由器固件版本包括 "1.0.64~1.0.67"。

具体步骤如下:

1. 下载网盘中的文件,解压后得到 "wireguard" 文件夹;
链接: https://pan.baidu.com/s/1-BB5S638aQsDbShlYy2IrA?pwd=h2ji 提取码: h2ji

2. 默认 wiregurad 服务端的地址设为了 "192.168.69.1/24",如果需要的话,可以修改文件 "wireguard/bin/start-wireguard-daemon.sh":
  1. $ cat wireguard/bin/start-wireguard-daemon.sh
  2. #!/bin/sh
  3. #
  4. # start wireguard on boot
  5. # by: silverzhaojr
  6. #
  7. # included by /etc/config/firewall
  8. #

  9. wg_if="wg0"

  10. [ -n "$wg_if" ] && \
  11. [ -r /data/wireguard/etc/"$wg_if".conf ] && \
  12. (ip link del dev "$wg_if" 2>/dev/null || true) && \
  13. /data/wireguard/bin/wireguard-go "$wg_if" && \
  14. /data/wireguard/bin/wg setconf "$wg_if" /data/wireguard/etc/"$wg_if".conf && \
  15. ip -4 addr add dev "$wg_if" 192.168.69.1/24 && \
  16. ip -6 addr add dev "$wg_if" fd69::1/64 && \   # 需要 ipv6 支持的话,这行必须加上
  17. ip link set dev "$wg_if" up && \
  18. echo "wireguard started successfully!"

  19. # 如果想要 ipv6 支持的话,加上下面这段代码
  20. # for ipv6 support
  21. sleep 120   # 这里等待 120 秒是为了确保路由器重启后有足够的时间获取到 ipv6 地址,可以根据实际情况改变等待时间
  22. # set masq6 for wireguard outgoing traffic
  23. . /lib/functions/network.sh
  24. network_find_wan6 NET_IF6
  25. network_get_device NET_DEV6 "${NET_IF6}"
  26. if [ -n "${NET_DEV6}" ]; then
  27.   ip6tables -t nat -A POSTROUTING -s "fd69::/64" -o "${NET_DEV6}" -j MASQUERADE
  28. fi
复制代码

3. 修改 wireguard 配置文件 "wireguard/etc/wg0.conf":
  1. $ cat wireguard/etc/wg0.conf
  2. [Interface]
  3. ListenPort = 51820
  4. PrivateKey = server/private/key/here=  # <== 这里改成服务器的私钥

  5. [Peer]
  6. PublicKey = you/peer/public/key/here=  # <== 这里改成你想加进来的客户端的公钥
  7. AllowedIPs = 192.168.69.11/32,fd69::11/128  # <== 这里改成你想加进来的客户端的地址,注意要和上面的服务器地址在同一网段

  8. # 需要的话,可以在下面增加更多的 "[Peer]" 字段
  9. [Peer]
  10. ...
复制代码

4. 将文件夹 "wireguard" 复制到红米 AX6000 路由器的 "/data" 目录下,并增加可执行权限:
  1. root@XiaoQiang:~# chmod a+x /data/wireguard/bin/*
复制代码

5. 测试下 wireguard 是否可以正常运行:
  1. root@XiaoQiang:~# /data/wireguard/bin/start-wireguard-daemon.sh
  2. 2022/12/15 15:20:48 Interface wg0 configured.
  3. wireguard started successfully!
复制代码
如果看到 "wireguard started successfully!" 说明成功,可以再运行如下命令查看 wireguard 的运行详情。如果没有任何输出的话,说明有问题,需要进一步排查。
  1. root@XiaoQiang:~# /data/wireguard/bin/wg show
  2. Interface: wg0 (userspace)
  3.   public key: JlYMHTR9gwFE/gZZqYz/bx19/kMMyQY4MmkxDSPxn1A=
  4.   private key: (hidden)
  5.   listening port: 51820

  6. peer: gTslP57kRYnPtvzD4XWq3oUDdJ5iQ7c0mZr59pDQdmU=
  7.   endpoint = (none)
  8.   allowed ips = 192.168.69.11/32
  9.   keep alive interval = 0s
  10.   last handshake time = 0001-01-01T00:00:00Z
  11.   transfer: 0 bytes received, 0 bytes sent
  12.   protocol version = 1
复制代码

6. 修改路由器的防火墙设置,允许客户端连接进来。编辑文件 "/etc/config/firewall",在最后增加如下内容(从 "### wireguard setting ###" 起,至 "### end wireguard setting ###" 结束,包括 "###" 这两行):
  1. root@XiaoQiang:~# vi /etc/config/firewall

  2. ### wireguard setting ###
  3. config zone
  4.     option name 'wg'
  5.     option device 'wg+'
  6.     option input 'ACCEPT'
  7.     option output 'ACCEPT'
  8.     option forward 'ACCEPT'

  9. config forwarding
  10.     option src 'wg'
  11.     option dest 'lan'

  12. config forwarding
  13.     option src 'wg'
  14.     option dest 'wan'

  15. config forwarding
  16.     option src 'lan'
  17.     option dest 'wg'

  18. config rule
  19.     option name 'Allow-WireGuard'
  20.     option src 'wan'
  21.     option dest_port '51820'
  22.     option proto 'udp'
  23.     option target 'ACCEPT'

  24. config include
  25.     option type 'script'
  26.     option path '/data/wireguard/bin/start-wireguard-daemon.sh'
  27.     option enabled '1'
  28. ### end wireguard setting ###
复制代码

7. 重新载入防火墙的设置,使改动生效。这时用客户端连下,应该可以正常连上该 wireguard 服务器了,注意客户端的配置文件中要将服务器的端口设为 "51820":
  1. root@XiaoQiang:~# /etc/init.d/firewall restart

  2. root@XiaoQiang:~# /data/wireguard/bin/wg show
  3. Interface: wg0 (userspace)
  4.   public key: JlYMHTR9gwFE/gZZqYz/bx19/kMMyQY4MmkxDSPxn1A=
  5.   private key: (hidden)
  6.   listening port: 51820

  7. peer: gTslP57kRYnPtvzD4XWq3oUDdJ5iQ7c0mZr59pDQdmU=
  8.   endpoint = 1.2.3.4:18440
  9.   allowed ips = 192.168.69.11/32
  10.   keep alive interval = 0s
  11.   last handshake time = 2022-12-15T15:39:45Z
  12.   transfer: 9264 bytes received, 9228 bytes sent
  13.   protocol version = 1
复制代码

8. 最后可以重启下路由器,以确认 wireguard 自启动是否生效。重启后,用如下命令查看:
  1. root@XiaoQiang:~# ip link | grep wg0
  2. 12: wg0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1420 qdisc fq_codel state UNKNOWN qlen 500

  3. root@XiaoQiang:~# /data/wireguard/bin/wg show
  4. Interface: wg0 (userspace)
  5. ...
复制代码

### 补充内容 ###

a. 如果想临时停止 wireguard server,则在路由器上运行:
  1. root@XiaoQiang:~# ip link del dev wg0
复制代码
稍后可以通过如下命令手动启动:
  1. root@XiaoQiang:~# /data/wireguard/bin/start-wireguard-daemon.sh
复制代码

b. 如果想要禁用 wireguard 的自启动,则编辑文件 "/etc/config/firewall",将其中的 "enabled" 改成 "0":
  1. root@XiaoQiang:~# vi /etc/config/firewall
  2. ...
  3. config include
  4.     option type 'script'
  5.     option path '/data/wireguard/bin/start-wireguard-daemon.sh'
  6.     option enabled '1'  # <== 将这里修改成 "0" 可以禁止 wireguard 的自启动
  7. ### end wireguard setting ###
复制代码

c. 如果想要完全卸载 wireguard,则先删除防火墙中新增的设置(编辑文件 "/etc/config/firewall",删除从 "### wireguard setting ###" 开始至 "### end wireguard setting ###" 的所有内容),再删除文件夹 "/data/wireguard",最后重启路由器:
  1. root@XiaoQiang:~# vi /etc/config/firewall
  2. root@XiaoQiang:~# rm -rf /data/wireguard/
复制代码


评分

参与人数 1恩山币 +2 收起 理由
70*** + 2 风清云淡、飘逸悠然……极爽!

查看全部评分

我的恩山、我的无线 The best wifi forum is right here.
本帖最后由 a8885313 于 2022-12-16 15:10 编辑

按这个配置client端连接后会导致没有网络


客户端配置





客户端显示连接成功,但是服务端没有Peer信息
  1. root@XiaoQiang:/data/wireguard/bin# ./wg show
  2. Interface: wg0 (userspace)
  3.   public key: vWlwXr6NJ1LHISb7GhVtOP5ebpZLTTrBF3cZq1zJXQI=
  4.   private key: (hidden)
  5.   listening port: 51820

  6. root@XiaoQiang:/data/wireguard/bin#
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

点评

看起来是服务端没有配置 peer,因为即使没有任何客户端连进来,"wg show" 也应该显示出所有的 peer 的。再检查下路由器的文件 "/data/wireguard/etc/wg0.conf"。  详情 回复 发表于 2022-12-16 19:19
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

不错的贴子,太好了
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| | 显示全部楼层
a8885313 发表于 2022-12-16 13:49
按这个配置client端连接后会导致没有网络

看起来是服务端没有配置 peer,因为即使没有任何客户端连进来,"wg show" 也应该显示出所有的 peer 的。再检查下路由器的文件 "/data/wireguard/etc/wg0.conf"。

点评

我小米万兆路由器也碰到同样问题,/data/wireguard/etc/wg0.conf 肯定设置好的。 [Interface] ListenPort = 51820 PrivateKey = uC3X8YkhKcPt31jXY1fR0BGqrEvxOLt6AtNJIilID2s= [Peer] PublicKey = Ir7ZwegGHtSBDVd  详情 回复 发表于 2024-2-5 21:30
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

感谢辛苦制作分享,多谢楼主分享,非常不错,此处有你更精彩!!
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

点评

一定要在路由器刷这个 pandavan 固件吗?可以在虚拟机里搞不?不然我也没办法测试。  详情 回复 发表于 2023-3-16 16:54
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| | 显示全部楼层
hwlon 发表于 2023-3-16 11:41
楼主把这个解决了吧https://www.right.com.cn/forum/forum.php?mod=viewthread&tid=8225129&highlight=wire ...

一定要在路由器刷这个 pandavan 固件吗?可以在虚拟机里搞不?不然我也没办法测试。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

来自手机 | 显示全部楼层
谢谢分享,暂时用不上,不过确实是好东西
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

PrivateKey = server/private/key/here=  # <== 这里改成服务器的私钥
服务器私钥怎么得到啊?

点评

可以用如下命令生成:  详情 回复 发表于 2023-3-29 16:53
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| | 显示全部楼层
本帖最后由 silverzhaojr 于 2023-3-29 16:56 编辑
鱼米花生 发表于 2023-3-29 12:05
PrivateKey = server/private/key/here=  #

可以用如下命令生成:

  1. root@XiaoQiang:~# /data/wireguard/bin/wg genkey | tee /tmp/privatekey | /data/wireguard/bin/wg pubkey > /tmp/publickey
  2. root@XiaoQiang:~# cat /tmp/privatekey # 服务器私钥,你那里生成的可能和我的不一样
  3. uC3X8YkhKcPt31jXY1fR0BGqrEvxOLt6AtNJIilID2s=
  4. root@XiaoQiang:~# cat /tmp/publickey # 服务器公钥,这个填写在客户端
  5. Ir7ZwegGHtSBDVdwcinYq/q5SHs5W9lw3eKu6NMF8Fg=
复制代码

点评

之前客户端配置只要复制服务端生成的就行 这个需要自己写吗? 给个模板出来呢  详情 回复 发表于 2023-3-30 09:04
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

silverzhaojr 发表于 2023-3-29 16:53
可以用如下命令生成:

之前客户端配置只要复制服务端生成的就行
这个需要自己写吗?
给个模板出来呢

点评

上面命令生成的 03、05行你就可以直接用。  详情 回复 发表于 2023-3-30 14:08
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| | 显示全部楼层
鱼米花生 发表于 2023-3-30 09:04
之前客户端配置只要复制服务端生成的就行
这个需要自己写吗?
给个模板出来呢

上面命令生成的 03、05行你就可以直接用。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

很棒的文章, 请问一下,ax6000怎么能当client呀,比如,云上有多个机器,想在路由器上装一个client,然后局域网设备都能访问云上的多个机器呢
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

本帖最后由 xiningga 于 2023-5-27 11:05 编辑

搞定了,还是防火墙设置的问题, 1.0.67 按照楼主的方法没问题,
我的需求更复杂一点,想当virtual**用,也就是路由器上当一个peer,腾讯就一个对外出口,其他家里机器都能访问腾讯云内网所有机器。(算是堡垒机型?)
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-4-27 06:37

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表