Skip to content

Commit 9c59077

Browse files
authored
软路由脚本
1 parent 1cfcd36 commit 9c59077

1 file changed

Lines changed: 231 additions & 0 deletions

File tree

softrouter.sh

Lines changed: 231 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,231 @@
1+
#!/bin/sh
2+
3+
BIN_PATH="/usr/bin/ech-workers"
4+
CONF_FILE="/etc/ech-workers.conf"
5+
INIT_FILE="/etc/init.d/ech-workers"
6+
TMP_DIR="/tmp/ech-workers"
7+
8+
# 默认值(第一次生成配置用,可以之后在菜单里改)
9+
DEFAULT_BEST_IP="cf.877771.xyz"
10+
DEFAULT_SERVER_ADDR="echo.example.com:443"
11+
DEFAULT_LISTEN_ADDR="0.0.0.0:30001"
12+
DEFAULT_TOKEN=""
13+
DEFAULT_DNS="https://dns.alidns.com/dns-query"
14+
DEFAULT_ECH_DOMAIN="cloudflare-ech.com"
15+
16+
# 根据架构选择下载链接
17+
get_latest_release_url() {
18+
echo "正在获取 GitHub 最新发布版本..."
19+
20+
# 检查架构
21+
ARCH=$(uname -m)
22+
if [ "$ARCH" = "x86_64" ]; then
23+
DOWNLOAD_URL="https://github.com/byJoey/ech-wk/releases/download/latest/ECHWorkers-linux-amd64-softrouter.tar.gz"
24+
elif [ "$ARCH" = "aarch64" ]; then
25+
DOWNLOAD_URL="https://github.com/byJoey/ech-wk/releases/download/latest/ECHWorkers-linux-arm64-softrouter.tar.gz"
26+
else
27+
echo "不支持此架构:$ARCH"
28+
return 1
29+
fi
30+
31+
echo "下载链接: $DOWNLOAD_URL"
32+
echo $DOWNLOAD_URL
33+
}
34+
35+
ensure_binary() {
36+
if [ -x "$BIN_PATH" ]; then
37+
return 0
38+
fi
39+
40+
echo "找不到二进制: $BIN_PATH"
41+
echo "自动下载最新版本..."
42+
43+
DOWNLOAD_URL=$(get_latest_release_url)
44+
if [ $? -ne 0 ]; then
45+
echo "下载失败!"
46+
return 1
47+
fi
48+
49+
echo "开始下载..."
50+
mkdir -p "$(dirname "$BIN_PATH")"
51+
mkdir -p "$TMP_DIR"
52+
53+
# 使用 curl 下载压缩包
54+
curl -L -o "$TMP_DIR/ech-workers.tar.gz" "$DOWNLOAD_URL" || { echo "下载失败"; return 1; }
55+
56+
echo "下载完成,开始解压..."
57+
# 解压下载的文件
58+
tar -zxvf "$TMP_DIR/ech-workers.tar.gz" -C "$TMP_DIR" || { echo "解压失败"; return 1; }
59+
60+
# 假设解压后文件名是 ech-workers,请根据实际情况调整
61+
mv "$TMP_DIR/ech-workers" "$BIN_PATH" || { echo "移动文件失败"; return 1; }
62+
63+
chmod +x "$BIN_PATH"
64+
echo "已下载并安装到 $BIN_PATH"
65+
}
66+
67+
ensure_conf() {
68+
if [ -f "$CONF_FILE" ]; then
69+
return 0
70+
fi
71+
72+
mkdir -p "$(dirname "$CONF_FILE")"
73+
cat >"$CONF_FILE" <<EOF
74+
BEST_IP="$DEFAULT_BEST_IP"
75+
SERVER_ADDR="$DEFAULT_SERVER_ADDR"
76+
LISTEN_ADDR="$DEFAULT_LISTEN_ADDR"
77+
TOKEN="$DEFAULT_TOKEN"
78+
DNS="$DEFAULT_DNS"
79+
ECH_DOMAIN="$DEFAULT_ECH_DOMAIN"
80+
EOF
81+
echo "已生成默认配置: $CONF_FILE"
82+
}
83+
84+
ensure_init() {
85+
if [ -f "$INIT_FILE" ]; then
86+
return 0
87+
fi
88+
89+
cat >"$INIT_FILE" <<'EOF'
90+
#!/bin/sh /etc/rc.common
91+
92+
USE_PROCD=1
93+
START=99
94+
STOP=10
95+
96+
BIN="/usr/bin/ech-workers"
97+
CONF="/etc/ech-workers.conf"
98+
99+
start_service() {
100+
[ -x "$BIN" ] || return 1
101+
[ -f "$CONF" ] && . "$CONF"
102+
103+
# 给一些默认值,避免变量为空
104+
: "${DNS:=https://dns.alidns.com/dns-query}"
105+
: "${ECH_DOMAIN:=cloudflare-ech.com}"
106+
107+
procd_open_instance
108+
procd_set_param command "$BIN" \
109+
-f "${SERVER_ADDR}" \
110+
-l "${LISTEN_ADDR}" \
111+
-token "${TOKEN}" \
112+
-ip "${BEST_IP}" \
113+
-dns "${DNS}" \
114+
-ech "${ECH_DOMAIN}"
115+
procd_set_param respawn
116+
procd_close_instance
117+
}
118+
EOF
119+
120+
chmod +x "$INIT_FILE"
121+
/etc/init.d/ech-workers enable 2>/dev/null
122+
echo "已创建启动脚本: $INIT_FILE 并设置开机自启"
123+
}
124+
125+
load_conf() {
126+
[ -f "$CONF_FILE" ] && . "$CONF_FILE"
127+
}
128+
129+
save_conf() {
130+
mkdir -p "$(dirname "$CONF_FILE")"
131+
cat >"$CONF_FILE" <<EOF
132+
BEST_IP="${BEST_IP}"
133+
SERVER_ADDR="${SERVER_ADDR}"
134+
LISTEN_ADDR="${LISTEN_ADDR}"
135+
TOKEN="${TOKEN}"
136+
DNS="${DNS}"
137+
ECH_DOMAIN="${ECH_DOMAIN}"
138+
EOF
139+
}
140+
141+
show_menu() {
142+
while true; do
143+
clear
144+
ensure_conf
145+
load_conf
146+
147+
echo "==========================="
148+
echo "----- 当前配置 ------------"
149+
echo "优选 IP : ${BEST_IP}"
150+
echo "服务地址 : ${SERVER_ADDR}"
151+
echo "监听地址 : ${LISTEN_ADDR}"
152+
echo "TOKEN(身份令牌): ${TOKEN}"
153+
echo "DNS(可选) : ${DNS}"
154+
echo "ECH 域名(可选): ${ECH_DOMAIN}"
155+
echo "---------------------------"
156+
echo "----- ech-workers 菜单 ----"
157+
echo "1) 修改优选 IP"
158+
echo "2) 修改服务地址"
159+
echo "3) 修改监听地址"
160+
echo "4) 修改 TOKEN(身份令牌)"
161+
echo "5) 启动 ech"
162+
echo "6) 关闭 ech"
163+
echo "7) 查看日志(最近50行)"
164+
echo "8) 退出"
165+
echo "==========================="
166+
printf "请选择 [1-8]: "
167+
read -r choice
168+
169+
case "$choice" in
170+
1)
171+
printf "输入新的优选 IP: "
172+
read -r BEST_IP
173+
save_conf
174+
;;
175+
2)
176+
printf "输入新的服务地址 (例如 example.com:443): "
177+
read -r SERVER_ADDR
178+
save_conf
179+
;;
180+
3)
181+
printf "输入新的监听地址 (例如 0.0.0.0:30001): "
182+
read -r LISTEN_ADDR
183+
save_conf
184+
;;
185+
4)
186+
printf "输入新的 TOKEN(身份令牌): "
187+
read -r TOKEN
188+
save_conf
189+
;;
190+
5)
191+
ensure_binary || { echo "启动失败:二进制不存在"; sleep 2; continue; }
192+
ensure_init
193+
/etc/init.d/ech-workers restart
194+
echo "已启动 / 重启 ech-workers"
195+
sleep 2
196+
;;
197+
6)
198+
if [ -x "$INIT_FILE" ]; then
199+
/etc/init.d/ech-workers stop
200+
echo "已停止 ech-workers"
201+
else
202+
echo "找不到 $INIT_FILE"
203+
fi
204+
sleep 2
205+
;;
206+
7)
207+
echo "日志输出 (logread -e ech-workers | tail -n 50):"
208+
echo "----------------------------------------------"
209+
if command -v logread >/dev/null 2>&1; then
210+
logread -e ech-workers | tail -n 50
211+
else
212+
echo "系统没有 logread,请手动查看日志。"
213+
fi
214+
echo "----------------------------------------------"
215+
printf "按回车返回菜单..."
216+
read dummy
217+
;;
218+
8)
219+
exit 0
220+
;;
221+
*)
222+
echo "无效选择"
223+
sleep 1
224+
;;
225+
esac
226+
done
227+
}
228+
229+
# 入口
230+
ensure_conf
231+
show_menu

0 commit comments

Comments
 (0)