MIO

一个简易的跨平台、强伪装、高性能代理协议实现

最近暂时不要更新和使用mio 我和别人都认为mio存在一些实现问题 等我AI重置额度我慢慢修

🚀 项目特点

  • 抗审查
  • 速度快
  • 多平台通用
  • 部署简单

📚 项目文档

⚙️ 如何使用

安装(mio是通用的,具体请查看示例配置文件)

cd /usr/bin
wget -O mio https://github.com/orgmio/mio/releases/latest/download/mio-⚠️OS-⚠️archoptimize-⚠️LibC(option)
chmod +x ./mio
cd /etc/
mkdir -p /etc/mio
touch /etc/mio/config.toml
chmod 755 /etc/mio/*

启动服务端:

./mio -c example-server.toml

启动客户端:

./mio -c example-client.toml

如果配置文件叫做config.toml那么可以直接执行二进制文件

⚙ 作为systemd服务运行

cat <<'EOF'> /usr/lib/systemd/system/mio.service
[Unit]
Description=mio service
Documentation=https://867678.xyz/projects/mio
After=network.target nss-lookup.target network-online.target
[Service]
Type=simple
WorkingDirectory=/etc/mio
ExecStart=/usr/bin/mio server -c /etc/mio/config.toml
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl start mio
systemctl status mio # 显示running即为成功
systemctl enable mio # 可选 开机自启动

⬆️ 更新

cd /usr/bin
rm ./mio
wget -O mio https://github.com/orgmio/mio/releases/latest/download/mio-⚠️OS-⚠️archoptimize-⚠️LibC(Option)
chmod +x ./mio
systemctl restart mio

⚠️ 安全性警告

为了配置的方便mio协议并不像reality那样需要一个PublicKey和一个ShortId

mio使用一个名为HMAC的TLSClientHello字段进行握手验证

这个字段一般是随机的所以很好藏密钥,不过需要稍微长一点才有安全性

下列是一个推荐的示例用openssl生成符合要求的密码

openssl rand -hex 32

这里以HMAC(RFC2104)的规范为例

长度 单位:字节 安全性
16 刚达到不那么容易破解的临界点
32 现代暴力破解工具一般没辙
64 刚好卡在HMAC的临界点 超过就会被SHA256压缩成32字节 没意义

sni字段必须是一个支持TLS1.3的HTTPS URL,因为需要偷他的证书(没错这是类Reality),端口可以任意。

🏃 协议行为

协议行为旨在模拟caddy-real/下存在的wireshark抓包文件

这个文件夹下是由wireshark抓包的真实brave访问真实caddy的行为

客户端行为旨在模拟ArchLinux源extra中带的Brave浏览器的无痕模式

只要在公网传输的数据包与wireshark抓到的真实行为无异此项目就算成功

  • way-mio.pcapng:我前前后后用他访问了些正常的网站用于测试伪装程度
  • way-brave-caddy-baidu.pcapng:brave访问一个反代了百度的caddy的行为 配置文件在Caddyfile

需注意local.867678.xyz没有真正的权威指向 这是我用来测试的

🤝 参考指纹和握手动作

这是真实抓包真正的客户端访问真正的服务端的抓包文件

为了做到1:1指纹这是必不可少的

brave访问caddy反代的百度:https://r2.867678.xyz/pcap/way-brave-caddy-baidu.pcapng

mio:https://r2.867678.xyz/pcap/way-mio.pcapng

🔩 开发

开发使用的配置文件可以在项目根目录新建一个叫做config.toml的配置文件,caddy可以直接放在caddy-real/目录 Git已忽略他们

初始化环境(假设你用archlinux)

sudo pacman -Syyuu --needed wget git
git clone [email protected]:orgmio/mio.git
wget -O config.toml https://raw.githubusercontent.com/orgmio/mio/refs/heads/main/example-client.toml
cd caddy-real
wget https://github.com/caddyserver/caddy/releases/download/v2.11.4/caddy_2.11.4_linux_amd64.tar.gz
tar -xzvf caddy_2.11.4_linux_amd64.tar.gz
rm ./caddy_2.11.4_linux_amd64.tar.gz ./LICENSE ./README.md
chmod +x ./caddy
cd ..

测试真brave访问真caddy(需要开好几个窗口)

需要确保你在项目根目录下且执行完毕初始化环境

sudo pacman -Syyuu --needed brave-bin wireshark-qt
echo "local.867678.xyz 127.0.0.1" >> /etc/hosts
# 启动caddy
cd caddy-real
sudo ./caddy run
# 如果是第一次跑,请打开一个新窗口下列命令
sudo ./caddy trust
# 启动brave
mkdir -p /tmp/brave-guest
brave --user-data-dir=/tmp/brave-guest
# 启动wireshark抓包
sudo wireshark
# 过滤目标
tls.handshake.extensions_server_name == "local.867678.xyz"
# 访问 local.867678.xyz即可

测试mio协议

在客户端 mio项目根目录上:

go run .

在服务端:

touch config.toml
wget -O mio https://github.com/orgmio/mio/releases/latest/download/mio-⚠️OS-⚠️archoptimize-⚠️LibC(Option)
chmod +x ./mio
./mio

抓包和过滤目标的方法与brave中的示例相同

⚖️ 条款与授权

该项目以GNU AFFERO GENERAL PUBLIC LICENSE v3授权 详细参见LICENSE

如果您希望二次开发或集成到其他代理工具如xray中,也可以指定一个AGPL或GPL v3.0或更高版本

另外 本项目魔改了quic-go和utls库(github.com/orgmio/quic-mio与github.com/orgmio/utls-mio)

前者是MIT所以可以变成AGPL-v3;后者需要附上一封版权声明,我们将他附到了LICENSE的下面