70 lines
2.4 KiB
Bash
Executable File
70 lines
2.4 KiB
Bash
Executable File
#!/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 |