学校宿舍软路由折腾记
前情提要及温馨提示
坐标广东某高校,晚上会定时断网,使用广东天翼校园网(飞Young)服务。
此文只是折腾记录,作为抛砖引玉之用,不是任何教程,作者也没有任何解答的义务。
设备
- 树莓派(Raspberry Pi) 4b 2G
- 360(磊科)P2 无线路由器
系统
注:本人不对以上固件的安全性、兼容性等作出任何保证,请自行斟酌或选择其他您认为可靠的固件
折腾Step1
物料
- RTL8153芯片USB千兆网卡
- CAT 6(或其他可以达到千兆及以上的类型)网线若干
由于树莓派只有一个网口,所以需要额外一个USB网卡来充当wan口,而RTL8153芯片的网卡在OpenWrt上可以免驱使用。
AX88179芯片的USB网卡貌似也可以免驱使用,但我没试过。
无线功能
由于OpenWrt的无线功能天生残废,所以我找了个N年前别人淘汰下来的360P2路由器来做无线接入点 (AP)。
树莓派自带无线网卡,但我无法同时使用2.4G和5G频段,而且无线功能也不稳定(会出现“未激活”或“已禁用”),所以说我使用了正经路由器和Padavan固件来做AP。
OpenWrt有部分MT(联发科)/雷凌的无线网卡驱动,但折腾起来比较麻烦。详情可以自行百度/Google折腾。
折腾Step2(校园网认证)
本人学校使用的是广东天翼校园网。
建议在hosts/DNS程序中指定相关认证网址等的IP
校园网认证程序
可以参考以下项目:
- Pandaft/ESurfingPy-CLI(Python,使用网页认证通道,MIT)
- Pandaft/go-esurfing(Go,使用手机客户端的接口协议,GPL-3.0)
- HEAVEN-LIMITED/EsDialerGDTools(已经不维护,Apache-2.0)
建议使用1/2中的项目,部分学校禁用了网页认证通道可以使用2中的项目。请在电脑上测试好了后再往软路由上搬。
其他地区或使用其他校园网认证程序的可以尝试在Github或搜索引擎或恩山无线论坛等查找是否有相关项目。
自动认证脚本
在软路由中可以设置一个bash/shell脚本来定时执行校园网认证程序。
请自行搜索相关脚本的写法。
请注意文件/文件夹的所有权及权限设置。
定时任务(Cron表达式)
定时任务设置中的 * 为Cron表达式。
注:在以上项目中的遇到任何问题请直接在项目中发issue。
注:本人不对以上项目的安全性、兼容性等作出任何保证,其为开源代码请自行审查。请注意并遵守项目中注明的开源协议。
折腾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 - CSDN、OpenWrt路由器通过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的技术笔记
网络策略
以下是几个思路:
- 使用mwan3进行分流和负载均衡。此方案的好处在于在使用上网卡流量的同时不影响学校内网的使用,但mwan3配置难度较高,比较麻烦。而且配置不当可能会导致流量消耗过高,网速变慢,网络连接不稳定等。
- 在使用mwan3的同时配合定时脚本来实现对手机的wan/usb进行启用/禁用。
- 在使用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 filter | https://adguardteam.github.io/AdGuardSDNSFilter/Filters/filter.txt | AdGuard官方默认的规则,在国内效果一般 |
Anti-AD | https://anti-ad.net/easylist.txt (国内) https://raw.githubusercontent.com/privacy-protection-tools/anti-AD/master/anti-ad-easylist.txt (Github) | 中文区知名过滤规则 |
EasyList | https://easylist-downloads.adblockplus.org/easylist.txt | 知名的过滤规则 |
EasyList-CN | https://easylist-downloads.adblockplus.org/easylistchina.txt | EasyList的中文区扩展规则 |
EasyPrivacy | https://easylist-downloads.adblockplus.org/easyprivacy.txt | EasyList的补充规则,用以去除网络跟踪 |
CJX's Annoyance List | https://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提供商 | 地址 |
---|---|
阿里云(Ali DNS) | 223.5.5.5 / 223.6.6.6 https://dns.alidns.com/dns-query (DoH) tls://dns.alidns.com (DoT) |
腾讯云DNSPod | 119.29.29.29 https://doh.pub/dns-query(DoH) tls://dot.pub (DoT) |
清华大学TUNA协会 仅部分高校可用 | 101.6.6.6 |
114DNS和也许也是个不错的选择。
注意:对于部分学校内网域名解析请在上游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 设置入门指南
折腾Step7(其他)
如打印机、Aira2、Samba、AList等等网上都有大量教程,作者就不在此赘述。
本文由Akari出于非盈利性目的创作,使用CC BY-SA 4.0进行授权,请务必遵守相关协议。