前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ARP终止功能在云环境中应用以提升网络安全性及性能

ARP终止功能在云环境中应用以提升网络安全性及性能

作者头像
dpdk-vpp源码解读
发布2024-05-14 18:28:58
840
发布2024-05-14 18:28:58
举报
文章被收录于专栏:DPDK VPP源码分析DPDK VPP源码分析

ARP终止(ARP Termination)功能通常是指在网络设备上配置静态的ARP条目,使得网络设备可以代表网络中的其他设备响应ARP请求。这意味着网络设备可以直接回复ARP请求,而不是让请求广播到整个网络,这有助于减少网络中的ARP流量,并且可以作为一种安全措施,防止ARP欺骗。

在云环境中广泛采用VXLAN(Virtual eXtensible Local Area Network)隧道技术,有效地解决了传统网络技术在云规模扩展中遇到的诸多挑战。在VxLAN(Virtual eXtensible Local Area Network)环境中,ARP Term功能发挥着重要的作用,尤其是在提高效率、减少广播风暴、增强安全性和简化管理方面。VxLAN是一种网络虚拟化技术,它通过将第二层(L2)网络封装在UDP/IP报文中,实现在第三层(L3)网络上的扩展,以克服传统VLAN数量限制并支持大规模数据中心部署。以下是ARP Term在VxLAN环境中的一些关键应用作用:

  • 减少广播域:VxLAN环境中,大量的虚拟机分布在不同的物理服务器上,但逻辑上属于同一VxLAN网络。如果没有适当的控制,ARP广播请求会在整个VxLAN网络中泛滥,导致广播风暴。ARP Term功能允许VxLAN网关(VTEPs,VxLAN Tunnel End Points)终止并响应ARP请求,限制了广播域的范围,减少了不必要的广播流量。
  • 优化东西向流量:在数据中心内部,东西向(虚拟机之间的)流量占比较大。ARP Term功能配合VxLAN的ARP优化机制,比如ARP广播抑制和ARP代答,可以在VTEP上缓存ARP条目,直接响应ARP请求,从而减少跨VTEP的ARP广播,提升了东西向流量的效率和降低了延迟。
  • 增强安全性:通过ARP Term,VTEP可以控制ARP响应的发送,有效防止ARP欺骗攻击,增强了VxLAN网络的安全性。只有经过验证的信息才会被转发,降低了恶意用户伪造ARP响应来篡改数据流向的风险。
  • 简化管理:在大规模的VxLAN部署中,手动管理每台虚拟机的ARP条目是不现实的。ARP Term功能结合VTEP的动态学习和分布式数据库(如通过MP-BGP或BGP EVPN通告ARP信息)能够自动同步和更新ARP表项,简化了网络管理,保证了虚拟机动态迁移后的连通性。
  • 节省带宽和资源:通过在VTEP上终止不必要的ARP广播和多播,可以显著节省网络带宽,减少VxLAN隧道头部的开销,提高了网络基础设施的资源利用率。

本文基于《learning vnet:L2 vSwitch shg 水平分割组 (3)》环境中组网图来学习arp term功能及业务转发流程。

arp term功能默认情况下是关闭,可以通过命令行set bridge-domain arp term 1 来开启arp term功能。下面是通过命令行 show bridge-domain 1查询配置。

然后通过命令行set bridge-domain arp term 1 来开启arp term。然后配置arp表。VPP的L2桥接域处理模块新增了一个API/CLI set bridge-domain arp entry <bridge-domain-id> [<ip-addr> <mac-addr>,允许用户为指定的桥接域提供IP与MAC地址的绑定关系。每条MAC地址会借助IP地址作为键,存储在名为mac_by_ip4的哈希表中。

代码语言:javascript
复制
#BD域 1中开启arp终止功能
dpdk-vpp源码分析: set bridge-domain arp term 1
#在BD域1 中配置MAC表
dpdk-vpp源码分析: set bridge-domain arp entry 1 192.168.1.3 56:8b:48:f8:a3:cc
dpdk-vpp源码分析: set bridge-domain arp entry 1 192.168.1.2 02:fe:8a:39:6b:6e
dpdk-vpp源码分析: set bridge-domain arp entry 1 192.168.1.1 02:fe:c7:62:52:7b 
#查询BD域中arp 表
dpdk-vpp源码分析: show bridge-domain 1 arp
  BD-ID   Index   BSN  Age(min)  Learning  U-Forwrd   UU-Flood   Flooding  ARP-Term  arp-ufwd Learn-co Learn-li   BVI-Intf 
    1       1      0     off        on        on       flood        on        on       off        4    16777216     N/A    

  IP4/IP6 to MAC table for ARP Termination
               192.168.1.2               =>   02:fe:8a:39:6b:6e 
               192.168.1.1               =>   02:fe:c7:62:52:7b 
               192.168.1.3               =>   56:8b:48:f8:a3:cc 
dpdk-vpp源码分析:

接下来就来通过流量验证一下,在命名空间PC1中ping tap3接口的IP地址,在vpp中trace抓取业务转发流程。

代码语言:javascript
复制
root@learning-vpp:~# ip netns exec pc1 ping 192.168.1.3
PING 192.168.1.3 (192.168.1.3) 56(84) bytes of data.
64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=0.370 ms

trace流程如下:
Packet 1

00:18:16:422628: virtio-input
  virtio: hw_if_index 1 next-index 4 vring 0 len 42
    hdr: flags 0x00 gso_type 0x00 hdr_len 0 gso_size 0 csum_start 0 csum_offset 0 num_buffers 1
00:18:16:422650: ethernet-input
  frame: flags 0x1, hw-if-index 1, sw-if-index 1
  ARP: 02:fe:c7:62:52:7b -> ff:ff:ff:ff:ff:ff
00:18:16:422666: l2-input
  l2-input: sw_if_index 1 dst ff:ff:ff:ff:ff:ff src 02:fe:c7:62:52:7b [l2-learn arp-term-l2bd l2-flood ]
00:18:16:422672: l2-learn
  l2-learn: sw_if_index 1 dst ff:ff:ff:ff:ff:ff src 02:fe:c7:62:52:7b bd_index 1
00:18:16:422677: arp-term-l2bd
  request, type ethernet/IP4, address size 6/4
  02:fe:c7:62:52:7b/192.168.1.1 -> 00:00:00:00:00:00/192.168.1.3
00:18:16:422685: l2-output
  l2-output: sw_if_index 1 dst 02:fe:c7:62:52:7b src 56:8b:48:f8:a3:cc data 08 06 00 01 08 00 06 04 00 02 56 8b
00:18:16:422690: tap1-output
  tap1 flags 0x00180005
  ARP: 56:8b:48:f8:a3:cc -> 02:fe:c7:62:52:7b
  reply, type ethernet/IP4, address size 6/4
  56:8b:48:f8:a3:cc/192.168.1.3 -> 02:fe:c7:62:52:7b/192.168.1.1
00:18:16:422695: tap1-tx
    buffer 0x9f848: current data 0, length 42, buffer-pool 0, ref-count 1, trace handle 0x0
                    l2-hdr-offset 0 l3-hdr-offset 14 
  hdr-sz 0 l2-hdr-offset 0 l3-hdr-offset 14 l4-hdr-offset 0 l4-hdr-sz 0
  ARP: 56:8b:48:f8:a3:cc -> 02:fe:c7:62:52:7b
  reply, type ethernet/IP4, address size 6/4
  56:8b:48:f8:a3:cc/192.168.1.3 -> 02:fe:c7:62:52:7b/192.168.1.1

ARP终止功能对应arp-term-l2bd节点。在L2层业务转发流程中需确保arp-term-l2bd节点在l2-flood节点前执行。

在l2-input节点通过入接口查询到BD索引,判断当前BD域中是否启用ARP终止功能。此检查仅在目的MAC地址为广播MAC时中执行,不影响常规单播和多播包的性能。若包为广播ARP包且桥接域启用了ARP终止,则在特征位图中为此包设置ARP终止位。随后,该包按常规顺序经历L2特性处理流程,并触达ARP终止节点。对于其他包,或所在桥接域未启用ARP终止的情况,则清除包的ARP终止位,避免增加额外的处理开销。

在arp-term-l2bd节点解析ARP请求报文中的IP作为键,查询mac_by_ip4。如果找到MAC条目,将向输入接口发送ARP响应。若未找到条目,则遵循常规L2广播转发路径,正常泛洪ARP请求包。

最开始验证ARP 终止功能,是在内核基于tap3接口ping tap2接口IP地址,发现是无法ping通的,show trace查询流程是没有显示报文进入arp-term-l2bd,一时间没有找到思路,因为环境中没有其他流量。使用命令行show node l2-learn查詢了报文next统计技术信息。确认报文进入了arp term节点。

接下来只能通过阅读代码来解答疑问,很快便找到了答案,报文处理开头判断当前接口SHG不等于0时,直接跳过当前处理节点。

代码语言:javascript
复制
// Terminate only local (SHG == 0) ARP
      if (vnet_buffer (p0)->l2.shg != 0)
        goto next_l2_feature;

总结,arp term功能在VPP中提供了对ARP流量的精细控制能力,有助于提升网络的安全性和效率,特别是在需要严格控制二层通信或实施复杂网络策略的场景中。本文只是简单介绍了ARP终止功能基本配置逻辑及转发流程,希望后续可应用到实际业务场景中去,提升网络安全性及效率。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DPDK VPP源码分析 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
分布式数据库 TDSQL
分布式数据库(Tencent Distributed SQL,以下简称 TDSQL)是腾讯打造的一款企业级数据库产品,具备强一致高可用、全球部署架构、高 SQL 兼容度、分布式水平扩展、高性能、完整的分布式事务支持、企业级安全等特性,同时提供智能 DBA、自动化运营、监控告警等配套设施,为客户提供完整的分布式数据库解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档