多網卡、多網段、VPN 互通、容器網路等場景常需在 Linux 主機手動添加靜態路由。本文系統講解 route/ip route 命令添加臨時/永久路由、/etc/rc.local 開機腳本方案、/etc/sysconfig/static-routes (RHEL 系) 與 /etc/network/interfaces (Debian 系) 原生配置三大流派,並給出驗證、刪除、故障排查命令速查表。
# 添加預設網關
route add default gw 10.0.0.1
# 添加網段路由 (指定網關)
route add -net 192.168.2.0/24 gw 192.168.2.254
# 添加主機路由
route add -host 192.168.2.2 gw 192.168.2.254
# 刪除路由
route del default gw 10.0.0.1
route del -net 192.168.2.0/24
# 添加預設路由
ip route add default via 10.0.0.1
# 添加網段路由
ip route add 192.168.2.0/24 via 192.168.2.254
# 添加主機路由
ip route add 192.168.2.2 via 192.168.2.254
# 指定出口介面
ip route add 10.10.0.0/16 via 192.168.1.1 dev eth1
# 刪除
ip route del 192.168.2.0/24
| 方案 | 適用發行版 | 配置檔案 | 優點 | 缺點 |
|---|---|---|---|---|
| rc.local 腳本 | 所有 Systemd 發行版 | /etc/rc.local | 通用、簡單、支援任意命令 | 執行時機晚、無依賴管理、Systemd 需啟用 rc-local.service |
| static-routes | RHEL/CentOS/Fedora/Alma/Rocky | /etc/sysconfig/static-routes | 原生支援、網路服務早期載入 | 僅限 RHEL 系、格式特殊、新版已棄用建議改用 NetworkManager |
| NetworkManager | RHEL 7+/Fedora/CentOS 7+/Ubuntu 16.04+ | nmcli / /etc/NetworkManager/system-connections/ | 現代標準、支援動態/靜態、CLI/TUI/GUI、連線設定檔管理 | 學習曲線稍陡 |
| /etc/network/interfaces | Debian/Ubuntu (非 NM 管理時) | /etc/network/interfaces | Debian 傳統、簡單聲明式 | 若啟用 NetworkManager 會衝突 |
| systemd-networkd | Arch/CentOS 8+/Ubuntu 20.04+ (可選) | /etc/systemd/network/*.network | 輕量、聲明式、無守護進程依賴 | 功能較 NM 簡單 |
檔案:/etc/sysconfig/static-routes (不存在須手動建立)
# 格式: any [net|host] 目標網段/主機 gw 網關 [dev 介面]
any net 192.168.2.0/24 gw 192.168.2.254
any host 192.168.2.2 gw 192.168.2.254
any net 10.0.0.0/8 gw 10.0.0.1 dev eth1
any:固定關鍵字(歷史遺留,代表所有介面)。net/host:目標類型。生效方式:systemctl restart network 或 /etc/init.d/network restart。
# 查看連線名稱
nmcli con show
# 為連線 "Wired connection 1" 添加靜態路由
nmcli con mod "Wired connection 1" +ipv4.routes "192.168.2.0/24 192.168.2.254"
nmcli con mod "Wired connection 1" +ipv4.routes "10.0.0.0/8 10.0.0.1"
# 設定為永久 (預設即永久)
nmcli con up "Wired connection 1"
# 查看已配置路由
nmcli -f ipv4.routes con show "Wired connection 1"
auto eth0
iface eth0 inet static
address 192.168.1.10/24
gateway 192.168.1.1
# 靜態路由
up route add -net 192.168.2.0/24 gw 192.168.1.254
down route del -net 192.168.2.0/24 gw 192.168.1.254
# 或使用 ip route
up ip route add 192.168.2.0/24 via 192.168.1.254
down ip route del 192.168.2.0/24 via 192.168.1.254
| 操作 | 命令 |
|---|---|
| 查看路由表 | route -n / ip route show / netstat -rn |
| 查看預設網關 | ip route show default / route -n | grep ^0.0.0.0 |
| 測試連通性 | ping -c 3 192.168.2.2 / traceroute 192.168.2.2 |
| 追蹤封包路徑 | tracepath 192.168.2.2 / mtr 192.168.2.2 |
| 檢查路由規則 | ip rule show (策略路由) |
| 查看內核路由快取 | ip route show cache (舊內核) |
| 啟用 IP 轉發 (路由器模式) | sysctl -w net.ipv4.ip_forward=1 + /etc/sysctl.conf 持久化 |
ping 網關 IP 通,否則路由無效。ip route add default via GW1 dev eth1 metric 100 設定 metric 優先級,或關閉非主 NIC 的 DEFROUTE=no (NetworkManager)。network-scripts 已棄用,建議遷移至 NetworkManager。ip_forward 並配置 SNAT (iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -o eth0 -j MASQUERADE)。/etc/NetworkManager/system-connections/)。static-routes 或 rc.local,避免大規模遷移風險。nmcli 模組或 template 生成 static-routes/interfaces,納入基線合規檢查。靜態路由雖是基礎網路技能,但「臨時生效 ≠ 永久生效」、「RHEL 系 ≠ Debian 系」、「network-scripts ≠ NetworkManager」的差異常導致重啟後失效或衝突。掌握三大流派並按發行版選型,是 Linux 網路運維的必修課。