写在最前,本文的主要目的是记录我自身的刷机经历在排版及易读性,语法等方面未作考虑。
按照这个网址操作就行:
https://www.right.com.cn/forum/thread-8261014-1-1.html
文章下面给的V2固件有可以刷入成功的,不想折腾的可以直接使用。但是,我更喜欢使用自己编译的固件,因为可以更符合我的使用习惯。
需要使用Linux系统以及相关编译环境。编译相关步骤可以参考coolsnowwolf/lede: Lean's LEDE source (github.com)的README.md。
1)LEDE固件准备:使用wbs306大佬已经改好的LEDE源码仓库
git clone https://github.com/wbs306/lede
在lede/下运行:
git clone https://github.com/kenzok8/small-package package/small-package
config事项:
记得开启扩展extra packages—ipv6helper,不然没有ipv6
Luci:酸酸乳+,simple-adblock,turbo aac,smart dns,upnp,firewall等(可以自己选择,可能有兼容性问题)
主题:目前仅argon主题版本在18.06及以下的才支持lede。
2)Opwnwrt 22.03.2准备
下载OpenWRT22.03.2,以及https://github.com/MrTaiKe/Action_OpenWrt_Xiaomi_R4AGv2/tree/main/opwrt-22.03.2/hw2add
中的文件。将文件放入对应的目录并替换。

将下载的6个文件放入对应的目录
从github上openwrt的master分支中获取openwrt/package/network/services/dnsmasq文件夹,替换22.03.2的dnsmasq(否则pass wall的nftables透明代理无法运行)
在openwrt/下运行:
git clone https://github.com/kenzok8/small-package package/small-package
config事项:
Luci:passwall(nft透明代理),simple-adblock,smart dns,upnp,firewall等(可以自己选择,可能有兼容性问题)自己选中文。
打开kmod-tcp-bbr,dnsmasq-full,udpspeeder
3)OpenWRT 22.03.3及以上准备
git clone https://github.com/openwrt/openwrt
master分支已经自带小米4A千兆版V2的适配(若不使用master分支可以使用https://github.com/Ser9ei/xiaomi-r4agv2-openwrt_patch的这个脚本)
若使用脚本记得检查dnsmasq版本,确保其在2.87以上并开启nftset支持
在openwrt/下运行:
git clone https://github.com/kenzok8/small-package package/small-package
config事项:
Luci:passwall(nft透明代理),simple-adblock,smart dns,upnp,firewall等(可以自己选择,可能有兼容性问题)自己选中文。
打开kmod-tcp-bbr,dnsmasq-full,udpspeeder
4)编译
./scripts/feeds update -a
./scripts/feeds install -a
make menuconfig
make download -j8
make V=s -j1
注意:
1.若使用官方源进行编译,初次刷入固件时,可能无法从浏览器访问(502报错),这通常可能是由于缺少Luci导致的。通过ssh终端连接路由器然后
opkg update
opkg install luci
即可。
2.在编译前可使用“sed -i 's/192.168.1.1/192.168.31.1/g' package/base-files/files/bin/config_generate”修改openwrt登陆地址,可以把192.168.31.1修改成你想要的。
3.可以参考 https://blog.csdn.net/weixin_36182568/article/details/116602462 以解决openwrt部分情况下opkg内核版本不兼容问题。
若路由器能正确获取公网ipv6地址(非128位前缀)以及ipv6-pd,那么下属设备应该能自动获取到公网ipv6,不用手动设置。故本文着重介绍路由器能正确获取公网ipv6地址,但不能获取ipv6-pd(或ipv6地址为128前缀)时的方法(中继/NAT6)。
1)中继模式:
进入lan口的DHCP服务器设置,再转到ipv6设置。将其中的RA服务,DHCPv6服务,NDP代理全改为中继模式

如图
可选,实际上应该不影响:配置wan6口的DHCP服务,并将ipv6设置中RA服务,DHCPv6服务,NDP代理全改为中继模式。

配置wan6口的DHCP服务
向路由器的/etc/config/dhcp文件中添加:
config dhcp 'wan6'
option interface 'wan'
option ignore '1'
option ra 'relay'
option dhcpv6 'relay'
option ndp 'relay'
option master '1'
重启路由器后,内网设备便应该能获得上游网关下发的公网ipv6地址。
2)NAT6 or IPV6 NAT模式:
在部分网络环境下,中继模式可能并不稳定(个人亲身经历),故可以采用NAT6。
首先,要明确的一点是:OpenWRT在22.03版本及以上版本默认使用nftables作为防火墙,以前的版本以及lede默认使用iptables作为防火墙。两个防火墙之间不完全兼容!
①使用iptables时开启NAT6:知乎(https://zhuanlan.zhihu.com/p/492774540)已有详细介绍,不再赘述。
②使用nftables:为避免兼容性问题,建议首先移除可能包含的iptables的插件,形式为kmod-ipt-xxx。相比与iptabless,nftables实现NAT6的操作更为简单。
1.将LAN口中的ipv6设置里的RA服务,DHCPv6服务全改为服务器模式,NDP代理禁用(即安装openwrt后的默认状态)

默认情况下就是这样
2.关闭WAN口的“请求指定长度的ipv6前缀”

3.将全局网络选项中的IPv6 ULA 前缀的第一个f改成d:

IPv6 ULA 前缀的第一个f改为d
4.在ssh终端(建议使用putty或ttyd)输入并执行:
ip -6 r add default via ` ip -6 route | grep "default from" | awk 'NR==1{print $5,$6,$7}'`
5.编辑/etc/config/firewall文件

config zone更改为这样
6.编辑 /etc/sysctl.conf ,添加一行
net.ipv6.conf.wan.accept_ra=2
重启防火墙,NAT6配置成功
如想要使得NAT6随路由器自启动,则编辑/etc/rc.local,向其中添加:
line=0
while [ $line -eq 0 ]
do
sleep 10
line=`route -A inet6 | grep **** | awk 'END{print NR}'`
done
ip -6 r add default via ` ip -6 route | grep "default from" | awk 'NR==1{print $5,$6,$7}'`
exit 0
其中****为你获取到的公网ipv6的前16位。
更多的信息可以浏览:https://chariri.moe/archives/644
为什么需要公网ip呢?相信懂得都懂。使用中继模式时,仅需要在防火墙中放行特点的端口即可。而对于NAT6而言受限于Luci的限制,无法直接添加ipv6转发。但是firewall4本身支持ipv6转发。故可以先添加ipv4的端口转发,再去/etc/config/firewall文件将目标ip的ipv4手动更改为ipv6的形式。

使用比特彗星检测显示端口开放:
