我是 OVS 的新手,并试图让 IPFIX 在我的 OVS 网桥上工作。我正在构建上一篇文章中的重要信息:
好消息是我的 OVS 开关可以将 IPFIX 流导出到我的收集器。坏消息是交换机没有导出我想要的流。交换机没有导出描述我的测试主机之间流量的流记录,而是仅导出描述交换机和收集器之间流量的记录……这是我不感兴趣的流量。
简单描述一下我的概念验证环境:我有一个带有三个 VM 的 OVS 交换机;两个测试主机和一个收集器:
root@OVSHost# ovs-vsctl list bridge
_uuid : 2fb2fa30-e1ed-4cbf-a365-7462e5f83cbc
...
name : "myBridge"
...
ports : [1940fd00-2dcb-4c85-a077-bae1653d9841, 279e489d-a940-4056-b753-2213fd46d5fd,
31258106-589b-40b9-94c9-a29711991a91, ee38080d-3446-4760-a297-801c5ffe76bb]
root@OVSHost#
我将首先承认我不知道哪些端口支持测试主机,哪些支持收集器。我在收集器 VM 上设置了 libIPFIX(一个免费的 IPFIX 收集器)。最后,我通过运行以下两个命令在我的 OVS 网桥上启用了 IPFIX 导出:
ovs-vsctl clear bridge myBridge ipfix
ovs-vsctl -- set Bridge myBridge ipfix=@i -- --id=@i create IPFIX targets=\"192.168.2.2:4739\" obs_domain_id=123 obs_point_id=456 sampling=5
上述命令到位后,我看到流记录到达我的收集器。但仔细观察后,我意识到我看到的流量描述了网桥 (192.168.2.1) 和收集器 (192.168.2.2) 之间的流量。这是一个这样的记录,使用我为故障排除而编写的 python 脚本处理:
RECORD 123, using Template 284
138(observationPointId:4) 456
61(flowDirection:1) 0
4(protocolIdentifier:1) 17
17) 8(sourceIPv4Address:4) 192.168.2.1
18) 12(destinationIPv4Address:4) 192.168.2.2
19) 7(sourceTransportPort:2) 37512
20) 11(destinationTransportPort:2) 4739
起初,我认为我的收集器软件一定是配置错误,但后来我在收集器 VM 上运行 tshark 并看到了同样的情况。(编辑使其简洁):
root@6bfcec0a4bd8:/# tshark -f 'port 4739' -d udp.port==4739,cflow -V -i eth1
Capturing on 'eth1'
Frame 64: 314 bytes on wire (2512 bits), 314 bytes captured (2512 bits) on interface 0
...
Ethernet II, Src: 32:fa:b2:2f:bf:4c (32:fa:b2:2f:bf:4c), Dst: 82:9e:f8:b2:e7:27 (82:9e:f8:b2:e7:27)
...
Internet Protocol Version 4, Src: 192.168.2.1, Dst: 192.168.2.2
...
User Datagram Protocol, Src Port: 37512, Dst Port: 4739
...
Cisco NetFlow/IPFIX
Flow 1
Observation Point Id: 456
IfName: myBridge
Protocol: UDP (17)
SrcAddr: 192.168.2.1
DstAddr: 192.168.2.2
SrcPort: 37512 (37512)
DstPort: 4739 (4739)
明白了吗?我的网桥似乎在报告 IPFIX 导出本身的流量信息。这很好……
…除了我 100% 的流记录看起来像上面那样。当我在两个测试主机之间运行测试流量时,我从来没有看到一条描述该流量的记录。绝不。就像网桥仅在流描述了流向收集器的流量并忽略所有其他流量时才导出流数据。
所以在这一点上,我假设我用来从 OVS 网桥导出流量的命令只是导出与网桥收集器流量相关的记录?我可以修改这些命令以包含或专注于测试主机吗?