流量交換點:從起源到打造自己的IX

流量交換點:從起源到打造自己的IX

“我們與 SRI 的人員建立了電話聯繫……”,Kleinrock……在接受採訪時說:
“我們輸入了 L,然後在電話裡問:“你看到 L 了嗎?”
「是的,我們看到了 L,」回應道。
“我們輸入了 O,然後問,’你看到 O 了嗎?’”
“是的,我們看到了O。”
「然後我們輸入 G,系統崩潰了」...

然而一場革命已經開始…

互聯網的開始。


大家好!

我叫 Alexander,是 Linxdatacenter 的網路工程師。 在今天的文章中,我們將討論流量交換點(Internet Exchange Points,IXP):它們出現之前的情況、它們解決的任務以及它們是如何建構的。 另外,在本文中,我將使用 EVE-NG 平台和 BIRD 軟體路由器來示範 IXP 的操作原理,以便您了解它的「幕後」工作原理。

歷史上的位

如果你看 這裡,那麼可以看到,交通交換點數量的快速成長是從1993年開始的。 這是因為當時存在的電信業者的大部分流量都經過美國骨幹網路。 例如,當流量從法國的營運商流向德國的營運商時,流量首先從法國流向美國,然後從美國流向德國。 本例中的骨幹網路充當法國和德國之間的中繼站。 即使是一國境內的流量也常常不是直接通過,而是透過美國業者的骨幹網路。

這種狀況不僅影響運輸交通的成本,也影響通道的品質和延誤。 網路使用者數量增加,新業者出現,流量增加,網路成熟。 世界各地的運營商開始意識到需要一種更合理的方法來組織運營商間的互動。 “為什麼我(運營商 A)要支付途經另一個國家/地區的過境費用,以便將流量傳送給位於下一條街道的運營商 B?” 這大致是電信業者當時問自己的問題。 於是,流量交換點開始出現在世界不同地區的業者集中點:

  • 1994 年 – LINX 在倫敦,
  • 1995 – DE-CIX 在法蘭克福舉行,
  • 1995 – MSK-IX,在莫斯科等。

網路與我們的時代

從概念上講,現代互聯網的架構由許多自治系統 (AS) 以及它們之間的許多物理和邏輯連接組成,這些連接決定了從一個 AS 到另一個 AS 的流量路徑。

AS 通常是電信業者、網路供應商、CDN、資料中心和企業部門公司。 AS 通常使用 BGP 協定來組織它們之間的邏輯連線(對等)。

自治系統如何組織這些連結取決於許多因素:

  • 地理、
  • 經濟的,
  • 政治的,
  • AS 所有者之間的協議和共同利益,
  • 等等

當然,這個方案有一定的結構和層次。 因此,運營商分為 1 級、2 級和 3 級,如果本地互聯網提供商(第 3 級)的客戶通常是普通用戶,那麼,例如,對於第 1 級級別運營商的客戶是其他運營商。 三級營運商聚合其用戶的流量,二級電信業者反過來聚合三級營運商的流量,而一級營運商則聚合所有網路流量。

它可以示意性地表示如下:

流量交換點:從起源到打造自己的IX
這張圖顯示流量是從下往上聚合的,即從最終用戶到一級運營商。 AS之間也存在水平的流量交換,彼此大致相等。

該方案的一個組成部分同時也是一個缺點是在地理區域內更靠近最終用戶的自治系統之間的連接存在一定程度的混亂。 考慮下圖:

流量交換點:從起源到打造自己的IX

假設在一個大城市中有 5 家電信營運商,出於某種原因,這些營運商之間的對等互連的組織方式如上圖所示。

如果連接到Go ISP的用戶Petya想要存取連接到ASM提供者的伺服器,那麼它們之間的流量將被迫經過5個自治系統。 這會增加延遲,因為流量通過的網路設備數量增加,以及 Go 和 ASM 之間自治系統上的中轉流量也增加。

如何減少流量強制經過的中轉AS數量? 沒錯——交通交換點。

如今,新的 IXP 的出現是由與 90 年代至 2000 年代初期相同的需求所驅動的,只是規模較小,以應對電信運營商、用戶和流量數量的增加以及 CDN 網路生成的內容量的增加和數據中心。

什麼是兌換點?

流量交換點是具有特殊網路基礎設施的地方,對相互流量交換感興趣的參與者組織相互對等互連。 流量交換點的主要參與者:電信業者、網路供應商、內容供應商和資料中心。 在交通交換點,參與者直接相互連結。 這可以讓您解決以下問題:

  • 減少延遲,
  • 減少過境交通量,
  • 優化AS之間的路由。

考慮到 IXP 存在於世界各地的許多大城市,這一切都對整個互聯網產生了有益的影響。

如果使用 IXP 解決 Petya 的上述情況,結果將是這樣的:

流量交換點:從起源到打造自己的IX

交通交換點如何運作?

通常,IXP 是一個獨立的 AS,擁有自己的公共 IPv4/IPv6 位址區塊。

IXP 網路通常由連續的 L2 域組成。 有時,這只是一個託管所有 IXP 用戶端的 VLAN。 當涉及較大的、地理上分佈的IXP時,可以使用MPLS、VXLAN等技術來組織L2域。

IXP 元素

  • SKS。 這裡沒有什麼不尋常的:機架、光纖交叉連接、配線架。
  • 開關 – IXP 的基礎。 交換器連接埠是 IXP 網路的入口點。 這些交換器也執行部分安全功能 - 它們過濾不應出現在 IXP 網路上的垃圾流量。 通常,交換器的選擇是基於功能要求 - 可靠性、支援的連接埠速度、安全功能、sFlow 支援等。
  • 路由伺服器(RS) – 任何現代交通交換點不可或缺的一部分。 其工作原理與iBGP中的路由反射器或OSPF中的指定路由器非常相似,並解決相同的問題。 隨著流量交換點中參與者數量的增加,每位參與者需要支援的 BGP 會話數量也隨之增加,即這讓人想起 iBGP 中經典的全網狀拓撲。 RS 透過以下方式解決該問題:它與每個有興趣的 IXP 參與者建立 BGP 會話,並且該參與者成為 RS 用戶端。 從其中一個用戶端接收到 BGP 更新後,RS 會將此更新傳送到所有其他用戶端,當然,接收到此更新的用戶端除外。 因此,RS 無需在所有 IXP 成員之間建立全網格,並完美地解決了可擴展性問題。 值得注意的是,路由伺服器將路由從一個AS透明傳輸到另一個AS,並不會改變BGP傳輸的屬性,例如不將其AS中的編號加入AS-path。 RS 上也有基本的路由過濾:例如,RS 不接受 Martians 網路和 IXP 本身的前綴。

    開源軟體路由器 BIRD(鳥網際網路路由守護程式)通常用作路由伺服器解決方案。 它的好處是免費,可以在大多數 Linux 發行版上快速部署,具有靈活的設定路由/過濾策略的機制,並且對計算資源要求不高。 此外,也可以選擇 Cisco、Juniper 等硬體/虛擬路由器作為 RS。

  • 安全。 由於IXP網路是大量AS的集中地,因此必須寫出所有參與者必須遵循的安全策略。 一般來說,在 IXP 以外的兩個單獨的 BGP 對等體之間建立 BGP 鄰接關係時適用的所有相同機制都適用於此,此外還有一些附加的安全功能。

    例如,最好只允許來自預先協商的 IXP 參與者的特定 MAC 位址的流量。 拒絕 0x0800(IPv4)、0x08dd(IPv6)、0x0806(ARP) 以外的乙太網路類型欄位的流量; 這樣做是為了過濾掉不屬於 BGP 對等互連的流量。 還可以使用GTSM、RPKI等機制。

也許以上是任何 IXP 的主要組件,無論規模如何。 當然,較大的 IXP 可能擁有額外的技術和解決方案。
碰巧的是,IXP 還為其參與者提供附加服務:

  • 放置在 IXP TLD DNS 伺服器上,
  • 安裝硬體NTP伺服器,讓參與者準確同步時間,
  • 提供對 DDoS 攻擊等的保護。

的操作原理

讓我們使用簡單的 IXP 範例(使用 EVE-NG 建模)來了解流量交換點的操作原理,然後考慮 BIRD 軟體路由器的基本設定。 為了簡化圖表,我們將省略冗餘和容錯等重要內容。

網路拓撲如下圖所示。

流量交換點:從起源到打造自己的IX

假設我們管理一個小型交換點並提供以下對等選項:

  • 公共對等互連,
  • 私人對等互連,
  • 透過路由伺服器進行對等。

我們的 AS 編號是 555,我們擁有一個 IPv4 位址區塊 – 50.50.50.0/24,我們從中為想要連接到我們網路的人頒發 IP 位址。

50.50.50.254 – 在路由伺服器介面上設定的 IP 位址,在透過 RS 對等互連的情況下,用戶端將使用此 IP 建立 BGP 工作階段。

此外,對於透過 RS 進行對等互連,我們開發了一個基於 BGP 社群的簡單路由策略,它允許 IXP 參與者調節向誰發送以及發送哪些路由:

BGP社區
描述

本地_AS:對等_AS
僅將前綴傳送至 PEER_AS

LOCAL_AS:IXP_AS
將前綴傳輸給所有 IXP 參與者

3 個客戶想要連接到我們的 IXP 並交換流量; 假設這些是網路供應商。 他們都希望透過路由伺服器來組織對等互連。 下圖是客戶端連線參數圖:

顧客
客戶 AS 編號
客戶端通告的前綴
指派給客戶端以連接到 IXP 的 IP 位址

網際網路服務供應商 #1
作為100
1.1.0.0/16
50.50.50.10/24

網際網路服務供應商 #2
作為200
2.2.0.0/16
50.50.50.20/24

網際網路服務供應商 #3
作為300
3.3.0.0/16
50.50.50.30/24

客戶端路由器上的基本 BGP 設定:

router bgp 100
 no bgp enforce-first-as
 bgp log-neighbor-changes
 neighbor 50.50.50.254 remote-as 555
address-family ipv4
  network 1.1.0.0 mask 255.255.0.0
  neighbor 50.50.50.254 activate
  neighbor 50.50.50.254 send-community both
  neighbor 50.50.50.254 soft-reconfiguration inbound
  neighbor 50.50.50.254 route-map ixp-out out
 exit-address-family

ip prefix-list as100-prefixes seq 5 permit 1.1.0.0/16
route-map bgp-out permit 10
 match ip address prefix-list as100-prefixes
 set community 555:555

值得注意的是這裡的 no bgpforce-first-as 設定。 預設情況下,BGP 要求收到的 BGP 更新的 as-path 包含接收更新的對等方的 as bgp 編號。 但由於路由伺服器不會對as-path進行更改,因此其編號不會在as-path中,且更新將被丟棄。 此設定用於使路由器忽略此規則。

我們也看到客戶端已將 bgp 社群 555:555 設定為此前綴,根據我們的策略,這意味著客戶端希望向所有其他參與者通告此前綴。

對於其他客戶端的路由器,設定將相似,但其獨特的參數除外。

BIRD 設定範例:

define ixp_as = 555;
define ixp_prefixes = [ 50.50.50.0/24+ ];

template bgp RS_CLIENT {
  local as ixp_as;
  rs client;
}

下面描述了一個不接受 martians 前綴以及 IXP 本身前綴的過濾器:

function catch_martians_and_ixp()
prefix set martians;
prefix set ixp_prefixes;
{
  martians = [ 
  0.0.0.0/8+,
  10.0.0.0/8+,
  100.64.0.0/10+,
  127.0.0.0/8+,
  169.254.0.0/16+,
  172.16.0.0/12+,
  192.0.0.0/24+,
  192.0.2.0/24+,
  192.168.0.0/16+,
  198.18.0.0/15+,
  198.51.100.0/24+,
  203.0.113.0/24+,
  224.0.0.0/4+,
  240.0.0.0/4+ ];

  if net ~ martians || net ~ ixp_prefixes then return false;

  return true;
}

該函數實現了我們之前描述的路由策略。

function bgp_ixp_policy(int peer_as)
{
  if (ixp_as, ixp_as) ~ bgp_community then return true;
  if (ixp_as, peer_as) ~ bgp_community then return true;

  return false;
}

filter reject_martians_and_ixp
{
  if catch_martians_and_ixp() then reject;
  if ( net ~ [0.0.0.0/0{25,32} ] ) then {
    reject;
  }
  accept;


}

我們配置對等互連,應用適當的過濾器和策略。

protocol as_100 from RS_CLIENT {
  neighbor 50.50.50.10 as 100;
  ipv4 {
    export where bgp_ixp_policy(100);
    import filter reject_martians_and_ixp;
  }
}

protocol as_200 from RS_CLIENT {
  neighbor 50.50.50.20 as 200;
  ipv4 {
    export where bgp_ixp_policy(200);
    import filter reject_martians_and_ixp;
  }
}

protocol as_300 from RS_CLIENT {
  neighbor 50.50.50.30 as 300;
  ipv4 {
    export where bgp_ixp_policy(300);
    import filter reject_martians_and_ixp;
  }
}

值得注意的是,在路由伺服器上,最好將來自不同對等點的路由放入不同的 RIB 中。 BIRD 可以讓您做到這一點。 在我們的範例中,為簡單起見,從所有客戶端收到的所有更新都會新增到一個公共 RIB 中。

那麼,讓我們檢查一下我們得到了什麼。

在路由伺服器上,我們看到已與所有三個客戶端建立了 BGP 會話:

流量交換點:從起源到打造自己的IX

我們看到我們收到了來自所有客​​戶端的前綴:

流量交換點:從起源到打造自己的IX

在as 100路由器上,我們看到如果與路由伺服器只有一個BGP會話,我們會收到來自as 200和as 300的前綴,而BGP屬性沒有改變,就好像客戶端之間直接進行對等一樣:

流量交換點:從起源到打造自己的IX

因此,我們看到路由伺服器的存在極大地簡化了 IXP 上對等互連的組織。

我希望這個演示可以幫助您更好地了解 IXP 的工作原理以及路由伺服器如何在 IXP 上運作。

Linx資料中心IX

在 Linxdatacenter,我們基於 2 個交換器和 2 個路由伺服器的容錯基礎架構建構了自己的 IXP。 我們的 IXP 現在正在測試模式下運行,我們邀請大家連接到 Linxdatacenter IX 並參與測試。 連接後,您將獲得一個頻寬為 1 Gbit/s 的端口,能夠透過我們的路由伺服器進行對等,以及存取您的 IX 入口網站個人帳戶(可在以下網址取得): ix.linxdatacenter.com.

寫評論或私訊即可參與測驗。

產量

流量交換點在網路誕生之初就出現了,作為解決電信業者之間流量不理想問題的工具。 現在,隨著新的全球服務的出現和CDN流量的增加,交換點不斷優化全球網路的運作。 全球IXP數量的增加既有利於服務的最終用戶,也有利於電信業者、內容業者等。 對於IXP參與者來說,好處體現在降低組織外部對等互連的成本、減少高層運營商必須支付的流量、優化路由以及與內容運營商建立直接接口的能力。

有用的鏈接

來源: www.habr.com

添加評論