——更新于25-12-02
参考:
https://juejin.cn/post/7491100994350219291
参考2:
https://blog.csdn.net/weixin_52214416/article/details/151857117
ps: 遇到与此参考2相同的问题,调整网络服务顺序后未生效;
ps: 非MacOS26系统不会遇到此问题。
目的:实现电脑同时接入内网与互联网。
网络环境:
内网:有线网卡
外网:无线网卡(wifi)
查看网络硬件接口
在终端执行以下命令,查看所有硬件端口及其对应的设备名:
networksetup -listallhardwareports命令输出中可根据 Hardware Port 判断是 Wi-Fi 还是有线网卡,并记住对应的 Device 名称。例如,有线网卡为 en5,Wi-Fi 为 en0。

查看当前路由表
运行以下命令查看系统的路由表:
netstat -nr -f inet
字段说明:
Destination:目标网络地址
Gateway:网关(下一跳)
Netif:对应的网络接口
流量这时候优先走 en9(有线网卡)连接外网。
调整网络服务优先级
macOS 会根据服务顺序选择首选网卡,默认可能优先使用有线网络,导致无法访问互联网。
调整步骤如下:
打开「系统偏好设置」 → 「网络」
点击左下角齿轮图标,选择「设定服务顺序」
将「Wi-Fi」拖至有线网卡之上
点击「完成」保存

更改应用后,再次检查路由表确认 Wi-Fi 是否已优先。
配置静态路由,实现内外网流量分流
虽然服务顺序已优化,但访问某些内网 IP 仍需通过内网网卡。这时可添加静态路由,实现精准流量分流。
方法一:通过网关添加路由
sudo route add -net 172.16.5.0 -netmask 255.255.255.0 172.16.9.126说明:
172.16.5.0:目标内网段255.255.255.0:子网掩码(CIDR/24)172.16.9.126:内网网关地址
方法二:指定使用网卡发送数据
sudo route add -net 172.16.5.0 -netmask 255.255.255.0 -interface en1这样访问该网段的流量将直接通过 en9(有线内网)发送。
如需删除该路由:
sudo route delete -net 172.16.5.0 -netmask 255.255.255.0若添加时系统提示已存在,可先删除再添加;
验证配置是否生效
可使用如下命令检查路由表:
netstat -nr -f inet至此,macOS 下内外网共存配置完成,访问内网资源与互联网可同时进行,无需频繁切换网络。
route -n get www.baidu.com
Q&A 及针对 MacOS26的特殊调整
Q: 若在更新macOS26后,出现调整网络服务优先级不生效问题;

A:按照参考2链接中做法,在设置固定IP时不设置路由,如下图,在你的脚本中或者命令行中重新设置。

此时运行 netstat -nr -f inet 查看时,如下图:

此时不会产生两个以上的default路由,只会保留一个wifi的default路由,这样系统就不会自动改变服务优先顺序,永远是wifi网络优先,缺点是网线断开后需重新执行脚本。
Q:用域名无法访问内网或仅首次生效刷新网页失效,说明DNS解析出现问题。
A:内网有固定解析的DNS,在wifi中手动配置即可,如下图:

或者在 /etc/resolver 文件夹(若是没有这个文件夹则主动创建)下对固定域名进行定向的IP解析 XXX.XXX.cn,推荐这种方式。
nameserver 172.XXX.XXX.3
timeout 5
search_order 1# 清除DNS的缓存
# macOS 12+ (Monterey)
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder
# 旧版本 macOS
sudo killall -HUP mDNSResponder以上即为MacOS26.1之下版本进行内外网同时方式设置。
执行脚本
最后附上我完整的设置脚本及执行后截图,请用AI自己调整。
主要替换:
请替换自己的内网IP路由 !!!
请替换自己的内网域名 !!!
请替换自己的内网网卡名称 !!!
#!/bin/bash
################################################################################
# macOS 静态路由配置脚本
# 用途:为特定网段配置静态路由
# 使用方法:sudo ./script.sh
################################################################################
#==============================================================================
# 配置区域 - 在此处添加或修改路由规则
#==============================================================================
# 目标网关(所有静态路由将通过此网关)
TARGET_GATEWAY="172.16.XXX.XXX" # 请替换自己的内网IP路由 !!!
# 需要添加的静态路由列表(网段 CIDR 格式)
# 格式:每行一个网段,使用空格分隔
STATIC_ROUTES=(
# "90.90.90.0/24"
"172.16.0.0/16"
# "159.226.99.0/24" # 示例:取消注释以添加更多路由
)
# 测试目标(用于验证网络连通性)
# 格式:每行一个目标,使用冒号分隔主机名和描述
TEST_TARGETS=(
"baidu.com:百度"
"bing.com:必应"
"XXX.XXX.XXX.XXX:内网门户" # 请替换自己的内网域名 !!!
)
# DNS 配置
ENABLE_INTRANET_DNS=false # 是否启用内网 DNS 配置
INTRANET_DNS_SERVERS=(
# 内网 DNS 服务器 1
# 内网 DNS 服务器 2(备用)
)
EXTERNAL_DNS_SERVERS=(
# Google DNS
# 114 DNS
)
DNS_SEARCH_DOMAINS=(
"XXX.XXX.XXX" # 内网域名后缀
)
# 网络服务顺序配置
SET_WIFI_FIRST=true # 是否设置 Wi-Fi 为网络服务顺序第一位
# 路由优先级配置
REMOVE_INTRANET_DEFAULT_ROUTE=false # 是否删除内网默认路由(确保Wi-Fi优先)
WIFI_DEFAULT_ROUTE_METRIC=1 # Wi-Fi默认路由度量值(越小优先级越高)
INTRANET_DEFAULT_ROUTE_METRIC=100 # 内网默认路由度量值(如果保留)
# 配置选项
PING_TIMEOUT=5 # ping 超时时间(秒)
REQUIRE_GATEWAY_REACHABLE=true # 是否要求目标网关必须可达才继续
#==============================================================================
# 脚本主体 - 通常不需要修改以下内容
#==============================================================================
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 日志函数
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
log_success() { echo -e "${GREEN}[✓]${NC} $1"; }
log_warning() { echo -e "${YELLOW}[!]${NC} $1"; }
log_error() { echo -e "${RED}[✗]${NC} $1"; }
# 检查 root 权限
check_root() {
if [ "$(id -u)" -ne 0 ]; then
log_error "此脚本需要 root 权限运行"
echo "请使用: sudo $0"
exit 1
fi
}
# 获取 Wi-Fi 接口
get_wifi_interface() {
local interface
# 方法1:通过默认路由获取
interface=$(route -n get default 2>/dev/null | grep interface | awk '{print $2}')
# 方法2:通过 networksetup 获取
if [ -z "$interface" ]; then
interface=$(networksetup -listallhardwareports 2>/dev/null | \
awk '/Wi-Fi|AirPort/{getline; print $2}' | head -1)
fi
# 方法3:查找活动的 en 接口
if [ -z "$interface" ]; then
interface=$(ifconfig | grep -E '^en[0-9]+:.*status: active' -A 1 | \
grep 'status: active' -B 1 | head -1 | cut -d: -f1)
fi
echo "$interface"
}
# 获取 AX88x72A 硬件端口对应的接口
get_ax88x72a_interface() {
local interface
local hardware_port_info
# 通过 networksetup 查找 Hardware Port: AX88x72A
hardware_port_info=$(networksetup -listallhardwareports 2>/dev/null | \
grep -A 1 "Hardware Port: AX88x72A")
if [ -n "$hardware_port_info" ]; then
interface=$(echo "$hardware_port_info" | grep -E '^Device: ' | awk '{print $2}')
if [ -n "$interface" ]; then
echo "$interface"
return 0
fi
fi
# 如果没有找到,尝试通过 ifconfig 查找可能的接口
log_warning "未找到 Hardware Port: AX88x72A 对应的接口"
echo ""
}
# 获取默认网关
get_default_gateway() {
route -n get default 2>/dev/null | grep gateway | awk '{print $2}'
}
# 检查 IP 可达性
check_reachability() {
local ip=$1
ping -c 1 -W "$PING_TIMEOUT" "$ip" >/dev/null 2>&1
}
# 删除现有路由(避免冲突)
cleanup_existing_routes() {
log_info "清理可能存在的旧路由..."
for route in "${STATIC_ROUTES[@]}"; do
route delete -net "$route" >/dev/null 2>&1
done
log_success "旧路由清理完成"
}
# 为 AX88x72A 硬件端口添加路由 请替换自己的内网网卡名称 !!!
add_ax88x72a_route() {
log_info "检查 Hardware Port: AX88x72A..."
local ax_interface
ax_interface=$(get_ax88x72a_interface)
if [ -n "$ax_interface" ]; then
log_success "找到 AX88x72A 接口: $ax_interface"
# 检查是否已存在到目标网关的路由
local existing_route
existing_route=$(netstat -nr -f inet | grep -E "^172\.16\.9\.126[[:space:]]" || true)
if [ -z "$existing_route" ]; then
log_info "为 AX88x72A 接口添加路由到目标网关 $TARGET_GATEWAY..."
# 添加主机路由,将目标网关指向 AX88x72A 接口
if route add -host "$TARGET_GATEWAY" -interface "$ax_interface" >/dev/null 2>&1; then
log_success "已添加路由: $TARGET_GATEWAY -> 接口 $ax_interface"
else
log_error "添加路由失败: $TARGET_GATEWAY -> 接口 $ax_interface"
fi
else
log_info "到目标网关 $TARGET_GATEWAY 的路由已存在:"
echo " $existing_route"
fi
else
log_warning "未找到 AX88x72A 接口,跳过相关路由配置"
fi
echo ""
}
# 添加静态路由
add_static_routes() {
local success_count=0
local fail_count=0
log_info "添加静态路由..."
for route in "${STATIC_ROUTES[@]}"; do
# 跳过注释行
[[ "$route" =~ ^[[:space:]]*# ]] && continue
[[ -z "$route" ]] && continue
if route add -net "$route" "$TARGET_GATEWAY" >/dev/null 2>&1; then
log_success "已添加路由: $route -> $TARGET_GATEWAY"
((success_count++))
else
log_error "添加路由失败: $route"
((fail_count++))
fi
done
echo ""
log_info "路由添加完成: 成功 $success_count 条, 失败 $fail_count 条"
}
# 验证默认路由
verify_default_route() {
local original_gateway=$1
local current_gateway
log_info "验证默认路由..."
current_gateway=$(get_default_gateway)
if [ "$current_gateway" != "$original_gateway" ]; then
log_warning "默认网关已改变"
echo " 原始网关: $original_gateway"
echo " 当前网关: $current_gateway"
echo ""
log_warning "如需修复默认路由,请执行:"
echo " sudo route add default $original_gateway"
else
log_success "默认路由正常: $current_gateway"
fi
}
# 显示路由表
display_routes() {
echo ""
log_info "当前路由配置:"
echo "----------------------------------------"
echo "默认路由:"
netstat -rn | grep -E '^default|^Destination' | head -2
echo ""
echo "静态路由 (172.16.x.x 和 90.90.90.x):"
netstat -rn | grep -E '172\.16|90\.90\.90' | head -15
echo "----------------------------------------"
}
# 配置 DNS
configure_dns() {
if [ "$ENABLE_INTRANET_DNS" != true ]; then
log_info "内网 DNS 配置已禁用,跳过 DNS 配置"
return 0
fi
log_info "配置 DNS 服务器..."
# 构建 DNS 服务器列表(内网优先,外网备用)
local dns_servers=()
# 添加内网 DNS 服务器
for dns in "${INTRANET_DNS_SERVERS[@]}"; do
[[ "$dns" =~ ^[[:space:]]*# ]] && continue
[[ -z "$dns" ]] && continue
dns_servers+=("$dns")
done
# 添加外网 DNS 服务器
for dns in "${EXTERNAL_DNS_SERVERS[@]}"; do
[[ "$dns" =~ ^[[:space:]]*# ]] && continue
[[ -z "$dns" ]] && continue
dns_servers+=("$dns")
done
if [ ${#dns_servers[@]} -eq 0 ]; then
log_warning "未配置 DNS 服务器,跳过 DNS 配置"
return 0
fi
# 获取当前网络服务名称
local service_name
service_name=$(networksetup -listallnetworkservices | grep -E 'Wi-Fi|AirPort|Ethernet' | head -1)
if [ -z "$service_name" ]; then
log_error "无法获取网络服务名称"
return 1
fi
# 配置 DNS 服务器
log_info "为网络服务 '$service_name' 配置 DNS..."
# 构建 DNS 服务器参数
local dns_args=""
for dns in "${dns_servers[@]}"; do
dns_args="$dns_args $dns"
done
# 设置 DNS 服务器
if networksetup -setdnsservers "$service_name" $dns_args; then
log_success "DNS 服务器配置成功"
# 显示配置的 DNS 服务器
echo ""
log_info "已配置的 DNS 服务器:"
for dns in "${dns_servers[@]}"; do
echo " - $dns"
done
else
log_error "DNS 服务器配置失败"
return 1
fi
# 配置搜索域(可选)
if [ ${#DNS_SEARCH_DOMAINS[@]} -gt 0 ]; then
log_info "配置 DNS 搜索域..."
local search_args=""
for domain in "${DNS_SEARCH_DOMAINS[@]}"; do
[[ "$domain" =~ ^[[:space:]]*# ]] && continue
[[ -z "$domain" ]] && continue
search_args="$search_args $domain"
done
if [ -n "$search_args" ]; then
if networksetup -setsearchdomains "$service_name" $search_args; then
log_success "DNS 搜索域配置成功"
echo ""
log_info "已配置的搜索域:"
for domain in "${DNS_SEARCH_DOMAINS[@]}"; do
[[ "$domain" =~ ^[[:space:]]*# ]] && continue
[[ -z "$domain" ]] && continue
echo " - $domain"
done
else
log_warning "DNS 搜索域配置失败"
fi
fi
fi
# 刷新 DNS 缓存
log_info "刷新 DNS 缓存..."
if dscacheutil -flushcache; then
log_success "DNS 缓存已刷新"
else
log_warning "DNS 缓存刷新失败"
fi
echo ""
return 0
}
# 显示 DNS 配置
display_dns_config() {
echo ""
log_info "当前 DNS 配置:"
echo "----------------------------------------"
# 获取当前网络服务名称
local service_name
service_name=$(networksetup -listallnetworkservices | grep -E 'Wi-Fi|AirPort|Ethernet' | head -1)
if [ -n "$service_name" ]; then
echo "网络服务: $service_name"
echo ""
echo "DNS 服务器:"
networksetup -getdnsservers "$service_name" | while read -r line; do
echo " $line"
done
echo ""
echo "搜索域:"
networksetup -getsearchdomains "$service_name" | while read -r line; do
echo " $line"
done
else
echo "无法获取网络服务信息"
fi
echo "----------------------------------------"
}
# 设置 Wi-Fi 为网络服务顺序第一位
set_wifi_first_priority() {
if [ "$SET_WIFI_FIRST" != true ]; then
log_info "Wi-Fi 优先级调整已禁用,跳过网络服务顺序调整"
return 0
fi
log_info "调整网络服务顺序,设置 Wi-Fi 为第一位..."
# 获取 Wi-Fi 服务名称
local wifi_service
wifi_service=$(networksetup -listallnetworkservices | grep -E 'Wi-Fi|AirPort')
if [ -z "$wifi_service" ]; then
log_error "未找到 Wi-Fi 网络服务"
return 1
fi
# 检查 Wi-Fi 是否已经是第一位
local first_service
first_service=$(networksetup -listnetworkserviceorder | grep -E '^\(1\)' | sed 's/^[^(]*(1) //')
if [[ "$first_service" == "$wifi_service" ]]; then
log_success "Wi-Fi 已经是网络服务顺序第一位"
return 0
fi
# 获取所有网络服务
local all_services
all_services=$(networksetup -listallnetworkservices | tail -n +2)
# 构建新的服务顺序(Wi-Fi 第一,其他按原顺序)
local new_order=("$wifi_service")
while IFS= read -r service; do
if [[ "$service" != "$wifi_service" ]]; then
new_order+=("$service")
fi
done <<< "$all_services"
# 设置新的网络服务顺序
log_info "设置新的网络服务顺序..."
if networksetup -ordernetworkservices "${new_order[@]}"; then
log_success "网络服务顺序已更新,Wi-Fi 现在为第一位"
# 显示新的顺序
echo ""
log_info "新的网络服务顺序:"
networksetup -listnetworkserviceorder | grep -E '^\([0-9]+\)' | while read -r line; do
echo " $line"
done
echo ""
return 0
else
log_error "网络服务顺序更新失败"
return 1
fi
}
# 显示网络服务顺序
display_service_order() {
echo ""
log_info "当前网络服务顺序:"
echo "----------------------------------------"
networksetup -listnetworkserviceorder | grep -E '^\([0-9]+\)' | while read -r line; do
echo " $line"
done
echo "----------------------------------------"
}
# 调整路由优先级(确保Wi-Fi优先)
adjust_route_priority() {
if [ "$REMOVE_INTRANET_DEFAULT_ROUTE" != true ]; then
log_info "内网默认路由删除已禁用,跳过路由优先级调整"
return 0
fi
log_info "调整路由优先级,确保Wi-Fi优先访问..."
# 获取当前默认路由
local default_routes
default_routes=$(netstat -nr -f inet | grep '^default' | awk '{print $2 " " $4}')
if [ -z "$default_routes" ]; then
log_warning "未找到默认路由"
return 0
fi
# 检查是否有多个默认路由
local route_count
route_count=$(echo "$default_routes" | wc -l | tr -d ' ')
if [ "$route_count" -le 1 ]; then
log_success "只有一个默认路由,无需调整"
return 0
fi
log_info "发现 $route_count 个默认路由,正在调整..."
# 查找内网网关的默认路由(172.16.9.126)
local intranet_route
intranet_route=$(echo "$default_routes" | grep "172.16.9.126")
if [ -n "$intranet_route" ]; then
local intranet_interface
intranet_interface=$(echo "$intranet_route" | awk '{print $2}')
log_info "删除内网默认路由: 172.16.9.126 (接口: $intranet_interface)"
# 删除内网默认路由
if sudo route delete default 172.16.9.126 >/dev/null 2>&1; then
log_success "内网默认路由已删除"
# 等待一下,让系统稳定
sleep 1
# 验证删除结果
local remaining_routes
remaining_routes=$(netstat -nr -f inet | grep '^default' | awk '{print " - "$2 " -> " $4}')
if [ -n "$remaining_routes" ]; then
echo ""
log_info "当前默认路由:"
echo "$remaining_routes"
fi
else
log_error "内网默认路由删除失败"
return 1
fi
else
log_success "未找到内网默认路由,无需删除"
fi
echo ""
return 0
}
# 显示路由优先级信息
display_route_priority() {
echo ""
log_info "路由优先级状态:"
echo "----------------------------------------"
# 显示所有默认路由
local default_routes
default_routes=$(netstat -nr -f inet | grep '^default')
if [ -n "$default_routes" ]; then
echo "默认路由:"
echo "$default_routes" | while read -r line; do
echo " $line"
done
else
echo "未找到默认路由"
fi
echo ""
echo "内网特定路由:"
netstat -nr -f inet | grep -E "90\.90\.90|172\.16\.[0-9]" | head -5 | while read -r line; do
echo " $line"
done
echo "----------------------------------------"
}
# 测试网络连通性
test_connectivity() {
log_info "测试网络连通性..."
echo ""
# 测试默认网关
echo -n " 默认网关 ($DEFAULT_GATEWAY): "
if check_reachability "$DEFAULT_GATEWAY"; then
log_success "可达"
else
log_error "不可达"
fi
# 测试目标网关
echo -n " 目标网关 ($TARGET_GATEWAY): "
if check_reachability "$TARGET_GATEWAY"; then
log_success "可达"
else
log_error "不可达"
fi
# 测试其他目标
for target_info in "${TEST_TARGETS[@]}"; do
IFS=':' read -r ip desc <<< "$target_info"
echo -n " $desc ($ip): "
if check_reachability "$ip"; then
log_success "可达"
else
log_error "不可达"
fi
done
echo ""
}
# 创建清理脚本
create_cleanup_script() {
local cleanup_file="/tmp/cleanup_routes.sh"
cat > "$cleanup_file" << EOF
#!/bin/bash
# 自动生成的路由清理脚本
# 生成时间: $(date)
echo "清理静态路由..."
# 清理所有配置的路由
EOF
for route in "${STATIC_ROUTES[@]}"; do
[[ "$route" =~ ^[[:space:]]*# ]] && continue
[[ -z "$route" ]] && continue
echo "sudo route delete -net $route 2>/dev/null" >> "$cleanup_file"
done
# 清理 AX88x72A 相关路由
echo "sudo route delete -host $TARGET_GATEWAY 2>/dev/null" >> "$cleanup_file"
# 添加 DNS 清理功能
cat >> "$cleanup_file" << 'EOF'
echo ""
echo "恢复 DNS 配置..."
# 获取当前网络服务名称
SERVICE_NAME=$(networksetup -listallnetworkservices | grep -E 'Wi-Fi|AirPort|Ethernet' | head -1)
if [ -n "$SERVICE_NAME" ]; then
echo "网络服务: $SERVICE_NAME"
# 恢复为自动获取 DNS
if networksetup -setdnsservers "$SERVICE_NAME" "Empty"; then
echo "✓ DNS 配置已恢复为自动获取"
else
echo "✗ DNS 配置恢复失败"
fi
# 清除搜索域
if networksetup -setsearchdomains "$SERVICE_NAME" "Empty"; then
echo "✓ 搜索域已清除"
fi
# 刷新 DNS 缓存
if dscacheutil -flushcache; then
echo "✓ DNS 缓存已刷新"
fi
else
echo "无法获取网络服务信息"
fi
echo ""
echo "注意:网络服务顺序需要手动恢复"
echo "如需恢复网络服务顺序,请执行:"
echo " sudo networksetup -listnetworkserviceorder"
echo " # 然后使用 -ordernetworkservices 命令恢复原始顺序"
echo ""
echo "路由清理完成!"
echo ""
echo "当前路由表:"
netstat -rn | grep -E '172\.16|90\.90\.90' | head -10
echo ""
echo "当前 DNS 配置:"
if [ -n "$SERVICE_NAME" ]; then
echo "DNS 服务器:"
networksetup -getdnsservers "$SERVICE_NAME" | while read -r line; do
echo " $line"
done
fi
echo ""
echo "当前网络服务顺序:"
networksetup -listnetworkserviceorder | grep -E '^\([0-9]+\)'
EOF
chmod +x "$cleanup_file"
log_success "已创建清理脚本: $cleanup_file"
}
# 显示配置摘要
display_summary() {
echo ""
echo "========================================"
log_success "路由和 DNS 配置完成!"
echo "========================================"
echo ""
echo "配置摘要:"
echo " 目标网关: $TARGET_GATEWAY"
echo " 已配置路由:"
for route in "${STATIC_ROUTES[@]}"; do
[[ "$route" =~ ^[[:space:]]*# ]] && continue
[[ -z "$route" ]] && continue
echo " - $route -> $TARGET_GATEWAY"
done
echo " 默认网关: $DEFAULT_GATEWAY (用于其他流量)"
echo ""
if [ "$REMOVE_INTRANET_DEFAULT_ROUTE" = true ]; then
echo " 路由优先级: Wi-Fi 优先(已删除内网默认路由)"
else
echo " 路由优先级: 保持系统默认"
fi
if [ "$SET_WIFI_FIRST" = true ]; then
echo " 网络服务顺序: Wi-Fi 已设置为第一位"
else
echo " 网络服务顺序: 保持原样"
fi
echo ""
if [ "$ENABLE_INTRANET_DNS" = true ]; then
echo " DNS 配置:"
echo " - 内网 DNS 服务器:"
for dns in "${INTRANET_DNS_SERVERS[@]}"; do
[[ "$dns" =~ ^[[:space:]]*# ]] && continue
[[ -z "$dns" ]] && continue
echo " • $dns"
done
echo " - 外网 DNS 服务器:"
for dns in "${EXTERNAL_DNS_SERVERS[@]}"; do
[[ "$dns" =~ ^[[:space:]]*# ]] && continue
[[ -z "$dns" ]] && continue
echo " • $dns"
done
if [ ${#DNS_SEARCH_DOMAINS[@]} -gt 0 ]; then
echo " - 搜索域:"
for domain in "${DNS_SEARCH_DOMAINS[@]}"; do
[[ "$domain" =~ ^[[:space:]]*# ]] && continue
[[ -z "$domain" ]] && continue
echo " • $domain"
done
fi
else
echo " DNS 配置: 已禁用"
fi
echo ""
echo "使用提示:"
echo " • 清理路由和 DNS: /tmp/cleanup_routes.sh"
echo " • 查看路由: netstat -rn"
echo " • 查看网络服务顺序: networksetup -listnetworkserviceorder"
echo " • 查看 DNS: networksetup -getdnsservers 'Wi-Fi'"
echo " • 编辑配置: 修改此脚本顶部的配置区域"
echo " • 注意: 清理脚本不会自动恢复网络服务顺序"
echo ""
}
#==============================================================================
# 主程序
#==============================================================================
main() {
echo "========================================"
echo " macOS 静态路由配置工具"
echo "========================================"
echo ""
# 1. 检查权限
check_root
# 2. 获取网络信息
log_info "检测网络配置..."
WIFI_INTERFACE=$(get_wifi_interface)
DEFAULT_GATEWAY=$(get_default_gateway)
if [ -z "$WIFI_INTERFACE" ]; then
log_error "无法检测到 Wi-Fi 接口"
exit 1
fi
log_success "Wi-Fi 接口: $WIFI_INTERFACE"
if [ -z "$DEFAULT_GATEWAY" ]; then
log_error "无法获取默认网关,请检查网络连接"
exit 1
fi
log_success "默认网关: $DEFAULT_GATEWAY"
echo ""
# 3. 检查目标网关可达性
log_info "检查目标网关 $TARGET_GATEWAY 是否可达..."
if ! check_reachability "$TARGET_GATEWAY"; then
log_warning "目标网关 $TARGET_GATEWAY 不可达"
if [ "$REQUIRE_GATEWAY_REACHABLE" = true ]; then
log_error "配置要求网关必须可达,操作已取消"
exit 1
fi
echo -n "是否继续配置?(y/N): "
read -r response
if [[ ! "$response" =~ ^[Yy]$ ]]; then
log_info "操作已取消"
exit 0
fi
else
log_success "目标网关可达"
fi
echo ""
# 4. 清理旧路由
cleanup_existing_routes
echo ""
# 5. 为 AX88x72A 硬件端口添加路由
add_ax88x72a_route
# 6. 添加新路由
add_static_routes
echo ""
# 7. 调整路由优先级(确保Wi-Fi优先)
adjust_route_priority
# 8. 调整网络服务顺序(Wi-Fi 优先)
set_wifi_first_priority
# 9. 配置 DNS
configure_dns
# 10. 验证默认路由
verify_default_route "$DEFAULT_GATEWAY"
# 11. 显示路由表
display_routes
# 12. 显示路由优先级信息
display_route_priority
# 13. 显示网络服务顺序
display_service_order
# 14. 显示 DNS 配置
display_dns_config
# 15. 测试连通性
test_connectivity
# 16. 创建清理脚本
create_cleanup_script
# 17. 显示摘要
display_summary
}
# 执行主程序
main "$@"执行后截图

评论