流量交换点:从起源到打造自己的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
AS 100
1.1.0.0/16
50.50.50.10/24

互联网服务提供商 #2
AS 200
2.2.0.0/16
50.50.50.20/24

互联网服务提供商 #3
AS 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参与者来说,好处体现在降低组织外部对等互连的成本、减少高层运营商必须支付的流量、优化路由以及与内容运营商建立直接接口的能力。

有用的链接

来源: habr.com

添加评论