mirror of
https://github.com/hotyue/IP-Sentinel.git
synced 2026-09-05 07:28:14 +08:00
fix(core): 引入智能网卡生存探测机制,彻底解决多 IP 站群机因 IP 漂移导致的 curl 死锁断网问题
This commit is contained in:
@@ -97,6 +97,12 @@ CURL_BIND_OPT=""
|
|||||||
DYNAMIC_IP_PREF="-${IP_PREF:-4}" # 默认提取用户配置
|
DYNAMIC_IP_PREF="-${IP_PREF:-4}" # 默认提取用户配置
|
||||||
|
|
||||||
if [[ -n "$BIND_IP" && "$BIND_IP" =~ ^[0-9a-fA-F:\.]+$ ]]; then
|
if [[ -n "$BIND_IP" && "$BIND_IP" =~ ^[0-9a-fA-F:\.]+$ ]]; then
|
||||||
|
# [v3.6.3 容错层补丁] 探测物理网卡/虚拟 IP 存活状态
|
||||||
|
RAW_BIND_IP=$(echo "$BIND_IP" | tr -d '[]')
|
||||||
|
if ! ip addr show 2>/dev/null | grep -qw "$RAW_BIND_IP"; then
|
||||||
|
log "$MODULE_NAME" "WARN " "检测到配置的出口 IP ($RAW_BIND_IP) 已丢失,自动降级为系统默认路由出网!"
|
||||||
|
CURL_BIND_OPT=""
|
||||||
|
else
|
||||||
CURL_BIND_OPT="--interface $BIND_IP"
|
CURL_BIND_OPT="--interface $BIND_IP"
|
||||||
# 智能探测:带冒号为 V6,带点号为 V4
|
# 智能探测:带冒号为 V6,带点号为 V4
|
||||||
if [[ "$BIND_IP" == *":"* ]]; then
|
if [[ "$BIND_IP" == *":"* ]]; then
|
||||||
@@ -107,6 +113,7 @@ if [[ -n "$BIND_IP" && "$BIND_IP" =~ ^[0-9a-fA-F:\.]+$ ]]; then
|
|||||||
log "$MODULE_NAME" "INFO " "底层路由锁定: 绑定 IPv4 出口及协议 ($BIND_IP)"
|
log "$MODULE_NAME" "INFO " "底层路由锁定: 绑定 IPv4 出口及协议 ($BIND_IP)"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# --- [行为循环模拟] ---
|
# --- [行为循环模拟] ---
|
||||||
for ((i=1; i<=TOTAL_ACTIONS; i++)); do
|
for ((i=1; i<=TOTAL_ACTIONS; i++)); do
|
||||||
|
|||||||
@@ -99,6 +99,12 @@ CURL_BIND_OPT=""
|
|||||||
DYNAMIC_IP_PREF="-${IP_PREF:-4}" # 默认提取用户配置
|
DYNAMIC_IP_PREF="-${IP_PREF:-4}" # 默认提取用户配置
|
||||||
|
|
||||||
if [[ -n "$BIND_IP" && "$BIND_IP" =~ ^[0-9a-fA-F:\.]+$ ]]; then
|
if [[ -n "$BIND_IP" && "$BIND_IP" =~ ^[0-9a-fA-F:\.]+$ ]]; then
|
||||||
|
# [v3.6.3 容错层补丁] 探测物理网卡/虚拟 IP 存活状态
|
||||||
|
RAW_BIND_IP=$(echo "$BIND_IP" | tr -d '[]')
|
||||||
|
if ! ip addr show 2>/dev/null | grep -qw "$RAW_BIND_IP"; then
|
||||||
|
log_msg "WARN " "检测到配置的出口 IP ($RAW_BIND_IP) 已丢失,自动降级为系统默认路由出网!"
|
||||||
|
CURL_BIND_OPT=""
|
||||||
|
else
|
||||||
CURL_BIND_OPT="--interface $BIND_IP"
|
CURL_BIND_OPT="--interface $BIND_IP"
|
||||||
# 智能探测:带冒号为 V6,带点号为 V4
|
# 智能探测:带冒号为 V6,带点号为 V4
|
||||||
if [[ "$BIND_IP" == *":"* ]]; then
|
if [[ "$BIND_IP" == *":"* ]]; then
|
||||||
@@ -109,6 +115,7 @@ if [[ -n "$BIND_IP" && "$BIND_IP" =~ ^[0-9a-fA-F:\.]+$ ]]; then
|
|||||||
log_msg "INFO " "底层路由锁定: 绑定 IPv4 出口及协议 ($BIND_IP)"
|
log_msg "INFO " "底层路由锁定: 绑定 IPv4 出口及协议 ($BIND_IP)"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
STEP_COUNT=$((RANDOM % 4 + 3))
|
STEP_COUNT=$((RANDOM % 4 + 3))
|
||||||
SUCCESS_INJECT=0
|
SUCCESS_INJECT=0
|
||||||
|
|||||||
@@ -31,6 +31,11 @@ CURL_BIND_OPT=""
|
|||||||
DYNAMIC_IP_PREF="-${IP_PREF:-4}"
|
DYNAMIC_IP_PREF="-${IP_PREF:-4}"
|
||||||
|
|
||||||
if [[ -n "$BIND_IP" && "$BIND_IP" =~ ^[0-9a-fA-F:\.]+$ ]]; then
|
if [[ -n "$BIND_IP" && "$BIND_IP" =~ ^[0-9a-fA-F:\.]+$ ]]; then
|
||||||
|
# [v3.6.3 容错层补丁] 探测物理网卡/虚拟 IP 存活状态
|
||||||
|
RAW_BIND_IP=$(echo "$BIND_IP" | tr -d '[]')
|
||||||
|
if ! ip addr show 2>/dev/null | grep -qw "$RAW_BIND_IP"; then
|
||||||
|
CURL_BIND_OPT=""
|
||||||
|
else
|
||||||
CURL_BIND_OPT="--interface $BIND_IP"
|
CURL_BIND_OPT="--interface $BIND_IP"
|
||||||
if [[ "$BIND_IP" == *":"* ]]; then
|
if [[ "$BIND_IP" == *":"* ]]; then
|
||||||
DYNAMIC_IP_PREF="-6"
|
DYNAMIC_IP_PREF="-6"
|
||||||
@@ -38,6 +43,7 @@ if [[ -n "$BIND_IP" && "$BIND_IP" =~ ^[0-9a-fA-F:\.]+$ ]]; then
|
|||||||
DYNAMIC_IP_PREF="-4"
|
DYNAMIC_IP_PREF="-4"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# 多节点容灾探测出口 IP (注入协议自适应)
|
# 多节点容灾探测出口 IP (注入协议自适应)
|
||||||
CURRENT_IP=$( (curl $CURL_BIND_OPT $DYNAMIC_IP_PREF -s -m 5 api.ip.sb/ip || curl $CURL_BIND_OPT $DYNAMIC_IP_PREF -s -m 5 ifconfig.me) 2>/dev/null | tr -d '[:space:]' )
|
CURRENT_IP=$( (curl $CURL_BIND_OPT $DYNAMIC_IP_PREF -s -m 5 api.ip.sb/ip || curl $CURL_BIND_OPT $DYNAMIC_IP_PREF -s -m 5 ifconfig.me) 2>/dev/null | tr -d '[:space:]' )
|
||||||
|
|||||||
@@ -42,8 +42,13 @@ CURL_CMD="curl -${IP_PREF:-4} -sL"
|
|||||||
if [ -n "$BIND_IP" ]; then
|
if [ -n "$BIND_IP" ]; then
|
||||||
# curl 的 --interface 参数不支持带方括号的 IPv6 地址,必须强行脱壳
|
# curl 的 --interface 参数不支持带方括号的 IPv6 地址,必须强行脱壳
|
||||||
RAW_BIND_IP=$(echo "$BIND_IP" | tr -d '[]')
|
RAW_BIND_IP=$(echo "$BIND_IP" | tr -d '[]')
|
||||||
|
# [v3.6.3 容错层补丁] 探测网卡存活状态,防止 IP 漂移导致永久断网
|
||||||
|
if ! ip addr show 2>/dev/null | grep -qw "$RAW_BIND_IP"; then
|
||||||
|
log "Updater" "WARN " "检测到绑定的出口 IP ($RAW_BIND_IP) 已丢失,自动退回默认路由!"
|
||||||
|
else
|
||||||
CURL_CMD="$CURL_CMD --interface $RAW_BIND_IP"
|
CURL_CMD="$CURL_CMD --interface $RAW_BIND_IP"
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# ==========================================================
|
# ==========================================================
|
||||||
# 3. 容灾机制拉取 UA 指纹池 (V3.3.0 引入 30 天错峰防惊群逻辑)
|
# 3. 容灾机制拉取 UA 指纹池 (V3.3.0 引入 30 天错峰防惊群逻辑)
|
||||||
|
|||||||
Reference in New Issue
Block a user