diff --git a/frpc/frp_0.64.0_linux_amd64.tar.gz b/frpc/frp_0.64.0_linux_amd64.tar.gz new file mode 100644 index 0000000..603eb1c Binary files /dev/null and b/frpc/frp_0.64.0_linux_amd64.tar.gz differ diff --git a/frpc/frpc.toml b/frpc/frpc.toml new file mode 100644 index 0000000..3b4e5b4 --- /dev/null +++ b/frpc/frpc.toml @@ -0,0 +1,10 @@ +[common] +server_addr = 8.218.134.198 +server_port = 8041 +token = PAioH8syP!82T% + +[nely] +type = tcp +local_ip = 127.0.0.1 +local_port = 34252 +remote_port = 34252 diff --git a/frpc/install_frpc.sh b/frpc/install_frpc.sh new file mode 100644 index 0000000..6d7fe93 --- /dev/null +++ b/frpc/install_frpc.sh @@ -0,0 +1,307 @@ +#!/bin/bash + +# FRP Client 一键安装脚本 +# 自动解压、配置和安装 frpc +# 使用方法: chmod +x install_frpc.sh && ./install_frpc.sh + +set -e + +# 颜色定义 +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' # No Color + +# 日志函数 +log_info() { + echo -e "${GREEN}[INFO]${NC} $1" +} + +log_warn() { + echo -e "${YELLOW}[WARN]${NC} $1" +} + +log_error() { + echo -e "${RED}[ERROR]${NC} $1" +} + +# 检查是否为root用户 +check_root() { + if [[ $EUID -ne 0 ]]; then + log_error "此脚本需要root权限运行" + exit 1 + fi +} + +# 检查文件是否存在 +check_files() { + if [[ ! -f "frp_0.64.0_linux_amd64.tar.gz" ]]; then + log_error "找不到 frp_0.64.0_linux_amd64.tar.gz 文件" + exit 1 + fi + + if [[ ! -f "frpc.toml" ]]; then + log_error "找不到 frpc.toml 配置文件" + exit 1 + fi +} + +# 创建frp用户 +create_frp_user() { + if ! id "frp" &>/dev/null; then + log_info "创建 frp 用户..." + useradd -r -s /bin/false frp + else + log_info "frp 用户已存在" + fi +} + +# 解压安装包 +extract_archive() { + log_info "解压 frp_0.64.0_linux_amd64.tar.gz..." + + # 创建临时目录 + TEMP_DIR=$(mktemp -d) + + # 解压到临时目录 + tar -xzf frp_0.64.0_linux_amd64.tar.gz -C "$TEMP_DIR" + + # 创建安装目录 + mkdir -p /root/frpc + + # 复制文件 + cp "$TEMP_DIR"/frp_0.64.0_linux_amd64/frpc /root/frpc/ + + # 清理临时目录 + rm -rf "$TEMP_DIR" + + # 设置权限 - root目录需要特殊权限处理 + chmod 755 /root # 确保frp用户可以访问root目录 + chown -R root:frp /root/frpc + chmod 750 /root/frpc + chmod +x /root/frpc/frpc + + log_info "frpc 已安装到 /root/frpc/" +} + +# 配置frpc +configure_frpc() { + log_info "配置 frpc..." + + # 复制配置文件 + cp frpc.toml /root/frpc/ + chown root:frp /root/frpc/frpc.toml + chmod 640 /root/frpc/frpc.toml + + log_info "配置文件已复制到 /root/frpc/frpc.toml" +} + +# 创建systemd服务 +create_service() { + log_info "创建 systemd 服务..." + + cat > /etc/systemd/system/frpc.service << 'EOF' +[Unit] +Description=Frp Client Service +After=network.target + +[Service] +Type=simple +User=frp +Restart=on-failure +RestartSec=5s +ExecStart=/root/frpc/frpc -c /root/frpc/frpc.toml +ExecReload=/bin/kill -s HUP $MAINPID +KillMode=mixed +TimeoutStopSec=5s + +[Install] +WantedBy=multi-user.target +EOF + + # 重新加载systemd + systemctl daemon-reload + + log_info "systemd 服务已创建" +} + +# 启动服务 +start_service() { + log_info "启动 frpc 服务..." + + # 启用开机自启 + systemctl enable frpc + + # 启动服务 + systemctl start frpc + + # 检查服务状态 + if systemctl is-active --quiet frpc; then + log_info "frpc 服务启动成功" + else + log_error "frpc 服务启动失败" + log_error "请检查日志: journalctl -u frpc -f" + exit 1 + fi +} + +# 显示状态信息 +show_status() { + log_info "安装完成!" + echo "" + echo "服务状态:" + systemctl status frpc --no-pager + echo "" + echo "常用命令:" + echo " 启动服务: systemctl start frpc" + echo " 停止服务: systemctl stop frpc" + echo " 重启服务: systemctl restart frpc" + echo " 查看状态: systemctl status frpc" + echo " 查看日志: journalctl -u frpc -f" + echo "" + echo "配置文件位置: /root/frpc/frpc.toml" + echo "程序位置: /root/frpc/frpc" +} + +# 交互式服务管理菜单 +interactive_menu() { + while true; do + echo "" + echo "===============================================" + echo " FRP Client 服务管理" + echo "===============================================" + echo "1. 启动服务 (start)" + echo "2. 停止服务 (stop)" + echo "3. 重启服务 (restart)" + echo "4. 查看状态 (status)" + echo "5. 查看日志 (logs)" + echo "6. 查看配置文件 (config)" + echo "7. 编辑配置文件 (edit)" + echo "8. 卸载服务 (uninstall)" + echo "0. 退出 (exit)" + echo "===============================================" + + read -p "请选择操作 [0-8]: " choice + + case $choice in + 1|start) + log_info "启动 frpc 服务..." + systemctl start frpc + if systemctl is-active --quiet frpc; then + log_info "服务启动成功" + else + log_error "服务启动失败" + fi + systemctl status frpc --no-pager + ;; + 2|stop) + log_info "停止 frpc 服务..." + systemctl stop frpc + log_info "服务已停止" + ;; + 3|restart) + log_info "重启 frpc 服务..." + systemctl restart frpc + if systemctl is-active --quiet frpc; then + log_info "服务重启成功" + else + log_error "服务重启失败" + fi + systemctl status frpc --no-pager + ;; + 4|status) + echo "服务状态:" + systemctl status frpc --no-pager + ;; + 5|logs) + log_info "查看服务日志 (按 Ctrl+C 退出):" + sleep 1 + journalctl -u frpc -f + ;; + 6|config) + echo "配置文件内容:" + echo "----------------------------------------" + cat /root/frpc/frpc.toml + echo "----------------------------------------" + ;; + 7|edit) + log_info "编辑配置文件..." + if command -v nano >/dev/null 2>&1; then + nano /root/frpc/frpc.toml + elif command -v vi >/dev/null 2>&1; then + vi /root/frpc/frpc.toml + else + log_error "未找到文本编辑器,请手动编辑: /root/frpc/frpc.toml" + fi + + read -p "是否重启服务使配置生效? [y/N]: " restart_choice + if [[ $restart_choice =~ ^[Yy]$ ]]; then + systemctl restart frpc + log_info "服务已重启" + fi + ;; + 8|uninstall) + read -p "确定要卸载 frpc 服务吗? [y/N]: " confirm + if [[ $confirm =~ ^[Yy]$ ]]; then + log_warn "正在卸载 frpc 服务..." + systemctl stop frpc 2>/dev/null || true + systemctl disable frpc 2>/dev/null || true + rm -f /etc/systemd/system/frpc.service + systemctl daemon-reload + rm -rf /root/frpc + userdel -r frp 2>/dev/null || true + log_info "frpc 服务已完全卸载" + exit 0 + else + log_info "取消卸载操作" + fi + ;; + 0|exit|quit|q) + log_info "退出管理界面" + exit 0 + ;; + *) + log_error "无效选择,请输入 0-8 或对应命令" + ;; + esac + + read -p "按回车键继续..." + done +} + +# 主函数 +main() { + # 检查是否为管理模式 + if [[ "$1" == "manage" || "$1" == "menu" || "$1" == "-m" ]]; then + interactive_menu + return + fi + + log_info "开始安装 FRP Client..." + + check_root + check_files + create_frp_user + extract_archive + configure_frpc + create_service + start_service + show_status + + echo "" + log_info "FRP Client 安装完成!" + + # 询问是否进入交互管理界面 + read -p "是否进入交互式管理界面? [y/N]: " enter_menu + if [[ $enter_menu =~ ^[Yy]$ ]]; then + interactive_menu + else + echo "" + log_info "可使用以下命令管理服务:" + echo " ./install_frpc.sh manage # 进入交互管理界面" + echo " systemctl [start|stop|restart|status] frpc" + fi +} + +# 运行主函数 +main "$@" \ No newline at end of file