diff --git a/lsy-frpc/data/lsyfrpc/check_config.sh b/lsy-frpc/data/lsyfrpc/check_config.sh new file mode 100644 index 0000000..8ba3756 --- /dev/null +++ b/lsy-frpc/data/lsyfrpc/check_config.sh @@ -0,0 +1,70 @@ +#!/bin/bash + +# FRPC 配置目录和文件路径 +FRPC_FILE="/data/lsyfrpc/frpc" +FRPC_DIR="/data/lsyfrpc" +CONFIG_FILE="$FRPC_DIR/frpc.ini" + +# 云端接口获取当前端口和 MAC 地址 +function get_cloud_config() { + mac_address=$(cat /sys/class/net/eth0/address) + echo "MAC Address: $mac_address" + + # 尝试获取云端端口,最多重试 3 次 + retries=3 + for ((i=1; i<=retries; i++)); do + response=$(curl -s -X 'POST' \ + 'https://frp-box.jxm.cool/request_port/' \ + -H 'accept: application/json' \ + -H 'Authorization: Basic NTI0NzgxNTctMjY1Zi00ZGNjLWE0NDMtODE0YzJhMDMxYjhjOmM2ZDI3Nzc1LTJhMDgtNDkyZS1iMTExLTg5YWQzZDY5ZTliMA==' \ + -H 'Content-Type: application/json' \ + -d "{\"mac_address\": \"$mac_address\"}") + + cloud_port=$(echo "$response" | grep -o '"port":[0-9]*' | awk -F: '{print $2}') + + if [ -n "$cloud_port" ]; then + # 成功获取到端口 + break + else + echo "[ERROR] Failed to get port from the cloud. Retry $i of $retries." + if [ "$i" -eq "$retries" ]; then + echo "[ERROR] Max retries reached. Exiting." + exit 1 + fi + sleep 5 # 等待 5 秒后再重试 + fi + done + + cloud_mac_address="$mac_address-v1" + echo "Cloud MAC Address: $cloud_mac_address" + echo "Cloud Port: $cloud_port" +} + +# 检查 FRPC 配置是否与云端一致 +function check_config() { + local cloud_port="$1" + local cloud_mac_address="$2" + + # 从配置文件中读取现有的 MAC 地址和端口 + current_mac_address=$(grep -o '\[.*\]' "$CONFIG_FILE" | tr -d '[]') + current_port=$(grep -o 'remote_port = [0-9]*' "$CONFIG_FILE" | awk '{print $3}') + + echo "Current MAC Address in frpc.ini: $current_mac_address" + echo "Current Port in frpc.ini: $current_port" + + # 比较配置文件中的 MAC 地址和端口是否与云端匹配 + if [ "$current_mac_address" != "$cloud_mac_address" ] || [ "$current_port" != "$cloud_port" ]; then + echo "[INFO] Configuration mismatch detected. Re-running install.sh..." + sudo /bin/bash /path/to/install.sh + else + echo "[INFO] Configuration is up to date." + fi +} + +# 主函数,获取云端配置并检查配置 +main() { + get_cloud_config + check_config "$cloud_port" "$cloud_mac_address" +} + +main diff --git a/lsy-frpc/data/lsyfrpc/frp_install.sh b/lsy-frpc/data/lsyfrpc/frp_install.sh index 42d1e49..919ad33 100644 --- a/lsy-frpc/data/lsyfrpc/frp_install.sh +++ b/lsy-frpc/data/lsyfrpc/frp_install.sh @@ -44,6 +44,7 @@ After=network.target [Service] Type=simple ExecStartPre=/bin/mkdir -p "$FRPC_DIR/var/run/frp/" +ExecStartPre=/bin/bash "$FRPC_DIR/check_config.sh" ExecStart="$FRPC_FILE" -c "$FRPC_DIR/frpc.ini" PIDFile="$FRPC_DIR/var/run/frp/frpc.pid"