autool/utils_ios/scripts/fix_proxy.sh
2026-06-17 19:44:18 +08:00

70 lines
2.4 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# 检查 SUDO 环境变量是否设置
if [ -z "$SUDO" ]; then
echo " [ERROR] SUDO 环境变量未设置!"
echo " 请在 .env 文件中配置 SUDO=your_password"
exit 1
fi
# =================配置区域=================
# USB 共享 IP 网段
SHARE_IP_PREFIX="192.168.2"
# Clash 的虚拟网段通常是 198.18
TUN_IP_PREFIX="198.18"
# ========================================
echo "正在检测网卡接口..."
# 1. 自动获取 Bridge 网卡 (USB 共享网卡)
# 逻辑:寻找包含共享网段 IP 的 bridge 接口
BRIDGE_IF=$(ifconfig | grep -B 4 "inet $SHARE_IP_PREFIX" | grep -o "bridge[0-9]*" | head -n 1)
if [ -z "$BRIDGE_IF" ]; then
echo " 未找到 USB 共享网卡 (bridge)"
echo " 请检查1. iPhone 是否已插好 USB"
echo " 2. 系统设置 > 通用 > 共享 > 互联网共享 是否已开启"
exit 1
fi
echo " 发现共享网卡: $BRIDGE_IF (IP段: $SHARE_IP_PREFIX)"
# 2. 自动获取 TUN 网卡 (Clash)
# 逻辑:寻找包含 Clash 网段 IP 的 utun 接口
TUN_IF=$(ifconfig | grep -B 2 "inet $TUN_IP_PREFIX" | grep -o "utun[0-9]*" | head -n 1)
if [ -z "$TUN_IF" ]; then
echo " 未找到 Clash TUN 网卡!"
echo " 请检查Clash Verge Rev 是否已开启 TUN 模式"
exit 1
fi
echo " 发现代理网卡: $TUN_IF"
# 3. 开启系统 IP 转发
echo "$SUDO" | sudo -S sysctl -w net.inet.ip.forwarding=1 > /dev/null
echo " IP 转发已开启"
# 4. 生成并注入 PF 规则
CONF_PATH="/tmp/clash_usb_auto.conf"
# 使用 sed 将规则插入到 rdr-anchor 之后 (保持系统原有规则顺序)
echo "$SUDO" | sudo -S sh -c "sed \"/rdr-anchor \\\"com.apple\/\\\*\\\"/a\\\\
nat on $TUN_IF from $BRIDGE_IF:network to any -> ($TUN_IF)\\\\
\" /etc/pf.conf > $CONF_PATH"
# 5. 加载规则
echo "$SUDO" | sudo -S pfctl -f "$CONF_PATH" -e 2>/dev/null
echo " 检查 NAT 规则是否已生效..."
if echo "$SUDO" | sudo -S pfctl -s nat | grep -E "(nat on|$TUN_IF|$BRIDGE_IF)" > /dev/null 2>&1; then
echo " 成功!规则已应用。"
echo " 流量路径: iPhone ($BRIDGE_IF) -> NAT -> Clash ($TUN_IF) -> Internet"
echo ""
echo "已加载的规则:"
echo "$SUDO" | sudo -S pfctl -s nat | grep -E "(nat on|$TUN_IF|$BRIDGE_IF)"
else
echo " 规则加载失败或未找到相关规则。"
echo " 请检查:"
echo " 1. pfctl 是否正确加载配置"
echo " 2. 网卡接口是否正确"
fi