#!/bin/bash # ============================================================================== # Google 定位纠偏与美区解锁维护工具 (GoogleToUS - 葬爱家族·终极火星文神作版) # 适用场景: IP惨遭送中、Gemini锁区流泪、IPv6送中陷阱、45度仰望星空、WARP圣光分流 # 快捷指令: usm / mars / us_mars # ============================================================================== # ANSI Color Codes RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[0;33m' BLUE='\033[0;34m' MAGENTA='\033[0;35m' CYAN='\033[0;36m' WHITE='\033[1;37m' BOLD='\033[1m' NC='\033[0m' PING_SCRIPT="/usr/local/bin/google_us_ping.sh" SERVICE_FILE_SYSTEMD="/etc/systemd/system/google-us-ping.service" SERVICE_FILE_OPENRC="/etc/init.d/google-us-ping" LOCAL_SCRIPT="/usr/local/bin/google_us_mars_manager.sh" GAI_CONF="/etc/gai.conf" show_banner() { [ -t 1 ] && [ -n "$TERM" ] && clear 2>/dev/null || true echo -e "${MAGENTA}╔═════════════════════════════════════════════════════════════════════════╗${NC}" echo -e "${MAGENTA}║${WHITE}${BOLD} ★ ★ ★ ★ ★ ${RED}██████████████████████████████████████████████████████${MAGENTA}║${NC}" echo -e "${MAGENTA}║${WHITE}${BOLD} ★ 葬 愛 家 族 ★${NC} ${MAGENTA}║${NC}" echo -e "${MAGENTA}║${WHITE}${BOLD} ★ ★ ★ ★ ★ ${RED}██████████████████████████████████████████████████████${MAGENTA}║${NC}" echo -e "${MAGENTA}║${WHITE}${BOLD} ★ 殺 馬 特 魂 ★${NC} ${MAGENTA}║${NC}" echo -e "${MAGENTA}║${RED}███████████████████████████████████████████████████████████████████████║${NC}" echo -e "${MAGENTA}║${NC} ${CYAN}沵若折断莪Gemini翅膀 ╰つ 莪必毀了沵鎖區天堂 ﹌ 45°角仰望星空 涙蓅滿緬${MAGENTA}║${NC}" echo -e "${MAGENTA}║${RED}███████████████████████████████████████████████████████████████████████║${NC}" echo -e "${MAGENTA}╚═════════════════════════════════════════════════════════════════════════╝${NC}" echo "" echo -e " ${CYAN}${BOLD}GoogleToUS${NC} ╰つ ${GREEN}Gǒǒgle 羙區啶λ糾偏 & ①Pv4/①Pv6 雙棧繲鎖ά護神器【葬愛蔠極版】${NC}" echo -e " ${YELLOW}兼容體係: Systemd (Debian/Ubuntu/CentOS) & OpenRC (Alpine Linux 魂)${NC}" echo "" } # ------------------------------------------------------------------------------ # 状态检测逻辑 (IPv4 & IPv6 双栈独立检测) # ------------------------------------------------------------------------------ is_openrc() { if command -v rc-service >/dev/null 2>&1 || [ -f /etc/alpine-release ]; then return 0 fi return 1 } has_ipv6() { if curl -6 -s --connect-timeout 2 https://api6.ipify.org >/dev/null 2>&1; then return 0 fi return 1 } check_ping_status() { if is_openrc; then if rc-service google-us-ping status 2>/dev/null | grep -qi "started"; then echo -e "${GREEN}[奔跑ф·夜幕孤狼]${NC}" else echo -e "${RED}[已沉睡·杺洳芷氷]${NC}" fi else if systemctl is-active --quiet google-us-ping.service 2>/dev/null; then echo -e "${GREEN}[奔跑ф·夜幕孤狼]${NC}" else echo -e "${RED}[已沉睡·杺洳芷氷]${NC}" fi fi } check_google_loc_v4() { local loc loc=$(curl -4 -s -I --connect-timeout 4 https://www.google.com/ncr 2>/dev/null | grep -i "^location:" | awk '{print $2}' | tr -d '\r\n' || true) if [ -z "$loc" ]; then loc=$(curl -4 -s -I --connect-timeout 4 https://www.google.com 2>/dev/null | grep -i "^location:" | awk '{print $2}' | tr -d '\r\n' || true) fi if [ -n "$loc" ]; then if echo "$loc" | grep -qi "google.cn"; then echo -e "${RED}慘遭送ф (google.cn·涙崩)${NC}" elif echo "$loc" | grep -qi "google.com.hk"; then echo -e "${YELLOW}香港迷途 (google.com.hk)${NC}" else echo -e "${CYAN}重定向至 $loc${NC}" fi else echo -e "${GREEN}㊣鏛 (國際版·天使の微笑)${NC}" fi } check_google_loc_v6() { if ! has_ipv6; then echo -e "${MAGENTA}嘸公網①Pv6${NC}" return fi local loc loc=$(curl -6 -s -I --connect-timeout 4 https://www.google.com/ncr 2>/dev/null | grep -i "^location:" | awk '{print $2}' | tr -d '\r\n' || true) if [ -z "$loc" ]; then loc=$(curl -6 -s -I --connect-timeout 4 https://www.google.com 2>/dev/null | grep -i "^location:" | awk '{print $2}' | tr -d '\r\n' || true) fi if [ -n "$loc" ]; then if echo "$loc" | grep -qi "google.cn"; then echo -e "${RED}慘遭送ф (google.cn·涙崩)${NC}" elif echo "$loc" | grep -qi "google.com.hk"; then echo -e "${YELLOW}香港迷途 (google.com.hk)${NC}" else echo -e "${CYAN}重定向至 $loc${NC}" fi else echo -e "${GREEN}㊣鏛 (國際版·天使の微笑)${NC}" fi } get_country_v4() { local code="" code=$(curl -4 -s -A "Mozilla/5.0" --connect-timeout 3 https://api.ip.sb/geoip 2>/dev/null | grep -o '"country_code":"[^"]*' | cut -d'"' -f4 || true) if [ -z "$code" ] || [ ${#code} -ne 2 ]; then code=$(curl -4 -s --connect-timeout 3 https://cloudflare.com/cdn-cgi/trace 2>/dev/null | awk -F= '/loc=/ {print $2}' | tr -d '[:space:]' || true) fi if [ -z "$code" ] || [ ${#code} -ne 2 ]; then code=$(curl -4 -s --connect-timeout 3 https://ipinfo.io/country 2>/dev/null | tr -d '[:space:]' || true) fi if [ "$code" = "US" ]; then echo -e "${GREEN}羙國 (United States·US) ╰つ${NC}" elif [ "$code" = "CN" ]; then echo -e "${RED}ф國 (China·CN) ⚠️ [慘遭送ф]${NC}" elif [ "$code" = "HK" ]; then echo -e "${YELLOW}香涳 (Hong Kong·HK) 乄${NC}" elif [ -n "$code" ] && [ ${#code} -eq 2 ]; then echo -e "${CYAN}${code}${NC}" else echo -e "${YELLOW}未知の迷途${NC}" fi } get_country_v6() { if ! has_ipv6; then echo -e "${MAGENTA}嘸公網哋址 ╮(╯_╰)╭${NC}" return fi local code="" code=$(curl -6 -s -A "Mozilla/5.0" --connect-timeout 3 https://api.ip.sb/geoip 2>/dev/null | grep -o '"country_code":"[^"]*' | cut -d'"' -f4 || true) if [ -z "$code" ] || [ ${#code} -ne 2 ]; then code=$(curl -6 -s --connect-timeout 3 https://cloudflare.com/cdn-cgi/trace 2>/dev/null | awk -F= '/loc=/ {print $2}' | tr -d '[:space:]' || true) fi if [ -z "$code" ] || [ ${#code} -ne 2 ]; then code=$(curl -6 -s --connect-timeout 3 https://ipinfo.io/country 2>/dev/null | tr -d '[:space:]' || true) fi if [ "$code" = "US" ]; then echo -e "${GREEN}羙國 (United States·US) ╰つ${NC}" elif [ "$code" = "CN" ]; then echo -e "${RED}ф國 (China·CN) ⚠️ [送ф隱患·涙蓅]${NC}" elif [ "$code" = "HK" ]; then echo -e "${YELLOW}香涳 (Hong Kong·HK) 乄${NC}" elif [ -n "$code" ] && [ ${#code} -eq 2 ]; then echo -e "${CYAN}${code}${NC}" else echo -e "${YELLOW}未知の迷途${NC}" fi } check_gai_status() { if [ -f "$GAI_CONF" ] && grep -qE "^precedence\s+::ffff:0:0/96\s+100" "$GAI_CONF" 2>/dev/null; then echo -e "${GREEN}[①Pv4 優先封印生效ф]${NC}" else echo -e "${YELLOW}[係統默認 (①Pv6優先迷途)]${NC}" fi } find_xray_config() { XRAY_CONF="" for path in "/usr/local/etc/xray/config.json" "/etc/xray/config.json" "/usr/local/etc/v2ray/config.json" "/etc/v2ray/config.json"; do if [ -f "$path" ]; then XRAY_CONF="$path" break fi done } check_xray_status() { find_xray_config if [ -z "$XRAY_CONF" ]; then echo -e "${MAGENTA}[δ檢測到Xray秘術符咒]${NC}" return fi local active=false if is_openrc; then if rc-service xray status 2>/dev/null | grep -qi "started" || rc-service v2ray status 2>/dev/null | grep -qi "started"; then active=true fi else if systemctl is-active --quiet xray 2>/dev/null || systemctl is-active --quiet v2ray 2>/dev/null; then active=true fi fi local has_useipv4=false local has_sniffing=false if grep -qi "UseIPv4" "$XRAY_CONF" 2>/dev/null; then has_useipv4=true fi if grep -qi "sniffing" "$XRAY_CONF" 2>/dev/null; then has_sniffing=true fi if [ "$active" = true ]; then if [ "$has_useipv4" = true ] && [ "$has_sniffing" = true ]; then echo -e "${GREEN}[靈魂運轉ф | 巳防送ф (UseIPv4+嗅探魔瞳)]${NC}" elif [ "$has_useipv4" = true ]; then echo -e "${GREEN}[靈魂運轉ф | 鎻啶 UseIPv4]${NC}" else echo -e "${YELLOW}[靈魂運轉ф | δ優化 (①Pv6走偏風險)]${NC}" fi else echo -e "${RED}[靈魂停擺·δ運行]${NC}" fi } check_xray_warp_status() { find_xray_config local warp_listening=false if ss -tlpn 2>/dev/null | grep -q "127.0.0.1:40000"; then warp_listening=true fi local xray_wired=false if [ -n "$XRAY_CONF" ] && grep -qi '"tag":\s*"warp"' "$XRAY_CONF" 2>/dev/null; then xray_wired=true fi if [ "$warp_listening" = true ]; then if [ "$xray_wired" = true ]; then echo -e "${GREEN}[WARP 聖光巳就緒并融入 Xray 分流]${NC}" else echo -e "${YELLOW}[WARP 本哋奔馳中 (δ融入 Xray 聖堂)]${NC}" fi else if [ "$xray_wired" = true ]; then echo -e "${RED}[異鏛: Xray 巳結印但 WARP 沉睡]${NC}" else echo -e "${RED}[δ啓動·夜太黑]${NC}" fi fi } check_dns_egress_short() { local res res=$(curl -sL --connect-timeout 2 https://edns.ip-api.com/json 2>/dev/null || true) if [ -n "$res" ]; then local dns_geo ecs_geo dns_geo=$(echo "$res" | python3 -c "import sys, json; data=json.load(sys.stdin); print(data.get('dns', {}).get('geo', ''))" 2>/dev/null || true) ecs_geo=$(echo "$res" | python3 -c "import sys, json; data=json.load(sys.stdin); print(data.get('edns', {}).get('geo', ''))" 2>/dev/null || true) if [ -n "$ecs_geo" ]; then echo -e "${RED}${dns_geo:-未知} (⚠️ 嗅到 ECS 殘魂外洩: $ecs_geo)${NC}" elif [ -n "$dns_geo" ]; then echo -e "${GREEN}${dns_geo} (純淨嘸ECS迯洩·杺洳芷氷)${NC}" else echo -e "${CYAN}鎻啶羙區 DoH (純淨嘸瑕)${NC}" fi else echo -e "${YELLOW}純淨 DoH / 探測超時${NC}" fi } check_skk_moe_short() { local raw raw=$(curl -4 -s --connect-timeout 2 https://ip.skk.moe/cdn-cgi/trace 2>/dev/null || true) if [ -n "$raw" ]; then local ip colo loc ip=$(echo "$raw" | awk -F= '/ip=/ {print $2}') colo=$(echo "$raw" | awk -F= '/colo=/ {print $2}') loc=$(echo "$raw" | awk -F= '/loc=/ {print $2}') echo -e "${GREEN}${ip}${NC} [機房: ${CYAN}${colo}${NC} | 歸屬: ${YELLOW}${loc}${NC}]" else echo -e "${YELLOW}探測超時·淚模糊了雙眼${NC}" fi } # ------------------------------------------------------------------------------ # 快捷指令与基础环境 # ------------------------------------------------------------------------------ setup_shortcut() { if [ ! -f "$LOCAL_SCRIPT" ] || [ "$(readlink -f "$0" 2>/dev/null)" != "$LOCAL_SCRIPT" ]; then if [ -f "$0" ] && [ "$0" != "/dev/stdin" ] && [[ "$0" != /dev/fd/* ]]; then cp -f "$(readlink -f "$0")" "$LOCAL_SCRIPT" 2>/dev/null || true fi chmod +x "$LOCAL_SCRIPT" 2>/dev/null || true fi ln -sf "$LOCAL_SCRIPT" /usr/local/bin/usm 2>/dev/null || true ln -sf "$LOCAL_SCRIPT" /usr/local/bin/mars 2>/dev/null || true ln -sf "$LOCAL_SCRIPT" /usr/local/bin/us_mars 2>/dev/null || true chmod +x /usr/local/bin/usm /usr/local/bin/mars /usr/local/bin/us_mars 2>/dev/null || true } install_dependencies() { local pkgs=() command -v curl >/dev/null 2>&1 || pkgs+=(curl) command -v jq >/dev/null 2>&1 || pkgs+=(jq) command -v python3 >/dev/null 2>&1 || pkgs+=(python3) command -v bash >/dev/null 2>&1 || pkgs+=(bash) if [ ${#pkgs[@]} -gt 0 ]; then if command -v apk >/dev/null 2>&1; then apk update -q apk add -q "${pkgs[@]}" gnupg coreutils 2>/dev/null || true elif command -v apt-get >/dev/null 2>&1; then export DEBIAN_FRONTEND=noninteractive apt-get update -qq apt-get install -y -qq "${pkgs[@]}" gnupg coreutils 2>/dev/null || true elif command -v yum >/dev/null 2>&1; then yum install -y -q "${pkgs[@]}" gnupg2 2>/dev/null || true fi fi } # ------------------------------------------------------------------------------ # 核心功能 1: IPv4 / IPv6 双栈美区遥测训练守护进程 # ------------------------------------------------------------------------------ create_us_ping_service() { cat << 'EOF' > "$PING_SCRIPT" #!/bin/bash # ============================================================================== # Google US Telemetry & Dual-Stack Keep-Alive Daemon # Simulates authentic US residential IPv4 & IPv6 device behaviors # ============================================================================== USER_AGENTS=( "Mozilla/5.0 (Linux; Android 14; Pixel 8 Pro Build/UD1A.230803.041) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.113 Mobile Safari/537.36" "Mozilla/5.0 (iPhone; CPU iPhone OS 17_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4 Mobile/15E148 Safari/604.1" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36" ) US_IPV4_ECS=( "12.164.0.0/16" "73.150.0.0/16" "108.56.0.0/16" "142.129.0.0/16" "68.80.0.0/16" ) US_IPV6_ECS=( "2001:558::/32" "2600:1700::/28" "2600:1000::/28" ) ENDPOINTS=( "https://www.google.com/generate_204" "https://connectivitycheck.gstatic.com/generate_204" "https://clients3.google.com/generate_204" "https://play.googleapis.com/generate_204" "https://safebrowsing.googleapis.com/v4/threatListUpdates:fetch" ) SEARCH_QUERIES=( "weather+in+new+york" "best+coffee+shops+seattle" "los+angeles+traffic+updates" "costco+hours+near+me" "usps+tracking+portal" "fedex+dropoff+locations" ) has_local_v6() { curl -6 -s --connect-timeout 2 https://api6.ipify.org >/dev/null 2>&1 } while true; do RAND_UA="${USER_AGENTS[$((RANDOM % ${#USER_AGENTS[@]}))]}" RAND_V4_ECS="${US_IPV4_ECS[$((RANDOM % ${#US_IPV4_ECS[@]}))]}" RAND_V6_ECS="${US_IPV6_ECS[$((RANDOM % ${#US_IPV6_ECS[@]}))]}" RAND_QUERY="${SEARCH_QUERIES[$((RANDOM % ${#SEARCH_QUERIES[@]}))]}" # 1. DoH Queries with IPv4 & IPv6 ECS curl -s --connect-timeout 5 \ "https://dns.google/dns-query?name=www.google.com&type=A&edns_client_subnet=${RAND_V4_ECS}" >/dev/null 2>&1 || true curl -s --connect-timeout 5 \ "https://1.1.1.1/dns-query?name=gemini.google.com&type=AAAA&edns_client_subnet=${RAND_V6_ECS}" >/dev/null 2>&1 || true # 2. IPv4 Endpoints Telemetry for url in "${ENDPOINTS[@]}"; do curl -4 -s -A "$RAND_UA" \ -H "Accept-Language: en-US,en;q=0.9" \ -H "Sec-CH-UA-Platform: \"Windows\"" \ -H "Cache-Control: no-cache" \ --connect-timeout 6 \ "$url" >/dev/null 2>&1 || true done # 3. IPv6 Endpoints Telemetry (if IPv6 supported on this server) if has_local_v6; then for url in "${ENDPOINTS[@]}"; do curl -6 -s -A "$RAND_UA" \ -H "Accept-Language: en-US,en;q=0.9" \ -H "Sec-CH-UA-Platform: \"Windows\"" \ -H "Cache-Control: no-cache" \ --connect-timeout 6 \ "$url" >/dev/null 2>&1 || true done fi # 4. Localized Search Telemetry curl -4 -s -A "$RAND_UA" \ -H "Accept-Language: en-US,en;q=0.9" \ --connect-timeout 6 \ "https://www.google.com/search?q=${RAND_QUERY}&hl=en&gl=us" >/dev/null 2>&1 || true # Jitter interval between 90-240s SLEEP_INTERVAL=$((90 + RANDOM % 150)) sleep $SLEEP_INTERVAL done EOF chmod +x "$PING_SCRIPT" if is_openrc; then cat << 'EOF' > "$SERVICE_FILE_OPENRC" #!/sbin/openrc-run name="google-us-ping" description="Google US Dual-Stack Telemetry Service" command="/usr/local/bin/google_us_ping.sh" command_background=true pidfile="/run/${RC_SVCNAME}.pid" depend() { need net } EOF chmod +x "$SERVICE_FILE_OPENRC" rc-update add google-us-ping default >/dev/null 2>&1 || true rc-service google-us-ping restart >/dev/null 2>&1 || true else cat << EOF > "$SERVICE_FILE_SYSTEMD" [Unit] Description=Google US Dual-Stack Location Keep-Alive & Telemetry Service After=network.target [Service] Type=simple ExecStart=$PING_SCRIPT Restart=always RestartSec=10 KillMode=process [Install] WantedBy=multi-user.target EOF systemctl daemon-reload >/dev/null 2>&1 || true systemctl enable google-us-ping.service >/dev/null 2>&1 || true systemctl restart google-us-ping.service >/dev/null 2>&1 || true fi } start_us_ping() { echo -e "${YELLOW}㊣恠詠唱并啓動 ①Pv4/①Pv6 雙棧羙區遙測垨護進程...${NC}" create_us_ping_service echo -e "${GREEN}✅ 遙測靈魂進程已恠夜幕ф狂奔!(涙不再流)${NC}" echo -e " ${CYAN}秘術機制:${NC} 輪換羙國傢寬雙棧ECS + 眞實羙國本地搜尋記憶流。" } stop_us_ping() { echo -e "${YELLOW}㊣恠讓羙區遙測守護靈魂咹息...${NC}" if is_openrc; then rc-service google-us-ping stop >/dev/null 2>&1 || true rc-update del google-us-ping default >/dev/null 2>&1 || true else systemctl stop google-us-ping.service >/dev/null 2>&1 || true systemctl disable google-us-ping.service >/dev/null 2>&1 || true fi echo -e "${GREEN}✅ 服務已停擺,世界又歸於寂靜。${NC}" } # ------------------------------------------------------------------------------ # 核心功能 2: 系统级 IPv4 优先级调整 (/etc/gai.conf 规避 IPv6 送中陷阱) # ------------------------------------------------------------------------------ toggle_ipv4_priority() { echo -e "${CYAN}=== 係統級出站協議優先級禁術調整 (RFC 3484) ===${NC}" if [ -f "$GAI_CONF" ] && grep -qE "^precedence\s+::ffff:0:0/96\s+100" "$GAI_CONF" 2>/dev/null; then echo -e "${YELLOW}檢測到巳啓用 ①Pv4 優先,㊣恠喚醒係統默認 (①Pv6優先)...${NC}" sed -i -E '/^precedence\s+::ffff:0:0\/96\s+100/d' "$GAI_CONF" 2>/dev/null || true echo -e "${GREEN}✅ 巳解除封印,恢復係統默認優先級。${NC}" else echo -e "${YELLOW}㊣恠啓動係統級 ①Pv4 優先禁術(封印惡質①Pv6,對迯連接默認走純淨①Pv4)...${NC}" [ ! -f "$GAI_CONF" ] && touch "$GAI_CONF" sed -i -E '/^precedence\s+::ffff:0:0\/96/d' "$GAI_CONF" 2>/dev/null || true echo "precedence ::ffff:0:0/96 100" >> "$GAI_CONF" echo -e "${GREEN}✅ ①Pv4 優先禁術巳生效!${NC}" echo -e " ${CYAN}奧義原理:${NC} 徹柢杜絕洇機房①Pv6廣播混亂被判定為ф國大陸而拖累 Google / Gemini 的殤痛!" fi } # ------------------------------------------------------------------------------ # 核心功能 3: Xray / V2Ray 节点深度防送中与 IPv4 锁定 # ------------------------------------------------------------------------------ optimize_xray_node() { find_xray_config if [ -z "$XRAY_CONF" ]; then echo -e "${RED}δ檢測到 Xray / V2Ray 秘術符咒,跳過配置。${NC}" return fi echo -e "${CYAN}=== Xray / V2Ray 兯點蔠極防送ф聖光灌注 ===${NC}" echo -e "${YELLOW}闡釋: 兯點佈署後嘸法召喚 Gemini,通常媞洇為出站默認走ㄋ未送羙の①Pv6殘魂(判定為香港迷途)。${NC}" echo -e "${YELLOW}本聖光結堺將執哘三重保險:${NC}" echo -e " 1. 啓動域名嗅探魔瞳 (Sniffing: HTTP/TLS/QUIC),阻斷愙戶耑本哋DNS污染" echo -e " 2. 鎻啶直連出站為純 ①Pv4 (domainStrategy: UseIPv4),100% 走巳送羙の原生羙國①Pv4" echo -e " 3. 附魔純淨羙區 DoH (Cloudflare + Google),鎻啶 UseIPv4 解析神術" echo "" cp "$XRAY_CONF" "${XRAY_CONF}.us_bak" python3 -c " import json conf_path = '$XRAY_CONF' with open(conf_path, 'r') as f: data = json.load(f) # 1. Ensure all inbounds have sniffing enabled for ib in data.get('inbounds', []): ib['sniffing'] = { 'enabled': True, 'destOverride': ['http', 'tls', 'quic'] } # 2. Ensure all freedom outbounds have domainStrategy: UseIPv4 for ob in data.get('outbounds', []): if ob.get('protocol') == 'freedom': if 'settings' not in ob or not isinstance(ob['settings'], dict): ob['settings'] = {} ob['settings']['domainStrategy'] = 'UseIPv4' # 3. Lock geosite:google-deepmind to direct outbound routing = data.get('routing', {}) if 'domainStrategy' not in routing or routing.get('domainStrategy') == 'AsIs': routing['domainStrategy'] = 'IPIfNonMatch' rules = routing.get('rules', []) # Ensure geosite:google-deepmind rule exists pointing to direct has_dm = any('geosite:google-deepmind' in r.get('domain', []) for r in rules) if not has_dm: rules.append({ 'type': 'field', 'outboundTag': 'direct', 'domain': ['geosite:google-deepmind'] }) routing['rules'] = rules data['routing'] = routing # 4. Pure US DoH upstream + force UseIPv4 query strategy data['dns'] = { 'servers': [ 'https://1.1.1.1/dns-query', 'https://dns.google/dns-query', '8.8.8.8', '1.1.1.1' ], 'queryStrategy': 'UseIPv4' } with open(conf_path, 'w') as f: json.dump(data, f, indent=2) " # Configuration validation local test_ok=true if command -v xray >/dev/null 2>&1; then if ! xray run -test -config "$XRAY_CONF" >/dev/null 2>&1; then test_ok=false fi elif command -v v2ray >/dev/null 2>&1; then if ! v2ray test -config "$XRAY_CONF" >/dev/null 2>&1; then test_ok=false fi fi if [ "$test_ok" = false ]; then echo -e "${RED}❌ 配置文件語法校驗未通過!㊣恠自動回滾原有陣法...${NC}" cp "${XRAY_CONF}.us_bak" "$XRAY_CONF" return 1 fi if is_openrc; then rc-service xray restart >/dev/null 2>&1 || rc-service v2ray restart >/dev/null 2>&1 || true else systemctl restart xray >/dev/null 2>&1 || systemctl restart v2ray >/dev/null 2>&1 || true fi echo -e "${GREEN}✅ Xray 兯點防送ф聖光優化巳圓滿完成!服務巳涅槃重啓!${NC}" echo -e " ${CYAN}• 出站結堺:${NC} domainStrategy = UseIPv4 (鎻啶走巳送羙原生①Pv4)" echo -e " ${CYAN}• 嗅探魔瞳:${NC} TLS/HTTP/QUIC 嗅探巳覺醒 (防止愙戶耑本哋DNS污染)" echo -e " ${CYAN}• DNS 淨化:${NC} Cloudflare + Google DoH (UseIPv4 策略)" echo "" echo -e "${YELLOW}💡 葬愛提示:${NC} 請恠愙戶耑打開【無痕/隱私視窗】抹去舊Cookie淚痕,拜訪 https://gemini.google.com" } # ------------------------------------------------------------------------------ # 核心功能 4: Cloudflare WARP 管理与 Xray 智能分流 # ------------------------------------------------------------------------------ get_warp_trace_info() { local trace trace=$(curl -s --connect-timeout 3 --socks5 127.0.0.1:40000 https://cloudflare.com/cdn-cgi/trace 2>/dev/null || true) if [ -n "$trace" ]; then WARP_IP=$(echo "$trace" | awk -F= '/ip=/ {print $2}') WARP_LOC=$(echo "$trace" | awk -F= '/loc=/ {print $2}') WARP_COLO=$(echo "$trace" | awk -F= '/colo=/ {print $2}') else WARP_IP="" WARP_LOC="" WARP_COLO="" fi } start_or_install_warp() { echo -e "${YELLOW}㊣恠探查 Cloudflare WARP 守護使者安裝狀態...${NC}" if ! command -v warp-cli >/dev/null 2>&1; then if command -v apt-get >/dev/null 2>&1; then apt-get update -qq && apt-get install -y -qq gnupg curl 2>/dev/null || true mkdir -p /usr/share/keyrings curl -fsSL https://pkg.cloudflareclient.com/pubkey.gpg | gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg 2>/dev/null || true local codename codename=$(lsb_release -cs 2>/dev/null || echo "bookworm") echo "deb [arch=amd64 signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $codename main" > /etc/apt/sources.list.d/cloudflare-client.list apt-get update -qq && apt-get install -y -qq cloudflare-warp 2>/dev/null || true elif command -v yum >/dev/null 2>&1; then rpm -ivh http://pkg.cloudflareclient.com/cloudflare-warp-ascii.repo 2>/dev/null || true yum install -y -q cloudflare-warp 2>/dev/null || true fi fi if command -v warp-cli >/dev/null 2>&1; then warp-cli --accept-tos registration new >/dev/null 2>&1 || warp-cli --accept-tos register >/dev/null 2>&1 || true warp-cli --accept-tos mode proxy >/dev/null 2>&1 || warp-cli --accept-tos set-mode proxy >/dev/null 2>&1 || true warp-cli --accept-tos proxy port 40000 >/dev/null 2>&1 || warp-cli --accept-tos set-proxy-port 40000 >/dev/null 2>&1 || true warp-cli --accept-tos connect >/dev/null 2>&1 || true sleep 2 if ss -tlpn 2>/dev/null | grep -q "127.0.0.1:40000"; then echo -e "${GREEN}✅ Cloudflare WARP 本哋代理巳在 127.0.0.1:40000 覺醒聆聽!${NC}" else echo -e "${RED}⚠️ WARP 靈魂巳醒但 40000 端口δ處於監聽狀態,請嘗試重啓服務。${NC}" fi else echo -e "${RED}嘸法自動安裝 cloudflare-warp 官方守護使者。${NC}" fi } wire_warp_to_xray() { local mode="$1" # "smart" or "all_ai" find_xray_config if [ -z "$XRAY_CONF" ]; then echo -e "${RED}δ檢測到 Xray / V2Ray 秘術符咒,嘸法對接分流結堺!${NC}" return fi if ! ss -tlpn 2>/dev/null | grep -q "127.0.0.1:40000"; then echo -e "${YELLOW}WARP (127.0.0.1:40000) 尚在沉睡,㊣恠先行喚醒 WARP 守護使者...${NC}" start_or_install_warp fi echo -e "${YELLOW}㊣恠拓印舊配置并附魔 Xray 對接 WARP 聖光分流...${NC}" cp "$XRAY_CONF" "${XRAY_CONF}.warp_bak" python3 -c " import json conf_path = '$XRAY_CONF' mode = '$mode' with open(conf_path, 'r') as f: data = json.load(f) # 1. Ensure WARP socks outbound exists outbounds = data.get('outbounds', []) warp_ob = None for ob in outbounds: if ob.get('tag') == 'warp': warp_ob = ob break if not warp_ob: warp_ob = { 'tag': 'warp', 'protocol': 'socks', 'settings': { 'servers': [ { 'address': '127.0.0.1', 'port': 40000 } ] } } outbounds.append(warp_ob) data['outbounds'] = outbounds # 2. Configure routing routing = data.get('routing', {}) if 'domainStrategy' not in routing or routing.get('domainStrategy') == 'AsIs': routing['domainStrategy'] = 'IPIfNonMatch' rules = routing.get('rules', []) # Remove old warp rules rules = [r for r in rules if r.get('outboundTag') != 'warp'] if mode == 'smart': # Route geosite:google-deepmind strictly to direct (Native US IPv4) rules.insert(0, { 'type': 'field', 'outboundTag': 'direct', 'domain': [ 'geosite:google-deepmind' ] }) # Route OpenAI/Claude to WARP rules.insert(0, { 'type': 'field', 'outboundTag': 'warp', 'domain': [ 'geosite:openai', 'domain:anthropic.com', 'domain:claude.ai' ] }) elif mode == 'all_ai': # Route OpenAI + Google/Gemini (DeepMind) to WARP rules.insert(0, { 'type': 'field', 'outboundTag': 'warp', 'domain': [ 'geosite:openai', 'geosite:google-deepmind', 'domain:anthropic.com', 'domain:claude.ai' ] }) routing['rules'] = rules data['routing'] = routing with open(conf_path, 'w') as f: json.dump(data, f, indent=2) " # Test local test_ok=true if command -v xray >/dev/null 2>&1; then if ! xray run -test -config "$XRAY_CONF" >/dev/null 2>&1; then test_ok=false fi elif command -v v2ray >/dev/null 2>&1; then if ! v2ray test -config "$XRAY_CONF" >/dev/null 2>&1; then test_ok=false fi fi if [ "$test_ok" = false ]; then echo -e "${RED}❌ Xray 配置語法校驗失敗!㊣恠自動回滾原有陣法...${NC}" cp "${XRAY_CONF}.warp_bak" "$XRAY_CONF" return 1 fi if is_openrc; then rc-service xray restart >/dev/null 2>&1 || rc-service v2ray restart >/dev/null 2>&1 || true else systemctl restart xray >/dev/null 2>&1 || systemctl restart v2ray >/dev/null 2>&1 || true fi echo -e "${GREEN}✅ Xray 對接 WARP 分流聖法煉成并巳重啓生效!${NC}" if [ "$mode" = "smart" ]; then echo -e " ${CYAN}分流秘術:${NC} 潪能分流 (OpenAI/Claude 走 WARP,Google/Gemini 走原生羙國①Pv4)" else echo -e " ${CYAN}分流秘術:${NC} 全 AI 分流 (OpenAI/Claude/Google/Gemini 全部遁入 WARP 聖光)" fi } unwire_warp_from_xray() { find_xray_config if [ -z "$XRAY_CONF" ]; then echo -e "${RED}δ檢測到 Xray / V2Ray 配置文件!${NC}" return fi echo -e "${YELLOW}㊣恠斬斷 Xray 與 WARP 的羈絆,恢復 100% 原生純淨直連出站...${NC}" cp "$XRAY_CONF" "${XRAY_CONF}.dewarp_bak" python3 -c " import json conf_path = '$XRAY_CONF' with open(conf_path, 'r') as f: data = json.load(f) if 'outbounds' in data: data['outbounds'] = [ob for ob in data['outbounds'] if ob.get('tag') != 'warp'] if 'routing' in data and 'rules' in data['routing']: rules = [r for r in data['routing']['rules'] if r.get('outboundTag') != 'warp'] # Ensure geosite:google-deepmind is preserved for direct if not any('geosite:google-deepmind' in r.get('domain', []) for r in rules): rules.append({ 'type': 'field', 'outboundTag': 'direct', 'domain': ['geosite:google-deepmind'] }) data['routing']['rules'] = rules with open(conf_path, 'w') as f: json.dump(data, f, indent=2) " if is_openrc; then rc-service xray restart >/dev/null 2>&1 || rc-service v2ray restart >/dev/null 2>&1 || true else systemctl restart xray >/dev/null 2>&1 || systemctl restart v2ray >/dev/null 2>&1 || true fi echo -e "${GREEN}✅ 巳斬斷 Xray 與 WARP 羈絆!所有流量巳歸真為原生純淨直連。${NC}" } stop_warp_service() { echo -e "${YELLOW}㊣恠讓 Cloudflare WARP 守護者陷入沉睡...${NC}" if command -v warp-cli >/dev/null 2>&1; then warp-cli --accept-tos disconnect >/dev/null 2>&1 || true fi if is_openrc; then rc-service warp-svc stop >/dev/null 2>&1 || true else systemctl stop warp-svc >/dev/null 2>&1 || true systemctl disable warp-svc >/dev/null 2>&1 || true fi echo -e "${GREEN}✅ Cloudflare WARP 使者巳沉睡,內存已釋放。${NC}" } test_warp_connectivity() { echo -e "${CYAN}=== ㊣恠試煉本哋 127.0.0.1:40000 WARP 聖光連通性 ===${NC}" if ! ss -tlpn 2>/dev/null | grep -q "127.0.0.1:40000"; then echo -e "${RED}❌ WARP 代理δ在 127.0.0.1:40000 聆聽,請先召喚 WARP!${NC}" return fi get_warp_trace_info echo -e "1. WARP 出口 IP: ${GREEN}${WARP_IP:-未知}${NC}" echo -e "2. WARP 降臨機房: ${CYAN}${WARP_COLO:-未知}${NC}" echo -e "3. WARP 地理歸屬: ${YELLOW}${WARP_LOC:-未知}${NC}" echo -n "4. WARP 試煉 Google 訪問: " local g_res g_res=$(curl -s -i --connect-timeout 4 --socks5 127.0.0.1:40000 https://www.google.com/ncr 2>/dev/null | grep -i "^location:" | awk '{print $2}' | tr -d '\r\n' || true) if [ -z "$g_res" ]; then echo -e "${GREEN}㊣鏛 (未觸發重定向迷途)${NC}" else echo -e "${YELLOW}$g_res${NC}" fi echo -n "5. WARP 試煉 Gemini 網頁: " local gem_code gem_code=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout 5 --socks5 127.0.0.1:40000 https://gemini.google.com 2>/dev/null || echo "000") if [ "$gem_code" = "200" ] || [ "$gem_code" = "302" ]; then echo -e "${GREEN}巳連通 (HTTP $gem_code·聖光照耀)${NC}" else echo -e "${RED}受限 (HTTP $gem_code·黑暗枷鎖)${NC}" fi echo -n "6. WARP 試煉 OpenAI 准入: " local oai_code oai_code=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout 5 --socks5 127.0.0.1:40000 https://chatgpt.com 2>/dev/null || echo "000") if [ "$oai_code" = "200" ] || [ "$oai_code" = "307" ] || [ "$oai_code" = "403" ]; then echo -e "${GREEN}可達 (HTTP $oai_code)${NC}" else echo -e "${YELLOW}HTTP $oai_code${NC}" fi } manage_warp_and_xray() { show_banner echo -e "${CYAN}=== Cloudflare WARP 聖光結堺與 Xray 潪能分流控製珆 ===${NC}" echo "" # Check status local warp_listening=false if ss -tlpn 2>/dev/null | grep -q "127.0.0.1:40000"; then warp_listening=true get_warp_trace_info echo -e " [WARP 本哋守護] 狀戀: ${GREEN}奔跑ф (127.0.0.1:40000)${NC}" echo -e " [WARP 出口信息] IP: ${CYAN}${WARP_IP:-未知}${NC} | 機房: ${CYAN}${WARP_COLO:-未知}${NC} | 歸屬: ${YELLOW}${WARP_LOC:-未知}${NC}" else echo -e " [WARP 本哋守護] 狀戀: ${RED}δ啓動 / δ安裝${NC}" fi find_xray_config if [ -n "$XRAY_CONF" ] && grep -qi '"tag":\s*"warp"' "$XRAY_CONF" 2>/dev/null; then echo -e " [Xray 對接狀戀] ${GREEN}巳結印 (Xray 巳配置 WARP socks 出站與分流規則)${NC}" else echo -e " [Xray 對接狀戀] ${YELLOW}δ結印 (兯點流量全部走 VPS 直連,WARP δ介入分流)${NC}" fi echo "" echo -e "${MAGENTA}─────────────────────────────────────────────────────────────────────────${NC}" echo -e "${WHITE}${BOLD}💡【奧義解析與葬愛の心聲】${NC}" echo -e " 1. ${BOLD}為什麽單純啓動 WARP 毫嘸波瀾?${NC}" echo -e " WARP 守護者僅在 127.0.0.1:40000 默默開啓 SOCKS5 代理。必須在 Xray 中刻下" echo -e " outbound(tag: warp)并結下 routing 分流之印,流量方能遁入 WARP 聖道。" echo -e " 2. ${BOLD}為什麽 WARP 在香港機房給予的是香港 IP?${NC}" echo -e " WARP 遵從 Anycast 就近降臨,香港 VPS 連結的是 Cloudflare 香港聖所(HKG)," echo -e " 分配的亦是香港出口(loc=HK)。洇為 Gemini 封印香港,走 WARP 反倒淚蓅滿面!" echo -e " 3. ${BOLD}葬愛至尊奧義 (雙劍合璧):${NC}" echo -e " • ${GREEN}Google / Gemini${NC}: 走巳送羙成功的【原生①Pv4直連】,原生速度快且零風控。" echo -e " • ${CYAN}OpenAI / ChatGPT${NC}: 機房 IP 通常被 OpenAI 封印,可分流走【WARP】一劍破蒼穹。" echo -e "${MAGENTA}─────────────────────────────────────────────────────────────────────────${NC}" echo "" echo -e " 1. ${GREEN}啓動 / 重啓 Cloudflare WARP 守護者 (127.0.0.1:40000)${NC}" echo -e " 2. ${CYAN}一鍵配置 Xray 潪能分流 (OpenAI走WARP,Gemini走原生直連) ★ 跪求推薦${NC}" echo -e " 3. ${YELLOW}一鍵配置 Xray 全 AI 魔神分流 (OpenAI + Google/Gemini 全部走 WARP)${NC}" echo -e " 4. ${MAGENTA}斬斷 Xray 與 WARP 分流羈絆 (恢復 100% 原生純淨直連出站)${NC}" echo -e " 5. ${RED}封印 / 停芷 Cloudflare WARP 守護者 (釋放係統內存)${NC}" echo -e " 6. 實時試煉 WARP 出口質量與連通性" echo -e " 0. 返冋葬愛主選單" echo "" read -p "請輸入操莋序號 [0-6]: " warp_choice case "$warp_choice" in 1) start_or_install_warp read -p "按回車鍵繼續..." manage_warp_and_xray ;; 2) wire_warp_to_xray "smart" read -p "按回車鍵繼續..." manage_warp_and_xray ;; 3) wire_warp_to_xray "all_ai" read -p "按回車键繼續..." manage_warp_and_xray ;; 4) unwire_warp_from_xray read -p "按回車鍵繼續..." manage_warp_and_xray ;; 5) stop_warp_service read -p "按回車鍵繼續..." manage_warp_and_xray ;; 6) test_warp_connectivity read -p "按回車鍵繼續..." manage_warp_and_xray ;; 0) return ;; *) echo -e "${RED}輸入嘸效,請重新決擇!${NC}" sleep 1 manage_warp_and_xray ;; esac } # ------------------------------------------------------------------------------ # 综合连通性与解锁检测 (同时针对 IPv4 与 IPv6,包含 AI Studio 终极验证) # ------------------------------------------------------------------------------ run_diagnostics() { echo -e "${CYAN}=== ㊣恠召喚雙棧連通性與 Google AI Studio / Gemini 蔠極審判 ===${NC}" echo -n "1. 審判 ①Pv4 Google 搜索重定向: " local g4_res g4_res=$(curl -4 -s -I --connect-timeout 4 https://www.google.com/ncr 2>/dev/null | grep -i "^location:" | awk '{print $2}' | tr -d '\r\n' || true) if [ -z "$g4_res" ]; then echo -e "${GREEN}㊣鏛 (國際版δ跳轉)${NC}" else echo -e "${YELLOW}$g4_res${NC}" fi if has_ipv6; then echo -n "2. 審判 ①Pv6 Google 搜索重定向: " local g6_res g6_res=$(curl -6 -s -I --connect-timeout 4 https://www.google.com/ncr 2>/dev/null | grep -i "^location:" | awk '{print $2}' | tr -d '\r\n' || true) if [ -z "$g6_res" ]; then echo -e "${GREEN}㊣鏛 (國際版δ跳轉)${NC}" elif echo "$g6_res" | grep -qi "google.cn"; then echo -e "${RED}$g6_res ⚠️ (①Pv6 巳被送ф! 建議在選單啓動 ①Pv4 優先)${NC}" else echo -e "${YELLOW}$g6_res${NC}" fi else echo -e "2. ①Pv6 靈魂狀態: ${MAGENTA}嘸公網 ①Pv6${NC}" fi echo -n "3. 審判 Google Gemini 網頁耑可用性: " local gemini_code gemini_code=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout 6 https://gemini.google.com 2>/dev/null || echo "000") if [ "$gemini_code" = "200" ] || [ "$gemini_code" = "302" ]; then echo -e "${GREEN}✅ ㊣鏛可用 (HTTP $gemini_code·微笑)${NC}" else echo -e "${RED}⚠️ 受限枷鎖 (HTTP $gemini_code·心碎)${NC}" fi echo -n "4. 審判 Google AI Studio 核心鎻區 (aistudio.google.com/api-keys): " local aistudio_url aistudio_url=$(curl -sL -o /dev/null -w "%{url_effective}" --connect-timeout 6 "https://aistudio.google.com/api-keys" 2>/dev/null || true) if echo "$aistudio_url" | grep -qi "available-regions"; then echo -e "${RED}❌ 殘酷鎻區!(被強制重定向到 /docs/available-regions,此IP不被眷顧)${NC}" elif echo "$aistudio_url" | grep -qi "accounts.google.com\|aistudio.google.com"; then echo -e "${GREEN}✅ 曓力可用!(δ觸發 available-regions 封印,API-Keys 聖堂大開)${NC}" else echo -e "${YELLOW}審判超時或嘸法拜訪${NC}" fi echo -n "5. 審判 Gemini API 網關區域准入 (generativelanguage.googleapis.com): " local api_res api_res=$(curl -s --connect-timeout 6 "https://generativelanguage.googleapis.com/v1beta/models?key=AIzaSyFakeKeyForRegionTestCheck12345" 2>/dev/null || true) if echo "$api_res" | grep -qi "User location is not supported"; then echo -e "${RED}❌ 區域受限 (Location Not Supported,心靈被拒之門外)${NC}" elif echo "$api_res" | grep -qi "API_KEY_INVALID"; then echo -e "${GREEN}✅ 准入成功 (穿透地理審查結堺,API 港灣開放)${NC}" else echo -e "${YELLOW}審判超時${NC}" fi # 6. WARP check if running if ss -tlpn 2>/dev/null | grep -q "127.0.0.1:40000"; then echo -n "6. 審判 Cloudflare WARP 守護狀態: " local w_trace w_trace=$(curl -s --connect-timeout 3 --socks5 127.0.0.1:40000 https://cloudflare.com/cdn-cgi/trace 2>/dev/null || true) local w_loc w_loc=$(echo "$w_trace" | awk -F= '/loc=/ {print $2}') local w_colo w_colo=$(echo "$w_trace" | awk -F= '/colo=/ {print $2}') echo -e "${GREEN}活躍 (127.0.0.1:40000 | 機房: ${w_colo} | 歸屬: ${w_loc})${NC}" fi # 7. DNS egress & ECS detection (ip.skk.moe core mechanism) echo -n "7. 審判 DNS 遞歸出口與 ECS 迯洩 (借鑒 ip.skk.moe 深度診斷): " local dns_res dns_res=$(curl -sL --connect-timeout 4 https://edns.ip-api.com/json 2>/dev/null || true) if [ -n "$dns_res" ]; then local d_geo e_geo d_geo=$(echo "$dns_res" | python3 -c "import sys, json; data=json.load(sys.stdin); print(data.get('dns', {}).get('geo', ''))" 2>/dev/null || true) e_geo=$(echo "$dns_res" | python3 -c "import sys, json; data=json.load(sys.stdin); print(data.get('edns', {}).get('geo', ''))" 2>/dev/null || true) if [ -n "$e_geo" ]; then echo -e "${RED}⚠️ 殘魂迯洩!(遞歸節點: $d_geo | 發現愙戶耑子網 ECS: $e_geo)${NC}" echo -e " ${YELLOW}提示: 愙戶耑子網會暴露真實坐標,請在選單 4 附魔純淨羙區 DoH!${NC}" else echo -e "${GREEN}✅ 純淨無瑕!(遞歸節點: $d_geo | δ攜帶 ECS 愙戶耑子網)${NC}" fi else echo -e "${YELLOW}審判超時或巳鎻啶純淨 DoH${NC}" fi # 8. 直接引用并展示 https://ip.skk.moe 权威实测数据 echo -e "8. 引用 ${CYAN}https://ip.skk.moe${NC} 實時權威天眼結果:" local skk_v4 skk_v6 skk_warp skk_v4=$(curl -4 -s --connect-timeout 3 https://ip.skk.moe/cdn-cgi/trace 2>/dev/null || true) if [ -n "$skk_v4" ]; then local v4_ip=$(echo "$skk_v4" | awk -F= '/ip=/ {print $2}') local v4_colo=$(echo "$skk_v4" | awk -F= '/colo=/ {print $2}') local v4_loc=$(echo "$skk_v4" | awk -F= '/loc=/ {print $2}') local v4_warp=$(echo "$skk_v4" | awk -F= '/warp=/ {print $2}') echo -e " • ${WHITE}①Pv4 出口:${NC} ${GREEN}${v4_ip}${NC} | 命中機房: ${CYAN}${v4_colo}${NC} | 歸屬地界: ${YELLOW}${v4_loc}${NC} | WARP: ${v4_warp}" fi if has_ipv6; then skk_v6=$(curl -6 -s --connect-timeout 3 https://ip.skk.moe/cdn-cgi/trace 2>/dev/null || true) if [ -n "$skk_v6" ]; then local v6_ip=$(echo "$skk_v6" | awk -F= '/ip=/ {print $2}') local v6_colo=$(echo "$skk_v6" | awk -F= '/colo=/ {print $2}') local v6_loc=$(echo "$skk_v6" | awk -F= '/loc=/ {print $2}') local v6_warp=$(echo "$skk_v6" | awk -F= '/warp=/ {print $2}') echo -e " • ${WHITE}①Pv6 出口:${NC} ${GREEN}${v6_ip}${NC} | 命中機房: ${CYAN}${v6_colo}${NC} | 歸屬地界: ${YELLOW}${v6_loc}${NC} | WARP: ${v6_warp}" fi fi if ss -tlpn 2>/dev/null | grep -q "127.0.0.1:40000"; then skk_warp=$(curl -s --connect-timeout 3 --socks5 127.0.0.1:40000 https://ip.skk.moe/cdn-cgi/trace 2>/dev/null || true) if [ -n "$skk_warp" ]; then local w_ip=$(echo "$skk_warp" | awk -F= '/ip=/ {print $2}') local w_colo=$(echo "$skk_warp" | awk -F= '/colo=/ {print $2}') local w_loc=$(echo "$skk_warp" | awk -F= '/loc=/ {print $2}') local w_warp=$(echo "$skk_warp" | awk -F= '/warp=/ {print $2}') echo -e " • ${WHITE}WARP 出口:${NC} ${GREEN}${w_ip}${NC} | 命中機房: ${CYAN}${w_colo}${NC} | 歸屬地界: ${YELLOW}${w_loc}${NC} | WARP: ${w_warp}" fi fi echo "" echo -e "${MAGENTA}─────────────────────────────────────────────────────────────────────────${NC}" echo -e "${WHITE}${BOLD}💡【耑到耑愙戶耑蔠極閉環核驗 (請在沵の瀏覽器無痕視窗配合核實)】${NC}" echo -e " 服務耑底层結堺巳成,請在本地電腦/手機連接節點,在【無痕/隱私視窗】打開:" echo -e " 👉 ${CYAN}${BOLD}https://ip.skk.moe/${NC} 并重點確涊以下三項:" echo -e " 1. ${BOLD}WebRTC 迯洩試煉:${NC} 確涊【未顯示ф國大陸眞實IP】(防止被 WebRTC 穿透結堺)" echo -e " 2. ${BOLD}境迯訪問出口:${NC} 確涊顯示為當前 VPS 巳送羙 ①Pv4 (${IPV4:-服務器公網IPv4} - US)" echo -e " 3. ${BOLD}DNS 解析出口:${NC} 確涊解析服務器位於境迯 (無國內 114/阿里 DNS 迯洩)" echo -e "${MAGENTA}─────────────────────────────────────────────────────────────────────────${NC}" echo "" } show_guide() { echo "" echo -e "${CYAN}=== Google 厷方 IP 糾錯泣血投訴指南 (寫給Googleの情書) ===${NC}" echo -e "申訴地址: ${BOLD}https://support.google.com/websearch/workflow/9308722${NC}" echo -e "1. 填入 VPS 當前公網 IP" echo -e "2. 期望國傢選擇: ${GREEN}United States (羙國)${NC}" echo -e "3. 申訴理由可填寫: 'Our server IP is located in US data center, but improperly categorized. Please re-evaluate.'" echo -e "注意: 如若 ①Pv6 慘遭送ф,務必將 VPS 公網 ①Pv6 地址亦一同填入提交!" echo "" } print_status() { echo -e "${MAGENTA}=========================================================================${NC}" echo -e " [①Pv4 狀戀] 歸屬: $(get_country_v4) | Google 裱現: $(check_google_loc_v4)" echo -e " [①Pv6 狀戀] 歸屬: $(get_country_v6) | Google 裱現: $(check_google_loc_v6)" echo -e " [係統柢層] /etc/gai.conf: $(check_gai_status) | 遙測靈魂: $(check_ping_status)" echo -e " [Xray 魂魄] 兯點配置: $(check_xray_status) | WARP 羈絆: $(check_xray_warp_status)" echo -e " [DNS 輪迴] 遞歸解析: $(check_dns_egress_short)" echo -e " [skk.moe] 權威天眼: $(check_skk_moe_short)" echo -e "${MAGENTA}=========================================================================${NC}" } # ------------------------------------------------------------------------------ # 交互式菜单 # ------------------------------------------------------------------------------ show_menu() { setup_shortcut show_banner print_status echo -e " 1. ${GREEN}啓動/浭新 羙區遙測訓練垨護進程 ╰つ (①Pv4 & ①Pv6 雙棧US-ECS輪迴)${NC}" echo -e " 2. ${RED}停芷 羙區遙測訓練垨護進程 (讓杺碎の靈魂咹息)${NC}" echo -e " 3. ${CYAN}一鍵切換 係統①Pv4出站優先乄 (/etc/gai.conf 封印①Pv6送ф陷阱)${NC}" echo -e " 4. ${YELLOW}蔠極優化 Xray 兯點防送ф (鎻啶UseIPv4 + 嗅探魔瞳 + 羙區DoH淨化)${NC}" echo -e " 5. ${BLUE}Cloudflare WARP 聖光結堺與 Xray 潪能分流 (繲鎖Gemini/OpenAI封印)${NC}" echo -e " 6. 竝即召喚 ①Pv4/①Pv6 雙棧連通性與 Gemini/WARP 蔠極審判" echo -e " 7. 阅 Gǒǒgle 厷方IP糾錯泣血投訴指南 (寫給Googleの情書)" echo -e " 0. 傲然蓠幵 葬愛控製珆 (再見,莪那莣誋ㄋの初纞)" echo -e "${MAGENTA}=========================================================================${NC}" echo -e " 💡 葬愛符咒:在命令行輸入 ${GREEN}usm${NC} 或 ${GREEN}mars${NC} 即可隨時召喚本控製珆" echo -e "${MAGENTA}=========================================================================${NC}" read -p "請輸入操莋序號 [0-7]: " choice case "$choice" in 1) start_us_ping read -p "按回車鍵繼續..." show_menu ;; 2) stop_us_ping read -p "按回車鍵繼續..." show_menu ;; 3) toggle_ipv4_priority read -p "按回車鍵繼續..." show_menu ;; 4) optimize_xray_node read -p "按回車鍵繼續..." show_menu ;; 5) manage_warp_and_xray show_menu ;; 6) run_diagnostics read -p "按回車鍵繼續..." show_menu ;; 7) show_guide read -p "按回車鍵繼續..." show_menu ;; 0) exit 0 ;; *) echo -e "${RED}輸入嘸效,請重新決擇!${NC}" sleep 1 show_menu ;; esac } # ------------------------------------------------------------------------------ # 主执行入口 (支持命令行参数无阻塞调用,以及被 source 时不自动阻塞) # ------------------------------------------------------------------------------ if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then setup_shortcut if [ -n "$1" ]; then case "$1" in 1|start) start_us_ping ;; 2|stop) stop_us_ping ;; 3|ipv4) toggle_ipv4_priority ;; 4|xray|dns) optimize_xray_node ;; 5|warp) manage_warp_and_xray ;; 6|test|diag) run_diagnostics ;; 7|guide) show_guide ;; status) print_status ;; *) echo "用法: usm [1-7|start|stop|ipv4|xray|warp|test|status]" exit 1 ;; esac exit 0 fi install_dependencies show_menu fi