将单播 VXLAN 数据包解封装到 VXLAN 接口

将单播 VXLAN 数据包解封装到 VXLAN 接口

我正在尝试评估一种新的虚拟化流量镜像服务(类似于 SPAN),该服务使用传统的 VXLAN UDP 单播封装方法将 VXLAN 封装的数据包传送到我选择的目的地。我的目标是将这些数据包发送到具有两个接口的 Linux 实例,第二个接口专用于接收这些流量源。

一旦我的实例具有两个逻辑接口,我就想将这些数据包接收到干净的 VXLAN 虚拟接口中,以便我可以仅在剥离了 VXLAN 包装器的数据包上运行安全工具(例如 Suricata、BRO)。过去,我曾通过运行以下两个简单命令(在多播环境中)成功实现这一点。

sudo ip link add vxlan0 type vxlan id 0 dev ens6 dstport 4789 group 239.1.1.1
sudo ip link set vxlan0 up

在多播环境中,我的双接口 Linux 机器上的这两个命令足以让一连串干净的解封装数据包到达虚拟接口 vxlan0。这意味着,如果我运行

sudo tcpdump -nvi vxlan0 

我看到 VXLAN 报头被移除后的数据包,只剩下原始数据包。现在我的安全工具只监控这个接口,我不必担心过滤掉 VXLAN 数据包。

转到单播环境,我期望相同的命令减去多播组会产生相同的结果,但事实似乎并非如此。以下是我正在尝试的。

sudo ip link add vxlan0 type vxlan id 0 dev ens6 dstport 4789
sudo ip link set vxlan0 up

在这种情况下,当我尝试在 vxlan0 接口上运行 tcpdump 时,我没有看到我期望的内容,即没有 VXLAN 标头的解封装数据包。

我尝试过的事情:

  1. 将辅助接口置于混杂模式
  2. 不要将辅助接口置于混杂模式
  3. 辅助接口 IP
  4. 不要将辅助接口设为 IP
  5. 关闭并打开辅助接口上的多播

有人能给我指出正确的方向吗?

答案1

我已经按照您描述的方式操作了。就我而言,我使用 Suricata 以 pcap 模式监控 VXLAN 接口。网络环境仅支持单播。以下是我配置 VXLAN 接口的方法。

auto vxlan-tap
    iface $IFACE inet manual
    pre-up ip link add $IFACE type vxlan id 1000 dev eth0 local 10.20.30.1 dstport 4789
    up ip link set $IFACE up
    up ip link set $IFACE promisc on
    down ip link set $IFACE promisc off
    down ip link set $IFACE down
    post-down ip link del $IFACE

我没有发现您的配置有任何明显错误,但您应该检查以下几点。

  1. 您是否在逻辑接口(例如tcpdump udp -i ens6 port 4789)上看到 VXLAN 流量?如果没有,请尝试转储所有 UDP 流量以验证源未在其他端口上将其发送给您。
  2. VNI接收到的 VXLAN 封装流量是否与id您在 VXLAN 接口上配置的匹配?
  3. 您是否有任何iptables过滤器丢弃端口 4789 上的 UDP 流量?

相关内容