網路與 IP

閘道器怎麼設定?Linux、Windows 預設閘道器的檢視與修改

閘道器怎麼設定分三步:先查出當前閘道器,並按 IP 和掩碼確認正確的閘道器位址;再按系統寫入,臨時改路由表、永久改網路卡配置;最後用 ping 和 traceroute 驗證。一台機器只保留一個預設閘道器;在機房裡,閘道器以 IP 交付單為準,推算只用來核對。

作者 頂聯產品團隊發布於 6 分鐘閱讀

閘道器怎麼設定,先要知道該填哪個位址。預設閘道器必須和本機 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 和掩碼推算

閘道器只有一個硬性條件:和本機在同一網段。所以先算出網段的範圍,再看候選位址:

  1. 用掩碼算出塊大小:256 減去掩碼最後一個非 255 的位元組,例如 /27 的掩碼 255.255.255.224,塊大小是 32;
  2. 本機位址所在的塊就是網段:網路位址是塊的起點,廣播位址是塊的終點;
  3. 網路位址加 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

圖形介面

  1. 執行 ncpa.cpl(Win+R 開啟“執行”框),進入“網路連線”;
  2. 在要改的網路卡上右鍵開啟“屬性”,找到“Internet 協議版本 4 (TCP/IPv4)”,再開啟它的屬性;
  3. 切換到“使用下面的 IP 位址”,在“預設閘道器”一欄填新閘道器;位址、掩碼、DNS 沒變的不用動;
  4. 點“高階”,在“IP 設定”頁的“預設閘道器”列表裡只留一條,其餘刪除;
  5. 一路點“確定”儲存,改動立即生效。

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)。

想看看在你的機房裡怎麼用?

從一次產品示範開始,梳理你的業務鏈路。

查看價格
服務熱線 400-112-2951

讓我們聊聊你的 IDC 業務

掃碼新增企業微信,預約產品示範或申請試用。

Toplink 企業微信二維碼

長按儲存或使用企業微信 / 微信掃描

也可致電
400-112-2951
Telegram
@TopLink88