Networking

網路失去後恢復失去的網路路由

  • May 8, 2019

我有一個處於鎖定環境中的伺服器,沒有到 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

資料來源:添加永久路線的最佳方法是什麼?

引用自:https://unix.stackexchange.com/questions/516185