網路失去後恢復失去的網路路由
我有一個處於鎖定環境中的伺服器,沒有到 Internet 的出口,以及 2 個介面:一個物理 eth0 和一個 vlan iface eth0.101
/etc/network/interfaces 包含一個 post-up 命令,用於啟用通過 vlan iface 到特定網路塊的路由,如下所示:
post-up ip route add 10.1.0.0/24 via 10.1.2.1 dev eth0.101
在交換機故障轉移測試期間,我們注意到路由失去(
RTNETLINK answers: Network is unreachable.
),這是有道理的。但是,一旦網路恢復線上,該路由並沒有再次添加到介面。我明白為什麼 - 界面沒有去
down
,它只是失去了對該網路的訪問。我如何配置一個介面來恢復到失去的網路的路由,但是,引用老歌,現在已經找到了?
我們使用 Debian 9 並
iface@eth0.service
為每個介面都有一個服務定義,它使用ifup
命令來啟動/關閉設備。但同樣,該設備以及與交換機的連結從未動搖過。如果可以利用額外的 systemd 選項,我會提到這一點。
路由表將使您的路由永久化(以避免在交換機故障轉移後再次/手動添加);首先,創建一個命名路由表。例如,我們可以使用“mgmt”。
echo '200 mgmt' >> /etc/iproute2/rt_tables
只是關於上述解決方案的擴展細節,核心支持許多路由表,並通過編號為 0-255 的唯一整數來引用這些路由表。還為該表定義了一個名稱 mgmt。下面是一個預設值
/etc/iproute2/rt_tables
,顯示一些數字是保留的。這個答案中的選擇 200 是任意的;可以使用任何尚未使用的數字,1-252。# reserved values 255 local 0 unspec
其次,
post-up
像這樣編輯您的規則(在 /etc/network/interfaces 下)post-up ip route add 10.1.0.0/24 dev eth0.101 table mgmt post-up ip route add default via 10.1.2.1 dev eth0.101 table mgmt post-up ip rule add from 10.1.0.0/24 table mgmt post-up ip rule add to 10.1.0.0/24 table mgmt
或者,另一種解決方案可能是後台 bash 腳本檢查路由是否存在,如果它失去,則將其添加回來,腳本可以檢查腳本的結果,
ip route add 10.1.0.0/24 via 10.1.2.1 dev eth0.101
可以在循環或 cron 中設置ip route add 10.1.0.0/24 via 10.1.2.1 dev eth0.101 if [ $? -eq 0 ]; then echo "Route added again" sleep 10; command-to-call-the-script-again else echo "Route exists" sleep 10; command-to-call-the-script-again fi
資料來源:添加永久路線的最佳方法是什麼?