
電腦上插了兩塊網卡一根網線接辦公內網一根網線接寬帶外網結果要么外網上不去要么內網系統打不開這個場景估計不少人都撞上過。問題不在網卡本身而在 Windows 的路由表——兩塊網卡各自帶著默認網關系統不知道該把數據往哪兒送于是“打架”。這篇文章就把雙網卡配置這件事徹底講清楚從原理到實操再到排障照著做就能讓外網和內網各走各的路互不干擾。1. 雙網卡配置到底在解決什么問題1.1 為什么兩塊網卡會“打架”很多人以為網卡插上就能用兩塊網卡自然就是兩個網絡都能上。實際上 Windows 在同一時間只會選擇一個默認網關也就是“所有數據包的默認出口”。當內網網卡和外網網卡都配置了網關時系統會按自動躍點數Metric選一個作為默認網關另一個被晾在一邊。于是你看到的典型癥狀就是外網偶爾能上但慢得離譜或者內網系統徹底打不開又或者重啟一次網絡就換了一種“抽風”方式。這個問題的本質是路由決策。Windows 每發(fā)一個數據包都會拿目標 IP 和路由表逐條比對先匹配掩碼范圍再比較躍點數最后決定從哪個網卡出去。內網地址段如果沒被路由表精確命中數據包就會跑到默認網關去而默認網關是外網的內網包自然就丟了。反過來外網數據包如果被內網網卡搶了默認路由就會發(fā)到內網網關網關一看目標不是內網地址直接丟棄外網就斷。1.2 路由表的基本概念配置雙網卡前先理解路由表的四個核心字段字段含義舉例網絡目標數據包要去的地址段10.10.0.0網絡掩碼地址段的范圍大小255.255.0.0網關下一跳設備的 IP10.10.0.1接口從哪塊網卡發(fā)出10.10.5.100Windows 判斷一個數據包走哪條路由關鍵是“最長匹配”原則掩碼越長、范圍越精確的路由優(yōu)先級越高。比如目標 10.10.1.50 同時命中 0.0.0.0/0 和 10.10.0.0/16 兩條路由時系統一定走后者因為它的掩碼更長、更精確。這就是雙網卡配置的理論基礎——你不需要刪除默認路由只需要給內網地址段添加一條更精確的靜態(tài)路由內網流量就會自動走內網網卡其余流量繼續(xù)走外網默認路由。提示雙網卡配置的核心思想不是“讓兩塊網卡同時上網”而是“讓不同的流量走不同的網卡”。默認路由只能有一條剩下的靠精確路由來分流。2. 動手之前先理清網絡拓撲2.1 采集網絡信息別上來就敲命令雙網卡配置翻車十有八九是沒搞清楚網絡地址段就開始操作。我的建議是先花五分鐘把信息摸清楚再決定怎么配。按 Win R 輸入cmd打開命令行執(zhí)行ipconfig /all重點看兩塊網卡各自的信息IPv4 地址、子網掩碼、默認網關、DNS。把結果抄下來確認哪個網卡對應外網哪個對應內網。一般辦公環(huán)境里外網網卡可能是 DHCP 自動獲取地址段常見是 192.168.x.x 或 172.16.x.x內網網卡通常是固定 IP地址段多為 10.x.x.x 或 172.16.x.x。接下來再看當前路由表route print -4這里會列出所有 IPv4 路由。你大概率會看到兩條 0.0.0.0/0 默認路由分別指向兩個網關其中一條的躍點數更小系統就選了它。這就是問題的根源。2.2 確定配置策略的幾個關鍵問題在動手前先回答下面幾個問題哪個網卡有訪問互聯網的能力只有這個網卡的默認網關需要保留。內網有哪些地址段是單個網段還是多個網段比如 10.10.0.0/16 和 172.16.3.0/24有幾個內網段就要加幾條路由。內網網關是多少內網網卡的網關要作為靜態(tài)路由的下一跳地址。內網網卡用 DHCP 還是靜態(tài) IP如果內網網卡走 DHCPIP 變化會導致路由失效強烈建議內網網卡改成靜態(tài) IP。這些信息決定了下文的配置方案。如果內網只有一個網段靜態(tài)路由方案最省事如果內網網段很多或者你不想維護一堆路由規(guī)則可以試試調整接口躍點數的方式后面會講到。2.3 事先確認連通性配置之前先用 ping 測試一下當前狀態(tài)作為基線ping 外網網關IP ping 內網網關IP如果內網網關都 ping 不通說明網線、IP、防火墻這些基礎問題還沒解決這時候配置路由沒有意義。順便說一句有些內網設備會禁 ICMPping 不通不代表網絡不通可以再試試訪問內網的具體服務端口比如telnet 10.10.1.50 8080能通就說明鏈路是好的只是不響應 ping 而已。3. 兩種主流配置方案3.1 方案一靜態(tài)路由最精準也最常用這是我最推薦的方式思路很簡單內網網卡只負責內網網段外網網卡負責其余所有流量。實現方式就是添加一條或多條指向內網網段的靜態(tài)路由。具體步驟分為三步第一步給內網網卡配置固定 IP。打開“網絡和 Internet 設置” - “更改適配器選項”找到內網網卡右鍵屬性雙擊“Internet 協議版本 4 (TCP/IPv4)”填入內網 IP、子網掩碼。關于網關這一欄我的建議是先留空網關只作為后面靜態(tài)路由的下一跳參數使用不需要填在這里。如果某些內網環(huán)境必須填網關才能通那就填上但后續(xù)要在“高級”設置里把自動躍點數調大或者干脆用下方命令行的方式處理。第二步添加靜態(tài)路由。回到管理員命令行執(zhí)行route add 10.0.0.0 mask 255.0.0.0 10.10.0.1 -p這條命令的含義是凡是目標地址在 10.0.0.0/8 范圍內的數據包下一跳交給 10.10.0.1內網網關。-p參數表示持久化路由重啟后仍然有效。這里有幾個參數要解釋清楚10.0.0.0是內網地址段的起始地址。255.0.0.0是子網掩碼兩者配合決定了路由覆蓋的范圍。10.10.0.1是內網網卡的網關數據包會從內網網卡發(fā)到這個地址再由它轉發(fā)。-p對應 persistent不寫的話重啟就丟。第三步驗證。執(zhí)行route print -4確認路由已經寫入然后分別 ping 內網和外網的地址測試。注意route add命令需要管理員權限。普通權限的命令行執(zhí)行會報“需要提升權限”的錯誤。3.2 方案二調整接口躍點數適合內網網段多的情況如果你所在的內網有十幾個網段一條條加路由太痛苦這時可以用另一種思路讓內網網卡接管所有“非外網”流量。做法是把內網網卡的接口躍點數調低外網網卡的躍點數調高這樣當兩條路由的匹配精度相同時系統會優(yōu)先走躍點數小的網卡。操作路徑網卡屬性 - IPv4 - 高級 - 取消“自動躍點”手動填入一個數值。內網網卡填 10外網網卡填 20。原理是 Windows 給每條路由計算一個綜合躍點數數值越小優(yōu)先級越高。所有需要走默認路由的流量會優(yōu)先從躍點數小的網卡出去。這個方案的好處是配置簡單內網網段再多也不用管壞處是它的分流粒度比較粗如果內網和外網存在重疊地址段或者某些流量必須走特定網卡它就搞不定了。另外如果你的外網網卡同時承擔著其他網段的轉發(fā)躍點數法也可能誤傷。3.3 方案三命令行一步到位對喜歡腳本化的朋友可以直接在管理員命令行里完成全部配置。修改網卡靜態(tài) IP 可以用 PowerShellNew-NetIPAddress -InterfaceAlias 以太網 2 -IPAddress 10.10.5.100 -PrefixLength 16添加靜態(tài)路由也可以用 PowerShell 的等價命令New-NetRoute -DestinationPrefix 10.0.0.0/8 -NextHop 10.10.0.1 -InterfaceAlias 以太網 2 -PersistentNew-NetRoute的-Persistent參數相當于命令行的-p。這種方式的好處是可以在一個腳本里完成 IP、網關、路由、DNS 的全部設置適合多臺電腦批量部署。內網 DNS 的配置可以用Set-DnsClientServerAddress -InterfaceAlias 以太網 2 -ServerAddresses 10.10.0.24. 實操演示一次典型的辦公場景配置4.1 場景說明與參數規(guī)劃假設一個典型的辦公環(huán)境外網網卡通過 DHCP 自動獲取當前 IP 為 192.168.1.100子網掩碼 255.255.255.0網關 192.168.1.1內網網卡需要配置靜態(tài) IP 10.10.5.100子網掩碼 255.255.0.0內網網關 10.10.0.1內網里有一臺 ERP 服務器地址是 10.10.1.50還有一條獨立的財務網段 172.16.3.0/24。配置目標訪問 10.10.0.0/16 和 172.16.3.0/24 走內網網卡其余流量全部走外網網卡。4.2 完整配置步驟第一步設置內網網卡靜態(tài) IP。在內網網卡的 IPv4 屬性里填入IP 地址10.10.5.100子網掩碼255.255.0.0默認網關留空DNS 可以填內網 DNS 服務器比如 10.10.0.2也可以暫時不填后面按需補。第二步添加兩條靜態(tài)路由。管理員命令行執(zhí)行route add 10.0.0.0 mask 255.0.0.0 10.10.0.1 -p route add 172.16.3.0 mask 255.255.255.0 10.10.0.1 -p這里第二條第掩碼是 255.255.255.0只覆蓋 172.16.3.0/24 這一個網段。如果你想偷懶也可以只加一條 172.16.0.0 mask 255.255.0.0 的路由把整個 172.16 段都交給內網網關但這樣如果外網也有 172.16 段的資源就會被錯誤地拐到內網去。我的原則是路由覆蓋范圍寧小勿大只寫確實需要走內網的地址段。第三步驗證。先看路由表route print -4確認存在這樣幾條路由網絡目標掩碼網關接口躍點數0.0.0.00.0.0.0192.168.1.1192.168.1.1002010.0.0.0255.0.0.010.10.0.110.10.5.1001172.16.3.0255.255.255.010.10.0.110.10.5.1001然后測試連通性ping 10.10.1.50 ping www.baidu.com兩個都能通說明配置成功。4.3 用 tracert 驗證流量走向ping 通只是第一步你還需要確認流量確實走了正確的路徑。用 tracert 可以直觀看到數據包的下一跳tracert -d 10.10.1.50 tracert -d 8.8.8.8第一個命令的第一個跳點應該是 10.10.0.1第二個命令的第一個跳點應該是 192.168.1.1。如果第一個命令的跳點里出現了外網網關說明路由沒生效回去檢查路由表的接口和網關是不是填錯了。提示tracert -d里的-d參數表示不對 IP 反向解析域名輸出更快也更容易讀。5. 翻車現場與排查技巧實錄5.1 常見問題速查表現象可能原因處理方法配置完成后重啟路由丟失沒加-p參數重新用route add … -p添加內網能通外網時斷時續(xù)內網網卡也配置了默認網關系統選了內網作為默認出口把內網網卡的默認網關清空外網能通內網某臺機器不通靜態(tài)路由的掩碼覆蓋范圍不夠確認內網地址段補充路由規(guī)則路由表里添加了規(guī)則但流量不走接口 IP 變化舊路由失效刪除舊路由用新接口重新添加內網網卡是 DHCPIP 變了路由失效DHCP 動態(tài)分配導致 IP 漂移內網網卡改成靜態(tài) IP加了路由之后某個網站打不開網站的地址段恰好被靜態(tài)路由覆蓋流量被拐進內網檢查路由覆蓋范圍拆分成更精確的網段5.2 路由不生效的經典排查思路先說一個我踩過的坑用route add添加了靜態(tài)路由route print也能看到但流量就是不走這條路。后來發(fā)現是因為添加路由時沒指定接口Windows 自動選了躍點數最小的網卡作為接口而這個網卡恰好是外網網卡。數據包被發(fā)到外網網卡后雖然下一跳是內網網關但外網網卡和內網網關不在同一二層網絡包根本發(fā)不出去。解決辦法是添加路由時用if參數顯式指定接口編號。先查接口編號route print -4輸出第一列 Interface List 里有每個網卡的編號比如內網網卡的編號是 15。然后添加路由時帶上 if 參數route add 10.0.0.0 mask 255.0.0.0 10.10.0.1 if 15 -p這樣可以強制讓路由走內網網卡徹底避免選錯接口的問題。5.3 DHCP 和系統更新導致的坑公司網絡如果統一走 DHCP你內網網卡的 IP 每次開機都可能變靜態(tài)路由里的接口 IP 對應的路由就廢了。這種情況下有兩個選擇一是找網管把內網網卡的 MAC 地址綁定到固定 IP二是堅持使用靜態(tài) IP對內網網卡手動配置。我個人強烈推薦后者因為辦公電腦的內網 IP 通常需要穩(wěn)定手動配置反而省心。另外Windows 大版本更新后有可能會重置網絡配置包括清空靜態(tài)路由和網卡的高級設置。我遇到過幾次某次系統更新后內網突然不通一看路由表空了一條只能重新執(zhí)行一遍 route add。建議把配置命令存成腳本出了問題時一鍵恢復下一節(jié)會給出腳本。5.4 防火墻和 DNS 的連帶問題雙網卡配置完成后內網和外網都能通了但有時還是會出現“能 ping 通但打不開網頁”的情況這時候多半是 DNS 的問題。外網 DNS 用 114.114.114.114 或者運營商的 DNS 沒問題但內網資源如果用域名訪問那必須同時配置內網 DNS。我的做法是外網網卡只填外網 DNS內網網卡只填內網 DNS別混著填。因為 Windows 查詢 DNS 時會按網卡順序嘗試混填可能導致內網域名被外網 DNS 拒答。注意Windows 防火墻有時會攔截跨網卡的訪問尤其是從外網網卡去訪問內網共享資源時。如果排除了路由問題還是不通用臨時關閉防火墻測試一下能通就把對應的入站規(guī)則加白名單不要因噎廢食長期關防火墻。6. 配置腳本與長期維護6.1 一鍵配置腳本把常用的配置命令寫成一個批處理腳本省去每次手敲的麻煩。以下腳本以第 4 節(jié)的場景為例echo off rem 內網網卡配置靜態(tài) IP netsh interface ip set address name以太網 2 static 10.10.5.100 255.255.0.0 netsh interface ip set dns name以太網 2 static 10.10.0.2 rem 添加靜態(tài)路由 route delete 10.0.0.0 mask 255.0.0.0 route delete 172.16.3.0 mask 255.255.255.0 route add 10.0.0.0 mask 255.0.0.0 10.10.0.1 if 15 -p route add 172.16.3.0 mask 255.255.255.0 10.10.0.1 if 15 -p rem 驗證 route print -4 pause腳本開頭先執(zhí)行route delete是為了保證腳本可重復運行。很多人寫腳本時忘了刪除舊路由第二次執(zhí)行會報“路由已存在”的錯或者殘留多條相同的路由導致系統選路混亂。6.2 路由表備份與恢復配置完成后最好把整個 IPv4 配置備份一份。用 netsh 可以在命令行里導出網卡配置netsh interface ipv4 show config 網卡配置備份.txt netsh interface ipv4 show route 路由表備份.txt系統更新或誤操作后對照備份文件恢復即可。如果只是路由表亂了可以直接重置所有靜態(tài)路由恢復到純 DHCP 狀態(tài)route -f這個命令會清除所有非默認路由謹慎使用。執(zhí)行后需要重新添加你的靜態(tài)路由。6.3 把配置做成開機自啟有些環(huán)境里同事的電腦也需要同樣的雙網卡配置與其一臺臺手動配我建議做一個更省事的版本把腳本放到“啟動”文件夾或者用任務計劃程序設置開機運行一次。批處理文件在開機時自動執(zhí)行管理員權限可以通過任務計劃程序設置為“使用最高權限運行”來解決。這樣即使 DHCP 或系統更新把路由搞亂了重啟一次電腦也能自動恢復。實測這個方案在公司幾十臺辦公電腦上運行穩(wěn)定省了不少運維時間。6.4 多網段內網環(huán)境的擴展思路如果你的內網不是單網段而是多個業(yè)務系統分布在幾個不同的地址段只要重復添加靜態(tài)路由就行了。比如公司還有一套 OA 系統在 172.16.8.0/24只需要再加一條route add 172.16.8.0 mask 255.255.255.0 10.10.0.1 if 15 -p這時候“路由覆蓋范圍寧小勿大”的原則就很重要了。我習慣把每個獨立業(yè)務系統的網段拆開寫而不是圖省事寫個大范圍的掩碼。少寫一條路由的代價是某天某個業(yè)務突然不通多寫一條路由的代價是有可能把外網流量錯誤地拐進內網權衡下來還是細粒度更安全。我個人在實際操作中還有一個習慣每次配置完成后把命令、IP 規(guī)劃、驗證結果都記在文檔里標注清楚每塊網卡的用途和路由規(guī)則。別小看這一步幾個月后網卡驅動更新或者換新電腦需要重新配置時這份記錄比任何記憶都可靠。雙網卡配置本身不算復雜真正讓人翻車的永遠是細節(jié)——接口選錯、掩碼寫寬、DHCP 漂移、忘了加持久化參數這些坑踩過一次就記住了。