2024-11-24 00:41:27 -05:00
|
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
|
|
# 定义颜色变量
|
|
|
|
|
red="\033[0;31m"
|
|
|
|
|
green="\033[0;32m"
|
|
|
|
|
plain="\033[0m"
|
|
|
|
|
|
2024-12-08 02:35:46 -05:00
|
|
|
|
# 脚本版本
|
|
|
|
|
sh_ver="1.1"
|
|
|
|
|
|
|
|
|
|
# 配置文件路径
|
|
|
|
|
CONFIG_PATH="/root/realm/config.toml"
|
|
|
|
|
|
|
|
|
|
# 初始化环境目录
|
|
|
|
|
init_env() {
|
|
|
|
|
mkdir -p /root/realm
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# 更新脚本
|
|
|
|
|
Update_Shell() {
|
|
|
|
|
echo -e "当前版本为 [ ${sh_ver} ],开始检测最新版本..."
|
|
|
|
|
sh_new_ver=$(wget --no-check-certificate -qO- "https://raw.githubusercontent.com/wcwq98/realm/main/realm.sh" | grep 'sh_ver="' | awk -F "=" '{print $NF}' | sed 's/\"//g' | head -1)
|
|
|
|
|
[[ -z ${sh_new_ver} ]] && echo -e "${red}检测最新版本失败!${plain}" && return
|
|
|
|
|
if [[ ${sh_new_ver} != ${sh_ver} ]]; then
|
|
|
|
|
echo -e "发现新版本 [ ${sh_new_ver} ],是否更新?[Y/n]"
|
|
|
|
|
read -p "(默认: y):" yn
|
|
|
|
|
[[ -z "${yn}" ]] && yn="y"
|
|
|
|
|
if [[ ${yn} == [Yy] ]]; then
|
|
|
|
|
wget -N --no-check-certificate https://raw.githubusercontent.com/wcwq98/realm/main/realm.sh && chmod +x realm.sh
|
|
|
|
|
echo -e "脚本已更新为最新版本 [ ${sh_new_ver} ]!"
|
|
|
|
|
exit 0
|
|
|
|
|
else
|
|
|
|
|
echo -e "已取消更新。"
|
|
|
|
|
fi
|
|
|
|
|
else
|
|
|
|
|
echo -e "当前已是最新版本 [ ${sh_new_ver} ]!"
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# 初始化realm状态
|
2024-11-24 00:41:27 -05:00
|
|
|
|
update_realm_status() {
|
|
|
|
|
if [ -f "/root/realm/realm" ]; then
|
|
|
|
|
realm_status="已安装"
|
|
|
|
|
realm_status_color=$green
|
|
|
|
|
else
|
|
|
|
|
realm_status="未安装"
|
|
|
|
|
realm_status_color=$red
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# 检查realm服务状态
|
|
|
|
|
check_realm_service_status() {
|
|
|
|
|
if systemctl is-active --quiet realm; then
|
|
|
|
|
echo -e "${green}启用${plain}"
|
|
|
|
|
else
|
|
|
|
|
echo -e "${red}未启用${plain}"
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# 显示菜单的函数
|
|
|
|
|
show_menu() {
|
|
|
|
|
clear
|
|
|
|
|
echo "欢迎使用realm一键转发脚本"
|
|
|
|
|
echo "================="
|
|
|
|
|
echo "1. 部署环境"
|
|
|
|
|
echo "2. 添加转发"
|
2024-11-30 20:35:15 -05:00
|
|
|
|
echo "3. 添加端口段转发"
|
|
|
|
|
echo "4. 删除转发"
|
|
|
|
|
echo "5. 启动服务"
|
|
|
|
|
echo "6. 停止服务"
|
|
|
|
|
echo "7. 重启服务"
|
|
|
|
|
echo "8. 检测更新"
|
|
|
|
|
echo "9. 一键卸载"
|
2024-12-08 02:35:46 -05:00
|
|
|
|
echo "10. 更新脚本"
|
2024-11-24 00:41:27 -05:00
|
|
|
|
echo "0. 退出脚本"
|
|
|
|
|
echo "================="
|
|
|
|
|
echo -e "realm 状态:${realm_status_color}${realm_status}${plain}"
|
|
|
|
|
echo -n "realm 转发状态:"
|
|
|
|
|
check_realm_service_status
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# 部署环境的函数
|
|
|
|
|
deploy_realm() {
|
2024-12-08 02:35:46 -05:00
|
|
|
|
init_env
|
2024-11-24 00:41:27 -05:00
|
|
|
|
cd /root/realm
|
|
|
|
|
|
|
|
|
|
_version=$(curl -s https://api.github.com/repos/zhboner/realm/releases/latest | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/')
|
|
|
|
|
|
|
|
|
|
if [ -z "$_version" ]; then
|
2024-12-08 02:35:46 -05:00
|
|
|
|
echo "获取版本号失败,请检查网络连接。"
|
2024-11-24 00:41:27 -05:00
|
|
|
|
return 1
|
|
|
|
|
else
|
|
|
|
|
echo "当前最新版本为: ${_version}"
|
|
|
|
|
fi
|
|
|
|
|
|
2024-11-30 20:35:15 -05:00
|
|
|
|
arch=$(uname -m)
|
|
|
|
|
os=$(uname -s | tr '[:upper:]' '[:lower:]')
|
|
|
|
|
|
|
|
|
|
case "$arch-$os" in
|
|
|
|
|
x86_64-linux)
|
2024-11-24 00:41:27 -05:00
|
|
|
|
download_url="https://github.com/zhboner/realm/releases/download/${_version}/realm-x86_64-unknown-linux-gnu.tar.gz"
|
|
|
|
|
;;
|
|
|
|
|
*)
|
2024-11-30 20:35:15 -05:00
|
|
|
|
echo "不支持的架构: $arch-$os"
|
2024-11-24 00:41:27 -05:00
|
|
|
|
return
|
|
|
|
|
;;
|
|
|
|
|
esac
|
|
|
|
|
|
2024-11-30 20:35:15 -05:00
|
|
|
|
wget -O "realm-${_version}.tar.gz" "$download_url"
|
|
|
|
|
tar -xvf "realm-${_version}.tar.gz"
|
2024-11-24 00:41:27 -05:00
|
|
|
|
chmod +x realm
|
|
|
|
|
|
2024-12-08 02:35:46 -05:00
|
|
|
|
# 创建默认配置文件
|
|
|
|
|
cat <<EOF > $CONFIG_PATH
|
2024-11-30 20:35:15 -05:00
|
|
|
|
|
|
|
|
|
[network]
|
|
|
|
|
no_tcp = false #是否关闭tcp转发
|
|
|
|
|
use_udp = true #是否开启udp转发
|
|
|
|
|
|
|
|
|
|
#参考模板
|
|
|
|
|
# [[endpoints]]
|
|
|
|
|
# listen = "0.0.0.0:本地端口"
|
|
|
|
|
# remote = "落地鸡ip:目标端口"
|
|
|
|
|
|
|
|
|
|
[[endpoints]]
|
|
|
|
|
listen = "0.0.0.0:1234"
|
|
|
|
|
remote = "0.0.0.0:5678"
|
|
|
|
|
|
|
|
|
|
EOF
|
|
|
|
|
|
2024-11-24 00:41:27 -05:00
|
|
|
|
echo "[Unit]
|
|
|
|
|
Description=realm
|
|
|
|
|
After=network-online.target
|
2024-12-08 02:35:46 -05:00
|
|
|
|
Wants=network-online.target
|
2024-11-24 00:41:27 -05:00
|
|
|
|
|
|
|
|
|
[Service]
|
|
|
|
|
Type=simple
|
|
|
|
|
User=root
|
|
|
|
|
Restart=on-failure
|
|
|
|
|
RestartSec=5s
|
|
|
|
|
WorkingDirectory=/root/realm
|
2024-12-08 02:35:46 -05:00
|
|
|
|
ExecStart=/root/realm/realm -c $CONFIG_PATH
|
2024-11-24 00:41:27 -05:00
|
|
|
|
|
|
|
|
|
[Install]
|
|
|
|
|
WantedBy=multi-user.target" > /etc/systemd/system/realm.service
|
|
|
|
|
|
|
|
|
|
systemctl daemon-reload
|
|
|
|
|
update_realm_status
|
|
|
|
|
echo "部署完成。"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# 初始化realm状态
|
|
|
|
|
update_realm_status
|
|
|
|
|
|
|
|
|
|
# 主循环
|
|
|
|
|
while true; do
|
|
|
|
|
show_menu
|
|
|
|
|
read -p "请选择一个选项: " choice
|
|
|
|
|
case $choice in
|
2024-11-30 20:35:15 -05:00
|
|
|
|
1) deploy_realm ;;
|
|
|
|
|
2) add_forward ;;
|
|
|
|
|
3) add_port_range_forward ;;
|
|
|
|
|
4) delete_forward ;;
|
|
|
|
|
5) start_service ;;
|
|
|
|
|
6) stop_service ;;
|
|
|
|
|
7) restart_service ;;
|
|
|
|
|
8) update_realm ;;
|
|
|
|
|
9) uninstall_realm ;;
|
2024-12-08 02:35:46 -05:00
|
|
|
|
10) Update_Shell ;;
|
2024-11-30 20:35:15 -05:00
|
|
|
|
0) echo "退出脚本。"; exit 0 ;;
|
|
|
|
|
*) echo "无效选项: $choice" ;;
|
2024-11-24 00:41:27 -05:00
|
|
|
|
esac
|
|
|
|
|
read -p "按任意键继续..." key
|
|
|
|
|
done
|