Featured image of post 红米AX6000折腾记

红米AX6000折腾记

记录红米AX6000使用Openwrt系统打造舒适上网环境

# 起因

由于实验室的网线口过于稀少且离我距离太远,学校的WIFI又是WIFI5,平时最多只能跑到30MB/s。但我的笔记本支持WIFi6,学校又是千兆网。两条原因一叠加,那就直接上WIFI6的路由器吧。首要的选择条件就是支持刷机,在恩山上逛了一阵子,就决定入手红米的AX6000。可解锁、有第三方固件、512MB内存。特别是这512MB内存,比起我之前用的红米AC2100,直接翻了4倍,相较于原来随便开个插件就没有内存的情况,直接起飞好吧😎。

# 成果

先来一手倒序(毕竟配置的过程比较无聊😇。使用南京大学测速站进行测试,可以看到网速直接拉满,下载东西的时候终于不用等那么久了。

学校WIFI测试 AX6000测速

再加上各种插件,真的很舒适🤤,上网体验直接拉满。下面就是将相关的配置过程做个记录。

# 配置

# 解锁与刷机

这里可以参考B站大佬的视频1,步骤非常详细,直接跟着做就好了。为了备忘,我这里再简单把步骤写一下。

高版本的系统已经封堵了解锁的漏洞,我们要做的第一步就是使用小米修复工具进行降级。

之后进入管理界面并登录,此时地址格式类似下面这样:

1
http://192.168.31.15/cgi-bin/luci/;stok=030b24d39b1a4a549aa12dac23c52313/web/home#router

我们将/web/home#router删除,并加上下面一段:

1
/api/misystem/set_sys_time?timezone=%20%27%20%3B%20zz%3D%24%28dd%20if%3D%2Fdev%2Fzero%20bs%3D1%20count%3D2%202%3E%2Fdev%2Fnull%29%20%3B%20printf%20%27%A5%5A%25c%25c%27%20%24zz%20%24zz%20%7C%20mtd%20write%20-%20crash%20%3B%20

即连接应该为http://192.168.31.15/cgi-bin/luci/;stok=030b24d39b1a4a549aa12dac23c52313/api/......

回车访问,显示{"code":0}表示成功

同理,继续替换:

1
/api/misystem/set_sys_time?timezone=%20%27%20%3b%20reboot%20%3b%20

等待重启完成

登录路由器,替换:

1
/api/misystem/set_sys_time?timezone=%20%27%20%3B%20bdata%20set%20telnet_en%3D1%20%3B%20bdata%20set%20ssh_en%3D1%20%3B%20bdata%20set%20uart_en%3D1%20%3B%20bdata%20commit%20%3B%20

继续替换:

1
/api/misystem/set_sys_time?timezone=%20%27%20%3b%20reboot%20%3b%20

等待重启完成

此时telnet已经开启,连接进入,显示【ARE U OK】的界面,表示telnet成功。

输入下面的命令开启ssh

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
bdata set boot_wait=on
bdata commit
nvram set ssh_en=1
nvram set telnet_en=1
nvram set uart_en=1
nvram set boot_wait=on
nvram commit
sed -i 's/channel=.*/channel="debug"/g' /etc/init.d/dropbear
/etc/init.d/dropbear restart
echo -e 'admin\nadmin' | passwd root

继续输入下面的命令,关闭开发者模式:

1
mtd erase crash

使用ssh连接进入,将xwrt目录里的stock-initramfs-factory.ubi传入tmp目录

输入下面的命令查看系统分区

1
cat /proc/cmdline

输出类似这样:

1
console=ttyS0,115200n1 loglevel=8 firmware=1 uart_en=1

我们主要关注firmware=1这项

如firmware=0输入

1
2
3
4
5
6
7
8
nvram set boot_wait=on
nvram set uart_en=1
nvram set flag_boot_rootfs=1
nvram set flag_last_success=1
nvram set flag_boot_success=1
nvram set flag_try_sys1_failed=0
nvram set flag_try_sys2_failed=0
nvram commit

然后刷入固件

1
ubiformat /dev/mtd9 -y -f /tmp/stock-initramfs-factory.ubi

如firmware=1输入

1
2
3
4
5
6
7
8
nvram set boot_wait=on
nvram set uart_en=1
nvram set flag_boot_rootfs=0
nvram set flag_last_success=0
nvram set flag_boot_success=1
nvram set flag_try_sys1_failed=0
nvram set flag_try_sys2_failed=0
nvram commit

然后刷入固件

1
ubiformat /dev/mtd8 -y -f /tmp/stock-initramfs-factory.ubi

reboot重启 固件后台:http://192.168.15.1/ 账户密码:admin/admin 在后台升级xwrt正式固件

进入xwrt正式固件后台—系统—管理权—ssh访问—打开密码验证和允许root用户凭密码登录-保存并应用。 再次连接SSH(ip192.168.15.1用户名root密码admin),输入以下命令

1
2
3
4
5
6
7
fw_setenv boot_wait on
fw_setenv uart_en 1
fw_setenv flag_boot_rootfs 0
fw_setenv flag_last_success 1
fw_setenv flag_boot_success 1
fw_setenv flag_try_sys1_failed 8
fw_setenv flag_try_sys2_failed 8

之后刷入最新237大佬固件

# 刷入uboot

之前刷入的官方版的镜像,虽然很方便,但是可用空间并不是很多,为了榨干它全部的性能,我还是决定刷入第三方uboot,将官方原始的三个分区合并成一个大分区。

我这里刷入的hanwckf大佬制作的uboot,他支持多分区的切换,还是很方便的。具体的功能和下载链接可以看大佬的博客——mt798x uboot 功能介绍

我们之前刷入过237大佬的固件了,所以FIP分区已经解锁,可以直接刷。

首先要备份原始的分区,像Factory为无线EEPROM分区;Bdata存储着你的SN和MAC。如果没了应该是无法使用别人的分区来使用的。所以一定要备份好。

我们使用dd命令备份分区到tmp文件夹:2

1
2
3
4
5
dd if=/dev/mtd1 of=/tmp/mtd1_BL2.bin
dd if=/dev/mtd2 of=/tmp/mtd2_Nvram.bin
dd if=/dev/mtd3 of=/tmp/mtd3_Bdata.bin
dd if=/dev/mtd4 of=/tmp/mtd4_Factory.bin
dd if=/dev/mtd5 of=/tmp/mtd5_FIP.bin

然后使用WinSCP等软件将备份的文件下载到电脑上。

备份好后,就可以通过WinSCP将uboot文件上传到tmp目录下,并执行下面的命令进行刷入:

1
2
3
d5sum /tmp/mt7986_redmi_ax6000-fip-fixed-parts-multi-layout.bin
mtd write /tmp/mt7986_redmi_ax6000-fip-fixed-parts-multi-layout.bin FIP
mtd verify /tmp/mt7986_redmi_ax6000-fip-fixed-parts-multi-layout.bin FIP

注意对比md5的值是否一致。最后如果成功则会输出Success

将路由器断电,按住Reset键并通电,持续按住10S即可进入uboot了。

由于H大的uboot没有配置DHCP,我们需要手动配置电脑ip:

  • IP地址:192.168.31.100
  • 子网掩码:255.255.255.0
  • 默认网关:192.168.31.1
  • DNS:192.168.31.1

访问192.168.31.1即可进入uboot页面,这时就可以刷入大分区的固件了

# 配置校园网自动连接

在我之前,已经有大佬针对校园网的登录写了自动化脚本

public
校园网登录器
Python

然而,这并不适用我的环境。由于红米AX6000的官方布局采用了A/B分区,导致可用的软件包分区只有20多MB。在这么小的空间中安装个Python,再加上各种各样的库,想想就可怕。

为此,我需要使用一门可以打包成小体积的语言来重构此程序。一开始,我想选择C++,但是C++的网络编程我还没了解过,正在我思考要不要花些时间学习一下,突然想到了有一门语言完美符合我的需求——Golang。跨平台、有方便的网络库,于是我便花了一天时间学习Go,成功将大佬的程序重构了(正好当学习Go语言的练手程序。

public
Go版本的校园网登录器
Go

直接将编译好的二进制文件传入到路由器中,并写好配置文件,之后在后台——“系统”——“启动项”下面的本地启动脚本添加一条运行命令就可以开机启动了。

1
cd /root/login && nohup ./YzuCampusnetLogin > /tmp/login.log 2>&1 &

# 配置ipv6

学校的ipv6下发的是/64地址,一开始我参考这个大佬的教程,使用内网中继的方案来实现ipv6。然而无论我怎么配置,都无法连接互联网。最后发现是学校网关对每一个ipv6地址都会进行登录的校验,如果没有登录就不会放行,那这条路算是彻底堵死了😥。

这样的话,就只能使用nat6了,详细的步骤可以参考这篇教程3

将接口——LAN——IPV6设置中的路由通告服务选为“服务器模式”、DHCPv6 服务选为“服务器模式”、NDP 代理选为“禁用”、DHCPv6 模式选为“无状态的 + 有状态的”、总是通告默认路由勾上

使用ssh连接路由器,在/etc/init.d目录下新建nat6并填入下面的内容:

📃展开代码
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#!/bin/sh /etc/rc.common
# NAT6 init script for OpenWrt // Depends on package: kmod-ipt-nat6

# edited by Sad Pencil at 2020-02-09
# replace route command with ip command to solve issues on new OpenWRT


# edited by Sad Pencil at 2021-11-29
# update line WAN6_INTERFACE=$(uci get "network.$WAN6_NAME.device" || uci get "network.$WAN6_NAME.ifname")


START=55

# Options
# -------

# Use temporary addresses (IPv6 privacy extensions) for outgoing connections? Yes: 1 / No: 0
PRIVACY=1

# Maximum number of attempts before this script will stop in case no IPv6 route is available
# This limits the execution time of the IPv6 route lookup to (MAX_TRIES+1)*(MAX_TRIES/2) seconds. The default (15) equals 120 seconds.
MAX_TRIES=15

# An initial delay (in seconds) helps to avoid looking for the IPv6 network too early. Ideally, the first probe is successful.
# This would be the case if the time passed between the system log messages "Probing IPv6 route" and "Setting up NAT6" is 1 second.
DELAY=5

# Logical interface name of outbound IPv6 connection
# There should be no need to modify this, unless you changed the default network interface names
# Edit by Vincent: I never changed my default network interface names, but still I have to change the WAN6_NAME to "wan" instead of "wan6"
WAN6_NAME="wan6"

# ---------------------------------------------------
# Options end here - no need to change anything below

boot() {
        [ $DELAY -gt 0 ] && sleep $DELAY
        WAN6_INTERFACE=$(uci get "network.$WAN6_NAME.ifname")
        logger -t NAT6 "Probing IPv6 route"
        PROBE=0
        COUNT=1
        while [ $PROBE -eq 0 ]
        do
                if [ $COUNT -gt $MAX_TRIES ]
                then
                        logger -t NAT6 "Fatal error: No IPv6 route found (reached retry limit)" && exit 1
                fi
                sleep $COUNT
                COUNT=$((COUNT+1))
                PROBE=$(ip -6 route | grep -i '^default.*via' | grep -i -F "dev $WAN6_INTERFACE" | grep -i -o 'via.*' | wc -l)
        done

        logger -t NAT6 "Setting up NAT6"

        if [ -z "$WAN6_INTERFACE" ] || [ ! -e "/sys/class/net/$WAN6_INTERFACE/" ] ; then
                logger -t NAT6 "Fatal error: Lookup of $WAN6_NAME interface failed. Were the default interface names changed?" && exit 1
        fi
        #WAN6_GATEWAY=$(ip -6 route | grep -o '2001.*1102' | sed s'/1102/1101::1/g')
        WAN6_GATEWAY=$(ip -6 route | grep -i '^default.*via' | grep -i -F "dev $WAN6_INTERFACE" | grep -i -o 'via.*' | cut -d ' ' -f 2 | head -n 1)
        if [ -z "$WAN6_GATEWAY" ] ; then
                logger -t NAT6 "Fatal error: No IPv6 gateway for $WAN6_INTERFACE found" && exit 1
        fi
        LAN_ULA_PREFIX=$(uci get network.globals.ula_prefix)
        if [ $(echo "$LAN_ULA_PREFIX" | grep -c -E "^([0-9a-fA-F]{4}):([0-9a-fA-F]{0,4}):") -ne 1 ] ; then
                logger -t NAT6 "Fatal error: IPv6 ULA prefix $LAN_ULA_PREFIX seems invalid. Please verify that a prefix is set and valid." && exit 1
        fi

        ip6tables -t nat -I POSTROUTING -s "$LAN_ULA_PREFIX" -o "$WAN6_INTERFACE" -j MASQUERADE
        if [ $? -eq 0 ] ; then
                logger -t NAT6 "Added IPv6 masquerading rule to the firewall (Src: $LAN_ULA_PREFIX - Dst: $WAN6_INTERFACE)"
        else
                logger -t NAT6 "Fatal error: Failed to add IPv6 masquerading rule to the firewall (Src: $LAN_ULA_PREFIX - Dst: $WAN6_INTERFACE)" && exit 1
        fi

        ip -6 route add 2000::/3 via "$WAN6_GATEWAY" dev "$WAN6_INTERFACE"
        if [ $? -eq 0 ] ; then
                logger -t NAT6 "Added $WAN6_GATEWAY to routing table as gateway on $WAN6_INTERFACE for outgoing connections"
        else
                logger -t NAT6 "Error: Failed to add $WAN6_GATEWAY to routing table as gateway on $WAN6_INTERFACE for outgoing connections"
        fi

        if [ $PRIVACY -eq 1 ] ; then
                echo 2 > "/proc/sys/net/ipv6/conf/$WAN6_INTERFACE/accept_ra"
                if [ $? -eq 0 ] ; then
                        logger -t NAT6 "Accepting router advertisements on $WAN6_INTERFACE even if forwarding is enabled (required for temporary addresses)"
                else
                        logger -t NAT6 "Error: Failed to change router advertisements accept policy on $WAN6_INTERFACE (required for temporary addresses)"
                fi
                echo 2 > "/proc/sys/net/ipv6/conf/$WAN6_INTERFACE/use_tempaddr"
                if [ $? -eq 0 ] ; then
                        logger -t NAT6 "Using temporary addresses for outgoing connections on interface $WAN6_INTERFACE"
                else
                        logger -t NAT6 "Error: Failed to enable temporary addresses for outgoing connections on interface $WAN6_INTERFACE"
                fi
        fi

        exit 0
}

执行下面的命令,使脚本开机运行:

1
2
chmod +x /etc/init.d/nat6
/etc/init.d/nat6 enable

修改/etc/sysctl.conf,添加下面的内容:

1
2
3
4
net.ipv6.conf.default.forwarding=2
net.ipv6.conf.all.forwarding=2
net.ipv6.conf.default.accept_ra=2
net.ipv6.conf.all.accept_ra=2

最后在自定义防火墙中添加一行命令:

1
ip6tables -t nat -A POSTROUTING -o $(uci get network.wan6.ifname) -j MASQUERADE

由于硬件的BUG,还需要在开机脚本里添加一条命令,关闭ipv6的硬件加速,不然速度就会其慢无比

1
echo 8 0 > /sys/kernel/debug/hnat/hnat_setting

完成后重启就会发现有ipv6了

然而,在我使用的过程中发现,开启了ipv6后手机打开app时加载的速度肉眼可见的变慢。一开始以为是DNS的问题,但修改了默认的DNS服务器后还是不行。为了保证使用的体验,目前我还是把nat6给关闭了😭。

已经找到了解决方案😉,见下一节

# 配置mosdns

mosdns作为一款自定义程度很高的DNS转发器,在之前的博文《自建DNS实现分流及广告过滤》就已经使用过了,这里我们需要他来解决ipv6 NAT后的卡顿问题。同时,配置好mosdns后,也可以实现广告过滤,dns防污染的功能。

安装可以使用luci-app-mosdns这个项目来实现,直接执行它的脚本即可

1
sh -c "$(curl -ksS https://raw.githubusercontent.com/sbwml/luci-app-mosdns/v5/install.sh)"

和之前的方案一样,我们需要以下项目提供的域名/IP文件:

其实luci-app-mosdns默认提供了一套配置,但是我们需要使用mosdns的优先ipv4的功能,所以只能自己撸配置了。没错,解决ipv6卡顿的最好方式就是不用😥,通过mosdns可以避免操作系统使用优先ipv6的策略。这样既实现了不卡顿,又可以访问纯ipv6网站。

这套配置可以实现屏蔽广告,国内域名用本地DNS解析,国外域名走远程DNS解析。遇到不在列表中的域名,会查询本地DNS,如果返回的是国外地址,则以远程DNS的结果为准。

具体的配置如下:

📃展开代码
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
# Powered by luoboQAQ
log:
  level: warn
  file: "/tmp/log/mosdns.log"

# API 入口设置
api:
  http: "0.0.0.0:9091"

plugins:
  # 国内域名
  - tag: geosite_cn
    type: domain_set
    args:
      files:
        - "/var/mosdns/direct-list.txt"

  # 国内IP
  - tag: geoip_cn
    type: ip_set
    args:
      files:
        - "/var/mosdns/CN-ip-cidr.txt"
        
  # 国外域名
  - tag: geosite_no_cn
    type: domain_set
    args:
      files:
        - "/var/mosdns/proxy-list.txt"

  # 黑名单域名
  - tag: blocklist
    type: domain_set
    args:
      files:
        - "/etc/mosdns/rule/blocklist.txt"

  # 广告域名
  - tag: adlist
    type: domain_set
    args:
      files:
        - "/var/mosdns/ad-domains.txt"

  # PTR黑名单
  - tag: local_ptr
    type: domain_set
    args:
      files:
        - "/etc/mosdns/rule/local-ptr.txt"

  # 缓存插件
  - tag: cache
    type: cache
    args:
      size: 10240
      lazy_cache_ttl: 86400
      # 将缓存保存在磁盘
      dump_file: /tmp/mosdns/cache.dump

  # 转发至本地服务器的插件
  - tag: forward_local
    type: forward
    args:
      upstreams:
        - tag: alidns_dot
          addr: "tls://223.5.5.5"
        - tag: dnspod_dot
          addr: "tls://120.53.53.53"

  # 转发至远程服务器的插件
  - tag: forward_remote
    type: forward
    args:
      upstreams:
        # - tag: easymosdns
        #   addr: "https://doh.apad.pro/dns-query"
        #   bootstrap: "223.5.5.5"
        - tag: cloudflare_dot
          addr: "tls://1.1.1.1"

  # 国内解析
  - tag: local_sequence
    type: sequence
    args:
      - exec: $forward_local

  # fallback 用本地服务器 sequence
  # 返回不包含本地 ip 则 reject
  - tag: local_ip_sequence
    type: sequence
    args:
      - exec: $forward_local
      - matches: "!resp_ip $geoip_cn"
        exec: drop_resp

  # fallback 用远程服务器 sequence
  - tag: remote_sequence
    type: sequence
    args:
      - exec: $forward_remote

  # fallback插件
  - tag: fallback
    type: fallback
    args:
      primary: local_ip_sequence
      secondary: remote_sequence
      threshold: 500
      always_standby: true

  # 有响应终止返回
  - tag: has_resp_sequence
    type: sequence
    args:
      - matches: has_resp
        exec: accept

  # 查询国内域名
  - tag: query_is_local_domain
    type: sequence
    args:
      - matches: qname $geosite_cn
        exec: $local_sequence

  # 查询国外域名
  - tag: query_is_no_local_domain
    type: sequence
    args:
      - matches: qname $geosite_no_cn
        exec: $remote_sequence

  # 查询拒绝域名
  - tag: query_is_reject_domain
    type: sequence
    args:
      - matches: qname $blocklist
        exec: reject 3
      - matches: qname $adlist
        exec: reject 3
      - matches:
        - qtype 12
        - qname $local_ptr
        exec: reject 3
      - matches: qtype 65
        exec: reject 3

  # 主要运行逻辑插件
  - tag: main_sequence
    type: sequence
    args:
      # 去广告
      - exec: $query_is_reject_domain
      - exec: jump has_resp_sequence
      
      # ipv4地址优先,避免NAT占用CPU
      - exec: prefer_ipv4

      - exec: $cache
      - exec: jump has_resp_sequence

      - exec: $query_is_local_domain
      - exec: jump has_resp_sequence
      
      - exec: $query_is_no_local_domain
      - exec: jump has_resp_sequence     

      - exec: $fallback

  # 启动 udp 服务器。
  - tag: udp_server
    type: udp_server
    args:
      entry: main_sequence
      listen: ":5335"

  # 启动 tcp 服务器。
  - tag: tcp_server
    type: tcp_server
    args:
      entry: main_sequence
      listen: ":5335"

# 配置Wireguard

学院的服务器是在内网中的,如果没有连校园网就无法访问。为了随时随地可以访问,我们可以使用Wireguard进行虚拟组网。基于ipv6直接是公网的特点,我们可以很方便的实现这个功能。

连接路由器,使用命令创建预共享密钥

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 创建目录存放公钥私钥
mkdir wg
# 进入文件夹
cd wg
# 配置创建密钥的权限
umask 077
# 创建预共享密钥
wg genpsk > sharekey
# 获取密钥复制保存
cat sharekey

之后创建服务端公钥私钥

1
2
3
4
5
6
# 创建服务端公钥和私钥
wg genkey | tee server_privatekey | wg pubkey > server_publickey
# 获取服务端私钥复制保存
cat server_privatekey
# 获取服务端公钥复制保存
cat server_publickey

之后创建客户端的公钥私钥,有多少个就要执行几次 注意文件的命名,这里以clinet为例:

1
2
3
4
5
6
# 创建客户端公钥和私钥
wg genkey | tee clinet_privatekey | wg pubkey > clinet_publickey
# 获取客户端私钥复制保存
cat clinet_privatekey
# 获取客户端公钥复制保存
cat clinet_publickey

之后找到网络——接口——添加新接口,选择协议为WireGuard VPN

创建新接口 接着修改相应的配置:

接口基本设置

  • 私钥 - 上文获取的服务端私钥
  • 监听接口 - 随机一个高位的端口,我这里使用10800
  • IP地址 - 这里填一个专用的网段 IP,我选择192.168.100.1/24

Peers设置

选择预共享密钥 - 添加

  • 公钥 - 填写上文获取的客户端公钥
  • 允许的 IP - 为此客户端分配的固定 IP,我这里是192.168.100.2/32注意不要冲突
  • 预共享密钥 - 填写上文获取的预共享密钥
  • 路由允许的 IP - 勾选

防火墙设置

  • 选择LAN

之前我尝试自己创建一个VPN分区进行管理,但是无法访问路由器上一层内网的地址,估计是防火墙之前的转发规则没设置好,如果不想折腾就选LAN

之后在防火墙中的——”打开路由器端口“,将之前设置的WireGuard监听端口的UDP流量放行

这样就算配置好了。

客户端的配置文件类似下面这样:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
[Interface]
# 对应之前配置的静态地址
Address = 192.168.100.2/32
# 客户端的私钥
PrivateKey = ******
# 本地的 DNS 服务器或者公有 DNS 服务器,例如: 114.114.114.114
#DNS = 192.168.6.1
[Peer]
# 路由器公钥
PublicKey = ******
# 设置那些地址走WireGuard,如下设置只用局域网走WireGuard,互联网走本地网络.
#AllowedIPs = 192.168.6.0/24, 192.168.100.0/24, 192.168.101.0/24
# 全局模式
AllowedIps = 0.0.0.0/0
# 预共享密钥,同之前所配置
PresharedKey = ******
# 路由器的ip地址和端口
Endpoint = 10.134.10.10:10800
# 每隔多少秒检查一次连接
PersistentKeepalive = 25

# 配置ddns

虽然我们拥有了公网ipv6,但这是动态的,所以我们需要通过ddns使其自动对应到域名上。以后使用的时候只需要域名即可,无需记住ip。

237大佬的固件已经内置了ddns,我的域名是在cloudflare上,所以选择DDNS 服务提供商 [IPv6]为cloudflare.com-v4,域名填写需要ddns的域名,注意这里要用@隔离子域名和根,例如ddns@lbqaq.top,密码填写全局访问密钥。

在高级设置里,我将IP 地址来源 [IPv6]设置为了URL,这样避免了脚本错误读取ip地址的情况。

都设置好后,就可以看到域名所对应的地址已经被更新了。

# 小结

Openwrt作为一个开放的系统,可玩性还是很高的,通过装上所需的插件,极大的提高了我的上网体验,只能说:真香~

(本来是打算介绍我写的校园网连接程序,结果为了这碟醋包了这盘饺子QwQ)

# 更新日志

  • 23.11.22:添加了uboot和mosdns的内容

# 参考文献