byedpi,深度包检测绕过工具——安装与使用教程

byedpi是一个通过本地socks5代理实现绕过深度包检测的网络工具,本文将介绍此工具如何安装和使用。

此工具开源于GitHub,readme使用俄文,地址:
Bypass DPI ——https://github.com/hufrea/

安装

byedpi支持windows和linux系统,开发者在releases中提供windows版本的程序,用户可以自行下载安装;对于linux系统,用户可以克隆代码,自行编译程序。

Windows版本的安装

  1. 打开https://github.com/hufrea/byedpi/releases/
    选择最新的发行版,下载windows版本的程序(例如byedpi-17.3-x86_64-w64.zip)。
  2. 解压程序,将程序目录放在指定的目录,例如C:\Program Files
  3. 编辑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
  1. byedpi.bat文件创建快捷方式,将快捷方式剪切到
    C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
    用来实现程序的开机启动。
  2. 运行service_install.bat,安装程序的服务。

Linux版本的安装

  1. 安装依赖(如有需要)
    大多数 Linux 发行版默认已包含 gcc 和 make。如果没有,先安装它们:
sudo apt update
sudo apt install build-essential   # Debian/Ubuntu
# 或
sudo yum groupinstall "Development Tools"   # CentOS/RHEL
  1. 克隆 byedpi 源码
git clone https://github.com/hufrea/byedpi.git
cd byedpi
  1. 编译 byedpi
make

编译成功后,会生成可执行文件 ciadpi

  1. 编辑服务配置文件,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+,若不支持可用第三方日志工具。
  1. 启用并启动服务,运行程序
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/
主要有以下方式(此处内容不是本文重点,仅简要列出,不做详细说明):

  1. 使用浏览器的加密DNS设置。
  2. 使用adguard home等软件实现DNS加密。

使用sock5代理

byedpi通过本地sock5代理,实现DPI绕过。用户可以通过设置代理使用。

  1. 使用系统的全局代理设置
    Windows和Linux支持系统全局代理,以Windows为例:转到设置->网络和Internet->代理->手动设置代理->使用代理服务器,点击设置,打开开关,地址:127.0.01,端口1080,保存设置。

不建议使用全局代理,因为会影响很多于不涉及DPI的网站。

  1. 使用软件的代理设置
    很多软件自带了代理设置,例如火狐浏览器等,用户可以在设置中启动相关设置,建议在使用访问相关网站服务时使用代理,其余时间关闭代理。
    对于使用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)


其他类似项目