ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Windows双网卡同时上内网和外网:路由表与跃点数配置详解

Windows双网卡同时上内网和外网:路由表与跃点数配置详解 老实说这个需求我一开始觉得特别“小儿科”不就是开个Wi-Fi、插根网线吗直到我在帮一个做嵌入式开发的朋友调板子时被他的网络环境折腾到怀疑人生我才意识到双网卡同时干活尤其是Windows系统下“有线连内网、无线连外网”这种组合坑远比你想象的多。一个不留神要么内网资源打不开要么外网直接掉线更有甚者两边都通但两边都慢那种“薛定谔的网络状态”能把人逼疯。这篇文章不打算讲太深奥的网络原理就把我实测过、踩过坑、最后稳定运行了几个月的方案分享出来。目标很明确让所有遇到“内网外网同时使用”需求的读者能照着抄作业顺便理解背后那几条关键的“网络规则”以后再遇到类似问题能自己诊断。先说结论这个问题百分之八十的解法都落在“路由表”和“跃点数”这两个词上。剩下的百分之二十是你得搞清楚自己的内网到底有多大、有哪些网段以及你的网络管理员有没有给你使绊子。1. 一张网卡上不了内网两张网卡全断网先搞懂你这台电脑到底在“纠结”什么在用Wi-Fi连接互联网、有线网连接公司/实验室内部网络这个场景里你的电脑实际上相当于同时找到了两个“门口”都能出去。一个门口挂着“外网”招牌一个门口挂着“内网”招牌。正常逻辑应该是想去内网服务器就走有线那个门想去互联网就走Wi-Fi那个门。听起来很简单对不对但Windows不会根据你访问的“名字”自动判断应该走哪个门它眼睛里只有一串串数字——IP地址。1.1 为什么两根“网线”都插着反而连百度都打不开这是新手最容易遇到的现象单独插网线内网OA系统访问自如单独连Wi-Fi外网视频刷得飞起。但只要两个一起开立刻全盘崩溃。原因在于你的电脑在启动时会通过有线网卡和无线网卡各自获取到一个IP地址同时也会各自拿到一个“默认网关”。有些内网环境不规范网关设置得很随意甚至和你的Wi-Fi路由器网关长得一模一样。电脑一看两个网关都能用那到底把数据包交给谁它往往会优先选择那个它认为“更优秀”的网络接口。如果电脑错误地选择了有线网卡作为访问外网的出口但你公司的防火墙压根不允许你从有线网卡去访问外网那结果就是所有上网请求都被丢进了内网路由器这个“黑洞”里页面自然就转圈圈转个不停。有些场景更离谱内网网关自己也接了外网但是带宽少得可怜于是你感觉电脑能上网但慢如蜗牛看个图片都要加载半天。1.2 一个确定性的需求描述与我的实际测试环境在动手操作前建议先和我一样把网络环境的具体参数摸清楚。我的测试环境是这样的网络类型连接方式IP地址示例默认网关用途内网有线网卡192.168.1.100192.168.1.1访问公司的代码服务器、NAS、打印机等外网Wi-Fi192.168.50.66192.168.50.1访问互联网、云服务、日常网页浏览这里最核心的一点是两个网段完全不重叠。一个是192.168.1.x一个是192.168.50.x。如果你们公司内网用了192.168.50.x这种非常常见的网段碰巧你家路由器也是这个网段那问题会复杂很多我后面会专门说这种情况。1.3 按下快捷键WinR输入cmd先把基础信息摸清楚别急着配先看现状。在命令行里敲下两条命令ipconfig route printipconfig能看到你两个网卡分别拿到的地址、掩码和网关。route print则能直接看到当前电脑的路由表。你会发现在“IPv4 路由表”里有两个“0.0.0.0”开头的条目这叫默认路由而且它们前面的“跃点数”往往一个是自动获取一个可能显示为“35”、“45”甚至“自动”字样。这两个默认路由的存在就是所有混乱的根源。2. 路由表和跃点数给电脑发一张“优先通行证”没这张证它就乱跑很多朋友一听“改路由表”就头皮发麻觉得那是搞网络的老古董才会用的命令。其实不用怕这个操作比你在Excel里填公式还简单。你只需要理解一个极其生活化的类比——导航软件的“路线偏好”设置。2.1 想象一下快递分拣中心每个包裹都需要一份派送指引你的电脑就是那个快递分拣中心网卡就是两个装货口。当一个来自浏览器的“访问百度”请求出现时相当于一个包裹上写着“目的地互联网任意地址”。分拣员看一眼路由表发现有一个“0.0.0.0/0”的规则意思是“凡是没写具体地址的包裹都给我送到这个装货口”。可问题是现在有两个装货口都写了这句话。这时候分拣员就得看哪个装货口的“优先级标签”更高。这个优先级标签就是“跃点数Metric”。跃点数越小优先级越高。所以原理很简单把外网Wi-Fi那个默认路由的跃点数调小比如设成10或者干脆设一个固定的较低值。把内网有线那个默认路由的跃点数调大甚至直接让它失效。这样电脑会把所有“不明确”流量的出口默认交给Wi-Fi外网自然就通了。2.2 那内网怎么通靠“精确匹配”告诉电脑192.168.1.x这个小区里的门牌全部走有线口默认路由管的是“不知道去哪的包裹”但如果你明确知道“192.168.1.50”这台服务器就在有线网卡后面那就得再加一条“精确派送规则”。这条规则就是我们要手工添加的静态路由。静态路由的语法是这样的route add 192.168.1.0 mask 255.255.255.0 192.168.1.1 -p拆解一下192.168.1.0内网网段的“小区门牌号”网络地址。mask 255.255.255.0告诉电脑这个小区的大小是254户人家即192.168.1.1~192.168.1.254。192.168.1.1去往这个小区要经过的“门卫”即有线网卡的网关。-p表示永久生效Persistent重启电脑后不会丢失。加完这条规则后电脑再去访问192.168.1.x的任何地址就直接走有线网卡。电脑访问其他任何地址则全部交给Wi-Fi的默认路由。3. 实操方案一完全图形化操作不敲一行命令解决60%的问题适合只想立刻能用的人我知道很多人的Windows系统是精简版的或者对命令框有心理阴影。那么你先试这个方法。这个方案的思路很朴素手动指定两个网卡的优先级权重让Windows在“默认路由”的抉择上偏向Wi-Fi因为你的外网流量需求通常更大。3.1 进入网卡高级TCP/IP设置这个入口比较隐蔽但一路点下去就行。按WinR输入ncpa.cpl回车。这会打开“网络连接”窗口。你会在里面看到两个或更多网卡图标。右键点击你的“无线网络连接”Wi-Fi那个选择“属性”。在弹出的窗口里找到“Internet协议版本4TCP/IPv4”双击它或者选中后点“属性”。然后点击右下角的“高级”按钮。这里就是关键战场。在高级TCP/IP设置里把IP设置和DNS设置都暂时放一边我们先看最下方那里有几行字其中一行写着“自动跃点”系统默认是勾选状态。把“自动跃点”前面的勾选取消掉然后在下面输入一个较小的数字比如1或者5。接着用同样的路径对你的有线网卡进行设置。但这次不同你需要稍微思考一下。我的做法是Wi-Fi网卡的“接口跃点数”设为10。有线网卡的“接口跃点数”设为20。这样Wi-Fi的优先级就高于有线网卡所有默认流量都会倾向走Wi-Fi。3.2 为什么这个方法有时候会“失灵”你可能会发现按上面操作完后外网确实通了但内网偶尔又不行了。这很符合预期。因为这种“调跃点数”的方式只是让Wi-Fi在“抢默认路由”这件事上赢了但没解决“有线网卡拿到内网地址后如何精准发回数据包”的问题。尤其是当你的内网服务器和有线网卡的IP不在同一个子网或者涉及多个交换设备时Windows依然可能会尝试用那个“优先级低但有线”的网关去访问内网资源。所以这个图形化方案更适合内网很小、只有一台路由器且没有搞什么VLAN划分的环境。如果你的公司内部网络稍微复杂一点有多个网段那么这个方案大概率会让你想砸电脑。它治标不治本。3.3 确认修改生效看一眼路由表图形界面点完“确定”后马上回到命令行再敲一次route print。注意看“IPv4 路由表”里那两个“0.0.0.0”开头的条目他们前面会多了一个你设置的“跃点数”比如10和20。再用ping命令做交叉验证ping 192.168.1.1 ping baidu.com如果都能通那就说明你的基本盘稳住了。4. 实操方案二一条静态路由一个跃点数搞定复杂场景99%的内外网共存问题都能解这是我在做项目时最常用、也最推荐给所有人的终极方案。图形化界面比较适合“我也想顺便理解一下原理”而静态路由命令则是“我不想管原理但我要稳定得一批”的方案。这个方案的核心逻辑就三句话把所有外网流量交给Wi-Fi。把所有指定内网网段的流量交给有线网卡。重启电脑也不能丢。4.1 第一步把“有线网卡”的默认路由摘掉我们不需要有线网卡去访问外网所以它这个“默认路由”是多余的。逻辑上我们应该让它失效。还是用ncpa.cpl打开网络连接右键有线网卡进属性 → IPv4 → 属性 → 高级把“自动跃点”的勾选取消然后给它设一个很大的值比如100。或者更彻底一点在IPv4的常规设置里把有线网卡的默认网关直接留空。留空网关是个好习惯意味着你的有线网卡只知道“自己”的IP地址和掩码不知道往哪“出门”。这时候系统就不会轻易把外网请求分配给有线网卡。注意如果你的内网需要在两个网段之间互相通信比如你得通过内网的A路由器去访问B服务器那网关不能留空还是得填上。这时候就回到刚刚讲的给有线网卡也在“高级”里设一个大的跃点数比如50。4.2 第二步添加内网网段的精确静态路由假设你的内网有两三个网段192.168.1.0、192.168.10.0甚至还有一个10.10.10.0。没关系一条一条加。在命令行里执行route add 192.168.1.0 mask 255.255.255.0 192.168.1.1 -p route add 192.168.10.0 mask 255.255.255.0 192.168.10.1 -p route add 10.10.10.0 mask 255.255.255.0 10.10.10.1 -p这些命令的意思非常直白告诉电脑“192.168.1.0这个网段的包裹全部交给192.168.1.1这个快递员”。如果有进一步的跳转需求比如10.10.10.0网段需要通过路由器10.10.10.1中转去访问更高级别的内网核心机房那你只需要把“网关”换成那台中转路由器的IP即可。4.3 第三步把外网的默认路由优先级拉满同样的为了保证Wi-Fi能拿到所有“残余流量”的处理权把Wi-Fi网卡的“自动跃点”也取消掉设一个很小的值比如5。这样所有没被静态路由匹配到的流量统统走Wi-Fi。最终你的路由表应该体现出下面这种理想状态目的地掩码网关接口跃点数0.0.0.00.0.0.0192.168.50.1192.168.50.665192.168.1.0255.255.255.0192.168.1.1192.168.1.10010192.168.10.0255.255.255.0192.168.10.1192.168.1.10010做到这一步你的网络才算真正“两个世界各走各的门”。4.4 踩坑时刻关于“永久路由”和“临时路由”的坑很多人用route add之后当下好用结果第二天一开机又不行了。大概率是忘了加-p参数。没有-p参数的路由重启后就自动失效Windows会重新抢夺控制权把所有流量又搞成一团乱麻。另外如果你遇到“添加路由提示路由添加失败对象已存在”那说明之前可能已经有一条相似的路由可以先用route delete删掉再试。删除命令也很简单route delete 0.0.0.0 route delete 192.168.1.0不过删除带“0.0.0.0”的默认路由要谨慎如果同时把Wi-Fi的也删了可能导致上不了网。个人经验是尽量别动0.0.0.0直接改跃点数就好。5. 排查专项配置折腾完了还是不通按这个顺序检查别让玄学背锅方案都按标准模板配好了可就是有个别地址访问不了或者时好时坏。这个过程我称之为“被路由器支配的恐惧”。遇到这种情况先别急着敲命令重启网卡按下面的顺序过一遍多半能精准找到病灶。5.1 第一查是不是路由器的“内网防火墙”或“AP隔离”在作祟很多公司内网为了安全会在核心交换机或者路由器上开启“端口隔离”。意思就是即使你和另一台服务器连在同一个内网也不允许电脑直接访问它。你在这边疯狂ping 192.168.1.50要么超时要么“请求超时”但服务器本身看着是好的。这个怎么排查你可以先试试ping一下内网网关比如ping 192.168.1.1如果通说明线是好的。然后再说如果连网关都ping不通那就不是路由表问题而是物理链路或者IP设置冲突了。另外很多时候不是防火墙拦截ping而是对方服务器本身禁ping。这时候不能光靠ping来判断网络通不通。试着用telnet或直接浏览器访问他的具体端口服务试试。5.2 第二查是不是内网的IP地址网关配错了这是我亲身踩过的大坑。有些内网管理混乱的机构会告诉你“网关是192.168.1.0”那是网络地址根本不能当网关用正确的网关应该是192.168.1.1。还有的比较大方的直接给你静态IP让你填但掩码填错了。比如你填了255.255.0.0那电脑就会认为整个192.168.x.x网段都在你旁边不会听从你添加的静态路由直接尝试用二层广播去访问所有东西结果自然是不通的。所以在排查静态路由之前务必确认一下你的内网网段、掩码、网关这三个参数是不是准确无误。5.3 第三查清理ARP缓存和DNS缓存如果你改过网关、换过路由器又或者在调试过程中自己手动切换过静态IP这俩缓存里可能还存着旧地址。有时候你会遇到“换了新网关但网络还是莫名卡顿”的情况那大概率是ARP缓存没刷新。在命令行里跑arp -d ipconfig /flushdns这两个命令都是无痛的清理完再重新访问目标地址通常会有惊喜。5.4 第四查你到底是不是被Windows的“按流量计费”坑了这个比较隐蔽。有时候你手动配置的IP和DNS没问题但Windows 10/11会莫名其妙地把某个网卡识别成“按流量计费的连接”然后系统更新、后台商店应用之类的东西就全被卡死了。你感觉网络通但又好像不通。遇到这种“能上网但很多服务用不了”的诡异问题去“设置 → 网络和 Internet → WLAN → 硬件属性”里把“按流量计费的连接”关掉试试。5.5 终极排查看一眼静态路由到底生效没有什么都配了还是有问题那就逐层检查。用tracert命令追踪路径。比如我想看看访问192.168.1.50到底走的是哪个网关tracert 192.168.1.50如果第一跳就显示192.168.1.1说明路由是走对口的。如果第一跳显示的是192.168.50.1说明路由表优先级还是没有按我们设想的执行要么是跃点数设置不对要么是掩码写错了。在tracert面前一切的“我感觉”都会原形毕露。6. 进阶优化多网段内网环境、双网关自动切换与开机自启脚本如果看到这里你还意犹未尽恭喜你你是真的想把这块东西吃透。下面聊几个我在实际调试中遇到的高阶场景和对应处理办法。6.1 如果内网有多达几十个网段该怎么配有些大型研发机构内网网段规划得很细比如研发部在192.168.20.x生产部在192.168.30.x测试环境在172.16.x.x。你要是真的一条一条去route add手都会点酸。这时候可以用route命令配合for循环来批量添加。比如在bat脚本里写echo off route add 192.168.20.0 mask 255.255.255.0 192.168.1.1 -p route add 192.168.30.0 mask 255.255.255.0 192.168.1.1 -p route add 10.1.0.0 mask 255.255.0.0 10.1.0.1 -p或者更聪明一点如果你的内网网关有路由协议并且支持你直接指向总核心交换机那可以只用一条更短掩码的路由把整个大网段指过去。比如route add 10.0.0.0 mask 255.0.0.0 10.1.0.1 -p这就相当于告诉电脑凡是10.开头的地址都去找10.1.0.1问路。前提是你确保那个网关是全网段的“交通枢纽”。6.2 万一同一个网段撞车怎么办之前说的测试环境里我特意把内外网设计成完全不一样的网段。但现实中这种情况非常奢侈。比如你家路由器是192.168.1.1单位内网也是192.168.1.1。这时不管你用静态路由还是跃点数都会崩溃。因为电脑面对相同的IP网段无法区分到底该把包给谁。这种情况下解法就一个改其中一方的网段设置。首选改家里的路由器把Wi-Fi网的DHCP改成192.168.5.1或者172.16.0.1这类生僻网段。但如果你改不了公司路由器大部分人都改不了那就只能委屈家里的路由把LAN口设置改成埃尔法不冲突的网段。总之必须让两个网段错开。还有一种情况是你只有一根有线网线但需要同时访问内网和某个特定的外部IP。这时候的原理依然一样把外网流量切成“默认路由”和“特定网段路由”只是静态路由的网关不再是有线网卡而是那个外部网络的下一跳出口而已。理解了底层逻辑任何复杂变体都只是换参数的问题。6.3 做一个“双击即生效”的批处理脚本对于需要定期带着笔记本在公司、家里、客户现场来回跑的人来说每次手动敲命令还是有点繁琐。我习惯在桌面上放一个内网配置.bat脚本内容如下echo off route delete 192.168.1.0 route delete 192.168.10.0 route add 192.168.1.0 mask 255.255.255.0 192.168.1.1 -p route add 192.168.10.0 mask 255.255.255.0 192.168.10.1 -p pause同时另一边再放一个外网优先.bat脚本用来把Wi-Fi的跃点调低并清理路由。如果你懂一点组策略甚至可以直接把这个批处理脚本设置为开机自启省的每次切换网络环境都要想“我先配哪个再改哪个”。6.4 一个容易忽视的隐患DNS服务器内外网双通之后还有个隐藏的拦路虎——DNS。外网地址解析通常没问题Wi-Fi的DHCP会给分配正常公网DNS。但内网很多服务器用的是内网域名比如gitlab.company.local它需要通过内网DNS服务器解析。如果你发现外网都正常但是某些内部网站打不开记得检查一下这个网卡的DNS设置添加内网DNS服务器地址进去。在TCP/IPv4属性里给有线网卡配置备用DNS或者手动填上内网DNS服务器的IP。这样双路解析都正常互联网和内部网同时稳定。其实很多人都把这个问题想复杂了觉得要装什么分流软件、网络切换工具。纯Windows环境真不用系统原生就支持这种多网卡复杂路由只要你把优先级和静态路由用明白它比任何第三方工具都稳定。当然如果你就是不想记命令、不想动网络设置那买个网络切换器或内网网关设备就是另一条花钱买省心的路子。但我个人建议作为经常和网络打交道的人亲手配一次路由表比买十个切换器都值毕竟可迁移性太强了。下次你去朋友家发现他家里网络一塌糊涂你突然来一句“你跃点数多少”瞬间就能把场子找回来这就是硬功夫。
返回列表