lou
|
efa634b574
|
fix(套壳): 云服 OOM 根因修复 + DNS 降级 + watchdog 判据升级
真凶(两次"阿里云黑洞"实为系统卡死): server 每连接新建 SSLContext
(每次重读证书, 内存+盘 IO 双爆点) + ThreadPoolExecutor 无界队列
(4MB 帧在内存堆积) -> 1.6G 云服 OOM -> swap 抖动 -> 系统盘
IOPS/BPS 打满 -> 整机假死(ping 丢+应用全断, 形似黑洞)。
- server: SSLContext 启动建一次复用; TLS 握手移入连接线程(不再
阻塞 accept 主循环); 在飞请求/并发连接双上限(64); 响应上限
8MB; 内存自愈(RSS 达阈值主动退出, 交由 systemd 重启释放)
- proxy_dns: 通道不可用 -> 直连 fallback_dns 降级(全屋 DNS 不断),
再失败回 SERVFAIL(客户端立即切备用 DNS, 不再干等超时); 重连改
后台限频, 不再阻塞查询路径
- client: DNS 请求超时 15s -> 3.5s(让降级快速触发)
- watchdog: 判据由端口/进程探测改为直连云端完成 TLS+AUTH(端口在听、
本地 DNS 探针都会给假健康信号 - 降级路径照样能答); 通道不健康即
撤 L2 劫持规则, DNS 回落 smartdns 直连; HTTP 规则排除内网段
- 配置外置: fallback_dns + 服务端防护参数
- 新增 scripts/test_dns_fallback.py(降级链单测, 2/2 PASS)
QEMU OpenWrt lab 全链路验证: 降级 / 判据 / 故障演练(云挂->自动撤
规则、云回->自动重挂) 全过。
|
2026-09-10 15:56:02 +08:00 |
|
lou
|
e6d4dc17cd
|
watchdog: 云端健康检查改 sshd banner 探测(TCP 握手是假阳性——黑洞特征 TCP 开但应用断, 会误拉 L2 劫持到死通道); 云端不可达自动撤 L2 规则并停 proxy, 只保 L1
|
2026-09-09 18:54:20 +08:00 |
|
lou
|
b55c0cb7bb
|
开源化: MIT LICENSE + 详细 README + deploy/watchdog + 全仓脱敏(云服IP/学校域/凭据 → RFC5737 占位)
- LICENSE: MIT © 2026 edgevoid
- README: 三层架构/逐字段伪装对照/部署/验证/安全边界/看门狗自启
- 脱敏(filter-repo 全历史): 8.136.202.225→203.0.113.10, .zjipc.cn→.internal.example, 学校DNS→192.0.2.53
- hook.sh 更新为安全形态(FORWARD-only 绑 WAN, 去掉 OUTPUT 全挂断网形态)
- router_deploy.sh: SSHPASS 改环境变量注入(明文密码清除)
- watchdog.sh 纳入 deploy/(接口变量化)
- 内部语境泛化(认证网关/学校DNS/寝室部署备注)
|
2026-09-09 18:14:10 +08:00 |
|
lou
|
a34fe2f201
|
tools: analyze_capture 私有网段判定通用化(去除部署环境具体网段)
|
2026-09-09 18:12:10 +08:00 |
|
lou
|
fab0e8b20a
|
deploy: router_ctl.sh 一键分层控制(L1伪装+L2套壳), 先撤规则后杀进程防断网窗口
|
2026-09-09 17:48:19 +08:00 |
|
lou
|
c4822207ff
|
worker: 双后端(官方netfilterqueue优先, ctypes兜底OpenWrt) + ctypes 全签名声明/verdict cast 修复
- ctypes 后端修复: 所有 lib 调用显式 argtypes/restype(未声明时 64 位指针被 c_int 截断→段错误); nfq_set_verdict2 的 buffer 参数必须 cast(c_void_p 直接传 buffer→内核坏 payload→全连接断)
- 计数: rewritten/passed/failed + 退出统计打印
- 铁律注释: 改包后原包 ACCEPT / 异常一律放行
|
2026-09-09 17:44:56 +08:00 |
|
lou
|
f817e77a48
|
dns-proxy: 监听 0.0.0.0(PREROUTING REDIRECT 目标落接口 IP, 仅绑 127.0.0.1 收不到)
|
2026-09-09 16:32:31 +08:00 |
|
lou
|
af43b07dc0
|
fix: 清 Pylance 类型检查提示(老板标注)
- client.py: 删未使用导入 TYPE_AUTH_OK/TYPE_DNS_RESP/TYPE_HTTP_RESP
- dnsmsg.py: flags 解包后未用 -> 补 QR=1 响应拒绝(符合'非 query 返回 None'语义)
- httpmsg.py: headers default_factory=list 推断 Unknown -> lambda: [] 显式类型
- smoke_channel.py: 删未使用导入 json/os/socket/FrameReader/pack_frame; cfg 显式 dict[str, object]
- analyze_capture.py: proto Counter() 无类型参数 -> Counter[int]
|
2026-09-09 16:32:31 +08:00 |
|
lou
|
3809f76c29
|
worker: ctypes 手写版 ABI 错误致 verdict 发坏包瘫痪, 重写为官方 python3-netfilterqueue
根因链(2026-09-09 首跑瘫痪复盘):
1. 回调签名 3 参(实际 4 参: qh/nfmsg/nfad/data) -> nfad 拿到 nfgenmsg 指针
2. nfq_set_mode(0) = COPY_NONE 不拷包, payload 全空
3. verdict id 传 0 / 未改包路径无 verdict -> SYN 悬挂队列被内核丢弃
-> 新 TCP 连接全断(已建连接不受影响)
对照实验: 官方 netfilterqueue 绑定 accept 正常 -> 弃 ctypes 改用它
- set_payload+accept 等价 verdict2 改包放行, 异常一律 accept
- 依赖: apt/opkg install python3-netfilterqueue(venv 已装)
- run() 循环 select 化 + SIGTERM 优雅退出
|
2026-09-09 15:59:45 +08:00 |
|
lou
|
5cff054550
|
analyze: WScale 值类型修正(scapy 给 int 非 tuple)
|
2026-09-09 15:14:20 +08:00 |
|
lou
|
b125bada65
|
软路由部署/验收工具: router_deploy.sh + hook NFQUEUE + analyze_capture.py
- deploy: python -m 入口补齐(worker/proxy 可跑), NFQUEUE 规则带 --queue-bypass 防断网
- tools/analyze_capture.py: pcap 验收分析(SYN 特征分布/云通道流量/明文泄漏检查)
- 合成 pcap 自检通过
|
2026-09-09 15:14:14 +08:00 |
|
lou
|
6e440eaf91
|
server: 修 dns_upstream host:port 解析(此前硬编码 53 致云端 DNS 超时)
|
2026-09-09 15:05:52 +08:00 |
|
lou
|
96d44569fd
|
L2/L3 通道: HTTP/DNS 套壳转发(本地分流代理 + 云端转发器)
- proto.py: 帧协议 [type][req_id][len][payload], req_id 多路复用
- client.py: TLS 长连 + AUTH + 断线自动重连(全标准库, OpenWrt 可跑)
- proxy_http.py: 本地 HTTP 透明代理(明文 80 走通道, 失败回 502)
- proxy_dns.py: DNS 分流(内网域 -> 学校 DNS, 公网域 -> 云通道递归)
- server.py: 云端 AUTH + HTTPS 套壳(统一 UA, 剔 hop-by-hop)+ DNS 递归
- deploy/hook.sh: REDIRECT 规则(内网段放行, 认证 eportal 绝不走通道)
- 30 个新单测(40 总)+ smoke_channel 端到端冒烟 PASS
|
2026-09-09 14:55:02 +08:00 |
|
lou
|
dea4339716
|
L1 伪装器: SYN 重写为 Windows 10 布局(纯函数核心 + NFQUEUE worker)
- rewrite.py: 出向 SYN 剥 TS/window 64240/wscale 8/MSS 1460, 重算 IP+TCP 校验和
- worker.py: NFQUEUE ctypes worker, 原包 ACCEPT 放行, 异常一律放行(9-06 断网复盘铁律)
- config/masquerader.json: 指纹模板外置
- 10 个单测覆盖 Linux/Windows SYN/非 SYN/UDP/IPv6/畸形包
|
2026-09-09 14:47:04 +08:00 |
|
lou
|
d00fc6efdf
|
Initial commit
|
2026-09-09 14:04:45 +08:00 |
|