小米4A千兆版V2刷自己编译的OpenWRT以及IPV6设置(包括中继与NAT6)
查无此T
编辑于 2023年04月23日 04:48

写在最前,本文的主要目的是记录我自身的刷机经历在排版及易读性,语法等方面未作考虑。

1.刷入breed

按照这个网址操作就行:

https://www.right.com.cn/forum/thread-8261014-1-1.html

文章下面给的V2固件有可以刷入成功的,不想折腾的可以直接使用。但是,我更喜欢使用自己编译的固件,因为可以更符合我的使用习惯。

2.编译OpenWRT

需要使用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&#​39; package/base-files/files/bin/config_generate”修改openwrt登陆地址,可以把192.168.31.1修改成你想要的。

    3.可以参考 https://blog.csdn.net/weixin_36182568/article/details/116602462 以解决openwrt部分情况下opkg内核版本不兼容问题。

3.IPV6设置

若路由器能正确获取公网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&#​39;

    option interface 'wan&#​39;

    option ignore '1&#​39;

    option ra 'relay&#​39;

    option dhcpv6 'relay&#​39;

    option ndp 'relay&#​39;

    option master '1&#​39;

重启路由器后,内网设备便应该能获得上游网关下发的公网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&#​34; | 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}&#​39;`

done

ip -6 r add default via ` ip -6 route | grep "default from&#​34; | awk 'NR==1{print $5,$6,$7}&#​39;`

exit 0

其中****为你获取到的公网ipv6的前16位。

更多的信息可以浏览:https://chariri.moe/archives/644

*端口开放/转发

为什么需要公网ip呢?相信懂得都懂。使用中继模式时,仅需要在防火墙中放行特点的端口即可。而对于NAT6而言受限于Luci的限制,无法直接添加ipv6转发。但是firewall4本身支持ipv6转发。故可以先添加ipv4的端口转发,再去/etc/config/firewall文件将目标ip的ipv4手动更改为ipv6的形式。

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