在 freebsd 上使用 openbgpd 時對出站流量進行負載平衡
我在具有 2 個 ISP 連接的 freeBSD 中使用 openbgpd。我有自己的 AS 編號和 /22 網路。目前我正在向兩個網路宣傳整個 /22。入站流量進來但我的出站流量通過單個連結。
我想通過兩個連結分配我的出站流量,以便出站流量也得到負載平衡。
如何在 freebsd 中使用 openbgpd 進行配置?
附上我目前的 openbgpd 配置以供參考。
AS 00my-as listen on xx.xx.xx.x router-id xx.xx.xx.x network aa.aa.aa.0/22 group "ISP1" { remote-as 11remoteas-1 neighbor bb.bb.bb.1 { descr "ISP1" announce all } } group "ISP2" { remote-as 22remoteas-2 neighbor cc.cc.cc.37 { descr "ISP2" announce all } } deny from any deny to any allow from bb.bb.bb.1 allow to bb.bb.bb.1 allow from cc.cc.cc.37 allow to cc.cc.cc.37
我已經很多年沒有使用 openbgpd 了,所以,我會給你一些理論,你可以將它們應用到你的配置中。
提供商可以向您發送路線。通常他們會發送“預設”、“客戶”或“完整”。預設路由就是這樣,向您宣布 0.0.0.0/0 並且您知道通過它們到達 0.0.0.0/0(任何 IP)。您的情況聽起來好像兩家提供商都在為您提供預設路由,並且很可能,具有較低 ASN 的提供商正在獲得所有流量(當數據包可以到達多個目的地並且 AS 路徑相等時,ASN 是決勝局長度等)。
“客戶”提要會讓他們宣布直接連接到他們的每條路線。如果您有像 Level3 這樣的提供商,您可能會通過此提要看到一半的網際網路。如果您的其他提供商的 ASN 較低,他們將獲得任何未直接連接到對等方的流量,從而向您宣布他們的客戶路線。
“完整”提要將為提供商知道如何到達的每個站點提供路線公告,而不僅僅是那些直接連接的站點。
您應該能夠執行以下操作:
顯示 ip bgp 摘要(IOS 命令)
它應該列出某處收到的前綴數量。
如果您現有的兩個提供商都向您發送預設路由,則您的連接目前已設置為故障轉移。提供商 A 出現故障,然後您將路由到提供商 B。如果您從兩者獲取客戶提要以及預設路由,則流量將流向具有最短 ASpath 以到達給定地址的提供商,並回退到預設路由如果找不到地址,請路由。如果您從兩者獲得完整的提要,根據提供商之間的重疊,您會將流量從“最佳”路徑發送到每個。
在我們的一個邊界路由器上,我顯示了 310540 條活動路由,確保您有足夠的 RAM 並已將機器配置為處理來自兩個提供商的路由(如果您採用完整路由)。您可以嘗試從兩者中獲取客戶路線,直到您感覺更舒服為止。或者從兩者中較小的提供商那裡獲取客戶路線,看看情況如何變化。
這仍然不會“負載平衡”或根據您的流量平均分配流量。您可能會發現一個提供商仍然獲得了大部分流量。此時,您需要做一些前綴/路由映射來調整流量以偏愛一個對等方或另一個。
一旦您設置了路由圖或 ASN 匹配來轉移您的流量,如果目標站點出現故障,並且他們的路由從該提供商中刪除,您的路由器仍會將流量發送到另一個連接。BGP有點自我修復。
我們所做的是我們定義了一些基於 ASN 匹配的地圖。
PROVIDER_A_TO PROVIDER_A_THROUGH PROVIDER_B_TO PROVIDER_B_THROUGH
Juniper 使這比使用社區更容易,不過,您也可以這樣做。
我們的前綴列表查看目的地是否是特定的 ASN,如果是,則通過 _TO 映射。如果 ASN 列在 _THROUGH 中,它將首選該提供商。由於我們的供應商之一與 AT&T 有直接連接,PROVIDER_B_THROUGH 匹配 7018|7019(和一些其他 ASN),因此 AT&T 流量預設為供應商 B。即使兩者都可以訪問 AT&T,我們更願意通過供應商 B 發送它.
我確定 openbgpd 有類似的方法。