原版固件

如果你只是想要一个支持IPv6校园网的路由器,为什么不直接买个小米(开NAT模式,YDJSIR注)/华为/TP-Link/水星的新款(一般要19年以后)路由器并将IPv6模式设置为 模式然后愉快地享受原生的教育网IPv6畅游北邮人呢?没钱买新的话,直接买网件的路由器设置穿透模式就好了(华硕原版固件很可能就是不行)

对于这些固件,如果稳定性高的话,还是优先选择穿透模式。

下面的图都是实测结果,确认IPv6千兆跑满可用。

水星:桥模式 网件:穿透模式
image-20210426234738201 image-20210426234851431
华为自动模式 南京大学分配的教育网IPv6前缀是128位的,所以很麻烦
image-20210507131609117 image-20210507131426427

OpenWRT

测试硬件

  • Newifi 3 D2 路由器
  • ZTE CT320 云终端

注意:下面的所有方案都只能覆盖有线端,无线端照样没有IPv6

最近这条路线又疯掉了一个人,他是打算基于Redmi AC2100来做

经过了不懈的尝试,加之与 0xCLOVER 的亲切友好的交流,YDJSIR决定从 Newifi 3 D2 开始下手。YDJSIR了解了校园网IPv6在OpenWRT上的部署,并感觉这样做很有前途。

为了体验拆包的快感,YDJSIR购买了一个99新的带原包装的 Newifi 3 D2 并开始着手折腾。

降分辨率打码++
image-20201112193640499

然后下面是YDJSIR对目前YDJSIR收集到的技术方案的尝试以及结果:

全文总参考链接

OpenWRT IPv6 三种配置方式 | Kompass

路线一:NAT

参考链接

WAN口获取单一IPv6地址时,内网使用IPv6的方法(教育网可用) - 华硕固件 - KoolShare - 源于玩家 服务玩家

首先,该帖子的背景环境并不是OpenWRT。其次,该方案实现前提的条件就是WAN口能拿到IPv6地址,然而事实上无论是OpenWRT官方固件还是YDJSIR四处搜集的第三方固件,均无法直接在南京大学一组团宿舍教育网网口获得IPv6地址。

谁让中国教育网这套IPv6系统如此奇葩呢?

该方案没有可实现的基础,直接放弃。

原版镜像后台截图 乱入的一张图片
image-20201112194648360 image-20201112194734532

该方案推荐梅林/老毛子固件用户进行尝试。下面附一个老毛子支持IPv6的教程。

参考链接

老毛子 Padavan 路由器固件开启教育网 IPv6 并实现IPv6转发 - rebeca8 - 博客园

路线二:中继

此方案实测在南京大学一组团宿舍区内无法使用。

详情请参考全文总参考链接部分那个链接。

知道你不想翻回去,这里再贴一次。

全文总参考链接

OpenWRT IPv6 三种配置方式 | Kompass

路线三:穿透

参考链接

教育网DD-WRT/OpenWrt用上IPv6——以南京大学为例 - Penguin

事实上,这个教程也是YDJSIR的那个同学实现的方式,也是YDJSIR唯一实现成功的方式。他采用了自行编译的OpenWRT固件(基于18.06稳定版)。然而很可惜的是他没有保存当时编译的配置,也没有保存当时编译的结果。

YDJSIR当然知道部署其他插件相较于部署这个教程里面的IPv6相关设置而言要复杂得多。因而YDJSIR一开始选择了在第三方做好的固件上进行如此配置的方案。

然后YDJSIR发现,在OpenWRT里面, kmod-ebtables 并不是一个编译的时候默认打上的包。更要命的是,这种内核相关的包并不是可以随意安装的!必须保证内核版本完全相同!(精确到具体哪次commit)。这意味着,YDJSIR找到的绝大多数的整合好的固件并不能直接使用!这意味着YDJSIR需要自行编译固件。

网上的整合包大多基于snapshot,找对应的snapshot仓库里面的版本本地无法安装
image-20201112194840654
image-20201112194852880

YDJSIR先是测试了OpenWRT官方提供的19.07稳定版固件,顺利通过opkg下载安装 ebtables 全家桶,按照上述教程部署IPv6成功!宿舍内IPv4和IPv6到校内镜像站都可以跑到千兆水平(900+Mbps)——YDJSIR狂喜。

然后YDJSIR发现编译这玩意需要一个完整的Linux环境,YDJSIR采用的 LienolLean 源码仓库均推荐 Ubuntu 18.04 LTS x86_64 。YDJSIR首先改用学校的KMS更改激活类型为教育版,尝试了WSL1,后来发现各种编译依赖装不上;YDJSIR将系统更新到2004,把WSL升级到了WSL2,结果发现各类依赖还是打不上。(全部是默认配置,采用从Windows Store获取的Ubuntu 20.04 LTS,经过zty同学测试,实体机安装的Ubuntu 20.04 LTS是可以编译成功的)。YDJSIR最后无奈地基于自己的XPS 15 7590(i5-9300H+1650)新购置的32G内存条改用HyperV模拟一个完整的Ubuntu。

编译固件的YDJSIR(第二张图是YDJSIR编译了个X86的拿来在虚拟机做实验)
image-20201112195102740
image-20201112195208685

鬼知道为了顺利下载相关的库还有写完配置文件后下载补充代码中YDJSIR费了多大的劲!

HyperV真香——启动速度快内存占用超级低!

好了,这回YDJSIR可以自己编译了。无奈的是YDJSIR在编译的过程中被配置文件折磨了n次,YDJSIR也不敢开全线程,只敢单线程跑,编译一次就要跑到3个小时……YDJSIR最后拿着自己的固件,想到拿着这玩意也许以后还会遇到更多的奇奇怪怪的BUG,所以……YDJSIR最后选择让别人来编译带上插件和 kmod-ebtables

好了,YDJSIR顺利地拿到了固件。然而YDJSIR很快发现第三方直接编译的文件的大小远远大于第三方特殊优化过的固件……然后YDJSIR就开始了大量的尝试。然而,YDJSIR发现拥有科学插件的奇怪固件再按照上述教程操作的时候前几步都毫无问题,但是到最后一步进行桥接设置完成后(下面的指令执行完成之后)

1
brctl addif br0 vlan2

YDJSIR无奈地发现无论是IPv4还是IPv6的数据包的传输速度都会出现速度从0快速上升到100Mbps而后迅速掉速掉到1-2Mbps的奇怪现象,DNS解析的时长也显著增长。而与之形成鲜明对比的是,在没有大批插件或者是原版系统进行完所有设置之后的情况下,网络访问的速度都能跑满千兆!

图1为异常结果,图2为异常结果
image-20201112194452700
image-20201112194318125

为你南的千兆网接入欢呼吧!

你南甚至将完成了宿舍内对Wifi 6的全面部署

(当然,安装时插错了线导致YDJSIR用了好久的100M宽带)

然而,YDJSIR因为打上了太多插件,以致相当地难以排查,且YDJSIR的舍友已经对YDJSIR承接的频繁掉线的Wifi表示不满……于是YDJSIR的探索计划后来搁置了很长时间。

再后来,YDJSIR找了个网件WNDR 4700,也给他刷上了OpenWRT(来源是OpenWRT官网,版本是19.07),结果发现按照此路径去配置会导致IPv4速度骤降到百兆水平而IPv6速度正常。可见,该方案对于路由器内部实现方式和固件适配成度有很大的关联性,也与ebtables和桥接的实现有关。YDJSIR怀疑这要么是性能问题,要么是内部配置相互冲突。

下图的两项速率抖动得都很厉害 下图两项速率抖动不明显
image-20210427003805407 image-20210427003929708

后续发展

YDJSIR打算接下来从两方面进行尝试:

显然,YDJSIR以后绝对不会选择那些SNAPHOT版本了。YDJSIR一定会选那些稳定版本,以保证缺了什么奇奇怪怪的kmod模块的时候YDJSIR可以拿opkg安装。

事实上。ebtables这个包在OpenWRT里面好像早就不更新了……而且,只差几个commit的内核模块理论上应该还是可以强制运行的吧……

然而,opkg绝对不会让你安装内核版本不对的包。

YDJSIR对新的功能没有什么奇特的要求,YDJSIR只求能用就好。因而,YDJSIR将毫不犹豫地选择release版本。

方案一:直接修改编译配置文件以直接编译出所需的固件

这一步似乎没什么可以补充了……毕竟这是最常见也最能一劳永逸解决所有问题的办法……但是YDJSIR还是要想办法搞明白这套配置系统……

方案二:从官方放出的固件开始依赖opkg一个个把插件补上

YDJSIR认为这可能是一个更稳妥的方案。至少YDJSIR可以更快速地控制变量进行快速试错……

好了,YDJSIR还是先享受下这功能强大,价格低廉的优秀路由器吧!

想想,你以不到百元获得一个可以精准识别流量并进行各式各样的处理与转发的近乎拥有企业级路由的功能的千兆双频路由器,它不香吗?

梅林

测试硬件

网件R7000

YDJSIR受够了OpenWRT,想搞个网件安安稳稳享受教育网IPv6,结果没想到99新的R7000里面是上一个卖家刷的梅林380固件……YDJSIR看了下刷回原版的恶心过程,决心先在梅林做一波研究。

image-20210507131117806

image-20210507124354967

路线一:穿透

YDJSIR参考了穿透方案(NAT这种严重违反IPv6精神的东西不被YDJSIR认可),并进行了实践。

参考链接

一波三折的校园网IPv6 x 华硕 AC86U

YDJSIR直接输了那两行命令,然后跑校内测速,IPv4的上限被压到400Mbps左右,IPv6上行跑满千兆,下行只有300Mbps

后来发现是原版的IPv6设置没有关掉,关掉后IPv4上限提高到500Mbps左右,IPv6依旧是上行跑满千兆,下行只有500Mbps

这应该和WNDR 4700是一样的问题。ebtables分流那里消耗系统资源严重。

YDJSIR心想应该也能用了。于是按照上面那个链接把那两行命令写进了启动脚本里面。

1
2
ebtables -t broute -A BROUTING -i eth0 -p ! ipv6 -j DROP
brctl addif br0 eth0

好家伙,在界面重启了系统后直接IPv4都挂掉了。

恢复出厂后,YDJSIR发现一旦输入这两行命令,系统就会挂。

YDJSIR不服,尝试升级系统到梅林386,结果也是一输入这两行命令系统就会挂。

YDJSIR彻底放弃梅林方案,决定想办法刷回原版固件。

结果,刷出来一块黑砖头(单纯TFTP救不回来)。不过这个难不倒YDJSIR:YDJSIR参考这个链接,用USB-TTL线进去后台串口,终端启动过程,在CFE模式下TFTP固件进去了。有一说一,这比反复刷过渡固件香多了!

这玩意的破驱动是真的难装。毕竟是Win10黑。YDJSIR用的是 PL2303HX

参考链接

NETGEAR R7000 黑砖修复教程

我和上面那篇教程中遇到了一样的问题。用TFTP命令行传不上去,Tftpd64也不行。但是用带GUI的那个就行(智能刷机工具)。原因不明。

image-20210507131218047

线序那边,YDJSIR用的线没有说明线序。不过绿、白(黄)、红应该是没有争议的,剩下那根显然是地线。反正3.3V的那根红不用插,估计也不会烧机器?

结语

YDJSIR日后的主攻方向并不是嵌入式。然而,YDJSIR既然着眼于后端,那么YDJSIR显然必须熟悉一切网络相关的设备。OpenWRT给了YDJSIR接触许多网络名词与网络技术的机会。更重要的是,它的开源特性和强大的社区资源,给了YDJSIR近乎无限的探索空间。

与此同时,YDJSIR也被 MrChenWithCapsule 的基于Hyper-V让实体机系统和其他虚拟机所有流量经过一个OpenWRT流出的支持IPv6的网络系统震撼了。要达到这样的水平,YDJSIR还有很长的路要走。

YDJSIR对OpenWRT的探索虽然暂告一段落,但是显然长期不会结束。