Skip to content

Commit af1a0e3

Browse files
authored
Update softrouter.sh
1 parent acff74f commit af1a0e3

1 file changed

Lines changed: 101 additions & 36 deletions

File tree

softrouter.sh

Lines changed: 101 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,59 @@
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"
37
BIN_PATH="/usr/bin/ech-workers"
4-
CONF_FILE="/etc/ech-workers.conf"
5-
INIT_FILE="/etc/init.d/ech-workers"
68
TMP_DIR="/tmp/ech-workers"
79

810
# 默认值(第一次生成配置用,可以之后在菜单里改)
9-
DEFAULT_BEST_IP="cf.877771.xyz"
11+
DEFAULT_BEST_IP="joeyblog.net"
1012
DEFAULT_SERVER_ADDR="echo.example.com:443"
1113
DEFAULT_LISTEN_ADDR="0.0.0.0:30001"
1214
DEFAULT_TOKEN=""
1315
DEFAULT_DNS="https://dns.alidns.com/dns-query"
1416
DEFAULT_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 下载链接
1757
get_latest_release_url() {
1858
echo "正在获取 GitHub 最新发布版本..."
1959

@@ -33,35 +73,38 @@ get_latest_release_url() {
3373
}
3474

3575
ensure_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

67110
ensure_conf() {
@@ -77,6 +120,7 @@ LISTEN_ADDR="$DEFAULT_LISTEN_ADDR"
77120
TOKEN="$DEFAULT_TOKEN"
78121
DNS="$DEFAULT_DNS"
79122
ECH_DOMAIN="$DEFAULT_ECH_DOMAIN"
123+
ROUTING="$DEFAULT_ROUTING"
80124
EOF
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}"
135181
TOKEN="${TOKEN}"
136182
DNS="${DNS}"
137183
ECH_DOMAIN="${ECH_DOMAIN}"
184+
ROUTING="${ROUTING}"
138185
EOF
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 # 自动安装依赖
230295
ensure_conf
231296
show_menu

0 commit comments

Comments
 (0)