byedpi是一个通过本地socks5代理实现绕过深度包检测的网络工具,本文将介绍此工具如何安装和使用。
此工具开源于GitHub,readme使用俄文,地址:
Bypass DPI ——https://github.com/hufrea/
安装
byedpi支持windows和linux系统,开发者在releases中提供windows版本的程序,用户可以自行下载安装;对于linux系统,用户可以克隆代码,自行编译程序。
Windows版本的安装
- 打开https://github.com/hufrea/byedpi/releases/,
选择最新的发行版,下载windows版本的程序(例如byedpi-17.3-x86_64-w64.zip)。 - 解压程序,将程序目录放在指定的目录,例如
C:\Program Files。 - 编辑
byedpi.bat,删除原有内容,写入以下内容:
@echo off
title ByeDPI
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit
:begin
REM
start /b ciadpi.exe --split 1 --mod-http hcsmix,dcsmix,rmspace --tlsrec 0+s
exit
- 为
byedpi.bat文件创建快捷方式,将快捷方式剪切到
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup,
用来实现程序的开机启动。 - 运行
service_install.bat,安装程序的服务。
Linux版本的安装
- 安装依赖(如有需要)
大多数 Linux 发行版默认已包含 gcc 和 make。如果没有,先安装它们:
sudo apt update
sudo apt install build-essential # Debian/Ubuntu
# 或
sudo yum groupinstall "Development Tools" # CentOS/RHEL
- 克隆 byedpi 源码
git clone https://github.com/hufrea/byedpi.git
cd byedpi
- 编译 byedpi
make
编译成功后,会生成可执行文件 ciadpi。
- 编辑服务配置文件,
sudo nano /etc/systemd/system/ciadpi.service
内容参考如下(请根据你的实际路径修改):
[Unit]
Description=byedpi ciadpi proxy service
After=network.target
[Service]
Type=simple
ExecStart=/home/user/byedpi/ciadpi --ip 127.0.0.1 --split 1 --drop-sack --mod-http hcsmix,dcsmix,rmspace --tlsrec 0+s
Restart=on-failure
StandardOutput=append:/var/log/ciadpi/ciadpi.log
StandardError=append:/var/log/ciadpi/ciadpi.err
WorkingDirectory=/home/user/byedpi
[Install]
WantedBy=multi-user.target
注意:
/home/user/byedpi/ciadpi请替换为你的实际路径。StandardOutput/StandardError需要 systemd 245+,若不支持可用第三方日志工具。
- 启用并启动服务,运行程序
sudo systemctl daemon-reload
sudo systemctl enable ciadpi
sudo systemctl start ciadpi
程序的使用
设置加密DNS
此程序需要配合审查区域以外的加密DNS使用,包括DOH(dns only htps)、DOQ(dns only quic)、DOT(dns only tls)。
加密DNS的地址可以从此处获取:
https://encrypteddns.pages.dev/
主要有以下方式(此处内容不是本文重点,仅简要列出,不做详细说明):
- 使用浏览器的加密DNS设置。
- 使用adguard home等软件实现DNS加密。
使用sock5代理
byedpi通过本地sock5代理,实现DPI绕过。用户可以通过设置代理使用。
- 使用系统的全局代理设置
Windows和Linux支持系统全局代理,以Windows为例:转到设置->网络和Internet->代理->手动设置代理->使用代理服务器,点击设置,打开开关,地址:127.0.01,端口1080,保存设置。
不建议使用全局代理,因为会影响很多于不涉及DPI的网站。
- 使用软件的代理设置
很多软件自带了代理设置,例如火狐浏览器等,用户可以在设置中启动相关设置,建议在使用访问相关网站服务时使用代理,其余时间关闭代理。
对于使用Chromium内核的浏览器,可以使用代理助手拓展,下载地址:
https://www.crxsoso.com/webstore/detail/mnloefcpaepkpmhaoipjkpikbnkmbnic。
参数使用说明
ciadpi --disorder 1 --auto=torst --tlsrec 1+s
ciadpi --fake -1 --ttl 8
以下内容为参数说明,使用AI翻译自原项目的readme:
- `-i, --ip <ip>`
监听的 IP,默认 0.0.0.0
- `-p, --port <num>`
监听端口,默认 1080
- `-D, --daemon`
以守护进程方式运行,仅支持 Linux 和 BSD
- `-w, --pidfile <文件名>`
PID 文件位置
- `-E, --transparent`
透明代理模式(此时 SOCKS 不工作)
- `-c, --max-conn <数量>`
最大客户端连接数,默认 512
- `-I, --conn-ip <ip>`
出站连接绑定的地址,默认 ::
- `-b, --buf-size <大小>`
每次接收/发送的最大数据量,单位字节,默认 16384
- `-g, --def-ttl <数值>`
所有出站连接的 TTL
- `-N, --no-domain`
禁止域名解析(避免同步解析带来的迟滞或卡死)
- `-U, --no-udp`
不代理 UDP
- `-F, --tfo`
启用 TCP Fast Open(仅 Linux 4.11+)
- `-A, --auto <t,r,s,n>`
自动绕过(触发事件时自动应用参数)
触发事件包括:
- torst:超时或服务器在首次请求后重置连接
- redirect:HTTP 重定向且域名不同
- ssl_err:ClientHello 后未收到 ServerHello 或 session_id 异常
- none:跳过此组(如受域名/协议限制)
- `-L, --auto-mode <0-3>`
自动模式详见原文
- `-u, --cache-ttl <秒>`
缓存生存时间,默认 100800(28 小时)
- `-y, --cache-dump <文件|-》`
导出缓存到文件或标准输出
- `-T, --timeout <秒>`
等待首包响应超时时间
- `-K, --proto <t,h,u,i>`
协议白名单:tls,http,udp,ipv4
- `-H, --hosts <文件|:字符串>`
限定参数作用的域名列表
- `-j, --ipset <文件|:字符串>`
指定 IP/子网白名单
- `-V, --pf <端口[-端口]>`
端口范围白名单
- `-R, --round <数值[-数值]>`
对哪些请求应用混淆,默认 1(第一个请求)
- `-s, --split <参数>`
按指定位置拆包,格式详见原文
例如 `--split 3 --split 7`:先拆为1-3,再3-7,再7-末尾
- `-d, --disorder <参数>`
拆包并乱序发送
- `-o, --oob <参数>`
拆包并作为 OOB 数据发送
- `-q, --disoob <参数>`
拆包并乱序以 OOB 数据发送
- `-f, --fake <参数>`
插入伪造包
- `-t, --ttl <数值>`
伪造包 TTL,默认 8
- `-S, --md5sig`
伪造包带 TCP MD5 签名(仅 Linux)
- `-O, --fake-offset <参数>`
伪造数据起始偏移
- `-l, --fake-data <文件|:字符串>`
使用自定义伪造数据包
- `-e, --oob-data <字符>`
自定义 OOB 数据,默认 'a'
- `-n, --fake-sni <字符串>`
动态更改伪造包的 SNI
- `-Q, --fake-tls-mod <r,o>`
伪造 TLS ClientHello:r 随机,o 原始
- `-M, --mod-http <h[,d,r]>`
修改 HTTP 包
- hcsmix: Host 字段大小写混合
- dcsmix: Host 字段域名大小写混合
- rmspace: 移除 Host 字段空格
- `-r, --tlsrec <参数>`
在指定偏移拆分 TLS record
- `-a, --udp-fake <数量>`
伪造 UDP 包数量
- `-Y, --drop-sack`
忽略带 TCP SACK 扩展的数据包(仅 Linux)
其他类似项目
- ByeDPI for Android,安卓项目
https://github.com/dovecoteescapee/ByeDPIAndroi - ByeByeDPI Android,安卓项目,对前一个项目的优化
https://github.com/romanvht/ByeByeDPI