Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions .claude/settings.local.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"permissions": {
"allow": [
"WebSearch",
"WebFetch(domain:xtls.github.io)",
"WebFetch(domain:deepwiki.com)",
"WebFetch(domain:api.github.com)",
"Bash(bats tests/test_config_generation.bats)",
"Bash(npx *)",
"Bash(wsl.exe *)",
"PowerShell(wsl -u root -e bash -c \"apt install -y jq 2>&1 | tail -3\")",
"PowerShell(wsl -u root -e bash -c \"apt install -y shellcheck 2>&1 | tail -3\")"
]
}
}
233 changes: 102 additions & 131 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -6,177 +6,148 @@
# ./scripts/deploy.sh
#
# 或直接传环境变量:
# EASYNET_SERVICE_CHOICE=0 EASYNET_DOMAIN=proxy.example.com ./scripts/deploy.sh
# EASYNET_DOMAIN=proxy.example.com ./scripts/deploy.sh
#
# 大多数变量有合理的默认值,你通常只需配置 # 1. 必填配置 即可。

# ---------------------------------------------------------
# 1. 部署选择
# 1. 必填配置
# ---------------------------------------------------------
# 优先级:EASYNET_PROFILE > EASYNET_MODULE > EASYNET_SERVICE_CHOICE。
#
# EASYNET_SERVICE_CHOICE:
# 0: 全部部署
# 1-N: 按抗 DPI 能力从高到低排列(当前:1=xray-reality, 2=hysteria2, 3=shadowsocks, 4=wireguard)
# N+1: 退出安装
#
# 新增协议模块后编号会顺延,建议优先使用 EASYNET_MODULE 或 EASYNET_PROFILE。
# EASYNET_SERVICE_CHOICE=0

# 按单个模块部署,可选:
# xray-reality / hysteria2 / shadowsocks / wireguard
# EASYNET_MODULE=xray-reality
# 域名(必填——Hysteria2 需要域名,Edge Gateway 自动签发证书并生成订阅链接)
# 请确保此域名已经 A 记录解析到当前服务器公网 IP。
# EASYNET_DOMAIN=proxy.example.com

# 按策略部署,可选strict / balanced / compat
# strict: xray-reality(最高抗 DPI,仅部署 Reality)
# balanced: xray-reality + hysteria2(推荐默认,均衡抗 DPI 与速度
# 部署策略(默认 balanced,可选 strict / balanced / compat
# strict: 仅部署 Xray+Reality(极致抗 DPI
# balanced: Xray+Reality + Hysteria2(均衡,推荐默认
# compat: 全部已发现模块
EASYNET_PROFILE=balanced

# ---------------------------------------------------------
# 1.2 安全回滚
# ---------------------------------------------------------
# 部署前自动备份 state 目录,部署过程中出错时自动恢复。
# 默认关闭,设置为 true 启用。
# EASYNET_AUTO_ROLLBACK=true
# 也可直接指定单个模块(优先级高于 PROFILE):
# EASYNET_MODULE=xray-reality

# ---------------------------------------------------------
# 1.3 卸载选择(独立变量空间,不与部署变量混淆)
# 2. 常用调优
# ---------------------------------------------------------
# EASYNET_UNINSTALL_CHOICE:
# 0: 卸载全部协议与 Edge Gateway
# 1-N: 按字母序排列(当前:1=edge, 2=hysteria2, 3=shadowsocks, 4=wireguard, 5=xray-reality)
# N+1: 退出卸载
# EASYNET_UNINSTALL_CHOICE=0

# 按单个模块卸载,可选:
# xray-reality / hysteria2 / shadowsocks / wireguard / edge
# EASYNET_UNINSTALL_MODULE=xray-reality
# 以下变量可以按需调整,不设置也使用合理的默认值。

# 如需保留配置用于迁移或排障,设置为 true。
# EASYNET_UNINSTALL_KEEP_CONFIG=true

# 确认依赖只能由 EasyNet 使用时,可设置为 true。
# EASYNET_UNINSTALL_PURGE_PACKAGES=true

# ---------------------------------------------------------
# 2. 域名配置
# ---------------------------------------------------------
# Hysteria2 需要域名。配置域名后会自动启用 Edge Gateway 并打印订阅链接和二维码。
# 请确保此域名已经 A 记录解析到当前服务器公网 IP。
# EASYNET_DOMAIN=proxy.example.com

# 如果订阅域名与部署域名不同,可单独指定。
# EASYNET_SUBSCRIPTION_DOMAIN=proxy.example.com

# Edge Gateway 默认占用 TCP/80(HTTP)和 TCP/443(HTTPS),
# 并使用首次部署时生成的稳定随机路径承载订阅。
# 可运行 ./scripts/show_subscription.sh 随时重新显示订阅链接和二维码。
# 如果 EASYNET_DOMAIN 与 EASYNET_SUBSCRIPTION_DOMAIN 不同,两者都需要解析到服务器。

# 默认可通过 /sub、/clash、/singbox 直接路径访问订阅文件(同时保留随机路径兼容)。
# 如需关闭直接路径,设置 EASYNET_SUBSCRIPTION_DIRECT_PATHS=false。

# 如需自定义订阅路径前缀(而非自动生成),设置:
# EASYNET_SUBSCRIPTION_PATH_PREFIX=/mysecret
# Reality 传输方式:tcp(默认,推荐)或 xhttp(HTTP/3 伪装)
# EASYNET_REALITY_TRANSPORT=tcp
# EASYNET_REALITY_TRANSPORT=xhttp

# Edge Gateway 根路径默认反代到 https://www.bing.com 消除指纹,
# 可通过以下变量自定义伪装目标。
# EASYNET_EDGE_MASQUERADE_URL=https://www.bing.com
# Reality 多 SNI,逗号分隔多个域名分散流量特征
EASYNET_REALITY_SERVER_NAME=www.microsoft.com,cloudflare.com,www.apple.com

# 如需调整 Edge 端口(不推荐,部分 VPS 可能屏蔽非标准端口):
# EASYNET_EDGE_HTTP_PORT=80
# EASYNET_EDGE_HTTPS_PORT=443
# Hysteria2 端口跳跃(默认 20000-30000/udp),留空禁用
EASYNET_HYSTERIA2_PORT_HOPPING=20000-30000

# Edge 证书目录
# EASYNET_EDGE_CERT_DIR=/etc/ssl/easynet-edge
# EASYNET_EDGE_CERT_FILE=/etc/ssl/easynet-edge/fullchain.crt
# EASYNET_EDGE_KEY_FILE=/etc/ssl/easynet-edge/private.key
# 手动指定公网 IP(覆盖自动检测,多网卡或 NAT 场景使用)
# EASYNET_PUBLIC_IP=203.0.113.1

# ---------------------------------------------------------
# 3. 可选:公共状态和输出目录
# 3. 抗 DPI 调优
# ---------------------------------------------------------
# EASYNET_STATE_DIR=/var/lib/easynet
# EASYNET_WEB_ROOT=/var/www/html
# Reality 默认使用 TCP + flow:xtls-rprx-vision(TLS 指纹模仿 + Vision 流控)。
# 如需极致抗 DPI,可改用 EASYNET_PROFILE=strict(仅部署 Xray-Reality)。
# XHTTP 传输(HTTP/3)适合需要过 CDN 的场景,配合 XMUX 多路复用。

# ---------------------------------------------------------
# 4. 可选:通用参数
# 4. 部署选择(仅自动化部署时需要)
# ---------------------------------------------------------
# 手动指定公网 IP(覆盖自动检测,多网卡或 NAT 场景使用)
# EASYNET_PUBLIC_IP=203.0.113.1
# 以下变量用于非交互式部署(CI/CD、脚本调用)。
# 手动部署时脚本会提示选择,无需设置。

# EASYNET_SERVICE_CHOICE: 0=全部 / 1=xray-reality / 2=hysteria2 / 3=shadowsocks / 4=wireguard
# EASYNET_SERVICE_CHOICE=0

# 安全回滚:部署失败时自动恢复 state 目录
# EASYNET_AUTO_ROLLBACK=true
# 严格预检:部署前检查 DNS 解析、端口可用性等
# EASYNET_STRICT_PRECHECK=false

# ---------------------------------------------------------
# 4.5 抗 DPI 调优推荐配置
# 5. 卸载配置(独立变量空间,用于自动化卸载)
# ---------------------------------------------------------
# 以下配置在保证多协议兼容的同时最大化抗 DPI 能力:
#
# - Xray Reality 有两种传输方式可选:
# · TCP(默认):配合 Fragment 包分片,将 TLS Client Hello 拆小包防 DPI
# · XHTTP(HTTP/3 over QUIC):流量混入浏览器 QUIC,但**与 Fragment 不兼容**
# - Reality 伪装目标增加到三个主流 CDN,多 SNI 减少指纹特征
# - Hysteria2 启用端口跳跃(20000-30000/udp),每 10 秒跳变一次
#
# 如需极致抗 DPI,可改用 EASYNET_PROFILE=strict(仅部署 Xray-Reality)。
# EASYNET_UNINSTALL_CHOICE: 0=全部 / 1=edge / 2=hysteria2 / 3=shadowsocks / 4=wireguard / 5=xray-reality
# EASYNET_UNINSTALL_CHOICE=0
# EASYNET_UNINSTALL_MODULE=xray-reality
# EASYNET_UNINSTALL_KEEP_CONFIG=true
# EASYNET_UNINSTALL_PURGE_PACKAGES=true

# ---------------------------------------------------------
# 5. 可选:协议参数
# 6. 高级配置
# ---------------------------------------------------------
# 以下变量很少需要修改,取消注释并修改值即可生效。

# === Xray+Reality ===
# --- 协议端口 ---
# EASYNET_REALITY_PORT=8443
# EASYNET_HYSTERIA2_PORT=443
# EASYNET_SHADOWSOCKS_PORT=8388
# EASYNET_WIREGUARD_PORT=51820

# --- Reality 细节 ---
# EASYNET_REALITY_DEST=www.microsoft.com:443
# EASYNET_REALITY_SERVER_NAME 支持逗号分隔多个目标
EASYNET_REALITY_SERVER_NAME=www.microsoft.com,cloudflare.com,www.apple.com
#
# 传输方式:tcp(默认,支持 Fragment 包分片)或 xhttp(HTTP/3 伪装)
# ⚠️ xhttp 与 Fragment 不兼容,设 xhttp 时系统自动跳过 Fragment
# 取消下面其中一行的注释即可切换:
EASYNET_REALITY_TRANSPORT=tcp
# EASYNET_REALITY_TRANSPORT=xhttp
#
# XHTTP 专属参数(仅 TRANSPORT=xhttp 时生效):
# EASYNET_REALITY_XHTTP_MODE=auto
# EASYNET_REALITY_XHTTP_MODE=stream-one
# EASYNET_REALITY_XMUX_CONCURRENCY=0
#
# Fragment 包分片(仅 TRANSPORT=tcp 时生效,xhttp 下自动跳过)
EASYNET_REALITY_FRAGMENT=tlshello
# EASYNET_REALITY_FRAGMENT_LENGTH 分片长度范围(默认 100-200 字节)
EASYNET_REALITY_FRAGMENT_LENGTH=40-120
# EASYNET_REALITY_FRAGMENT_INTERVAL 分片间隔范围(默认 10-20 毫秒)
EASYNET_REALITY_FRAGMENT_INTERVAL=5-15

# === Hysteria2 ===
# EASYNET_HYSTERIA2_PORT=443
# EASYNET_HYSTERIA2_PORT_HOPPING 端口跳变范围(如 "20000-30000"),留空禁用
EASYNET_HYSTERIA2_PORT_HOPPING=20000-30000
# EASYNET_HYSTERIA2_PORT_HOP_INTERVAL 跳变间隔,默认 30s
EASYNET_HYSTERIA2_PORT_HOP_INTERVAL=10s
# EASYNET_REALITY_XMUX_CONN_IDLE=60

# === Shadowsocks 2022 Edition (shadowsocks-rust) ===
# EASYNET_SHADOWSOCKS_PORT=8388
# EASYNET_SHADOWSOCKS_INSTALL_SHA256 可选,用于校验 shadowsocks-rust 二进制包
# --- Hysteria2 细节 ---
# EASYNET_HYSTERIA2_PORT_HOP_INTERVAL=30s
# EASYNET_HYSTERIA2_PASSWORD= (随机生成,留空自动生成)
# EASYNET_HYSTERIA2_OBFS_PASSWORD= (随机生成,留空自动生成)
# EASYNET_HYSTERIA2_MASQUERADE_URL=https://www.bing.com/

# === WireGuard ===
# EASYNET_WIREGUARD_PORT=51820
# EASYNET_WIREGUARD_OBFS AmneziaWG 混淆(默认 true,启用 Jc/Jmin/Jmax 垃圾包填充)
# --- WireGuard 细节 ---
# EASYNET_WIREGUARD_OBFS=true
# EASYNET_WIREGUARD_JC 垃圾包数量(默认 5)
# EASYNET_WIREGUARD_JMIN 最小垃圾包大小(默认 50 字节)
# EASYNET_WIREGUARD_JMAX 最大垃圾包大小(默认 1000 字节)
# EASYNET_WIREGUARD_SERVER_IP 服务器子网(默认 10.0.0.1/24
# EASYNET_WIREGUARD_CLIENT 客户端配置名称(默认 client1
# EASYNET_WIREGUARD_JC=5
# EASYNET_WIREGUARD_JMIN=50
# EASYNET_WIREGUARD_JMAX=1000
# EASYNET_WIREGUARD_SERVER_IP=10.0.0.1/24
# EASYNET_WIREGUARD_CLIENT=client1

# ---------------------------------------------------------
# 6. 可选:安装脚本/安装包 SHA256 校验
# ---------------------------------------------------------
# 默认使用 HTTPS 下载官方安装脚本或发布包。
# 如需进一步收紧供应链风险,可填写对应 SHA256,下载后会先校验再执行或安装。
# --- Edge Gateway ---
# EASYNET_EDGE_HTTP_PORT=80
# EASYNET_EDGE_HTTPS_PORT=443
# EASYNET_EDGE_MASQUERADE_URL=https://www.bing.com
# EASYNET_EDGE_CERT_DIR=/etc/ssl/easynet-edge
# EASYNET_EDGE_CERT_FILE=/etc/ssl/easynet-edge/fullchain.crt
# EASYNET_EDGE_KEY_FILE=/etc/ssl/easynet-edge/private.key
# EASYNET_EDGE_STATE_DIR=/var/lib/easynet/exposure/edge
# EASYNET_EDGE_RENEW_HOOK= (默认使用内置 cert_renew_hook.sh)
# EASYNET_SUBSCRIPTION_PATH_PREFIX=/mysecret
# EASYNET_SUBSCRIPTION_DIRECT_PATHS=true
# EASYNET_SUBSCRIPTION_SCHEME=https
# EASYNET_SUBSCRIPTION_URL_PORT= (默认使用 Edge HTTPS 端口)
# EASYNET_SUBSCRIPTION_ROTATION_GRACE=false
# EASYNET_SKIP_NGINX_RELOAD=false

# --- 订阅域名(与部署域名不同时使用) ---
# EASYNET_SUBSCRIPTION_DOMAIN=proxy.example.com

# --- 状态和输出目录 ---
# EASYNET_STATE_DIR=/var/lib/easynet
# EASYNET_WEB_ROOT=/var/www/html

# --- SHA256 供应链校验 ---
# EASYNET_XRAY_VERSION=26.3.27
# EASYNET_ACME_INSTALL_SHA256=
# EASYNET_XRAY_INSTALL_SHA256=
# EASYNET_HYSTERIA2_INSTALL_SHA256=
# EASYNET_SHADOWSOCKS_INSTALL_SHA256=
# EASYNET_SINGBOX_INSTALL_SHA256=

# ---------------------------------------------------------
# 7. 可选:系统维护
# ---------------------------------------------------------
# --- sing-box 客户端(端设备安装时使用) ---
# EASYNET_SINGBOX_MODE=mixed
# EASYNET_SINGBOX_INSTALL_DIR=/usr/local/bin
# EASYNET_SINGBOX_CONFIG_DIR=/etc/sing-box
# EASYNET_SINGBOX_STATE_DIR=/etc/easynet
# EASYNET_SINGBOX_SERVICE_NAME=easynet-singbox
# EASYNET_SINGBOX_UPDATE_NAME=easynet-singbox-update
# EASYNET_SINGBOX_DOWNLOAD_URL= (默认从 GitHub Releases 自动检测)
# EASYNET_SINGBOX_RELEASE_API=https://api.github.com/repos/SagerNet/sing-box/releases/latest
# EASYNET_SINGBOX_PROBE_URL=https://www.gstatic.com/generate_204

# --- 系统维护 ---
# EASYNET_JOURNALD_MAX_USE=500M
# EASYNET_NGINX_LOGROTATE_FILE=/etc/logrotate.d/easynet-nginx
17 changes: 17 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,23 @@
格式基于 [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
本项目遵循 [语义化版本](https://semver.org/spec/v2.0.0.html)。

## [0.0.5] - 2026-06-22

### 移除
- **Xray Reality Fragment 包分片**:`EASYNET_REALITY_FRAGMENT` 及相关环境变量全部移除。Fragment 与
`flow: xtls-rprx-vision` 存在已知冲突(两者同时修改 TLS Client Hello 导致间歇性连接失败),且
Vision 的 uTLS 指纹伪装 + padding 已完整覆盖抗 DPI 功能,Fragment 不再需要。

### 修复
- **Xray Reality XHTTP 配置修复**:XHTTP 传输现在正确添加 `flow: xtls-rprx-vision` 和
`encryption: none`(VLESS Encryption),消除 Xray-core v26.1.18+ 的 "VLESS without flow is
deprecated" 警告。
- **XHTTP 默认 mode 改为 `stream-one`**:纯 TCP HTTP/2,避免 `mode=auto` 默认走 UDP/QUIC 被云商 QoS 限速。
- **XMUX connIdleTime 可配置**:新增 `EASYNET_REALITY_XMUX_CONN_IDLE` 环境变量(默认 60 秒),替代硬编码值。

### 文档
- 清理所有 Fragment 环境变量、配置示例、兼容性表格、诊断命令等文档。

## [0.0.4] - 2026-06-19

### 优化
Expand Down
7 changes: 3 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@
## 核心特性

- 🚀 支持 4 种代理协议,全部内置混淆对抗 DPI:
- **Xray+Reality** — TLS 指纹模仿 + XHTTP/HTTP3 传输 + Fragment 包分片 + XMUX 多路复用
- **Xray+Reality** — TLS 指纹模仿 + XHTTP/HTTP3 传输 + XMUX 多路复用
- **Hysteria2** — QUIC/UDP + Salamander 混淆 + Port Hopping 端口跳变
- **Shadowsocks 2022** — BLAKE3-AES-256-GCM 加密,完整重放保护
- **WireGuard (+Amnezia obfs)** — 默认启用 Jc/Jmin/Jmax 垃圾包填充消除 UDP 指纹
- 🔒 强安全架构:REALITY 无证书 TLS、Finalmask Fragment、Edge Gateway 反代伪装
- 🔒 强安全架构:REALITY 无证书 TLS、Edge Gateway 反代伪装
- ⚡ 性能优化:BBR 拥塞控制、XHTTP 多路复用 (XMUX)、QUIC 0-RTT
- 🔄 自动化运维:系统更新、证书续期 hook(自动修正权限并重启服务)、日志限额与 logrotate
- 🤖 无交互部署:支持 `.env` 或环境变量进行一键安装
Expand All @@ -36,7 +36,7 @@

| 协议 | 传输/混淆 | 优点 | 防探测等级 |
|------|-----------|------|-----------|
| **Xray+Reality** | TCP/XHTTP + REALITY + Fragment + XMUX | 无需域名,TLS 指纹模仿,包分片抗 ML,多路复用 | 🥇 极高(推荐) |
| **Xray+Reality** | TCP/XHTTP + REALITY + XMUX | 无需域名,TLS 指纹模仿,包分片抗 ML,多路复用 | 🥇 极高(推荐) |
| **Hysteria2** | QUIC/UDP + Salamander + Port Hopping | 端口跳变抗封锁,HTTP/3 伪装 | 🥇 高(推荐补充) |
| **Shadowsocks 2022** | TCP+UDP / BLAKE3-AES-256-GCM | 2022 Edition 强加密,重放保护 | 🥈 中等+ |
| **WireGuard (+Amnezia obfs)** | UDP + Jc/Jmin/Jmax 垃圾包 | 可启用混淆消除 UDP 指纹 | 🥈 中等(启用混淆后) |
Expand Down Expand Up @@ -158,7 +158,6 @@ EASYNET_SERVICE_CHOICE=0 EASYNET_DOMAIN=proxy.example.com ./scripts/deploy.sh
EASYNET_PROFILE=balanced \
EASYNET_DOMAIN=proxy.example.com \
EASYNET_REALITY_TRANSPORT=xhttp \
EASYNET_REALITY_FRAGMENT=tlshello \
EASYNET_REALITY_XMUX_CONCURRENCY=4 \
EASYNET_HYSTERIA2_PORT_HOPPING=20000-30000 \
EASYNET_WIREGUARD_OBFS=true \
Expand Down
1 change: 0 additions & 1 deletion docs/clients.md
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,6 @@ sudo bash easynet-singbox-client.sh doctor
|----------|--------------|
| Shadowsocks 2022 (BLAKE3) | Clash Verge Rev ≥1.6, Shadowrocket ≥2.2.38, sing-box ≥1.8 |
| Xray XHTTP 传输 | Clash Verge Rev ≥1.7, sing-box ≥1.11 |
| Xray Fragment 混淆 | 客户端自动适配(服务端配置) |
| Hysteria2 Port Hopping | 需客户端支持 `port_hopping` 参数 |
| WireGuard AmneziaWG | Clash Verge Rev (支持 jc/jmin/jmax), AmneziaWG 客户端 |

Expand Down
Loading