Debian

三種不同的方式配置單個網路介面並根據某些條件設置路由?

  • April 14, 2020

我有一個執行 Debian的USB Armory Mk II ,與 USB 主機建立通信相當簡單。

但是,我想要實現的是以下。我希望能夠有條件地在 USB Armory*上配置網路適配器。*三個角度:

  1. 如果主機上啟用了 DHCP 並綁定到CDC乙太網適配器,我想用dhclient它來為其分配一個 IP。
  2. 10.0.0.0/24 網路無條件地獲得(在 InversePath 提供的 Debian 映像上預配置的網路)在分配了 10.0.0.1 的介面上配置…
  3. 將 192.168.137.2(或 .1 以外的另一個 192.168.137.0/24 IP 地址)配置為另一個 IP 地址(Windows ICS

到目前為止,這樣做並不是什麼大問題。例如,StackOverflow 上的這個答案顯示了實現它的兩種方法(我將選擇第二種方法,將 ICS 範圍地址添加為另一個別名)。

但關鍵是應該如何設置路線。這就是我現在卡住的部分:

  1. 如果 DHCP 成功,我想使用通過它配置的任何內容作為上行鏈路(網關)
  2. 如果沒有,我想檢查我是否可以在剩餘的兩個已配置子網中的任何一個上進行通信……最好我想要 USB Armory Mk II 上的一些腳本來確定要使用哪個網關(即嘗試顯而易見的.1、.2 和 .254 在相應的 /24 子網中,然後根據需要擴展“搜尋”)

我需要以下方面的建議:

  • 如何最好地確定哪些 IP 範圍可作為上行鏈路?例如,我應該嗅探 ARP 流量並將其用作指標嗎?還是有更可靠的方法(例如ping -I <address>)?作為事後的想法:如何處理上行鏈路可用性的變化?
  • 除了使用一些腳本之外,是否有一種可靠的方式來表達這一點ip-rule(8)

過去我遇到過一些這樣的場景,但我仍然沒有找到完美的解決方案。

首先,當您分配兩個靜態 IP 時,請確保它們的路由度量值較高,例如 1000。這樣,如果有 DHCP 預設路由,它將較低並自動選擇。這是我通常這樣做的方式。

下一點要棘手得多,因為什麼是好的上行鏈路?Linux 永遠不會為您做出這樣的選擇——如果一個連結已啟動,那麼它就已啟動。

在我處理這些問題的系統上,我們總是有一個腳本或守護程序在執行,它們很快就會變得非常複雜。我們主要以固定的時間間隔測試與端點的連接,並相應地設置路由,或者設置介面打開或關閉。

有時我們有首選介面(例如乙太網與調製解調器),在這種情況下變得更加困難,因為我們必須測試乙太網連接是否正在執行而不中斷調製解調器連接。我不知道 ping -I 開關是否實際上與介面別名一起使用,但它可能。如果沒有,那麼您也可以使用 macvlan 或 ipvlan 完全拆分地址。這也允許設置地址(或其虛擬介面)向上或向下。

完全不同的一點是,我們必須考慮到,您可能還需要考慮的是,在更改介面和子網時,我們有時必須使用不同的 DNS 伺服器,甚至可能還要重新啟動服務。

您會發現許多在 linux 中進行故障轉移的指南,但它們幾乎總是基於物理鏈路發生故障,這當然很容易觸發。或者他們有一個守護程序或腳本,這是我建議用於測試路由的。

那是我的 5 美分,我希望它是有道理的,它可以引導你朝著正確的方向前進。

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