閘道器怎麼設定?Linux、Windows 預設閘道器的檢視與修改
閘道器怎麼設定分三步:先查出當前閘道器,並按 IP 和掩碼確認正確的閘道器位址;再按系統寫入,臨時改路由表、永久改網路卡配置;最後用 ping 和 traceroute 驗證。一台機器只保留一個預設閘道器;在機房裡,閘道器以 IP 交付單為準,推算只用來核對。
閘道器怎麼設定,先要知道該填哪個位址。預設閘道器必須和本機 IP 在同一網段,通常是網段裡第一個或最後一個可用位址,機房分配公網 IP 時會在交付單上寫明。查當前閘道器,Linux 用 ip route show default,Windows 用 ipconfig 或 route print -4;修改時,Linux 用 ip route replace default via 閘道器 立即生效,要重啟後仍有效就寫進 nmcli、netplan 或網路卡配置檔案,Windows 在網路卡的“Internet 協議版本 4 (TCP/IPv4)”屬性裡填寫,或用 netsh、PowerShell 命令修改。改完用 ping 閘道器和 traceroute 看第一跳確認。不論 Linux 還是 Windows,一台機器只保留一個預設閘道器,多塊網路卡時其餘網路卡用靜態路由。
先查當前閘道器,再確認應該是多少
閘道器位址怎麼查
| 系統 | 命令 | 看哪裡 |
|---|---|---|
| Linux | ip route show default |
default via 後面的位址,dev 後面是走哪塊網路卡 |
| Linux(老系統) | route -n |
目標為 0.0.0.0、Flags 帶 UG 的那一行,Gateway 列 |
| Linux(NetworkManager) | nmcli dev show eth0 |
IP4.GATEWAY 一行 |
| Windows | ipconfig |
對應網路卡的“預設閘道器” |
| Windows | route print -4 |
網路目標和掩碼都是 0.0.0.0 的行,“閘道器”列;有幾行就有幾個預設閘道器 |
| Windows(PowerShell) | Get-NetIPConfiguration |
IPv4DefaultGateway |
| macOS | route -n get default |
gateway: 一行 |
家用寬頻下,“閘道器是多少”通常就是路由器的位址,常見 192.168.1.1、192.168.0.1,以 ipconfig 的顯示或路由器標籤為準。
不知道閘道器是多少:用 IP 和掩碼推算
閘道器只有一個硬性條件:和本機在同一網段。所以先算出網段的範圍,再看候選位址:
- 用掩碼算出塊大小:256 減去掩碼最後一個非 255 的位元組,例如 /27 的掩碼 255.255.255.224,塊大小是 32;
- 本機位址所在的塊就是網段:網路位址是塊的起點,廣播位址是塊的終點;
- 網路位址加 1、廣播位址減 1,就是兩個最常見的閘道器候選。
| 分到的位址 | 掩碼 | 網路位址 | 廣播位址 | 可用範圍 | 閘道器候選 |
|---|---|---|---|---|---|
| 203.0.113.70/27 | 255.255.255.224 | .64 | .95 | .65–.94 | .65 或 .94 |
| 198.51.100.13/29 | 255.255.255.248 | .8 | .15 | .9–.14 | .9 或 .14 |
| 192.0.2.6/30 | 255.255.255.252 | .4 | .7 | .5–.6 | .5,即另一個可用位址 |
| 10.20.30.40/24 | 255.255.255.0 | .0 | .255 | .1–.254 | .1 或 .254 |
以第一行為例:70 落在 64 到 95 這個塊裡,所以閘道器只可能在 .65 到 .94 之間,按慣例先試 .65 和 .94。推算出來的只是候選,要用 ARP 確認哪個位址真的有裝置應答:
arping -c 3 -I eth0 203.0.113.65 # 收到 Unicast reply 說明這個位址有裝置
arping -c 3 -I eth0 203.0.113.94
兩個都沒有應答,說明二層不通或閘道器不在慣例位置,這時不要逐個位址去試,直接找網路管理員或機房要交付資訊。在機房裡隨便填一個“看起來像閘道器”的位址,可能恰好是別的客戶的伺服器。
Linux 設定預設閘道器:臨時修改與永久生效
臨時修改:ip route
ip route show default # 改之前先記下舊閘道器
ip route replace default via 203.0.113.65 dev eth0
ip route get 223.5.5.5 # 確認去外網走新閘道器
replace 的意思是有就替換、沒有就新增,比 add 更省事:已有預設路由時執行 ip route add default ... 會報 RTNETLINK answers: File exists。要刪掉一條多餘的預設路由,執行 ip route del default via 舊閘道器。
ip route 改的是核心路由表,重啟或者網路服務重啟後就恢復了。遠端操作時可以利用這一點:先用 ip route replace 改好並驗證,再去改配置檔案,配置檔案和當前狀態一致,就不必為了生效而重啟網路。
永久修改:按管理網路的元件選
NetworkManager(RHEL、Rocky、AlmaLinux 等),只改閘道器不動其他引數:
nmcli -f NAME,DEVICE con show # 找到網路卡對應的連線名
nmcli con mod "System eth0" ipv4.gateway 203.0.113.65
nmcli dev reapply eth0 # 把改動應用到網路卡,不先斷開連線
ipv4.gateway 用於靜態位址(ipv4.method manual)的連線;DHCP 方式的連線,閘道器由 DHCP 伺服器下發,要改閘道器就改伺服器上的配置,或者先把連線改成靜態位址。要去掉閘道器,寫 ipv4.gateway ""。
netplan(Ubuntu 18.04 及以後),閘道器寫成一條預設路由:
network:
version: 2
ethernets:
eth0:
addresses: [203.0.113.70/27]
routes:
- to: default
via: 203.0.113.65
netplan try # 120 秒內不確認就自動回退
老教程裡的 gateway4: 203.0.113.65 寫法在新版本 netplan 中已經棄用,應用時會給出棄用提示,改成上面的 routes 寫法即可;版本較老、不認 to: default 的 netplan,寫成 to: 0.0.0.0/0。netplan 規定同一張路由表裡 IPv4 預設路由只能定義一次,兩種寫法不要同時出現。
Debian 的 ifupdown(/etc/network/interfaces),在網路卡段落裡改 gateway 一行:
auto eth0
iface eth0 inet static
address 203.0.113.70/27
gateway 203.0.113.65
RHEL 8、CentOS 7 的 ifcfg 檔案,改 /etc/sysconfig/network-scripts/ifcfg-eth0 裡的 GATEWAY=203.0.113.65,再執行 nmcli con reload 和 nmcli con up 連線名。
Windows 設定預設閘道器:網路卡屬性、netsh 與 PowerShell
圖形介面
- 執行
ncpa.cpl(Win+R 開啟“執行”框),進入“網路連線”; - 在要改的網路卡上右鍵開啟“屬性”,找到“Internet 協議版本 4 (TCP/IPv4)”,再開啟它的屬性;
- 切換到“使用下面的 IP 位址”,在“預設閘道器”一欄填新閘道器;位址、掩碼、DNS 沒變的不用動;
- 點“高階”,在“IP 設定”頁的“預設閘道器”列表裡只留一條,其餘刪除;
- 一路點“確定”儲存,改動立即生效。
Windows 11 也可以在“設定 → 網路和 Internet → 乙太網 → IP 分配 → 編輯”裡改為手動並填寫閘道器,結果相同。Windows Server Core 沒有圖形介面,可以執行 sconfig,在“網路設定”裡修改。
命令列
單 IP 的機器,用 netsh 一次寫入位址、掩碼和閘道器(網路卡名以 ipconfig 裡顯示的為準):
netsh interface ipv4 set address name="乙太網" source=static address=203.0.113.70 mask=255.255.255.224 gateway=203.0.113.65 gwmetric=1
set address 會用這一組引數替換網路卡上原有的靜態位址,配了附加 IP 的伺服器執行後附加位址會丟失。這類機器只改閘道器,用 PowerShell 刪舊建新:
Get-NetRoute -DestinationPrefix 0.0.0.0/0 # 看當前有幾條預設路由
Remove-NetRoute -InterfaceAlias "乙太網" -DestinationPrefix 0.0.0.0/0 -Confirm:$false
New-NetRoute -InterfaceAlias "乙太網" -DestinationPrefix 0.0.0.0/0 -NextHop 203.0.113.65
New-NetRoute 預設同時寫入當前路由表和持久配置,重啟後仍然有效。改完用 ipconfig 和 route print -4 各看一遍,確認預設路由只剩一條且閘道器正確。網路卡上已經有預設閘道器時,用 New-NetIPAddress 帶 -DefaultGateway 引數會報預設閘道器已存在的錯誤,也要先刪掉舊的。
還有一個老辦法 route -p add 0.0.0.0 mask 0.0.0.0 203.0.113.65。它加的是“永久路由”,在 route print 的“永久路由”部分可見,但不顯示在網路卡屬性裡,以後別人從網路卡屬性改閘道器時容易漏掉它,變成兩個預設閘道器。設定預設閘道器優先用網路卡屬性或上面的 PowerShell 命令。
多網路卡只保留一個預設閘道器
伺服器常見的組合是一塊公網網路卡、一塊內網網路卡。兩塊都填了閘道器,就會出現兩條預設路由:Linux 按 metric 選一條,Windows 按“介面躍點數 + 閘道器躍點數”選一條,另一條不會分擔流量。更麻煩的是選擇結果會變:Windows 預設按鏈路速率自動計算躍點數,內網網路卡升級到 10G 後,優先順序可能反超公網網路卡,外網流量突然改從內網出口走,表現為“什麼都沒改,外網突然斷了”。
正確的配置是:
- 公網網路卡填預設閘道器;
- 內網網路卡閘道器留空,需要存取的內網網段逐條加靜態路由。
Windows 上內網網路卡加持久靜態路由,if 後面是 route print 開頭“介面列表”裡內網網路卡的編號:
route -p add 10.0.0.0 mask 255.0.0.0 10.10.0.1 metric 10 if 12
Linux 上,臨時刪掉內網網路卡的預設路由,加一條內網路由:
ip route del default via 10.10.0.1 dev eth1
ip route add 10.0.0.0/8 via 10.10.0.1 dev eth1
要長期生效,NetworkManager 的內網連線加上 ipv4.never-default yes,再用 +ipv4.routes "10.0.0.0/8 10.10.0.1" 把內網路由寫進連線;netplan 只給內網網路卡寫一條去往 10.0.0.0/8 的路由,不寫預設路由,內網網路卡走 DHCP 的,用 dhcp4-overrides 裡的 use-routes: false 忽略 DHCP 下發的閘道器。
機房分配 IP 時閘道器寫錯的典型現象
機房交付的 IP 通常是一個小網段,例如 203.0.113.64/27,閘道器 .65。下面這些錯誤都很常見,現象各不相同:
| 寫錯的方式 | 表現 | 怎麼確認 |
|---|---|---|
| 閘道器寫成同網段另一個位址,比如 .65 寫成 .66 | 外網全不通;如果 .66 恰好是別人的伺服器,ARP 能解析到 MAC,看起來“閘道器是通的” | ip neigh show 203.0.113.66 的 MAC 與同網段其他伺服器上看到的閘道器 MAC 不一致;traceroute -n 第一跳就斷 |
| 掩碼寫大,/27 寫成 /24 | 系統不報錯,外網基本正常,但存取 203.0.113.0/24 裡不屬於自己的位址通常不通,比如同段其他客戶的機器、機房在這個段裡的服務 | 主機把整個 /24 當成本網段,直接 ARP 而不經閘道器;ip route get 目標IP 顯示沒有 via |
| 掩碼寫小,例如 /27 寫成 /30 | 203.0.113.70/30 的網段只有 .68–.71,閘道器 .65 落在網段外,預設路由加不上,外網全不通 | Linux 加預設路由時報 Nexthop has invalid gateway;Windows 儲存時彈出閘道器與 IP 不在同一網段的警告 |
| 換了 IP 段,閘道器還是舊段的 | 跨網段全不通,Linux ping 外網報 Network is unreachable |
ip route 裡沒有 default |
| 閘道器做了冗餘,卻填了某台核心交換器的實位址 | 平時正常,那台交換器維護或故障時斷網,另一台接管後仍然不通 | 讓機房確認虛擬閘道器位址,改填虛擬位址 |
| 附加 IP 段也填了閘道器 | Windows 出現多條預設路由,出口隨機變化,部分連線回包走錯 | route print -4 裡 0.0.0.0 不止一行 |
確認改對之後,按這個順序驗證:ping 閘道器;ip neigh 或 arp -a 看閘道器 MAC 已解析;traceroute -n 223.5.5.5(Windows 用 tracert -d)第一跳是閘道器;最後從外部 ping 或 SSH 本機,確認回程也通。
在管理系統裡怎麼落地
閘道器填錯,根源常在交付環節:交付單上的閘道器是手寫的,和交換器上的配置對不上。Toplink DCIM 的 IP 位址管理按 CIDR 錄入位址段後,自動算出起止位址和掩碼,閘道器可選段內第一個或最後一個位址,並記錄該段所在的 VLAN 和閘道器所在的交換器;給伺服器分配位址時,掩碼和閘道器以這條登記為準,不用每次手抄。客戶自己改閘道器把伺服器改斷了網,也不必等機房值班:在客戶自助端開啟 VNC 控制檯登入系統,按上文的命令把閘道器改回來即可。
常見問題
改閘道器需要重啟電腦或伺服器嗎?
不需要。Linux 用 ip route replace 立即生效,nmcli、netplan 應用配置後生效;Windows 在網路卡屬性裡點確定或執行 netsh、PowerShell 命令後立即生效。有維護視窗時可以重啟一次,確認重啟後讀到的配置和當前一致。
預設閘道器可以留空嗎?
可以,留空後這塊網路卡只能存取本網段,存取其他網段和網際網路都不通。多網路卡伺服器的內網網路卡通常就是這樣配置,再按需新增到內網其他網段的靜態路由。
DHCP 自動獲取的閘道器能改嗎?
在本機上改了也會在下次續租時被覆蓋。要麼把網路卡改成靜態位址再填閘道器,要麼讓管理員在 DHCP 伺服器上修改下發的閘道器(選項 3,Router)。