searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

通过OVS流表实现ARP应答功能

2023-05-06 09:07:51
249
0

假设我们有一个虚拟交换机,其中连接着两个虚拟机——VM1 和 VM2。现在我们想要实现 ARP 代答来避免 VM1 或 VM2 回复 ARP 请求。下面是一个简单的流表项来实现这样的功能:

ovs-ofctl add-flow br0 “table=0, priority=100, arp, in_port=1, dl_src=<MAC address of the VM>, arp_tpa=<IP Address of the VM>, actions=move:NXM_OF_ETH_SRC[]->NXM_OF_ETH_DST[], mod_dl_src:<MAC address of the VM>, load:<IP Address of the VM>->NXM_OF_ARP_SPA[], move:NXM_NX_ARP_SHA[]->NXM_NX_ARP_THA[], mod_nw_tos:0/0, move:NXM_NX_ARP_SPA[]->NXM_NX_ARP_TPA[], mod_dl_dst:ff:ff:ff:ff:ff:ff, output:NXM_OF_IN_PORT[]”

上述命令将流表的优先级设置为100,匹配类型为 ARP 请求,输入端口为 1(即连接到 VM1 的端口),并使用动作将请求信息修改为虚假的源 MAC、源 IP,接着将响应信息也改为虚假的 MAC 地址和 IP,输出到带有该请求的输入端口。

解释:

  • br0: OVS 交换机的名称
  • table=0: 表序号为 0,即默认表
  • priority=100: 流表项的优先级。数值越高,优先级越高
  • arp: 匹配类型,这里是 ARP 请求
  • in_port=1: 匹配输入端口,这里是连接到 VM1 的端口
  • dl_src=<MAC address of the VM>: 匹配 VM 的 MAC 地址
  • arp_tpa=<IP Address of the VM>: 匹配 VM 的 IP 地址
  • actions: 动作列表
  • move:NXM_OF_ETH_SRC[]->NXM_OF_ETH_DST[]: 将数据包的源 MAC 地址复制到目标 MAC 地址
  • mod_dl_src:<MAC address of the VM>: 修改数据包的源 MAC 地址为虚拟机的 MAC 地址
  • load:<IP Address of the VM>->NXM_OF_ARP_SPA[]: 加载虚拟机的 IP 地址到数据包的源 IP 地址
  • move:NXM_NX_ARP_SHA[]->NXM_NX_ARP_THA[]: 将数据包的源 ARP 地址复制到目的 ARP 地址
  • mod_nw_tos:0/0: 修改服务类型(TOS)为 0/0
  • move:NXM_NX_ARP_SPA[]->NXM_NX_ARP_TPA[]: 将源 IP 地址复制到目标 IP 地址中
  • mod_dl_dst:ff:ff:ff:ff:ff:ff: 修改数据包的目标 MAC 地址为广播地址
  • output:NXM_OF_IN_PORT[]: 输出端口,为输入端口

通过上述流表项配置,当 OVS 收到来自外部网络的 ARP 请求时,它将自动进行替换并欺骗对端网络,避免实际的 VM1 或 VM2 回复。这样可以提高网络运行效率,同时减轻 VM 对 ARP 缓存表的维护负担。

0条评论
0 / 1000
牛哥
8文章数
0粉丝数
牛哥
8 文章 | 0 粉丝
原创

通过OVS流表实现ARP应答功能

2023-05-06 09:07:51
249
0

假设我们有一个虚拟交换机,其中连接着两个虚拟机——VM1 和 VM2。现在我们想要实现 ARP 代答来避免 VM1 或 VM2 回复 ARP 请求。下面是一个简单的流表项来实现这样的功能:

ovs-ofctl add-flow br0 “table=0, priority=100, arp, in_port=1, dl_src=<MAC address of the VM>, arp_tpa=<IP Address of the VM>, actions=move:NXM_OF_ETH_SRC[]->NXM_OF_ETH_DST[], mod_dl_src:<MAC address of the VM>, load:<IP Address of the VM>->NXM_OF_ARP_SPA[], move:NXM_NX_ARP_SHA[]->NXM_NX_ARP_THA[], mod_nw_tos:0/0, move:NXM_NX_ARP_SPA[]->NXM_NX_ARP_TPA[], mod_dl_dst:ff:ff:ff:ff:ff:ff, output:NXM_OF_IN_PORT[]”

上述命令将流表的优先级设置为100,匹配类型为 ARP 请求,输入端口为 1(即连接到 VM1 的端口),并使用动作将请求信息修改为虚假的源 MAC、源 IP,接着将响应信息也改为虚假的 MAC 地址和 IP,输出到带有该请求的输入端口。

解释:

  • br0: OVS 交换机的名称
  • table=0: 表序号为 0,即默认表
  • priority=100: 流表项的优先级。数值越高,优先级越高
  • arp: 匹配类型,这里是 ARP 请求
  • in_port=1: 匹配输入端口,这里是连接到 VM1 的端口
  • dl_src=<MAC address of the VM>: 匹配 VM 的 MAC 地址
  • arp_tpa=<IP Address of the VM>: 匹配 VM 的 IP 地址
  • actions: 动作列表
  • move:NXM_OF_ETH_SRC[]->NXM_OF_ETH_DST[]: 将数据包的源 MAC 地址复制到目标 MAC 地址
  • mod_dl_src:<MAC address of the VM>: 修改数据包的源 MAC 地址为虚拟机的 MAC 地址
  • load:<IP Address of the VM>->NXM_OF_ARP_SPA[]: 加载虚拟机的 IP 地址到数据包的源 IP 地址
  • move:NXM_NX_ARP_SHA[]->NXM_NX_ARP_THA[]: 将数据包的源 ARP 地址复制到目的 ARP 地址
  • mod_nw_tos:0/0: 修改服务类型(TOS)为 0/0
  • move:NXM_NX_ARP_SPA[]->NXM_NX_ARP_TPA[]: 将源 IP 地址复制到目标 IP 地址中
  • mod_dl_dst:ff:ff:ff:ff:ff:ff: 修改数据包的目标 MAC 地址为广播地址
  • output:NXM_OF_IN_PORT[]: 输出端口,为输入端口

通过上述流表项配置,当 OVS 收到来自外部网络的 ARP 请求时,它将自动进行替换并欺骗对端网络,避免实际的 VM1 或 VM2 回复。这样可以提高网络运行效率,同时减轻 VM 对 ARP 缓存表的维护负担。

文章来自个人专栏
Openstack
8 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0