From e7c17a792fb23f564827e1612a8f289c0eb0f406 Mon Sep 17 00:00:00 2001 From: gaoyuheng Date: Thu, 14 May 2026 16:03:13 +0800 Subject: [PATCH] fix --- install.sh | 2 ++ trace | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 trace diff --git a/install.sh b/install.sh index d4bb5c3..06c6c4f 100644 --- a/install.sh +++ b/install.sh @@ -25,6 +25,7 @@ mkdir -p /etc/bird-lg if [ -f "birdlgp/bird-lgproxy-go" ]; then mv birdlgp/bird-lgproxy-go /etc/bird-lg/bird-lgproxy-go mv birdlgp/nexttrace /etc/bird-lg/nexttrace + mv birdlgp/trace /etc/bird-lg/trace mv birdlgp/bird-lgproxy.yml /etc/bird-lg/bird-lgproxy.yml else echo "错误:仓库中未找到 bird-lgproxy-go,请检查仓库内容。" @@ -34,6 +35,7 @@ fi # 赋予合理权限 (程序 755, 配置 644) chmod 755 /etc/bird-lg/bird-lgproxy-go chmod 755 /etc/bird-lg/nexttrace +chmod 755 /etc/bird-lg/trace chmod 644 /etc/bird-lg/bird-lgproxy.yml # --- 3. 根据类型配置引导 --- diff --git a/trace b/trace new file mode 100644 index 0000000..341630f --- /dev/null +++ b/trace @@ -0,0 +1,46 @@ +#!/bin/sh + +VARS_CONF="/etc/bird/vars.conf" +NEXTTRACE="/etc/bird-lg/nexttrace" + +# 1. 提取目标 IP (URL 中的 q 参数传过来的最后一个参数) +TARGET=$(echo "$@" | awk '{print $NF}') + +# 2. 预设必须要带的 nexttrace 参数 +# 这样即使 bird-lgproxy.yaml 里没写全,这里也会兜底 +FIXED_ARGS="-C -n -M -q 1" + +# --- 内部函数:从 vars.conf 提取定义的值 --- +get_var() { + grep -E "define[[:space:]]+$1" "$VARS_CONF" | awk -F'=' '{print $2}' | tr -d ' ;"' | xargs +} + +# --- 3. 根据目标 IP 段选择 Source IP --- +SRC_IP="" + +if echo "$TARGET" | grep -q ':'; then + # IPv6 逻辑 + if echo "$TARGET" | grep -qiE '^fd'; then + SRC_IP=$(get_var "DN42_V6_kernel") + else + SRC_IP=$(get_var "LOCAL_V6_kernel") + fi +else + # IPv4 逻辑 + if echo "$TARGET" | grep -qE '^(172\.(2[0-3]|1[6-9]))'; then + SRC_IP=$(get_var "DN42_V4_kernel") + elif echo "$TARGET" | grep -qE '^10\.'; then + SRC_IP=$(get_var "UNET_V4_kernel") + else + SRC_IP=$(get_var "LOCAL_V4_kernel") + fi +fi + +# --- 4. 组合并执行 --- +# 确保如果没读到变量,就不传 -s,避免 nexttrace 报错 +if [ -n "$SRC_IP" ]; then + # 使用 exec 替换当前进程,效率最高 + exec "$NEXTTRACE" $FIXED_ARGS -s "$SRC_IP" "$TARGET" +else + exec "$NEXTTRACE" $FIXED_ARGS "$TARGET" +fi \ No newline at end of file