- sing-box 单进程 bind 数据网卡 - mixed HTTP+SOCKS + 中文静态面板 - install.sh 支持 curl | sudo bash - 512MB 友好 MemoryMax 默认 96MB
65 lines
2.0 KiB
Bash
Executable File
65 lines
2.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
set -euo pipefail
|
||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||
# shellcheck source=lib.sh
|
||
source "$ROOT_DIR/scripts/lib.sh"
|
||
|
||
if [[ -f "${CONFIG_FILE:-$ROOT_DIR/config/settings.conf}" ]]; then
|
||
load_config
|
||
elif [[ -f "$ROOT_DIR/generated/runtime.env" ]]; then
|
||
set -a
|
||
# shellcheck disable=SC1091
|
||
source "$ROOT_DIR/generated/runtime.env"
|
||
set +a
|
||
else
|
||
load_config
|
||
fi
|
||
|
||
URL="${EGRESS_CHECK_URL:-https://ifconfig.me}"
|
||
HOST="$PROXY_LISTEN_HOST"
|
||
if [[ "$HOST" == "0.0.0.0" || "$HOST" == "::" || -z "$HOST" ]]; then
|
||
HOST="127.0.0.1"
|
||
fi
|
||
PORT="${PROXY_MIXED_PORT:-7890}"
|
||
|
||
echo "========== 接口 =========="
|
||
"$ROOT_DIR/scripts/detect.sh" || true
|
||
echo
|
||
|
||
echo "========== 默认出口(不走代理,通常是 WiFi) =========="
|
||
direct_ip="$(curl -fsS --max-time 15 "$URL" || echo FAIL)"
|
||
echo "direct: $direct_ip"
|
||
echo
|
||
|
||
echo "========== 代理出口(应是数据流量公网 IP) =========="
|
||
auth=()
|
||
if [[ -n "${PROXY_USER:-}" ]]; then
|
||
auth=(--proxy-user "${PROXY_USER}:${PROXY_PASS}")
|
||
fi
|
||
socks_ip="$(curl -fsS --max-time 20 "${auth[@]}" --socks5-hostname "${HOST}:${PORT}" "$URL" || echo FAIL)"
|
||
echo "socks : $socks_ip"
|
||
http_ip="$(curl -fsS --max-time 20 "${auth[@]}" -x "http://${HOST}:${PORT}" "$URL" || echo FAIL)"
|
||
echo "http : $http_ip"
|
||
echo
|
||
|
||
if [[ "$direct_ip" == "FAIL" || "$socks_ip" == "FAIL" ]]; then
|
||
err "探测失败(服务/数据网是否在线? journalctl -u cellular-proxy -e)"
|
||
exit 1
|
||
fi
|
||
|
||
if [[ "$direct_ip" == "$socks_ip" ]]; then
|
||
warn "代理与直连公网 IP 相同 — 可能未绑到数据网卡,或数据与 WiFi 同出口"
|
||
warn "请检查 CELLULAR_IFACE / 数据网是否 up / bind_interface"
|
||
exit 2
|
||
fi
|
||
|
||
if [[ -n "${EXPECTED_CELLULAR_PUBLIC_IP:-}" && "$socks_ip" != "$EXPECTED_CELLULAR_PUBLIC_IP" ]]; then
|
||
err "代理出口 $socks_ip 与 EXPECTED_CELLULAR_PUBLIC_IP=$EXPECTED_CELLULAR_PUBLIC_IP 不一致"
|
||
exit 3
|
||
fi
|
||
|
||
info "OK: 直连(WiFi)=$direct_ip 代理(数据)=$socks_ip"
|
||
echo
|
||
echo "局域网: curl --socks5-hostname <LAN-IP>:${PORT} $URL"
|
||
echo "面板: http://<LAN-IP>:${PANEL_PORT}/"
|