Router

路由器之間的發現和通信

  • July 31, 2019

我在一個由 4 個 OpenWrt 路由器組成的環境中工作,每個路由器都通過 Wi-Fi 為多個客戶端提供服務並包含。它們中的每一個都為客戶提供 Internet 訪問。

關於這種情況,我有 3 個問題,如果你們中的任何人能回答這些問題中的任何一個,我將不勝感激(您只需回答 1 個,我仍然會非常感激):

**1)**當我在路由器內部時(通過 ssh 或其他機制),我可以使用什麼命令或包來發現其他路由器的 IP 地址和主機名?avahi會幫我解決這個問題,還是我需要事先知道其他路由器的 IP?如果我在這個環境中添加一個新路由器,我是否必須手動配置每個路由器才能辨識新路由器?

**2)**考慮到我正在收集每個路由器的延遲和封包遺失的測量值,當客戶端停止訪問 Internet 服務時,我如何知道每個路由器/網路是否擁塞,或者我是否無法訪問 Internet?因為在這兩種情況下,ping 命令很可能不起作用,並且數據包也會被丟棄。

**3)**考慮到路由器將通過高速無線鏈路連接,應該使用什麼協議或軟體才能在它們之間進行通信,例如相互ping通(考慮到它們已經相互認識 - 問題1)?

**注意:**這些問題並非特定於 OpenWrt 路由器。

**$$ EDIT $$**每個路由器都在一個單獨的房間中,因此在每個房間中都會創建一個網路,例如 10.0.1.0/24,然後在下一個房間中創建 10.0.2.0/24 等等。

每個路由器都包含一個 SIM 卡,可以連接到蜂窩網路,從而為房間的客戶提供網際網路。因此,路由器沒有公共子網,每個子網都與不同的網路相關聯。

此外,我必須測量路由器的延遲和丟包率,因為我將設置一個門檻值,一旦超過該門檻值,路由器必須將其部分流量轉移到另一個負載較小的路由器。不過,我不確定這兩個指標是否足以衡量路由器中的鏈路負載。

因此,OpenWrt 路由器將在它們之間共享的資訊(每 1 秒)是吞吐量、延遲、丟包和 CPU 負載。這是為了讓他們知道彼此的負擔。為了實現這一點,每個路由器都必須手動或自動知道環境中有哪些路由器(因此,發現),這樣就不可能有人嘗試充當路由器之一(MiTM)。

您沒有描述您的拓撲,但我假設路由器都有一個公共子網,將它們連接到您的 ISP 路由器。

  1. 當我在路由器內部時(通過 ssh 或其他機制),我可以使用什麼命令或包來發現其他路由器的 IP 地址和主機名?

OpenWrt 路由器不執行 OSPF 之類的路由協議,因此沒有發現機制。你只需要知道你有什麼。其他執行路由協議的路由器會建構其對等點的表,您可以檢查這些表。

  1. 考慮到我正在收集每個路由器中延遲和丟包的測量值,當客戶端停止訪問 Internet 服務時,我怎麼知道每個路由器/網路是否擁塞或者我只是沒有 Internet 訪問權限(ISP ?

路由器可以執行 SNMP,因此您可以使用來自單獨的監控系統(伺服器)的 SNMP 來收集基本統計資訊。有了它,你可以確定滴。延遲必須從終端主機而不是路由器測量。

3)考慮到路由器將通過高速無線鏈路連接,應該使用什麼協議或軟體才能在它們之間進行通信,例如相互ping?

路由器使用路由協議(OSPF、BGP、EIGRP)向他們知道的網路通告路由。但是對於 OpenWrt,我不確定您認為他們會在它們之間共享什麼樣的資訊。

編輯

根據您的編輯,您似乎希望路由器在負載變化時在它們之間共享負載和傳輸客戶端。

不幸的是,這很難做到。首先,Wi-fi 客戶端決定何時從一個接入點(路由器)漫游到另一個,而不是接入點。因此,您受制於每台 Wi-fi 設備。其次,OpenWrt 沒有共享操作參數和基於它們改變行為的功能。即使是商用的、基於控制器的 Wi-fi 系統也只是在這方面取得了部分成功。在這種情況下,有一個中央控制器監控所有接入點並控制它們的操作。

引用自:https://serverfault.com/questions/977356