校园网笑传之多拨

谈笑风生 789 views 11 replies
#1 ·

校园网拨号 IPv4 限制 50Mbps,但是 pppoe 认证服务器有漏洞,并发拨号可以拨很多次,所以开帖记录研究历程 😈

❤️
5
#2 ·

首先,关于 OpenWRT,可以开很多 macvlan 然后分别配置拨号,然后用 mwan3 负载均衡
但是有几个问题:

  1. 0-5 个拨号 session 可能会随机失败,可能是所有的拨号启动时间窗口太大导致的
  2. 只有一个 session 能获取 IPv6(也许是配置有误?),如果这个 session 启动失败可能会导致 IPv6 失效
  3. mwan3 似乎问题很大,即使开了 sticky,也会导致大量 https 请求失败,以及各种随机丢包(也有可能是配置问题)
❤️
1
#3 ·

所以转而使用 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
    }
}
❤️
3
#4 ·

为了应对潜在的拨号失败问题,转而使用 rocky linux 9 + pppd 的组合(NetworkManager 的 pppoe IPv6 EUI-64 有 bug,导致校园网拨号无 IPv6 连接)

先用 Proxmox VE 在网桥上开 20 个 veth 发给 lxc 容器 😇

地狱绘图

然后写一个工具用来并发执行 pppd:(WIP)

目前 TODO:
并发拨号
定时重拨
存活少于 n 重拨
自动生成配置

❤️
2
#5 ·

Considerable Concurrent 拨

🤣️❤️
9
#6 ·

感觉好古老的东西
现在还用 PPPoE 拨号上网吗?好像是我小学时候采用的东西了
是不是用一个叫“调制解调器”的东西 😇

#7 ·
sumire アイラちゃん

现在国内家宽基本上都用 PPPoE 认证吧?🤔

不过 PPP 确实古老,还是 DSL 时期的产物,只不过现在也还在用

调制解调器现在估计主要是光纤转双绞线了,不过 PPPoE 客户端一般都不在调制解调器上(除了家宽光猫拨号🤣)

👍️❤️
4
#8 ·
无状态垃圾桶,post:1, topic:15209, username:stateless_trash_can:

校园网拨号 IPv4 限制 50Mbps

为什么不用 IPv6 呢?是因为用不了吗?


不对怎么还有限速?


哦下面用了💦

——發自我的手機
❤️
1
#9 ·
PipaQinse233 PipaQinse233

IPv6 应该不限速,不过多拨比较有意思,所以研究一下(

另外应该有不少服务还是仅 IPv4 的,不过我没有实际对比统计过

👍️❤️
5
admin #10 ·
stateless_trash_can 无状态垃圾桶
无状态垃圾桶,post:9, topic:15209, username:stateless_trash_can:

另外应该有不少服务还是仅 IPv4 的

Notorious GitHub.com

🤣️❤️
4
#11 ·
stateless_trash_can 无状态垃圾桶

链路检测完成 🫪

"daemon": {
        "run_dir": "/var/run",
        "expected": 20,
        "enabled": true,
        "check_interval": 300,
        "force_restart": false,
        "force_restart_interval": 86400
    }

image

image

经测试可以稳定带 20 并发 🤣

感觉写得一坨,但是没关系啦

睡醒了写文档

👍️❤️
4
#12 ·

写了 README

今天再试的时候 xray 又突然不好用了,很神秘,不是很懂 🫠
最后改用了 mihomo

效果还是很可观的 😋

image

其实三层负载均衡最合理的方式应该是 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
image

wave_gif👍️❤️
8