学校宿舍软路由折腾记

发布于 2023-11-18  861 次阅读


更新日志

2023-11-25 更新了关于多拨的内容(特别篇S1)

2024-03-24 由于校园网更换为锐捷网页认证,故更新了关于其的一些内容(Step2.2)、更新了手机网络共享兼容性部分

2024-05-12 对无线路由器设备进行了更新。对多设备检测等方面的内容空白进行更新(特别篇S2)。

前情提要及温馨提示

坐标广东某高校,晚上会定时断网,使用广东天翼校园网(飞Young)服务

2024年3月更新:本校改用锐捷网页认证,详见下方Step2.2

此文只是折腾记录,作为抛砖引玉之用,不是任何教程,可以友善提问,但我不一定能作出解答。

免责声明:请遵守相关法律法规、校规校纪以及您与运营商所签订合同的相关条款。对于违反前述所导致的任何后果作者不承担任何责任。

设备

  • 树莓派(Raspberry Pi) 4b 2G
  • 360(磊科)P2 无线路由器
  • 小米 AX3000T 无线路由器(wifi6)

系统

注:本人不对以上固件的安全性、兼容性等作出任何保证,请自行斟酌或选择其他您认为可靠的固件

折腾Step1

物料

  1. RTL8153芯片USB千兆网卡
  2. CAT 6(或其他可以达到千兆及以上的类型)网线若干

由于树莓派只有一个网口,所以需要额外一个USB网卡来充当wan口,而RTL8153芯片的网卡在OpenWrt上可以免驱使用。

AX88179芯片的USB网卡貌似也可以免驱使用,但我没试过。

无线功能

由于OpenWrt的无线功能天生残废,所以我找了个N年前别人淘汰下来的360P2路由器来做无线接入点 (AP)。

树莓派自带无线网卡,但我无法同时使用2.4G和5G频段,而且无线功能也不稳定(会出现“未激活”或“已禁用”),所以说我使用了正经路由器和Padavan固件来做AP。

更新:因为P2网口速率只有100M且wifi速率不尽人意,已无法满足我日益增长的对带宽及多设备接入的需求,所以换成了更加“先进”的AX3000T。

OpenWrt有部分MT(联发科)/雷凌的无线网卡驱动,但折腾起来比较麻烦。详情可以自行百度/Google折腾。

参考:网卡支持 - doc.openwrt.cc

折腾Step2.1(广东天翼校园网认证)

本人学校原使用的是广东天翼校园网(飞YOUNG)。

建议在hosts/DNS程序中指定相关认证网址等的IP

校园网认证程序

可以参考以下项目:

  1. Pandaft/ESurfingPy-CLI(Python,使用网页认证通道,MIT
  2. Pandaft/go-esurfing(Go,使用手机客户端的接口协议,GPL-3.0
  3. HEAVEN-LIMITED/EsDialerGDTools(已经不维护,Apache-2.0

建议使用1/2中的项目,部分学校禁用了网页认证通道可以使用2中的项目。请在电脑上测试好了后再往软路由上搬。

其他地区或使用其他校园网认证程序的可以尝试在Github或搜索引擎或恩山无线论坛等查找是否有相关项目。

自动认证脚本

在软路由中可以设置一个bash/shell脚本来定时执行校园网认证程序。

请自行搜索相关脚本的写法。

请注意文件/文件夹的所有权及权限设置。

定时任务(Cron表达式)

定时任务设置中的* * * * *为Cron表达式。

参考:CRON 表达式详解 - Aliyun

注:在以上项目中的遇到任何问题请直接在项目中发issue。

注:本人不对以上项目的安全性、兼容性等作出任何保证,其为开源代码请自行审查。请注意并遵守项目中注明的开源协议。

折腾Step2.2(锐捷校园网网页认证)

更新:本人学校现使用锐捷校园网网页认证

本人学校可以使用网页认证且其暂时只发现认MAC

所以可以先使用手机/电脑在校园网网页开启“无感认证”后再将认证设备的MAC克隆到路由器中即可实现上网。(感谢由恩山无线论坛友人提供的思路)

如果使用的是锐捷客户端或其他更严格的认证方式,以下十分优秀的开源项目和大佬的视频可以尝试参考使用。

折腾Step3(手机共享网络)

因为晚上会断网,所以说在断网后可以使用手机USB共享网络给软路由。

绝大部分学校都有和运营商合作的奇奇怪怪的又便宜流量又多的学生套餐,留着浪费的话不如拿来在断网的时候上网用。

使用手机/USB插卡网卡共享网络

因为作者有多余的手机,所以说直接使用手机来共享网络。其实部分支持USB共享的插卡类网卡大差不差也是这套,可以直接套用。

请使用okpg命令安装以下依赖

Kernel modules  --->
    USB Support  --->
        <*> kmod-usb-net............... Kernel modules for USB-to-Ethernet convertors
        <*> kmod-usb-ohci............................... Support for OHCI controllers
        <*> kmod-usb-uhci............................... Support for UHCI controllers
        <*> kmod-usb2................................... Support for USB2 controllers

    Utilities  --->
        <*> libimobiledevice-utils............ A library that talks to Apple devices.
        <*> libplist-utils............................. Apple property list converter
        <*> libusbmuxd-utils......................... USB multiplexing daemon utilies
        <*> usbmuxd.......................................... USB multiplexing daemon

参考:OpenWrt 支持 usb tethering - CSDNOpenWrt路由器通过iPhone有线共享网络上网 - huipengly的博客

如果安装完以上依赖依然无法查找到手机,请尝试继续安装下列依赖:

# opkg update
# opkg install kmod-usb-net-rndis kmod-usb-net-cdc-ncm kmod-usb-net-huawei-cdc-ncm kmod-usb-net-cdc-eem kmod-usb-net-cdc-ether kmod-usb-net-cdc-subset kmod-nls-base kmod-usb-core kmod-usb-net kmod-usb-net-cdc-ether kmod-usb2

//下行为iOS需要追加的依赖
# opkg install kmod-usb-net-ipheth usbmuxd libimobiledevice usbutils

参考:OpenWRT 使用 Android/iOS USB 网络 - Jiajun的技术笔记

兼容性

iOS设备:无论是Lightning的iPhone8、iPhone XS、iPhone12 Pro还是C口的iPhone15都没有任何问题。

安卓设备:部分手机需打开开发者调试或在设置/弹窗中选择网络共享。测试过的Realme、vivo、小米(非澎湃OS)都没有任何问题。

也许不算安卓?:澎湃OS(小米)、鸿蒙OS(华为)以及奇奇怪怪的OS没有尝试过,但应该不存在问题。可自行百度/Google/Bing。

注意:以上皆是以USB-A的形式与树莓派进行连接,2.0与3.0接口皆可。CtoC/CtoLightning/CtomicroUSB是否支持不详。

网络策略

以下是几个思路:

  1. 使用mwan3进行分流和负载均衡。此方案的好处在于在使用上网卡流量的同时不影响学校内网的使用,但mwan3配置难度较高,比较麻烦。而且配置不当可能会导致流量消耗过高,网速变慢,网络连接不稳定等。
  2. 在使用mwan3的同时配合定时脚本来实现对手机的wan/usb进行启用/禁用。
  3. 在使用mwan3的同时直接通过物理拔插usb的方式实现指定网络的切换。

注意:OpenWrt在多wan口的情况下建议配置mwan3,不然可能导致无法连接网络,详细教程请善用搜索引擎,这玩意太麻烦了。

折腾Step4(AdGuard Home)

请在服务->AdGuard Home中将AdGuard Home的6060重定向设置为重定向53端口到AdGuardHome。(可选:在网络->DHCP/DNS中关闭“重定向客户端DNS到dnsmasq”以避免冲突)。

如果在Adguard Home中无法查看到您的记录请检查网络->DHCP/DNS中的DNS重定向和DNS 转发设置是否正确。

请确保局域网内设备正确的设置了DNS服务器地址为软路由地址。

如果身处国内请不要将魔法网络插件的DNS设置为AdG。

AdG Home规则

以下是本人的AdG Home的规则:

名称订阅link介绍
AdGuard DNS filterhttps://adguardteam.github.io/AdGuardSDNSFilter/Filters/filter.txtAdGuard官方默认的规则,在国内效果一般
Anti-ADhttps://anti-ad.net/easylist.txt (国内)
https://raw.githubusercontent.com/privacy-protection-tools/anti-AD/master/anti-ad-easylist.txt (Github)
中文区知名过滤规则
EasyListhttps://easylist-downloads.adblockplus.org/easylist.txt知名的过滤规则
EasyList-CNhttps://easylist-downloads.adblockplus.org/easylistchina.txtEasyList的中文区扩展规则
EasyPrivacyhttps://easylist-downloads.adblockplus.org/easyprivacy.txtEasyList的补充规则,用以去除网络跟踪
CJX's Annoyance Listhttps://raw.githubusercontent.com/cjx82630/cjxlist/master/cjx-annoyance.txt过滤自我推广,并补充EasyPrivacy隐私规则

注:本人不对以上项目的安全性、兼容性等作出任何保证,也不审查其屏蔽列表中是否夹带私货,其为开源代码请自行审查。请注意并遵守项目中注明的开源协议。

注:订阅过多的规则可能会导致解析速度的下降。请适度订阅。

DNS设置

本人认为身处国内就没必要使用海外DNS了,只会拖慢解析速度并可能导致无法连接到最近(最快)节点

再次警告:如果身处国内请不要将魔法网络插件的DNS设置为AdG Home或国内的DNS,请设置自行相关的分流规则。

建议使用官方推荐的DNS(如Aliyun,DNSPod等)

强烈建议使用支持DoH/DoT/DoQ的DNS

以下是作者所使用的上游DNS:

DNS提供商地址
阿里云(AliDNS)223.5.5.5 / 223.6.6.6
https://dns.alidns.com/dns-query (DoH)
tls://dns.alidns.com (DoT)
腾讯云DNSPod119.29.29.29
https://doh.pub/dns-query(DoH)
tls://dot.pub (DoT)
清华大学TUNA协会
仅部分高校可用
101.6.6.6

114DNS也许也是个不错的选择。

海外的话Google(8.8.8.8)、Cloudflare(1.1.1.1)、OpenDNS、NextDns等都挺不错的(而且支持DoH等)

作者不为以上DNS的安全、可靠、准确背书,请自行判断并选择合适的DNS提供商。

注意:对于部分学校内网域名解析请在上游DNS设置中为特定域名设置上游服务器:

[/example.com/]1.1.1.1
指定为特定域名的上游服务器
[/example1.com/example2.com/]1.1.1.1
指定为多个特定域名的上游服务器
[/*.example1.com/*.example2.com/]1.1.1.1
指定为多个通配符特定域名的上游服务器
[/example.com/]1.1.1.1 2606:4700:4700::1111
特定域名的多个上游服务器

其规则参见:https://github.com/AdguardTeam/AdGuardHome/wiki/Configuration#upstreams-for-domains

后备DNS也可以参考此表并考虑加入地方运营商/学校的DNS。

Bootstrap DNS 服务器为解析DoH/DoT/DoQ地址的DNS,请选择IP形式的DNS如1.1.1.1

DNS 服务配置

速度限制建议设置为0

现在主流的DNS服务器都支持ECDN,所以建议开启EDNS客户端子网。

强烈建议启用DNSSEC,其在支持DNSSEC的网站会进行验证避免DNS污染。(表现形式为日志中相应记录左边会有一个绿锁)

警告:请在过滤器->DNS重写中为特定域名(如校园网认证域名、学校内网服务域名)指定IP。(如果如上文指引为特定域名指定了DNS服务器并确保其能正确解析的情况下请忽略此警告)

折腾Step5(Docker)

因为我没有修改镜像的默认空间导致可用空间只有1G,为了扩容/overlay走了不少弯路,又是改文件系统,又是搞挂载点。最后被一个大佬点拨了一下,如坐春风醍醐灌顶。直接新建分区然后挂载到新地址,将Docker 根目录地址改为此地址。

我在Docker装了Home Assistant和青龙面板。请按需安装容器并注意储存空间。

折腾Step5.5(Home Assistant)

务必将容器网络类型设置为host,否则可能导致网络出错

如果设置了homekit但手机无法连接,原因为HA和手机不在同一网段内,需要配置->系统->网络->网络适配器勾选br-lan/lan(按需勾选)。(如果点开网络后是空白无选项可能需要打开开发者选项一类的东西)

折腾Step6(IPv6)

注意:请先确定你的校园网/网络支持IPv6

因为作者学校的IPv6体验并不好,也没有相关访问IPv6网站/地址的需求,加之OpenWrt在IPv6上也沾点残废,所以说就没怎么折腾。

具体可以参考以下文章:OpenWRT 路由器IPv6实战配置长篇教程:纠正你的IPv4思维!OpenWrt IPv6 设置与 DHCPv6 设置入门指南

折腾-特别篇S1(单线多拨)

如果你的学校不是设备共享速率且支持多设备登录或者你可以借你舍友的账号来玩多拨。

单线多拨和多线多拨其实都没太大的差别。单线的话要注意网线和网口的速率。

单线多拨需要使用macvlan插件虚拟出多个网卡并搭配mwan3(负载均衡)使用。

注意:多拨可以使多线程的速度变快但不会提高你单线程的速度。使用IDM/Steam下载或使用多线程测速等可以明显看到提升。

折腾-特别篇S2(绕过多设备检测)

通常来说,学校都会通过一些手段来检测多设备连接的情况,例如通过TTL、UA进行检测。听闻有学校通过DPI、Identification、时钟偏移等更加变态的手段进行检测的(作者的学校貌似并没有这样)。

以下提供几位大佬的文章用于参考借鉴:

折腾Step7(其他)

如打印机、Aira2、Samba、AList等等网上都有大量教程,作者就不在此赘述。


本文由Akari出于非盈利性目的创作,使用CC BY-SA 4.0进行授权,请务必遵守相关协议。

最后更新于 2024-05-12