#!/bin/bash # ========================================== # MTG (MTProto) 极简原生管理脚本 - 完全体 # ========================================== RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[0;33m' PLAIN='\033[0m' CONF_FILE="/etc/mtg_proxy.conf" # 权限检查 if [ "$EUID" -ne 0 ]; then echo -e "${RED}❌ 错误: 请使用 root 用户运行此脚本。${PLAIN}" exit 1 fi # 安装基础依赖 install_deps() { echo -e "${YELLOW}⏳ 检查并安装基础组件 (curl, wget, tar)...${PLAIN}" if command -v apt-get >/dev/null 2>&1; then apt-get update -y && apt-get install -y curl wget tar elif command -v yum >/dev/null 2>&1; then yum install -y curl wget tar fi } # 获取本机IP get_ip() { IPV4=$(curl -s -4 icanhazip.com || curl -s -4 ifconfig.me) } # 防火墙放行 open_port() { local port=$1 if command -v ufw >/dev/null 2>&1; then ufw allow "${port}/tcp" >/dev/null 2>&1 fi if command -v firewall-cmd >/dev/null 2>&1; then firewall-cmd --zone=public --add-port="${port}/tcp" --permanent >/dev/null 2>&1 firewall-cmd --reload >/dev/null 2>&1 fi if command -v iptables >/dev/null 2>&1; then iptables -I INPUT -p tcp --dport "${port}" -j ACCEPT 2>/dev/null iptables-save >/dev/null 2>&1 fi } # 安装/重装 MTG install_mtg() { install_deps # 架构检测 ARCH=$(uname -m) case "$ARCH" in x86_64) MTG_ARCH="linux-amd64" ;; aarch64) MTG_ARCH="linux-arm64" ;; *) echo -e "${RED}❌ 不支持的架构: $ARCH${PLAIN}"; exit 1 ;; esac # 自定义配置 read -p "设置代理端口 [默认 8443]: " SET_PORT SET_PORT=${SET_PORT:-8443} read -p "设置伪装域名 (FakeTLS) [默认 bing.com]: " SET_DOMAIN SET_DOMAIN=${SET_DOMAIN:-bing.com} echo -e "${YELLOW}⏳ 正在拉取 MTG 最新版本...${PLAIN}" LATEST_URL=$(curl -s https://api.github.com/repos/9seconds/mtg/releases/latest | grep "browser_download_url.*${MTG_ARCH}.tar.gz" | head -n 1 | cut -d '"' -f 4) if [ -z "$LATEST_URL" ]; then echo -e "${RED}❌ 获取下载链接失败,请检查网络。${PLAIN}" exit 1 fi wget -qO- "$LATEST_URL" | tar xz -C /tmp/ || { echo -e "${RED}❌ 下载或解压失败${PLAIN}"; exit 1; } mv /tmp/mtg-*/mtg /usr/local/bin/mtg chmod +x /usr/local/bin/mtg rm -rf /tmp/mtg-* # 生成 Secret SECRET=$(mtg generate-secret "$SET_DOMAIN") # 保存配置 echo "PORT=$SET_PORT" > $CONF_FILE echo "SECRET=$SECRET" >> $CONF_FILE echo "DOMAIN=$SET_DOMAIN" >> $CONF_FILE # 配置 Systemd cat << EOF > /etc/systemd/system/mtg.service [Unit] Description=MTG MTProto Proxy Service After=network.target [Service] Type=simple ExecStart=/usr/local/bin/mtg simple-run -n 1.1.1.1 -i prefer-ipv4 0.0.0.0:$SET_PORT $SECRET Restart=always RestartSec=3 StandardOutput=null StandardError=journal LimitNOFILE=65535 [Install] WantedBy=multi-user.target EOF # 启动服务 systemctl daemon-reload systemctl enable --now mtg open_port "$SET_PORT" echo -e "${GREEN}✅ MTG 安装并启动成功!${PLAIN}" show_info } # 查看代理信息 show_info() { if [ ! -f "$CONF_FILE" ]; then echo -e "${RED}❌ 未找到配置文件,MTG 可能未安装。${PLAIN}" return fi source $CONF_FILE get_ip echo -e "\n==========================================" echo -e "${GREEN}🎯 MTG 代理连接信息${PLAIN}" echo -e "==========================================" echo -e "服务器 IP : ${YELLOW}${IPV4}${PLAIN}" echo -e "监听端口 : ${YELLOW}${PORT}${PLAIN}" echo -e "伪装域名 : ${YELLOW}${DOMAIN}${PLAIN}" echo -e "Secret : ${YELLOW}${SECRET}${PLAIN}" echo -e "==========================================" echo -e "${GREEN}🔗 Telegram 一键链接 (点击直接添加):${PLAIN}" echo -e "tg://proxy?server=${IPV4}&port=${PORT}&secret=${SECRET}" echo -e "==========================================\n" } # 查看实时日志 show_logs() { echo -e "${YELLOW}⏳ 正在输出 MTG 运行日志 (按 Ctrl+C 退出)...${PLAIN}" journalctl -u mtg.service -f } # 彻底卸载 uninstall_mtg() { read -p "⚠️ 确定要彻底卸载 MTG 吗?[y/N]: " choice if [[ "$choice" =~ ^[Yy]$ ]]; then echo -e "${YELLOW}⏳ 正在卸载...${PLAIN}" systemctl stop mtg 2>/dev/null systemctl disable mtg 2>/dev/null rm -f /etc/systemd/system/mtg.service rm -f /usr/local/bin/mtg rm -f $CONF_FILE systemctl daemon-reload echo -e "${GREEN}✅ MTG 已彻底卸载!${PLAIN}" else echo "已取消。" fi } # 交互主菜单 while true; do clear echo -e "==========================================" echo -e " ${GREEN}MTProto (MTG) 原生管理脚本${PLAIN}" echo -e "==========================================" if systemctl is-active --quiet mtg; then echo -e "当前状态: ${GREEN}运行中 (Active)${PLAIN}" else echo -e "当前状态: ${RED}未运行 (Stopped / Not Installed)${PLAIN}" fi echo -e "==========================================" echo -e " ${GREEN}1.${PLAIN} 安装 / 重新安装 MTG" echo -e " ${GREEN}2.${PLAIN} 查看代理分享链接" echo -e " ${GREEN}3.${PLAIN} 查看服务运行日志" echo -e " ${GREEN}4.${PLAIN} 启动 / 重启 MTG 服务" echo -e " ${GREEN}5.${PLAIN} 停止 MTG 服务" echo -e " ${GREEN}6.${PLAIN} 彻底卸载 MTG" echo -e " ${GREEN}0.${PLAIN} 退出脚本" echo -e "==========================================" read -p "请输入数字 [0-6]: " num case "$num" in 1) install_mtg; read -p "按回车键继续..." ;; 2) show_info; read -p "按回车键继续..." ;; 3) show_logs ;; 4) systemctl restart mtg; echo -e "${GREEN}✅ 已重启${PLAIN}"; read -p "按回车键继续..." ;; 5) systemctl stop mtg; echo -e "${GREEN}✅ 已停止${PLAIN}"; read -p "按回车键继续..." ;; 6) uninstall_mtg; read -p "按回车键继续..." ;; 0) clear; exit 0 ;; *) echo -e "${RED}❌ 输入错误,请重试。${PLAIN}"; sleep 1 ;; esac done