#!/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