校园网笑传之多拨
校园网拨号 IPv4 限制 50Mbps,但是 pppoe 认证服务器有漏洞,并发拨号可以拨很多次,所以开帖记录研究历程 😈
首先,关于 OpenWRT,可以开很多 macvlan 然后分别配置拨号,然后用 mwan3 负载均衡
但是有几个问题:
0-5个拨号 session 可能会随机失败,可能是所有的拨号启动时间窗口太大导致的- 只有一个 session 能获取
IPv6(也许是配置有误?),如果这个 session 启动失败可能会导致IPv6失效 - mwan3 似乎问题很大,即使开了
sticky,也会导致大量https请求失败,以及各种随机丢包(也有可能是配置问题)
所以转而使用 xray 进行负载均衡,下游测试确实有效,10 并发能跑 300Mbps,只是必须走 socks5 了比较麻烦
逆天 xray config:
{
"log": {
"loglevel": "none",
"dnsLog": false
},
"inbounds": [
{
"listen": "[REDACTED]",
"port": [REDACTED],
"protocol": "shadowsocks",
"settings": {
"network": "tcp,udp",
"method": "[REDACTED]",
"password": "[REDACTED]"
},
"tag": "ss-in"
},
{
"listen": "[REDACTED]",
"port": [REDACTED],
"protocol": "socks",
"settings": {
"auth": "noauth",
"udp": true
},
"tag": "socks-in"
}
],
"outbounds": [
{
"protocol": "freedom",
"tag": "out-wan0",
"streamSettings": {
"sockopt": {
"interface": "pppoe-wan0"
}
}
},
{
"protocol": "freedom",
"tag": "out-wan1",
"streamSettings": {
"sockopt": {
"interface": "pppoe-wan1"
}
}
},
{
"protocol": "freedom",
"tag": "out-wan2",
"streamSettings": {
"sockopt": {
"interface": "pppoe-wan2"
}
}
},
{
"protocol": "freedom",
"tag": "out-wan3",
"streamSettings": {
"sockopt": {
"interface": "pppoe-wan3"
}
}
},
{
"protocol": "freedom",
"tag": "out-wan4",
"streamSettings": {
"sockopt": {
"interface": "pppoe-wan4"
}
}
},
{
"protocol": "freedom",
"tag": "out-wan5",
"streamSettings": {
"sockopt": {
"interface": "pppoe-wan5"
}
}
},
{
"protocol": "freedom",
"tag": "out-wan6",
"streamSettings": {
"sockopt": {
"interface": "pppoe-wan6"
}
}
},
{
"protocol": "freedom",
"tag": "out-wan7",
"streamSettings": {
"sockopt": {
"interface": "pppoe-wan7"
}
}
},
{
"protocol": "freedom",
"tag": "out-wan8",
"streamSettings": {
"sockopt": {
"interface": "pppoe-wan8"
}
}
},
{
"protocol": "freedom",
"tag": "out-wan9",
"streamSettings": {
"sockopt": {
"interface": "pppoe-wan9"
}
}
}
],
"routing": {
"rules": [
{
"ip": [
"::/0"
],
"outboundTag": "out-wan0",
"ruleTag": "rule-v6"
},
{
"ip": [
"0.0.0.0/0"
],
"balancerTag": "all-wans",
"ruleTag": "rule-v4"
}
],
"balancers": [
{
"tag": "all-wans",
"selector": [
"out-wan"
],
"fallbackTag": "out-wan0",
"strategy": {
"type": "leastLoad",
"settings": {
"expected": 10
}
}
}
]
},
"observatory": {
"subjectSelector": [
"out-wan"
],
"probeUrl": "http://connect.rom.miui.com/generate_204",
"probeInterval": "10s",
"enableConcurrency": true
}
}
为了应对潜在的拨号失败问题,转而使用 rocky linux 9 + pppd 的组合(NetworkManager 的 pppoe IPv6 EUI-64 有 bug,导致校园网拨号无 IPv6 连接)
先用 Proxmox VE 在网桥上开 20 个 veth 发给 lxc 容器 😇

然后写一个工具用来并发执行 pppd:(WIP)
目前 TODO:
并发拨号
定时重拨
存活少于 n 重拨
自动生成配置
Considerable Concurrent 拨
感觉好古老的东西
现在还用 PPPoE 拨号上网吗?好像是我小学时候采用的东西了
是不是用一个叫“调制解调器”的东西 😇
现在国内家宽基本上都用 PPPoE 认证吧?🤔
不过 PPP 确实古老,还是 DSL 时期的产物,只不过现在也还在用
调制解调器现在估计主要是光纤转双绞线了,不过 PPPoE 客户端一般都不在调制解调器上(除了家宽光猫拨号🤣)
校园网拨号
IPv4限制50Mbps
为什么不用 IPv6 呢?是因为用不了吗?
不对怎么还有限速?
哦下面用了💦
IPv6 应该不限速,不过多拨比较有意思,所以研究一下(
另外应该有不少服务还是仅 IPv4 的,不过我没有实际对比统计过
另外应该有不少服务还是仅
IPv4的
Notorious GitHub.com
链路检测完成
"daemon": {
"run_dir": "/var/run",
"expected": 20,
"enabled": true,
"check_interval": 300,
"force_restart": false,
"force_restart_interval": 86400
}


经测试可以稳定带 20 并发 🤣
感觉写得一坨,但是没关系啦
睡醒了写文档
写了 README
今天再试的时候 xray 又突然不好用了,很神秘,不是很懂 🫠
最后改用了 mihomo
效果还是很可观的 😋

其实三层负载均衡最合理的方式应该是 PBR 吧?但是我又菜又懒,所以能用就行了
mihomo config:
mixed-port: 7890
allow-lan: true
lan-allowed-ips:
- 0.0.0.0/0
proxies:
- name: v4ppp0
type: direct
udp: true
ip-version: ipv4
interface-name: ppp0
- name: v4ppp1
type: direct
udp: true
ip-version: ipv4
interface-name: ppp1
- name: v4ppp2
type: direct
udp: true
ip-version: ipv4
interface-name: ppp2
- name: v4ppp3
type: direct
udp: true
ip-version: ipv4
interface-name: ppp3
- name: v4ppp4
type: direct
udp: true
ip-version: ipv4
interface-name: ppp4
- name: v4ppp5
type: direct
udp: true
ip-version: ipv4
interface-name: ppp5
- name: v4ppp6
type: direct
udp: true
ip-version: ipv4
interface-name: ppp6
- name: v4ppp7
type: direct
udp: true
ip-version: ipv4
interface-name: ppp7
- name: v4ppp8
type: direct
udp: true
ip-version: ipv4
interface-name: ppp8
- name: v4ppp9
type: direct
udp: true
ip-version: ipv4
interface-name: ppp9
- name: v4ppp10
type: direct
udp: true
ip-version: ipv4
interface-name: ppp10
- name: v4ppp11
type: direct
udp: true
ip-version: ipv4
interface-name: ppp11
- name: v4ppp12
type: direct
udp: true
ip-version: ipv4
interface-name: ppp12
- name: v4ppp13
type: direct
udp: true
ip-version: ipv4
interface-name: ppp13
- name: v4ppp14
type: direct
udp: true
ip-version: ipv4
interface-name: ppp14
- name: v4ppp15
type: direct
udp: true
ip-version: ipv4
interface-name: ppp15
- name: v4ppp16
type: direct
udp: true
ip-version: ipv4
interface-name: ppp16
- name: v4ppp17
type: direct
udp: true
ip-version: ipv4
interface-name: ppp17
- name: v4ppp18
type: direct
udp: true
ip-version: ipv4
interface-name: ppp18
- name: v4ppp19
type: direct
udp: true
ip-version: ipv4
interface-name: ppp19
- name: v6ppp0
type: direct
udp: true
ip-version: ipv6
interface-name: ppp0
proxy-groups:
- name: "v4group"
type: load-balance
proxies:
- v4ppp0
- v4ppp1
- v4ppp2
- v4ppp3
- v4ppp4
- v4ppp5
- v4ppp6
- v4ppp7
- v4ppp8
- v4ppp9
- v4ppp10
- v4ppp11
- v4ppp12
- v4ppp13
- v4ppp14
- v4ppp15
- v4ppp16
- v4ppp17
- v4ppp18
- v4ppp19
url: "http://[REDACTED]"
interval: 300
strategy: round-robin
rules:
- IP-CIDR,0.0.0.0/0,v4group
- IP-CIDR,::/0,v6ppp0
最后的 peak
