一 先畫出兩張網卡與目的網段
雙NIC排查先列出每張介面的IP、前綴、閘道、介面索引與metric,再列出目的位址。不要先刪route或關閉網卡。Windows選路的第一個問題是哪些路由前綴匹配目的地;匹配多個時先選最長前綴,再在相同前綴長度比較路由與介面metric。
案例主機有NIC-A=10.10.1.20/24、閘道10.10.1.1,NIC-B=192.0.2.20/24、閘道192.0.2.1。目的192.0.2.44時,192.0.2.0/24是明確直連路由,優先於0.0.0.0/0;目的198.51.100.44只匹配兩條default時,才需要比較完整metric與政策。
若兩張NIC都放在同一個192.0.2.0/24,會出現同網段歧義:ARP、來源位址選擇、回程路徑與應用綁定可能互相影響。這時「把metric調低」不是完整修復,因為同前綴的鄰居解析與強/弱主機行為仍要核對。優先建立清楚的網段規劃或明確來源綁定。
| 目的 | 匹配前綴 | 候選NIC | 應先問 |
|---|---|---|---|
| 192.0.2.44 | 192.0.2.0/24與default | B及default | /24較長 |
| 198.51.100.44 | 兩條default | A、B | 比較完整metric |
| 10.10.1.55 | 10.10.1.0/24 | A | 直連路由 |
| 同192.0.2.0/24 | 兩介面同前綴 | A、B | 先處理歧義 |
二 只讀命令與路由證據
先用 route print 查看IPv4路由表,用 Get-NetRoute -AddressFamily IPv4 查看DestinationPrefix、NextHop、RouteMetric、InterfaceIndex;用 Get-NetIPInterface 查看InterfaceMetric與介面狀態。這些命令只讀取目前狀態。把輸出保存到變更工單,並記錄查詢時間與目的IP,避免只看一張不含介面索引的截圖。
Get-NetTCPConnection可查看已存在TCP連線使用的LocalAddress、RemoteAddress、State與OwningProcess。它回答現在的連線用了哪個端點,不直接回答下一個新連線一定會走哪條路。一般TCP端口測試可單獨使用:Test-NetConnection -ComputerName 198.51.100.44 -Port 443 -InformationLevel Detailed。路由選擇診斷則是另一個參數集合:Test-NetConnection -ComputerName 198.51.100.44 -DiagnoseRouting -ConstrainSourceAddress 10.10.1.20 -InformationLevel Detailed;它呈現選路結果,不是保證以該來源建立業務TCP probe。
Test-NetConnection的-Port參數可測試指定TCP端口;-DiagnoseRouting搭配-ConstrainSourceAddress或-ConstrainInterface則用於獨立的路由選擇診斷。兩種參數集合不能合併成同一次Port命令,也不能拿路由診斷輸出的TcpTestSucceeded當成A/B來源綁定探測結果。若真要固定來源建立TCP,必須使用目標工具或應用本身明確支援的來源綁定功能,本文不發明API。ping是ICMP測試,也不能替代業務連接埠。
路由表快照要和介面快照同時保存,因為介面metric可能自動計算,網路連線狀態也會使候選路由增減。Get-NetIPInterface可依InterfaceIndex對照Alias、AddressFamily、ConnectionState與InterfaceMetric;Get-NetRoute則以同一索引對照NextHop和RouteMetric。若只保存route print而沒有時間與介面狀態,事後很難解釋為何同一目的地結果不同。
| 命令 | 用途 | 輸出重點 | 限制 |
|---|---|---|---|
| route print | 看路由表 | 網段、閘道、介面 | 不驗證業務 |
| Get-NetRoute | 結構化路由 | prefix/metric/index | 需指定目的解讀 |
| Get-NetIPInterface | 看介面metric | 狀態/metric | 不等於應用綁定 |
| Test-NetConnection | 測TCP與路由 | 來源/路由/成功 | 不代表服務協定 |
三 最長前綴與metric算例
假設目的203.0.113.77,表中有203.0.113.0/24 RouteMetric 50、InterfaceMetric 20,以及0.0.0.0/0 RouteMetric 5、InterfaceMetric 10。兩條都匹配,但/24前綴長度24大於0,先選/24;不能因default完整metric=15小於/24完整metric=70就改選default。這正是先最長前綴、再比較同長度metric的順序。
若兩條都是10.20.0.0/16:NIC-A的路由metric 10、介面metric 20,總和30;NIC-B的路由metric 30、介面metric 5,總和35,案例中A較低。但實際Windows版本、協定提供者、自動metric及來源位址限制要以現場輸出為準,不能只用算式推測。
若兩條同前綴且完整metric相同,不應自行宣稱一定採A或B;要查看實際路由選擇診斷與來源位址。應用需要固定NIC時,先確認程式是否支援綁定來源IP或介面,再用該程式的正式功能建立實際TCP連線;Test-NetConnection的-ConstrainSourceAddress只能作路由選擇診斷。回程路徑也要查對端路由,單向送達不能證明雙向服務正常。
當目的地是名稱而非IP時,先用Resolve-DnsName列出A與AAAA及查詢時間,再對每個實際位址做路由診斷。名稱可能在變更期間回傳新舊集合,或內外DNS回不同地址;此時必須把DNS問題與路由問題分開。若服務端要求固定來源,使用-ConstrainSourceAddress只作診斷,先確認這個來源確實屬於目標介面,不要把測試參數誤當永久設定。
| 候選 | 前綴 | route metric | interface metric | 判定 |
|---|---|---|---|---|
| A | 203.0.113.0/24 | 50 | 20 | 先勝過default |
| default-A | 0/0 | 5 | 10 | 較短,淘汰 |
| A2 | 10.20.0.0/16 | 10 | 20 | 總30 |
| B2 | 10.20.0.0/16 | 30 | 5 | 總35,A2較低 |
四 從來源IP到回程路徑驗收
先選一個不具破壞性的TCP服務,例如維護窗口中的443或明確測試端口。先執行一般端口測試,保存RemoteAddress、SourceAddress、InterfaceAlias與TcpTestSucceeded;再分別執行-DiagnoseRouting -ConstrainSourceAddress NIC-A來源和NIC-B來源的唯讀路由診斷,保存選定前綴、NextHop與InterfaceIndex。這些診斷可比較候選路徑,但不等同以兩個來源各建立一次業務TCP連線;若須真實來源綁定探測,應使用明確支援該功能的應用或工具。
對服務端或路由器也保存回程證據:服務端看到的來源IP、回應路由、ACL命中與應用日誌。若A方向能建立TCP、B方向不能,先查對端是否允許B來源、回程是否走錯閘道、NAT或防火牆是否不同。不要只把client的成功/失敗歸因於metric。
排查完成的結果應是可重現的路由快照:目的IP、時間、解析後位址、選定前綴、NextHop、InterfaceIndex、SourceAddress、TCP結果與服務身份。若DNS名稱有多個A/AAAA,逐一記錄;名稱解析選到不同位址時,不能拿一次測試推論所有路徑。
同網段雙NIC的危險還包括回覆從另一介面離開,造成對端看到的來源與預期不同。即使client端的TcpTestSucceeded為True,服務端ACL可能只允許其中一個來源。案例驗收要同時要求client的SourceAddress、server的接收來源、server回程介面和應用層回應一致;缺少其中一項,只能標示為部分證據。
若路由看似正確但連線仍失敗,將問題拆成ARP或鄰居解析、NextHop可達、TCP端口、TLS身份和應用協定五層。每層使用對應證據,避免看到route存在就推論封包一定抵達服務。變更前先保留原表與回復窗口,測試結束再由管理者決定是否調整metric。
若兩介面都配置default gateway,先以目的網段和完整metric做唯讀比較,不能用介面排列順序代替路由選擇。遇到VPN或虛擬介面,還要記錄其自動路由與安全政策;測試資料應標明是在VPN連線前或後取得,否則同一命令可能得到不同來源。
也要保留查詢時的主機名稱解析結果,避免日後把不同目的位址誤合併。
| 結果 | 需要保存 | 合理判讀 | 後續 |
|---|---|---|---|
| A來源成功 | 來源IP/route/服務log | A路徑可用 | 驗證回程與身份 |
| B來源失敗 | 失敗端口/ACL/route | 可能政策或回程 | 查對端證據 |
| ping成功 | ICMP結果 | 只有ICMP可達 | 仍測業務端口 |
| TCP成功 | 端口與服務回應 | 傳輸層可達 | 再驗證協定/TLS |
五 FAQ 與來源
FAQ1:metric較低是否一定勝出?答:只有在匹配前綴長度相同時才比較;最長前綴先勝出。完整metric還可能包含route與interface部分,需看實際輸出。
FAQ2:兩張NIC同一網段可否只調metric?答:不宜直接這樣做。先處理網段歧義、來源IP、ARP與回程路徑,再決定是否由管理流程調整設定。
FAQ3:Test-NetConnection成功是否表示PLC或應用正常?答:不表示。它可確認TCP測試及路由資訊,仍須做TLS、協定握手和服務功能驗證。
FAQ4:看到錯路由可否直接刪除或關NIC?答:不要在未評估的情況下操作。先保存唯讀證據,確認業務影響與回復方案,再由變更程序處理。
參考:Microsoft Learn:路由多前綴匹配時先選最長前綴,同長度再用較低metric。
參考:Microsoft Learn:Windows interface metric與route metric共同決定介面偏好。
參考:Microsoft Learn:Test-NetConnection支援TCP、路由選擇、來源/介面限制與診斷輸出。