news 2026/9/17 13:09:09

Mac双网卡路由配置详解:有线内网与Wi-Fi外网轻松分流

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Mac双网卡路由配置详解:有线内网与Wi-Fi外网轻松分流

先说结论:这个需求在企业办公、开发调试场景里特别常见——Mac通过有线网卡连公司内网,同时用Wi-Fi连外网。很多人一上来就插两根网线或者连上两个网络,结果发现要么内网通外网断,要么外网通内网断,甚至两个都不通,直接被系统默认路由表教做人。

我最早在公司折腾这个场景的时候也懵过,后来把路由表、网关优先级、静态路由这些概念捋清楚之后,发现事情并不复杂。今天这篇就完整记录一下我的实操过程,包含原理讲解、配置步骤、踩坑记录,照着做基本能一次搞定。

1. 双网卡场景解析:为什么会“顾此失彼”

1.1 核心需求拆解

这个标题背后对应的其实是一个很经典的路由策略问题。Mac同时接入两个网络,系统默认只会选择一条“主路由”来处理流量,并不会自动帮你分流。比如你同时插着网线(内网IP:10.x.x.x)和连上Wi-Fi(外网IP:192.168.x.x),系统默认走网线这条网关,那么外网就访问不了;如果默认走Wi-Fi网关,那么公司内网系统、内部服务器又连不上。

说白了,你需要的不是“同时连接两个网络”,而是“让去内网的流量走内网网关,其他所有流量走外网网关”。这才是整个配置的核心逻辑。

1.2 网卡与IP的网络通信原理

要搞明白这件事,得先补一个基础概念:IP数据包是怎么找到出路的。Mac上每一个网卡代表一条物理链路,每条链路挂在一个网段下,对应一个网关地址。数据包发出去时,系统协议栈会查找路由表,按“最长前缀匹配”原则决定从哪条链路转发。

举个例子:

目标地址子网掩码下一跳网关从哪个网卡出
10.10.0.0/16255.255.0.010.10.0.1有线网卡(en0)
0.0.0.0/00.0.0.0192.168.1.1Wi-Fi网卡(en1)

当你要访问内网的10.10.5.20时,系统先匹配到第一条路由,走有线;当你访问百度时,第一条不匹配,就落到默认路由第二条,走Wi-Fi。这里的核心是“两条路由同时存在,且具体目的地的路由优先于默认路由”。

这就像快递分拣中心,每个包裹按照地址找对应的传送带,默认传送带负责那些没有明确线路的包裹。思路对了,方案就清晰了。

1.3 为什么你直接插上两个网络没用

很多人一开始都会想:我都插上了,系统难道不会自动判断吗?答案是:不会。macOS的网络服务优先级只会决定“谁是主默认路由”,而不是智能分流。你要是把内网放在服务列表第一位,默认路由就被内网网关抢占,外网流量也试图从内网出去,自然就断了。

服务顺序(优先级)默认路由走向外网结果内网结果
网络服务1:有线(内网)10.10.0.1超时正常
网络服务2:Wi-Fi(外网)192.168.1.1正常超时
调整后:有线优先 + 静态路由192.168.1.1正常正常

所以,我们需要做两件事:一、调整服务顺序或删掉内网网卡的默认路由,避免它抢走外网流量;二、把内网网段精确指向内网网关,让内网流量按需走有线。这两件事做完,双网卡才能真正同时工作。

2. 配置前的准备工作:信息收集比动手更重要

2.1 确认IP、网关与网段信息

动手之前,先把基础信息摸清楚。打开“终端”,分别执行以下命令。

# 查看有线网卡信息 ipconfig getifaddr en0 ipconfig getoption en0 router # 查看Wi-Fi网卡信息 ipconfig getifaddr en1 ipconfig getoption en1 router

这里列一下我在实际环境中的示例值,方便后面演示:

  • 有线网卡(内网):IP 10.10.8.66,网关 10.10.0.1,网段 10.10.0.0/16
  • Wi-Fi网卡(外网):IP 192.168.1.100,网关 192.168.1.1,网段 192.168.1.0/24

有些公司内网不是标准的/16掩码,可能只有/24甚至更小,但只要知道网段信息,后面写路由的时候把范围替换一下即可。内网网段怎么确认?你可以在公司内网访问一个内部网页,然后用traceroute -n 目标内网IP看一下第一跳是不是自己的内网网关,或者直接问IT要一下网段规划,这是最稳的。

提示:Mac上有线网卡通常叫en0,Wi-Fi网卡叫en1或en2,但具体型号因机器而异。用ifconfig命令看一下有哪些接口,能拿到IP的那个一般就是对应的网卡。

2.2 确认网关地址的两种方式

除了ipconfig getoption,还可以用netstat -rn | grep default来查看当前所有的默认路由,其中带interface字段的那一行,就是每张网卡对应的IPv4默认网关。多执行几次,对比接入和断开不同网络时的变化,基本就能确定哪条是内网、哪条是外网。

确认不了的时候还有一个办法:拔掉网线只看Wi-Fi接入后的route表,再插上网线对比新增了哪些条目。新增条目里带有内网网段的,就是内网路由;带有default字样的,就是干掉的内网默认路由。搞清楚了再配置,比盲目敲命令稳得多。

2.3 判断内网网段是否需要走专线

不是说所有内网IP都得走有线网卡。比如有些公司的内网服务在10.x网段,有些在172.16.x网段,有些在192.168.x网段。你得先想清楚“我要访问的内网资源到底在哪些IP段”,比如:

  • 公司OA、内部Git、文档系统:10.10.0.0/16
  • 另一套老系统:172.16.8.0/24
  • 打印机:192.168.50.0/24

这些网段如果都走有线,那就在路由表里分别添加。如果内网只有一段,那就加一条静态路由就够了。

我碰过一种特殊情况:公司内网和Wi-Fi的外网网关恰好同网段,比如都是192.168.1.1,但分属不同物理区域。这种情况比较坑,因为默认路由会冲突,如果你也是这种网络结构,后面的自动脚本方案可能需要手动指定metric权重,或者直接用策略路由解决。不过绝大多数公司不会这么设计,遇到再单独排查。

3. 核心配置实操:一个命令一个命令来

3.1 快速临时配置(适合当场测试)

临时配置的目的,是先验证网络连通性。不改任何配置文件,重启或者断开重连之后配置就失效,适合先测试方案是否可行。

第一步:查看当前默认路由,记录Wi-Fi的外网网关。

netstat -rn | grep default

假设输出如下:

default 192.168.1.1 en1 default 10.10.0.1 en0

此时默认走的是en0(有线),外网基本不通。我们先把内网的默认路由删掉,让Wi-Fi接管默认流量。

sudo route -n delete default 10.10.0.1

注意:如果你的服务顺序本来就是Wi-Fi第一,那么也许不需要删除,可以直接跳到第三步。

第二步:删除之后,再netstat -rn | grep default看一下,应该只剩一条默认路由:

default 192.168.1.1 en1

这时测一下外网:ping 223.5.5.5,如果通了,说明Wi-Fi已经接管默认流量。

第三步:添加内网静态路由,让所有访问内网网段的数据包走有线网卡。

sudo route -n add 10.10.0.0/16 10.10.0.1

添加后再验证:

ping 10.10.8.20

如果通,说明内网也OK。

此时你的Mac已经实现“默认流量走Wi-Fi外网,内网网段走有线内网”。临时配置生效,但这只是开始,重启后这些手动加的静态路由会丢失,需要做持久化配置。

3.2 配置永久生效的静态路由

macOS里添加永久静态路由常见方式有几种:

  1. 设置里建一个“位置”,每次切换手动敲一遍命令。
  2. 写一个LaunchDaemon开机脚本自动执行。
  3. networksetup -setadditionalroutes给指定网络服务添加静态路由。

比较推荐的是第三种,因为networksetup是系统自带命令,路由会跟随网络服务一起加载,比LaunchDaemon更稳定,且不会出现睡眠唤醒后路由丢失的问题。

先查看当前网络服务的名字(注意不是网卡接口名,是“服务”名):

networksetup -listallnetworkservices

我这边输出类似:

An asterisk (*) denotes that a network service is disabled. Wi-Fi USB 10/100/1000 LAN Thunderbolt Bridge

我的有线网卡对应的是“USB 10/100/1000 LAN”。那么添加静态路由的命令如下:

sudo networksetup -setadditionalroutes "USB 10/100/1000 LAN" 10.10.0.0 255.255.0.0 10.10.0.1

这个命令的格式是:

networksetup -setadditionalroutes <网络服务名> <目标网段> <子网掩码> <网关>

意思是:把“10.10.0.0/16”这条路由绑定到有线网卡的服务上,网关是10.10.0.1。绑定到对应网络服务后,只要这个服务被系统识别并激活,路由就会自动加入路由表。

如果有多段内网需要添加,可以在同一命令行里继续追加参数,格式为“网段 掩码 网关 网段 掩码 网关……”:

sudo networksetup -setadditionalroutes "USB 10/100/1000 LAN" 10.10.0.0 255.255.0.0 10.10.0.1 172.16.8.0 255.255.255.0 10.10.0.1

添加完成后,断开网络重连一次,再看路由表:

netstat -rn | grep 10.10

如果能看到类似:

10.10/16 10.10.0.1 UGSc en0

说明已经永久生效。实测在macOS 14/15的系统上,这种配置方式是最稳的,没有之一。

3.3 调整网络服务顺序,防止默认路由被抢

前面说过,如果系统默认路由跑到了有线网卡上,外网就是不通。所以配置双网卡的另一步重要操作是调整网络服务顺序,让Wi-Fi排在前面,或者让内网网卡不参与默认路由竞选。

打开“系统设置” -> “网络” -> 左下角或右下角的“更多选项” -> “设置服务顺序”(旧版本是“服务顺序”按钮),把Wi-Fi拖到有线上面。

要注意的是,有些版本Mac在“网络”设置里并不能直接拖拽,需要点右下角的按钮进入服务顺序编辑。调整完后,系统会重新按顺序生成默认路由,默认路由会优先选择Wi-Fi。

这里补充一个知识点:如果你不想调整服务顺序,也可以使用另一种方案——开启有线的“关闭所有受限网络”或者直接关掉有线网卡的IPv4 DHCP分配,只保留一个“链路本地地址”。但这种方式太极端,会丢内网,不建议。

调整顺序之后,还需要确认一下默认路由是否真的落在Wi-Fi上,执行:

netstat -rn | grep default

如果第一条就是:

default 192.168.1.1 en1

那么外网已经没问题了。

3.4 一键切换场景:适合你经常在“纯内网”和“双网”之间切换

很多公司网络环境会限制某种模式,比如开会插有线投屏、去实验室断Wi-Fi。天天手动改路由也不现实,所以我习惯准备两个脚本,放在/usr/local/bin下,方便随时切换。

第一个脚本:开启双网模式(默认外网优先 + 内网静态路由)。

#!/bin/bash # 双网模式:把Wi-Fi设置为默认路由,添加内网静态路由 WIFI_SERVICE="Wi-Fi" LAN_SERVICE="USB 10/100/1000 LAN" LAN_NET="10.10.0.0" LAN_MASK="255.255.0.0" LAN_GW="10.10.0.1" # 1. 删除内网本来可能存在的默认路由 sudo route -n delete default 2>/dev/null # 2. 设置Wi-Fi优先 sudo networksetup -setnetworkserviceenabled "$WIFI_SERVICE" on sudo networksetup -setorderoftheservices "$WIFI_SERVICE" "$LAN_SERVICE" 2>/dev/null # 3. 添加静态路由 sudo routes -n add ${LAN_NET}/${LAN_MASK##*/} $LAN_GW 2>/dev/null || sudo route -n add $LAN_NET $LAN_GW sudo networksetup -setadditionalroutes "$LAN_SERVICE" $LAN_NET $LAN_MASK $LAN_GW echo "双网模式已启用:外网走Wi-Fi,内网走有线"

第二个脚本:恢复纯内网模式。

#!/bin/bash # 纯内网模式:取消静态路由,让默认流量回到有线 LAN_SERVICE="USB 10/100/1000 LAN" LAN_NET="10.10.0.0" LAN_GW="10.10.0.1" sudo route -n delete -net $LAN_NET $LAN_GW 2>/dev/null sudo networksetup -setadditionalroutes "$LAN_SERVICE" echo "已恢复纯内网模式"

注意这个脚本里删除静态路由时需要匹配子网掩码,直接route -n delete 10.10.0.0/16在某些macOS版本可能不生效,需要用-net加掩码的方式。具体写法可以结合netstat -rn查看实际路由条目来调整。

4. 折腾路上最常见的几个坑

4.1 路由添加成功但ping不通内网IP

这种情况大概率不是路由配置问题,而是目标内网机器开了防火墙,或者Mac自带的“应用防火墙”拦了ICMP。你可以先ping一下网关:

ping 10.10.0.1

网关能通说明有线物理链路没问题,如果网关也不通,检查网线、交换机端口、有没有插入VLAN需要配置(公司环境可能需要额外设置VLAN ID,这就要找IT开通了)。

还有一种可能性就是子网掩码写错了。你以为内网是10.10.0.0/16,结果实际规划是10.10.8.0/24,这时候你访问10.10.9.1的时候,系统匹配不到静态路由,默认走了Wi-Fi,当然不通。解决办法就是精确网段,或者改成更大范围的掩码,比如/16,这样只要内网都是10.10.x.x,就都能覆盖。

4.2 重启后路由丢失

如果你用的是route -n add手动添加的临时路由,重启后丢失是非常正常的。这时候就用前面说的networksetup -setadditionalroutes重新添加一遍,并确认添加时绑定的网络服务名字是对的。

有时候networksetup -listallnetworkservices显示的名字和实际不符,比如一些USB转以太网网卡的名字里带“USB GbE”而不是“USB 10/100/1000 LAN”,复制粘贴时注意空格和大小写。最好直接复制命令输出的全名,别手打。

4.3 睡眠唤醒后路由表异常

这个问题在旧版macOS里偶有发生,表现为睡眠唤醒后静态路由凭空消失,或者默认路由跳到了有线网卡。我实测在macOS Sonoma和Sequoia上,networksetup -setadditionalroutes配置的路由相对稳定,很少出现睡眠丢失。

如果还是出现了,可以写一个简单的launchd plist,在唤醒时重新执行一次路由脚本。网上很多方案,我就不贴了,实际用下来优先级最低。建议先用networksetup方案,不行再上launchd。

4.4 内网DNS解析失败,但IP能ping通

这又是一个容易忽略的坑。你在内网访问某个服务时,直接输IP地址没问题,但输入域名就报错。这说明路由已通,但DNS没走内网。

Mac默认的DNS是Wi-Fi获取的外网DNS,自然解析不了公司内网域名。解决办法是在“系统设置” -> “网络” -> 对应有线网卡的“详细信息” -> “DNS”里,把公司内网的DNS服务器地址加进去,比如10.10.0.2之类的。

但要注意顺序,如果你同时让外网和公司DNS生效,最好将内网DNS地址放在追加列表靠前的位置,因为macOS会按顺序尝试。遇到解析特别慢的,也可以用scutil --dns查看当前系统DNS配置顺序,再对症调整。

4.5 两个网段的默认路由都被抢,轮流断网

这种情况一般出现在“服务顺序”调整之前或者误删默认路由之后。表现为一会儿外网能通,一会儿不行,netstat -rn里default一会在Wi-Fi一会在有线。

其实就是两个网卡都有默认路由,系统在切换时发生了抖动。解决思路:给有线网卡去掉默认路由的能力,或让它给默认路由最高的路由“度量值”。macOS上通常可以通过配置顺序解决,把Wi-Fi放到最上面,另外不要随意route -n delete default两个网关,只删内网的那条即可。

5. 我踩过的一些额外心得

5.1 关于“服务顺序”和“路由”到底先调哪个

我建议先调服务顺序,再加静态路由,因为服务顺序影响的是默认路由归属,静态路由影响的是精确网段归属。而且服务顺序变更后,旧的临时路由可能残留,最好配置完顺序之后重启一次网络服务再添加静态路由,会清爽很多。

5.2 关于公司网络的坑

公司网络有时会做准入控制,比如要装Agent、或者需要账号密码拨号。如果你有线网卡已经连上,但内网始终拿不到IP,多半是802.1X准入没通过。这时候查无线网卡能不能单独连内网Wi-Fi,先排除准入问题,再研究路由配置。

5.3 关于“外网”是否需要公司代理

如果你在的公司访问外网本身还要走代理(比如浏览器配置了PAC代理),那么即使你路由配置正确,浏览器里外网也可能仍然打不开。这时要检查“系统设置” -> “网络” -> “代理”,确认是否走代理,以及代理服务器本身是否可达。如果代理服务器在内网,那就意味着访问外网的流量实际还是要先走到内网网关的代理上……这种情况下双网卡的路由配置思路要反过来:默认路由走内网,外网走代理,具体就得看公司代理策略了。

这个属于特殊场景,我这里就不展开。

5.4 给笔记本用户的一句忠告

如果你用的是MacBook,经常在公司和家之间移动,建议公司场景单独建一个“网络位置”。在“系统设置” -> “网络” -> “位置”里新建一个位置,配置好双网卡路由,在家切回“自动”位置,这样就不会把公司的静态路由带到家里去,避免到家后路由表一片混乱。

最后的实践经验总结

折腾双网卡这件事,本质上就是“搞清楚自己有哪些网段,哪些该走哪条路,然后把路由表写明白”。很多人配不好,不是命令不会敲,而是没理解“默认路由”和“静态路由”的关系。一旦想通了,后面就是重复执行命令的事。

我这套方案里最核心的其实就三样:删掉内网默认路由、让Wi-Fi当默认网关、给内网精确网段加静态路由。配合networksetup -setadditionalroutes做持久化,基本可以做到“配置一次,长期使用”。你如果在配置过程中遇到跟我不太一样的网络环境,可以先把netstat -rn的输出贴给熟悉网络的人看一眼,比对一下默认路由的走向,问题一般很快就能定位。

最后再分享一个自己的小习惯:每次调整完路由,我都会先ping网关,再ping目标IP,最后再访问域名,三步走,哪一步有问题就知道是哪一层的问题,排查效率高很多。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/17 13:06:11

MCP Apps远程测试指南:用cloudflared隧道连接Claude.ai

MCP Apps远程测试指南&#xff1a;用cloudflared隧道连接Claude.ai 【免费下载链接】ext-apps Official repo for spec & SDK of MCP Apps protocol - standard for UIs embedded AI chatbots, served by MCP servers 项目地址: https://gitcode.com/GitHub_Trending/ex/…

作者头像 李华
网站建设 2026/9/17 13:04:52

Feast Snowflake 离线存储(Snowflake Offline Store)配置与实战指南

Feast Snowflake 离线存储&#xff08;Snowflake Offline Store&#xff09;配置与实战指南 【免费下载链接】feast The Open Source Feature Store for AI/ML 项目地址: https://gitcode.com/GitHub_Trending/fe/feast 本文围绕 Feast 开源特征平台中面向 Snowflake 的…

作者头像 李华
网站建设 2026/9/17 13:04:04

Win10越用越慢?13种优化方法从启动项到电源策略

Windows 10用久了变慢几乎是躲不掉的事&#xff0c;但十有八九不是硬件真不行&#xff0c;而是系统里堆了太多默认开着、默认运行、默认保留的东西。我手上这台办公本用了四年多&#xff0c;中间只加过一条内存&#xff0c;系统一直没重装&#xff0c;靠的就是隔一段时间按固定…

作者头像 李华