OpenWrt + olcRTC:在白色列表限制下通过 LTE 实现稳定上网
OpenWrt + olcRTC + Sing-box:LTE稳定互联网
适用于以下情境的实用设置没有有线互联网,仅有LTE通信,传统的VPN/VLESS配置不稳定,且需要多个设备同时正常上网,包括通过企业VPN运行。
这不是通用的说明,也不是“适合所有场合的正确架构”。以下是我目前运行的具体配置,可以作为起点。
您可以支持:
- BTC
bc1q6r9tdctf2wjrhj03w0u8lrg3gs2m8fkvcv4953 - USDT(TRC20)
TK29wf2q2pBtm4rFDPkVqfBoNKdKR7qMXS - ETH
0x6e6ec7Bea1dF21f836310EB6B86D26738907A382 - 土壤
E1GPt8SGKLamSPiRRDFzSSdcwKgjop766bVbYoPw6sGx
您可以通过评论或Telegram联系:@swekonstantin
问题
我到达村庄时,没有有线互联网,只有LTE。
白名单不再关闭——耐心点,矮人们。
VLESS 配置经常失败且工作不稳定。同时,你需要访问普通互联网,以免使用 VK 导致疯狂,工作时也需要。
除了互联网接入本身,我还想解决几个问题。
企业VPN
企业VPN尤其不方便:
- 在已有绕过之上搭建复杂的企业VPN;
- 同一台机器上的两个VPN并不能很好地连接;
- 手动配置路线和隧道——出血;
- 由于多个隧道层同时工作,连接变得不稳定。
我希望这个装置能不知道绕行路的存在,企业VPN也像往常一样连接。
连接新设备
另一个问题是那些尚未配置VPN或根本无法安装VPN的设备。
比如,我曾经重置手机,无法正常进行初始设置,除非连接工作Wi-Fi。
此外:
- 并非所有设备都有最新的VPN客户端;
- 每换一台新设备,你都必须重复配置;
- 有些物联网/嵌入式设备只能做普通的Wi-Fi。
因此,我想把所有逻辑都放在路由器上。
经济
某个时候,我有4 个并发VPN订阅.
每个服务设置都有些不同,且时不时会掉下来。一个在工作时,其他的都处于空闲状态。
总共,我花了大约每月1500₽仅限VPN订阅。
现在固定成本主要是租用VPS。
发生了什么
目前情况:
- 设备连接到Wi-Fi无需客户端额外设置;
- 关于同时使用5个设备使用外交服务;
- 除了连接,你还可以连接企业VPN:
- WireGuard;
- 基于IPsec的L2TP;
- 其他VPN;
- 如有需要,也可以使用 VLESS 服务器;
- 初始投资——大约每台路由器5000₽加上VPS租赁;
- 在稳定性方面,该方案并不比之前的基于CDN的爬虫更差。
从客户的角度看,一切看起来都很简单:
Устройство
│
│ Wi-Fi
▼
OpenWrt Router
│
├── sing-box
│ │
│ ▼
│ SOCKS5
│ │
│ ▼
└── olcRTC
│
│ WebRTC / Telemost
▼
VPS
│
▼
Internet
已知问题 / 待办事项
解决方案还不理想。
UDP、ICMP和DNS
有时会出现以下问题:
- UDP;
- ICMP;
- DNS流量。
很可能问题出在我目前的路由器配置上。到目前为止,我对此没什么问题,因为有个简单的辅助工具。
拐杖:在有问题的设备上连接另一个VPN。
MetricRTC и WebRTC
olcRTC会定期掉落。
到目前为止,我认为这有两个原因:
- 仪器本身的wicode;
- WebRTC提供商的功能。
olcRTC的尺寸
olcRTC结果发现这是一个相当大的二元。
你需要考虑如何减少路由器的体积和资源消耗。
也许将来我会专门为嵌入式/OpenWrt场景做一个轻型分支。
你需要什么
下面我会描述只有你自己的设备.你可以专注于它,或者尝试重复它。
| 组成部分 | 我用的是什么 |
|---|---|
| 路由器 | Cudy TR3000 256 MB v1,中文版 |
| 操作系统 | OpenWrt 25.12.5 |
| 交通 | olcRTC |
| 布线 | sing-box 1.13.18 |
| 互联网 | 通过安卓LTE / USB网络 |
| VPS | 2 vCPU / 4 GB 内存 |
| 附加内容 | 安卓手机+USB线缆 |
我的叉子olcRTC:
https://github.com/jojopko/olcrtc
Cudy TR3000 的 OpenWrt 说明:
https://openwrt.org/toh/cudy/tr3000
在设置过程中,最好能有某种形式的WAN访问权限。
如果无法使用,可以提前在其他设备上下载包和二进制文件,然后通过以下方式传输到路由器scp.
VPS要求
我有一个VPS:
2 vCPU
4 GB RAM
中央处理器
2+ vCPU 是理想的。
这对Yandex Telebridge很重要,因为处理器需要处理/解码帧。
内存
4GB 一个olcRTC多余。
如果服务器上其他方法都不行:
1 GB RAM — скорее всего достаточно
2 GB RAM — более чем достаточно
我觉得为了这个设置,没必要专门占用超过2GB。
安装
1. 安装OpenWrt
如何在Cudy TR3000上安装OpenWrt:
https://openwrt.org/toh/cudy/tr3000
我用的是:
OpenWrt 25.12.5
2. 必需套餐
以下是我需要的包裹清单。
也许他忘了什么。
sudo-1.9.17_p2-r3.apk
kmod-mii-6.12.94-r1.apk
kmod-usb-net-cdc-ether-6.12.94-r1.apk
kmod-tun-6.12.94-r1.apk
kmod-usb-net-rndis-6.12.94-r1.apk
kmod-usb-net-6.12.94-r1.apk
如果路由器处于完全的BS状态,无法下载依赖,你可以提前从这里下载这些包:
https://downloads.openwrt.org/releases/25.12.5/packages/
例如:
curl -LO https://downloads.openwrt.org/releases/25.12.5/packages/aarch64_cortex-a53/base/ca-bundle-20260601-r1.apk
3. 安装合唱盒
sing-box可在OpenWrt仓库中找到。
我更喜欢用现成的二进制。如果你愿意,也可以自己组装。
关于ARM64:
curl -fLO "https://github.com/SagerNet/sing-box/releases/download/v1.13.18/sing-box-1.13.18-linux-arm64-musl.tar.gz"
使用的版本:
sing-box 1.13.18
4. 将文件传输到路由器
文件可以通过以下方式传输scp.
没有-O,很可能不会成功:
scp -O root@192.168.1.1:/tmp/
之后,手动安装APK:
apk --no-network --allow-untrusted add
USB互联网设置
如果互联网出现,本节是必需的:
- 通过USB网络连接安卓手机;
- 或者通过兼容的USB/SIM调制解调器。
创建接口android:
uci set network.android=interface uci set network.android.proto='dhcp' uci set network.android.device='usb0' uci commit network
将接口添加到防火墙区域:
uci add_list firewall.@zone[1].network='android' uci commit firewall
重启网络和防火墙:
/etc/init.d/network restart /etc/init.d/firewall restart
检查界面
ifstatus android
JSON必须具备:
{
"up": true
}检查路由
默认路线也应该通过usb0.
route show default
示例:
default via 192.168.156.48 dev usb0 src 192.168.156.92
172.19.0.0/30 dev singtun0 scope link src 172.19.0.1
192.168.1.0/24 dev br-lan scope link src 192.168.1.1
192.168.156.0/24 dev usb0 scope link src 192.168.156.92
之后,试试:
ping <какой-нибудь-доступный-хост>
或者发送常规的 HTTP 请求。
如果:
- 手机数据已开启。
- 互联网在手机本身上运行;
- USB连接已激活;
那么路由器也必须能够访问网络。
安装olcRTC和单声盒
双人组:
olcrtc
sing-box
输入:
/usr/bin/
配置:
/etc/olcrtc/config.yaml
/etc/sing-box/config.json
olcRTC 配置
我的DNS操作很奇怪。
我用的是DNS,它能通过/etc/resolv.conf.
Yandex DNS:
77.88.8.8
虽然有效,但有些外国网站会穿透它。
谷歌DNS:
8.8.8.8
在BS的条件下,很可能在任何地方都行不通。
olcRTC 的独立用户
我建议跑步olcRTC代表个人用户。
这允许你在sing-box并避免交通环线olcRTC又掉进了同一条隧道。
创建用户,例如:
olcrtc
并且记住它UID.
接下来,该UID将在以下情况下被需要:
"exclude_uid": [ 1001 ]
示例/etc/olcrtc/config.yaml
mode: cnc auth: provider: telemost room: id: "room_id" crypto: key: "secret_key" net: transport: vp8channel # DNS-варианты: # dns: "77.88.8.8:53" # dns: "8.8.8.8:53" dns: "192.168.156.48:53" liveness: interval: 10s timeout: 15s failures: 4 socks: host: "127.0.0.1" port: 8808 user: "admin" pass: "1111" vp8: fps: 30 batch_size: 64 debug: false data: data/
单盒配置
在这种情况下,务必用与你的网络相关的DNS替换DNS。
我查看了以下DNS地址:
/etc/resolv.conf
伐木
在初始设置时,安装:
"level": "info"
或者:
"level": "debug"
但经过测试后,最好切换到:
"level": "warn"
或者:
"level": "error"
否则,木头很快就会被垃圾堵塞。
错误依然可见。
exclude_uid
参数:
"exclude_uid": [ 1001 ]
必须包含其代表工作的用户的UIDolcRTC.
这是必要的,以确保交通本身olcRTC没有被驱回sing-box而且没有循环。
SOCKS出站
确保连接设置在outbounds匹配配置中的SOCKS设置olcRTC.
也就是说,这些值为:
127.0.0.1
8808
admin
1111
两个配置都必须匹配。
示例/etc/sing-box/config.json
{
"log": {
"level": "warn",
"timestamp": true
},
"dns": {
"servers": [
{
"type": "udp",
"tag": "dns-direct",
"server": "192.168.156.48",
"server_port": 53,
"bind_interface": "usb0"
}
],
"final": "dns-direct",
"strategy": "ipv4_only"
},
"inbounds": [
{
"type": "tun",
"tag": "tun-in",
"interface_name": "singtun0",
"address": [
"172.19.0.1/30"
],
"mtu": 1500,
"auto_route": true,
"auto_redirect": true,
"strict_route": true,
"stack": "system",
"exclude_uid": [
1001
],
"route_exclude_address": [
"192.168.0.0/16"
]
}
],
"outbounds": [
{
"type": "socks",
"tag": "olcrtc",
"server": "127.0.0.1",
"server_port": 8808,
"username": "admin",
"password": "1111",
"version": "5",
"network": "tcp"
},
{
"type": "direct",
"tag": "direct",
"bind_interface": "usb0"
}
],
"route": {
"rules": [
{
"port": 53,
"action": "hijack-dns"
},
{
"ip_is_private": true,
"action": "route",
"outbound": "direct"
},
{
"network": "udp",
"action": "route",
"outbound": "direct"
},
{
"network": "tcp",
"action": "route",
"outbound": "olcrtc"
}
],
"final": "direct"
}
}手动启动
在创建系统服务之前,最好先手动检查所有内容。
运行olcRTC
sudo -u olcrtc /usr/bin/olcrtc /etc/olcrtc/config.yaml
检查单盒配置
sing-box check -c /etc/sing-box/config.json
如果没有错误:
sing-box run -c /etc/sing-box/config.json
之后,连接路由器的Wi-Fi,检查网络接入情况。
配置系统服务
如果手动启动没问题,那么把两个进程都转为OpenWrt服务是合理的。
然后他们会:
- 路由器开机后自动启动;
- 无需主动SSH/shell会话即可工作;
- 跌落后自动重启;
- 写
stdout以及stderr系统日志。
配置前,确保手动启动的进程已停止:
ps w
单曲盒服务
创建文件:
vi /etc/init.d/sing-box
目录:
#!/bin/sh /etc/rc.common
START=95
STOP=10
USE_PROCD=1
PROG="/usr/bin/sing-box"
CONFIG="/etc/sing-box/config.json"
start_service() {
procd_open_instance
procd_set_param command "$PROG" run -c "$CONFIG"
# threshold timeout retry
procd_set_param respawn 3600 5 5
procd_set_param file "$CONFIG"
procd_set_param stdout 1
procd_set_param stderr 1
procd_close_instance
}
reload_service() {
stop
start
}
service_triggers() {
procd_add_reload_trigger "sing-box"
}使可执行文件:
chmod +x /etc/init.d/sing-box
开启自动播放:
/etc/init.d/sing-box enable
启动:
/etc/init.d/sing-box start
olcRTC服务
我们创造:
vi /etc/init.d/olcrtc
目录:
#!/bin/sh /etc/rc.common
START=95
STOP=10
USE_PROCD=1
start_service() {
procd_open_instance
procd_set_param command /usr/bin/olcrtc /etc/olcrtc/config.yaml
procd_set_param user olcrtc
procd_set_param respawn 3600 5 5
procd_set_param stdout 1
procd_set_param stderr 1
procd_close_instance
}使可执行文件:
chmod +x /etc/init.d/olcrtc
开启自动播放:
/etc/init.d/olcrtc enable
启动:
/etc/init.d/olcrtc start
验证
两项服务上线后:
ps w
我们检查以下方法是否有效:
olcrtc
sing-box
如有必要,查看系统日志:
logread
或过滤特定工艺:
logread | grep sing-box
logread | grep olcrtc
进一步说明:
- 将设备连接到Wi-Fi;
- 我们不在客户端启用任何VPN;
- 开设必要的外交服务;
- 查查常规网络;
- 如果有必要,可以在此基础上连接一个企业VPN。
如果一切都设置得当,应该能正常工作。
稳定性特征
实际上,我注意到发射后最初几分钟可能会出现一些不稳定。
过一段时间,这种联系通常会对齐。
此外,连接新设备时有时会出现短暂中断,之后网络又会变得相对稳定。
一个有趣的观察:连接额外的VPN已经是在你的电脑上它几乎完全解决了不稳定的问题。
缺点是延迟会增加。
目前,我猜原因可能是在这种情况下,从外部网络角度看,大多数请求都指向一个IP地址,但目前尚无定论。
最终方案
┌──────────────────────┐
│ VPS │
│ │
│ olcRTC server │
└──────────▲───────────┘
│
│ WebRTC
│
┌──────────┴───────────┐
│ LTE (белые списки) │
└──────────▲───────────┘
│
│ usb0
│
┌─────────────┐ ┌──────────┴───────────┐
│ Laptop │ │ OpenWrt │
│ │── Wi-Fi ─▶ │
│ Corp. VPN │ │ sing-box │
└─────────────┘ │ │ │
│ ▼ SOCKS5 │
┌─────────────┐ │ olcRTC │
│ Phone │── Wi-Fi ─▶ │
└─────────────┘ └──────────────────────┘
这个设定的主要想法是把整整一轮送去路由器.
同时,客户端设备接收常规Wi-Fi,无需知道流量如何进一步传达全球网络。
结果如何
对于大约5000 ₽ 初始投资于路由器以及我买到的一个VPS的成本:
- 所有家庭设备的单一网关;
- 每台设备都缺乏VPN客户端;
- 在该方案基础上安全使用企业VPN的能力;
- 连接无法安装VPN的设备的能力;
- 减少每月开销;
- 即使在LTE和有限的网络接入条件下,稳定性也算可接受。
虽然不完美,但对我来说,这比分开多个VPN订阅明显好得多。
您可以支持:
- BTC
bc1q6r9tdctf2wjrhj03w0u8lrg3gs2m8fkvcv4953 - USDT(TRC20)
TK29wf2q2pBtm4rFDPkVqfBoNKdKR7qMXS - ETH
0x6e6ec7Bea1dF21f836310EB6B86D26738907A382 - 土壤
E1GPt8SGKLamSPiRRDFzSSdcwKgjop766bVbYoPw6sGx
您可以通过评论或Telegram联系:@swekonstantin
有用链接
- olcRTC: https://github.com/jojopko/olcrtc
- Cudy TR3000 的 OpenWrt: https://openwrt.org/toh/cudy/tr3000
- OpenWrt 包: https://downloads.openwrt.org/releases/25.12.5/packages/
- 单曲盒发行: https://github.com/SagerNet/sing-box/releases