11#! /bin/sh
2+ # ech-wk OpenWrt helper by ChatGPT
3+ # 使用前先: chmod +x /root/ech-wk.sh 然后: /root/ech-wk.sh
24
5+ REPO_OWNER=" byJoey"
6+ REPO_NAME=" ech-wk"
37BIN_PATH=" /usr/bin/ech-workers"
4- CONF_FILE=" /etc/ech-workers.conf"
5- INIT_FILE=" /etc/init.d/ech-workers"
68TMP_DIR=" /tmp/ech-workers"
79
810# 默认值(第一次生成配置用,可以之后在菜单里改)
9- DEFAULT_BEST_IP=" cf.877771.xyz "
11+ DEFAULT_BEST_IP=" joeyblog.net "
1012DEFAULT_SERVER_ADDR=" echo.example.com:443"
1113DEFAULT_LISTEN_ADDR=" 0.0.0.0:30001"
1214DEFAULT_TOKEN=" "
1315DEFAULT_DNS=" https://dns.alidns.com/dns-query"
1416DEFAULT_ECH_DOMAIN=" cloudflare-ech.com"
17+ DEFAULT_ROUTING=" global" # 分流模式 默认值是 global,bypass_cn 表示绕过中国地区
1518
16- # 根据架构选择下载链接
19+ # 检查并安装缺失的依赖
20+ install_dependencies () {
21+ echo " 检查依赖..."
22+ MISSING=0
23+
24+ # 检查 curl
25+ if ! command -v curl > /dev/null 2>&1 ; then
26+ echo " 缺少 curl,正在安装..."
27+ opkg update && opkg install curl || { echo " 安装 curl 失败" ; MISSING=1; }
28+ fi
29+
30+ # 检查 tar
31+ if ! command -v tar > /dev/null 2>&1 ; then
32+ echo " 缺少 tar,正在安装..."
33+ opkg update && opkg install tar || { echo " 安装 tar 失败" ; MISSING=1; }
34+ fi
35+
36+ # 检查 jq
37+ if ! command -v jq > /dev/null 2>&1 ; then
38+ echo " 缺少 jq,正在安装..."
39+ opkg update && opkg install jq || { echo " 安装 jq 失败" ; MISSING=1; }
40+ fi
41+
42+ # 检查 procd
43+ if ! command -v procd > /dev/null 2>&1 ; then
44+ echo " 缺少 procd,正在安装..."
45+ opkg update && opkg install procd || { echo " 安装 procd 失败" ; MISSING=1; }
46+ fi
47+
48+ if [ $MISSING -eq 1 ]; then
49+ echo " 缺失依赖,请检查安装日志。"
50+ exit 1
51+ fi
52+
53+ echo " 依赖检查完成,所有必要的依赖已安装。"
54+ }
55+
56+ # 获取最新版本的 GitHub Release 下载链接
1757get_latest_release_url () {
1858 echo " 正在获取 GitHub 最新发布版本..."
1959
@@ -33,35 +73,38 @@ get_latest_release_url() {
3373}
3474
3575ensure_binary () {
36- if [ -x " $BIN_PATH " ]; then
37- return 0
38- fi
76+ if [ -x " $BIN_PATH " ]; then
77+ return 0
78+ fi
3979
40- echo " 找不到二进制: $BIN_PATH "
41- echo " 自动下载最新版本..."
80+ echo " 找不到二进制: $BIN_PATH "
81+ echo " 自动下载最新版本..."
4282
43- DOWNLOAD_URL=$( get_latest_release_url)
44- if [ $? -ne 0 ]; then
45- echo " 下载失败!"
46- return 1
47- fi
83+ DOWNLOAD_URL=$( get_latest_release_url)
84+ if [ $? -ne 0 ]; then
85+ echo " 下载失败!"
86+ return 1
87+ fi
4888
49- echo " 开始下载..."
50- mkdir -p " $( dirname " $BIN_PATH " ) "
51- mkdir -p " $TMP_DIR "
89+ echo " 开始下载..."
90+ mkdir -p " $( dirname " $BIN_PATH " ) "
91+ mkdir -p " $TMP_DIR "
5292
53- # 使用 curl 下载压缩包
54- curl -L -o " $TMP_DIR /ech-workers.tar.gz" " $DOWNLOAD_URL " || { echo " 下载失败" ; return 1; }
93+ # 使用 curl 下载压缩包
94+ curl -L -o " $TMP_DIR /ech-workers.tar.gz" " $DOWNLOAD_URL " || {
95+ echo " 下载失败" ; return 1; }
5596
56- echo " 下载完成,开始解压..."
57- # 解压下载的文件
58- tar -zxvf " $TMP_DIR /ech-workers.tar.gz" -C " $TMP_DIR " || { echo " 解压失败" ; return 1; }
97+ echo " 下载完成,开始解压..."
98+ # 解压下载的文件
99+ tar -zxvf " $TMP_DIR /ech-workers.tar.gz" -C " $TMP_DIR " || {
100+ echo " 解压失败" ; return 1; }
59101
60- # 假设解压后文件名是 ech-workers,请根据实际情况调整
61- mv " $TMP_DIR /ech-workers" " $BIN_PATH " || { echo " 移动文件失败" ; return 1; }
102+ # 假设解压后文件名是 ech-workers,请根据实际情况调整
103+ mv " $TMP_DIR /ech-workers" " $BIN_PATH " || {
104+ echo " 移动失败" ; return 1; }
62105
63- chmod +x " $BIN_PATH "
64- echo " 已下载并安装到 $BIN_PATH "
106+ chmod +x " $BIN_PATH "
107+ echo " 安装完成: $BIN_PATH "
65108}
66109
67110ensure_conf () {
@@ -77,6 +120,7 @@ LISTEN_ADDR="$DEFAULT_LISTEN_ADDR"
77120TOKEN="$DEFAULT_TOKEN "
78121DNS="$DEFAULT_DNS "
79122ECH_DOMAIN="$DEFAULT_ECH_DOMAIN "
123+ ROUTING="$DEFAULT_ROUTING "
80124EOF
81125 echo " 已生成默认配置: $CONF_FILE "
82126}
@@ -103,6 +147,7 @@ start_service() {
103147 # 给一些默认值,避免变量为空
104148 : "${DNS:=https://dns.alidns.com/dns-query}"
105149 : "${ECH_DOMAIN:=cloudflare-ech.com}"
150+ : "${ROUTING:=global}" # 默认分流模式为 global
106151
107152 procd_open_instance
108153 procd_set_param command "$BIN" \
@@ -111,7 +156,8 @@ start_service() {
111156 -token "${TOKEN}" \
112157 -ip "${BEST_IP}" \
113158 -dns "${DNS}" \
114- -ech "${ECH_DOMAIN}"
159+ -ech "${ECH_DOMAIN}" \
160+ -routing "${ROUTING}"
115161 procd_set_param respawn
116162 procd_close_instance
117163}
@@ -135,6 +181,7 @@ LISTEN_ADDR="${LISTEN_ADDR}"
135181TOKEN="${TOKEN} "
136182DNS="${DNS} "
137183ECH_DOMAIN="${ECH_DOMAIN} "
184+ ROUTING="${ROUTING} "
138185EOF
139186}
140187
@@ -152,18 +199,20 @@ show_menu() {
152199 echo " TOKEN(身份令牌): ${TOKEN} "
153200 echo " DNS(可选) : ${DNS} "
154201 echo " ECH 域名(可选): ${ECH_DOMAIN} "
202+ echo " 分流模式 : ${ROUTING} "
155203 echo " ---------------------------"
156204 echo " ----- ech-workers 菜单 ----"
157205 echo " 1) 修改优选 IP"
158206 echo " 2) 修改服务地址"
159207 echo " 3) 修改监听地址"
160208 echo " 4) 修改 TOKEN(身份令牌)"
161- echo " 5) 启动 ech"
162- echo " 6) 关闭 ech"
163- echo " 7) 查看日志(最近50行)"
164- echo " 8) 退出"
209+ echo " 5) 修改分流模式"
210+ echo " 6) 启动 ech"
211+ echo " 7) 关闭 ech"
212+ echo " 8) 查看日志(最近50行)"
213+ echo " 9) 退出"
165214 echo " ==========================="
166- printf " 请选择 [1-8 ]: "
215+ printf " 请选择 [1-9 ]: "
167216 read -r choice
168217
169218 case " $choice " in
@@ -178,7 +227,7 @@ show_menu() {
178227 save_conf
179228 ;;
180229 3)
181- printf " 输入新的监听地址 (例如 0.0.0.0:30001 ): "
230+ printf " 输入新的监听地址 (例如 0.0.0.0:30002 ): "
182231 read -r LISTEN_ADDR
183232 save_conf
184233 ;;
@@ -188,13 +237,28 @@ show_menu() {
188237 save_conf
189238 ;;
190239 5)
240+ echo " 选择分流模式:"
241+ echo " 1) global"
242+ echo " 2) bypass_cn"
243+ printf " 请选择 [1-2]: "
244+ read -r routing_choice
245+ if [ " $routing_choice " -eq 1 ]; then
246+ ROUTING=" global"
247+ elif [ " $routing_choice " -eq 2 ]; then
248+ ROUTING=" bypass_cn"
249+ else
250+ echo " 无效选择"
251+ fi
252+ save_conf
253+ ;;
254+ 6)
191255 ensure_binary || { echo " 启动失败:二进制不存在" ; sleep 2; continue ; }
192256 ensure_init
193257 /etc/init.d/ech-workers restart
194258 echo " 已启动 / 重启 ech-workers"
195259 sleep 2
196260 ;;
197- 6 )
261+ 7 )
198262 if [ -x " $INIT_FILE " ]; then
199263 /etc/init.d/ech-workers stop
200264 echo " 已停止 ech-workers"
@@ -203,7 +267,7 @@ show_menu() {
203267 fi
204268 sleep 2
205269 ;;
206- 7 )
270+ 8 )
207271 echo " 日志输出 (logread -e ech-workers | tail -n 50):"
208272 echo " ----------------------------------------------"
209273 if command -v logread > /dev/null 2>&1 ; then
@@ -215,7 +279,7 @@ show_menu() {
215279 printf " 按回车返回菜单..."
216280 read dummy
217281 ;;
218- 8 )
282+ 9 )
219283 exit 0
220284 ;;
221285 * )
@@ -227,5 +291,6 @@ show_menu() {
227291}
228292
229293# 入口
294+ install_dependencies # 自动安装依赖
230295ensure_conf
231296show_menu
0 commit comments