不想折腾也行
如果你只是想要一个支持IPv6校园网的路由器,为什么不直接买个小米(开NAT
模式,YDJSIR注)/华为/TP-Link/水星的新款(一般要19年以后)路由器并将IPv6模式设置为 桥
模式然后愉快地享受原生的教育网IPv6畅游北邮人呢?没钱买新的话,直接买网件的路由器设置穿透模式
就好了(华硕原版固件很可能就是不行)
对于这些固件,如果稳定性高的话,还是优先选择穿透模式。
下面的图都是实测结果,确认IPv6千兆跑满可用。
水星:桥模式 | 网件:穿透模式 |
---|---|
南京大学分配的教育网IPv6前缀是128位的 | |
华为 | 自动模式 |
---|---|
还是网件最直接,来个穿透就好(passthrough)。
折腾效果更好
OpenWRT
测试硬件
- Newifi 3 D2 路由器
- ZTE CT320 云终端
注意:下面的所有方案都只能覆盖有线端,无线端照样没有IPv6
最近这条路线又疯掉了一个人,他是打算基于Redmi AC2100来做
经过了不懈的尝试,加之与 0xCLOVER 的亲切友好的交流,YDJSIR决定从 Newifi 3 D2
开始下手。YDJSIR了解了校园网IPv6在OpenWRT
上的部署,并感觉这样做很有前途。
为了体验拆包的快感,YDJSIR购买了一个99新的带原包装的 Newifi 3 D2
并开始着手折腾。
降分辨率打码++ |
---|
然后下面是YDJSIR对目前YDJSIR收集到的技术方案的尝试以及结果:
全文总参考链接
路线一:NAT
参考链接
WAN口获取单一IPv6地址时,内网使用IPv6的方法(教育网可用) - 华硕固件 - KoolShare - 源于玩家 服务玩家
首先,该帖子的背景环境并不是OpenWRT。其次,该方案实现前提的条件就是WAN口能拿到IPv6地址,然而事实上无论是OpenWRT官方固件还是YDJSIR四处搜集的第三方固件,均无法直接在南京大学一组团宿舍教育网网口获得IPv6地址。
谁让中国教育网这套IPv6系统如此奇葩呢?
该方案没有可实现的基础,直接放弃。
原版镜像后台截图 | 乱入的一张图片 |
---|---|
该方案推荐梅林/老毛子固件用户进行尝试。下面附一个老毛子支持IPv6的教程。
参考链接
路线二:中继
此方案实测在南京大学一组团宿舍区内无法使用。
详情请参考全文总参考链接部分那个链接。
知道你不想翻回去,这里再贴一次。
全文总参考链接
路线三:穿透
参考链接
事实上,这个教程也是YDJSIR的那个同学实现的方式,也是YDJSIR唯一实现成功的方式。他采用了自行编译的OpenWRT固件(基于18.06稳定版)。然而很可惜的是他没有保存当时编译的配置,也没有保存当时编译的结果。
YDJSIR当然知道部署其他插件相较于部署这个教程里面的IPv6相关设置而言要复杂得多。因而YDJSIR一开始选择了在第三方做好的固件上进行如此配置的方案。
然后YDJSIR发现,在OpenWRT里面, kmod-ebtables
并不是一个编译的时候默认打上的包。更要命的是,这种内核相关的包并不是可以随意安装的!必须保证内核版本完全相同!(精确到具体哪次commit)。这意味着,YDJSIR找到的绝大多数的整合好的固件并不能直接使用!这意味着YDJSIR需要自行编译固件。
网上的整合包大多基于snapshot,找对应的snapshot仓库里面的版本本地无法安装 |
---|
YDJSIR先是测试了OpenWRT官方提供的19.07稳定版固件,顺利通过opkg下载安装 ebtables
全家桶,按照上述教程部署IPv6成功!宿舍内IPv4和IPv6到校内镜像站都可以跑到千兆水平(900+Mbps)——YDJSIR狂喜。
然后YDJSIR发现编译这玩意需要一个完整的Linux环境,YDJSIR采用的 Lienol
和 Lean
源码仓库均推荐 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的拿来在虚拟机做实验) |
---|
鬼知道为了顺利下载相关的库还有写完配置文件后下载补充代码中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为异常结果 |
---|
为你南的千兆网接入欢呼吧!
你南甚至将完成了宿舍内对Wifi 6的全面部署
(当然,安装时插错了线导致YDJSIR用了好久的100M宽带)
然而,YDJSIR因为打上了太多插件,以致相当地难以排查,且YDJSIR的舍友已经对YDJSIR承接的频繁掉线的Wifi表示不满……于是YDJSIR的探索计划后来搁置了很长时间。
再后来,YDJSIR找了个网件WNDR 4700,也给他刷上了OpenWRT(来源是OpenWRT官网,版本是19.07),结果发现按照此路径去配置会导致IPv4速度骤降到百兆水平而IPv6速度正常。可见,该方案对于路由器内部实现方式和固件适配成度有很大的关联性,也与ebtables
和桥接的实现有关。YDJSIR怀疑这要么是性能问题,要么是内部配置相互冲突。
下图的两项速率抖动得都很厉害 | 下图两项速率抖动不明显 |
---|---|
后续发展
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看了下刷回原版的恶心过程,决心先在梅林做一波研究。
路线一:穿透
YDJSIR参考了穿透方案(NAT这种严重违反IPv6精神的东西不被YDJSIR认可),并进行了实践。
参考链接
YDJSIR直接输了那两行命令,然后跑校内测速,IPv4的上限被压到400Mbps
左右,IPv6上行跑满千兆,下行只有300Mbps
。
后来发现是原版的IPv6设置没有关掉,关掉后IPv4上限提高到500Mbps
左右,IPv6依旧是上行跑满千兆,下行只有500Mbps
。
这应该和WNDR 4700
是一样的问题。ebtables
分流那里消耗系统资源严重。
YDJSIR心想应该也能用了。于是按照上面那个链接把那两行命令写进了启动脚本里面。
1 | ebtables -t broute -A BROUTING -i eth0 -p ! ipv6 -j DROP |
好家伙,在界面重启了系统后直接IPv4都挂掉了。
恢复出厂后,YDJSIR发现一旦输入这两行命令,系统就会挂。
YDJSIR不服,尝试升级系统到梅林386,结果也是一输入这两行命令系统就会挂。
YDJSIR彻底放弃梅林方案,决定想办法刷回原版固件。
结果,刷出来一块黑砖头(单纯TFTP救不回来)。不过这个难不倒YDJSIR:YDJSIR参考这个链接,用USB-TTL线进去后台串口,终端启动过程,在CFE模式下TFTP固件进去了。有一说一,这比反复刷过渡固件香多了!
这玩意的破驱动是真的难装。毕竟是Win10黑。YDJSIR用的是 PL2303HX
。
参考链接
我和上面那篇教程中遇到了一样的问题。用TFTP命令行传不上去,Tftpd64
也不行。但是用带GUI的那个就行(智能刷机工具)。原因不明。
线序那边,YDJSIR用的线没有说明线序。不过绿、白(黄)、红应该是没有争议的,剩下那根显然是地线。反正3.3V的那根红不用插,估计也不会烧机器?
刷完之后,又回到了网件原版固件,回到了不折腾方案。
旁路由
概述
这是YDJSIR最终选择的方案,也是最为满意的方案。首先放上YDJSIR目前桌面上的电子设备连线拓扑图。
该图中没有画出手机和平板等设备。因为这些设备只能连有线网(当然,你说OTG出来接个有线网卡行不行?YDJSIR真的试过,荣耀20PRO
直接连绿联拓展坞真能拓展USB和网口,但是先排除这么极端的情况)。
主路由
R8000P
就一个普通的支持穿透模式/桥模式的路由器,没有什么特殊之处,除了固定了所有已知设备的IP地址。该设备的DHCP是开启的。当然,如果要实现真正的旁路由架构,显然要把它的DHCP
功能关掉,然后在旁路由上面开DHCP服务。(至少R8000P
的路由器的v1.4.1.82
版本固件不能指定除了他自己以外的设备作为网关,如果可以的话显然让路由器直接将网关指向路由就好)。由于默认情况下设备连接的都是这个路由器,那么他们都可以享受穿透的得来的IPv6,并不受旁路由影响。DHCP
只影响IPv4
,DHCPv6
才影响IPv6方面的设置。
旁路由
T630所发射的WiFi
是带有分流规则的WiFi
,用于抓特定设备的包或做其他校园网分流,但是并不支持接入IPv6。显然这是为了那些不能手动指定网关地址但想要透明地接入带分流规则的网络的设备准备的。YDJSIR在此处的实现方式非常简单——直接用KUbuntu
开热点,选默认的配置就可以。该设备提供带规则的网关分流服务区分校内外服务。这个设备本身的流量也会经过这个带规则的虚拟网关。这里的T630显然也可以换成其他的性能足够的设备。如果你喜欢,这里其实选择黑群晖
或者OpenWRT
系统其实都不错,但是从配置的简易程度上来说显然还是完整的Linux系统好。文件管理服务起一个NextCloud
,流媒体服务器起一个emby
,挂BT
起一个qBittorrent
也行,当然你乐意的话显然开个Docker
会是更好的选择,大不了再开虚拟机嘛。只要性能足够,这样做也未尝不可,反正是个旁路由。
服务器
在如上拓扑图中的那个i8
是YDJSIR的主力台式机,也承担着NAS的工作。由于YDJSIR未能达到到将Linux系统作为日常使用系统的水平,故这个设备跑的就是个普通的Windows 10
。实测发现如果这台主机的网关被设置为旁路由,那么在内网访问的情况下问题不大(80MB/s,相比原先跑满千兆略有损失),但是如果是走路由器的端口映射的话速度会掉到5MB/s。因此,YDJSIR不得不放弃让他走旁路由的计划,而转为传统方式。YDJSIR不懂iptables
,但感觉如果能在旁路由上实现类似端口映射的效果的话速度可能还是会有明显提升的。在这种情况下应该是两部曲,首先路由器映射旁路由暴露的端口,而后是旁路由转发服务器的端口。这么复杂还不如直接让主机走路由器网关算了。再次,UPnP
方面,如果多了一个旁路由的话,那么可能主路由和旁路由都要有相应的支持。目前来看就是这个设备等于是直连了。
未来计划
由于YDJSIR已经有成型的台式机做NAS了,因此也没有整其他的活。具体测速方面,由于校园网络的不稳定性,到南大镜像服务器的速度常在200MB/s-1000MB/s波动,校内网设备相互连接的速度亦然,用校园网做速度测试可能意义不大(难以排除变量),YDJSIR也不想再把设备拆下来,另起一个主机用iperf3
测速。所以呢,大概也就这样了。YDJSIR也许会试着与其他人合作再搭建一套类似的系统,但会尽可能地做到All in One
的效果。
btw,R8000P是真的好看!
华师一之路(确信)
结语
YDJSIR日后的主攻方向并不是嵌入式。然而,YDJSIR既然着眼于后端,那么YDJSIR显然必须熟悉一切网络相关的设备。以上的探索给了YDJSIR接触许多网络名词与网络技术的机会。更重要的是,它的开源特性和强大的社区资源,给了YDJSIR近乎无限的探索空间。