Skip to content

maoist2009/TlsFragment

Repository files navigation

TLSFragment使用指南

Ask DeepWiki

F-Droid Version

交流群

可用discussions

matrix反馈空间 也可直接加入公开群

有一个私密群,或许可以私信我尝试加入?

安装

运行

作为模块安装后可以直接运行 tls_fragment。(暂不支持)

或者将仓库克隆下来之后运行 run.py

Windows和Android提供GUI客户端,Windows客户端在隔壁

TlsFragment原理

TLSfrag

将TCP连接Client的第一个包(这个包一般来说是TLS ClientHello,一般应用层不会分片)在TLS层和TCP层分别进行分片,将sni拆入多个包以绕过gfw。

FAKEdesync

利用ttl发送假包,扰乱gfw的DPI。

为了避免管理员/root权限的需要。

  • 在Windows上,使用TransmitFile函数(由于TransmitFIle被限制最多同时运行2个,性能较差)
  • 在linux上,使用管道

通过重传机制发送。

异步方式

使用threading(多线程),有一个asyncio协程版本目前废弃,原因是当初默认版本无法支持自代理DoH。现在懒得改了,个人使用不会有明显性能差距。

安装使用

运行

git clone [email protected]:maoist2009/TlsFragment.git
pip install poetry
poetry init
python run.py

下载依赖也可pip install -r requirements.txt

也可以编译后开机自启动:

cd tools
BUILD_WINDOWS

之后请为/dist/proxy.exe创建快捷方式,复制到%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup

浏览器使用

建议分流,内置了一个黑/白名单pac生成器。使用和本程序相同的匹配方式(见下)。pac规则存放在config_pac.pac里。

安装ZeroOmega,导入配置文件OmegaOptions.bakgooreplacer.json(android请使用Mises/ultimatum浏览器等)。

或者自行通过各种方式分流。

其他可以看Releases

配置方式

程序使用JSON格式配置,主要包含全局配置和连接策略配置。

本程序本身不行,~~但是作者喜欢作,~~喜欢乱改配置行为为自己认为优美的写法。因此具体行为以代码为准。

配置文件优先级

  • 程序默认配置文件:config.json
  • 本地覆盖配置文件:config_extra.json(会覆盖config.json中的对应项目)

全局配置

全局配置项控制程序行为,包括:

项名 简单解释
loglevel 日志级别,可选值:DEBUG, INFO, WARNING, ERROR
port 代理运行端口(默认2500)
DOH_port DoH代理使用端口(默认2500)
my_socket_timeout 套接字超时时间(秒),控制连接/数据传输超时
FAKE_ttl_auto_timeout FAKEdesync模式中cookie缓存时间(秒)
doh_server DoH服务器地址,如https://example.com/dns-query?dns=, 后接域名发送查询。支持udp://,进行udp dns
DNS_cache_update_interval DNS缓存更新间隔(秒)
TTL_cache_update_interval TTL缓存更新间隔(秒)
UDPfakeDNS 是否启用UDP假DNS功能
BySNIfirst 是否优先通过SNI匹配域名
TransmitFile_Limit Windows下TransmitFile函数并发限制(默认2)
redirect_when_ip 如果上游指定了IP是否进行重定向
default_policy 默认连接策略,包含具体模式配置(见下文)

连接策略配置

所有连接策略配置都在default_policy对象中定义,包括以下内容:

通用配置
项名 简单解释
mode 操作模式,可选值:TLSfragFAKEdesyncDIRECT或者GFWlike
safety_check 如果是http(s)连接,是否只允许TLS1.3(不要乱关,被dpi了有时候容易死ip)
TLSfrag模式配置
项名 简单解释
num_tls_pieces 无SNI段的TLS分块数量
len_tls_sni SNI在TLS层的分块长度(字节)
send_interval tcp分块发送间隔(秒)
num_tcp_pieces 无SNI段的TCP分块数量
len_tcp_sni SNI在TCP层的分块长度(字节)
FAKEdesync模式配置
项名 简单解释
fake_packet 发送的假包内容,如HTTP请求,会截取前缀
fake_ttl 假包使用的TTL值,支持复杂模式(如q0-1;3=3;5-1;8-2;20=18表示查询模式)
fake_sleep 发送假包后改为真包的间隔时间(秒)
send_interval tcp分块发送间隔(秒)
num_tcp_pieces 无假包区域TCP分块数量
len_tcp_sni 假包长度
TTL_cache 是否缓存查询到的达到服务器所需最低ttl
会在握手包开头和sni开头各进行一次ttl假包操作。

查询模式字符串中,q开头,接下来a-b表示查询的到达服务器最低ttl超过a(但是不超过下一个a'),假包ttl为真包最低ttl-b,若为`=则直接取b.

域名配置

域名配置通过domains下对象定义,可以为特定域名设置不同的连接策略。每个域名配置可以包含以下项目:

项名 简单解释
IP 目标IP地址
IPtype 首选ip dns类型
DNS_cache 是否缓存DNS查询结果
DNS_cache_TTL DNS缓存TTL(秒),默认3天(259200秒)
域名匹配规则

域名匹配使用AC自动机实现,以应对大规模域名列表:

  • 如果特定域名是SNI的子串,则匹配成功
  • 当多个配置域名匹配时,优先选择最长的配置域名
  • 若长度相同,则按Python的字典序规则选择
  • 支持首尾匹配,配置域名会自动添加^$符号确保精确匹配
  • 支持通配符模式(如example.(com|net)),系统会自动展开为多个具体域名

单连接配置优先级

单连接配置的优先级顺序为:IP配置 > 域名配置 > 默认配置。当处理一个连接请求时,系统会按此顺序匹配配置:

  1. IP配置:检查目标IP是否在IP重定向规则中匹配
  2. 域名配置:若IP未匹配,则检查SNI域名是否匹配域名配置
  3. 默认配置:若以上均未匹配,则使用default_policy指定的配置

IP查找

建议使用HTTPS_IP_finder工具获取有效IP地址。该工具支持:

  • 扫描IP和端口
  • 通过反DPI代理进行探测
  • 并发扫描提高效率

IP重定向

IP重定向支持将目标IP(或IP段)重定向到新IP,主要特性如下:

  • 链式重定向:默认情况下,系统会递归应用重定向规则,直到无匹配或遇到终止标记。例如,IP A→B→C,最终会使用C。

  • 终止链式:在重定向目标IP前添加^符号(如^1.2.3.4),则停止递归。例如,IP A→^B,最终会使用B,不再继续重定向。

  • IP段处理:支持CIDR表示法(如1.2.3.0/24)。系统会保留原始IP的后缀部分,只替换前缀。例如,将1.2.3.4重定向到10.0.0.0/24,结果为10.0.0.4

  • 精确匹配:支持单个IP的精确重定向,如1.2.3.410.0.0.1

重定向功能主要用于优选(将被封锁ip改为可用ip也是一种特殊的优选)。

注意事项

  • Windows用户:由于TransmitFile函数的限制,建议不要设置过高的并发数
  • Android用户:程序仅为代理,需配合浏览器使用
    • 推荐使用Kiwibrowser + Switch Proxy Omega
    • 或使用SocksTun设置代理(Address: 127.0.0.1, Port: 2500)
  • 安全提示:本程序无法保证SNI完全不泄露,高风险用户建议结合其他安全工具使用