和校园网斗智斗勇的日子(第三辑)
前情回顾:
和校园网斗智斗勇的日子
和校园网斗智斗勇的日子(第二辑)
本篇算是专题了,专题内容主要是『为什么,以及如何,放弃OpenWRT,直接用Debian做路由』
OpenWRT:想说爱你不容易
OpenWRT是好的,这个不可否认,基本上你安装好OpenWRT,这玩意就变成了一个路由器,不管是单臂路由还是普通路由,亦或者单纯做网关,都悉听尊便
但是这份易用性之下其实有两个难以掩盖的缺点,让我变了主意,选择装一个普通的发行版去做路由
x86平台上依然过分的精简
OpenWRT最开始设计是在各种嵌入式设备上运行的,比如说空间只有几兆十几兆的ARM/MIPS路由器,因此一件不可避免的事情是,他必须进行各种裁剪,才能够塞进去这种路由器里面
老实说,这并不是一件坏事,反而是一个硬性需求,毕竟装都装不上还谈何使用呢?
但是事情的转折点发生在了x86上。x86架构系统的一大特点(或者说,普遍趋势是)存储空间和计算性能几乎可以无限扩张,不够了就加就是了,因此我大可以给OP预留500G的硬盘空间,只要我愿意,这就是动动手指的事情。
但是问题来了:我有空间,你有内容吗?
OpenWRT的一个通常用法是在编译固件的时候实现把要安装的东西先编译进去,有可能是这个原因,OP平台的包管理系统算是一个半残废的状态,很多软件包都装不上,甚至压根不存在,比如linux-headers
。诚然,如果我想要往十几兆的路由器上装软件包,那不太现实,但是我现在有十几GB的空间,难道还不现实吗?
现实,但他不让你装
x86平台底层软件的无法安装
Linux平台,一个硬件插入电脑中不会被识别是一件很正常的事情,这个现象尤见于USB无线网卡上。
如果你需要选购USB无线网卡,建议找联发科芯片的卡,基本上插入就认
一般而言对于这种情况,是需要自己安装甚至编译驱动的,但是在OpenWRT上,对不起,做不到。且不论opkg无法安装header文件,编译也就无从谈起,即使你这么走运找到了另一个同一个内核版本的Linux复制过来,编译过程也是问题多多。费了九牛二虎之力编译出来一个模块了,对不起,没办法给你装,除非你重新编译固件。
如果是ARM等嵌入式平台,也就算了,但是你是x86啊大哥,生搬硬套规则不太合适吧
就是这些事情让我变了主意,决定抹掉目前使用的OpenWRT,用其他Linux发行版重新来过。选择Debian并没有什么特别的理由,单纯只是用顺手了而已,你可以根据你的情况选择喜欢的发行版,当然具体命令需要修改一下,这些都是后话了
校园网现状
上篇文章里面提到过,校园网奇怪的认证行为。后来和群友讨论过之后,得出一个结论是:使用桥接模式工作的无线中继器的『无线转有线』功能,对MAC地址的处理,和我所在的校园网络不是很适应
至于为什么需要用这么奇怪的方式上网,原因就是上文提到过的,无法在OP上给无线网卡打驱动,学校又不让我们有线连接,只能出此下策。事实上,这个也是我这次OP换DB的直接原因之一。因为这个方式不好用,理想情况当然就是主机直接插无线网卡,用client模式去连接校园网,没有中间商赚差价了,出问题的概率也会低很多
网络专业学生在宿舍上网都不自在,笑死个人咯.....
因此,在给小主机装了Debian并进行了相应配置之后,正式进入了三代大喇叭时代。三代大喇叭的架构大致如下:
- 软路由接三张网卡(一张是自带千兆卡eth0,一张是USB有线卡eth1,一张是无线卡wlan1)
- eth0作为LAN使用
- eth1连接4G CPE,作为备用链路
- wlan1配置为client模式,主动连接校园网,作为主要链路
- 无线接入用AP(普通无线路由器开AP模式),配合千兆傻瓜交换机实现内网接入
实测用这种方式工作的话,不会出现掉认证的情况,之前那个『暴力保活』的脚本自然也不需要了,只需要每天早上用curl调用接口认证一下就可以了
从OP,到DB
一个家用路由器,最基本的功能只有几个:网关,NAT,DHCP服务器,可能还有一个DNS缓存或者转发。因此我们只需要在Debian上面按要求装好这些服务软件,就可以让他提供路由功能了。这个过程其实还挺简单的,网上有详细教程,此处仅作要点解析:
下面的内容默认你已经有了操作Debian系统的基础,且已经做好了
apt update
以及更改密码等操作如果你不知道这是什么,那么本教程可能并不适合你
安装iptables
如果你比较习惯用nftables,那么其实无所谓。不过笔者习惯了iptables,还是另外装一下的好
apt remove --auto-remove nftables
apt purge nftables
apt install iptables
安装DHCP和DNS
网上给出的教程一般都是dnsmasq同时完成DNS和DHCP,不过我这里选择的方案是ADGuard Home + isc-dhcp-server
(理论上光ADG也可以做DHCP,但是,还是分开的好)
ADG可以按照官网教程来装,isc-dhcp-server的话也不难:
apt install isc-dhcp-server
装好后,打开/etc/default/isc-dhcp-server
,配好你要提供服务的接口。然后再打开/etc/dhcp/dhcpd.conf
,写入如下配置:
subnet <LAN网段> netmask <LAN子网掩码> {
range <DHCP地址池起始地址> <DHCP地址池终止地址>;
option routers <网关地址>;
option domain-name-servers <网关地址,也可以是其他DNS服务器>;
option broadcast-address <LAN广播地址>;
default-lease-time 600;
max-lease-time 7200;
}
保存并重启服务,DHCP就可以用了
打开路由转发
打开/etc/sysctl.conf
文件,追加写入如下内容:
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
net.ipv6.conf.all.disable_ipv6=0
net.ipv6.conf.default.disable_ipv6=0
net.ipv6.conf.lo.disable_ipv6=0
然后执行sysctl -p /etc/sysctl.conf
重载配置即可
配置iptables
一般来说,主要的命令是
iptables -t nat -A POSTROUTING -o <出站接口> -j MASQUERADE
但是笔者在这里踩了个小坑:这么配置之后确实能用。但是此后又装了WireGuard,发现路由器本机可以ping通对端内网,但是局域网内的机器无法通过直接访问对端地址的方式去访问对端局域网。
问题原因很简单,这条命令把流量都发到出站接口去了。解决方法也很简单:在这条规则之前再插入规则,指定某个地址段不这么转发就是了。可以先加特殊再加这个一般,也可以用-I操作符后期补充:
iptables -t nat -I POSTROUTING -d <对端内网网段> -o <VPN接口> -j MASQUERADE
总结
基本上,这段时间折腾下来,到三代大喇叭为止,之后估计都不会再有大的变动了
....也希望如此
(完)
我这的校园网好像还没有恶心到看mac地址,我debian上用lnx-router这个脚本把无线转有线就可以多设备上网了
不过我这个是有路由的作用的,不是无线中继