我之前找 AI 写了一个,用的没啥问问题,另外配置一个 agent 开机启动就行。
```
#!/bin/bash
# --- 请在这里配置 ---
# 将 "
example.com" 替换为您想通过 Wi-Fi 访问的域名
DOMAIN_TO_ROUTE="
example.com"
# --- 配置结束 ---
# 自动获取 Wi-Fi 硬件端口名称 (例如 en0, en1)
WIFI_INTERFACE=$(networksetup -listallhardwareports | awk '/Wi-Fi|AirPort/{getline; print $2}')
if [ -z "$WIFI_INTERFACE" ]; then
echo "错误:找不到 Wi-Fi 硬件端口。"
exit 1
fi
# 获取当前连接的 Wi-Fi 网络的路由器地址(网关)
WIFI_ROUTER=$(networksetup -getinfo "Wi-Fi" | awk '/^Router: / {print $2}')
if [ -z "$WIFI_ROUTER" ] || [[ "$WIFI_ROUTER" == "none" ]]; then
echo "错误:Wi-Fi 未连接或找不到路由器地址。"
exit 1
fi
# 通过 dig 命令解析域名对应的所有 IP 地址
# 使用 grep 筛选出合法的 IPv4 地址
IP_ADDRESSES=$(dig +short "$DOMAIN_TO_ROUTE" | grep -E '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$')
if [ -z "$IP_ADDRESSES" ]; then
echo "错误:无法解析域名 $DOMAIN_TO_ROUTE 的 IP 地址。"
exit 1
fi
# 获取 Wi-Fi 服务的名称
WIFI_SERVICE_NAME=$(networksetup -listnetworkserviceorder | grep "($WIFI_INTERFACE)" | sed -E 's/.*Hardware Port: (.*), Device.*/\1/')
# 在添加新路由前,先清空该服务下所有已存在的附加路由,避免冲突
echo "正在为 Wi-Fi 服务 [$WIFI_SERVICE_NAME] 清空旧的附加路由..."
networksetup -setadditionalroutes "$WIFI_SERVICE_NAME"
# 为解析到的每一个 IP 地址添加一条静态路由
# 格式为:networksetup -setadditionalroutes [服务名] [目标地址 1] [子网掩码 1] [网关 1] [目标地址 2] ...
echo "正在为域名 $DOMAIN_TO_ROUTE 添加新的路由..."
for IP in $IP_ADDRESSES; do
echo "正在添加路由: $IP -> $WIFI_ROUTER"
# 使用 `route add` 命令添加临时路由,检查是否成功
sudo route add -host "$IP" "$WIFI_ROUTER"
done
echo "为 $DOMAIN_TO_ROUTE 配置路由成功!所有流量将通过 Wi-Fi 网关 $WIFI_ROUTER 访问。"
```