OpenVswitch端口流量镜像

ovs中无法直接抓包分析,可以通过端口流量镜像的方式进行抓包

端口流量镜像主要分为两步:

  • 创建mirror,指定mirror中的源端口,目的端口
  • 绑定mirror至bridge
  1. 创建mirror
  • 指定mirror名称,name={name}
  • 指定流量:
    select-all: true,表示此bridge上的所有流量;
    select-dst-port: 镜像从此port离开的流量;
    select-src-port: 镜像从此port进入的流量;
    select-vlan: 镜像此VLAN下的数据流量。
  • 指定镜像目的端口:
    output-port: 流量镜像至此端口;
    output-vlan: 流量镜像至指定vlan,镜像至指定VLAN时,原始tag会被剥离。
  1. 设置mirror作用于指定bridge
#ovs-vsctl set bridge {bridge} mirrors={mirror_name}
  1. 清除mirror
#ovs-vsctl -- --id=@rec get Mirror {mirror_name} \
-- remove Bridge br0 mirrors @rec
或
#ovs-vsctl clear bridge {bridge} mirrors

测试结构

#ovs-vsctl add-br mtest

#ip netns add test1
#ip netns add test2
#ip netns add test3

#ovs-vsctl add-port mtest p1 -- set interface p1 type=internal
#ovs-vsctl add-port mtest p2 -- set interface p2 type=internal
#ovs-vsctl add-port mtest p3 -- set interface p3 type=internal

#ip link set dev p1 netns test1
#ip link set dev p2 netns test2
#ip link set dev p3 netns test3

#ip netns exec test1 ip addr add 192.168.10.11/24 dev p1
#ip netns exec test2 ip addr add 192.168.10.12/24 dev p2

#ip netns exec test1 ip link set up p1
#ip netns exec test2 ip link set up p2
#ip netns exec test3 ip link set up p3

ovs-vsctl set port p1 tag=10
ovs-vsctl set port p2 tag=10
  • 场景1

拓扑模型如下:

mirror_span.png

p1 ping p2,镜像目的端口为p2的流量至p3。

镜像:

#ovs-vsctl -- --id=@p2 get port p2 \
-- --id=@p3 get port p3 \
-- --id=@m create mirror name=m0 select-dst-port=@p2 output-port=@p3 \
-- set bridge mtest mirrors=@m

# ovs-vsctl list mirror
_uuid               : 6ab7af81-ffb6-4191-8310-fa03b21874ac
external_ids        : {}
name                : "m0"
output_port         : a68d1a6e-5cc8-4560-9131-8cae6104a858
output_vlan         : []
select_all          : false
select_dst_port     : [c4516976-e1c5-4af2-80a8-7388d28635ff]
select_src_port     : []
select_vlan         : []
statistics          : {tx_bytes=0, tx_packets=0}

ping:

#ip netns exec test1 ping 192.168.10.12

tcpdump:

# ip netns exec test3 tcpdump -ni p3 -v -e  
tcpdump: WARNING: p3: no IPv4 address assigned
tcpdump: listening on p3, link-type EN10MB (Ethernet), capture size 65535 bytes
15:08:33.265759 06:7c:a0:69:97:f2 > c6:94:59:4b:7a:34, ethertype 802.1Q (0x8100), length 102: vlan 10, p 0, ethertype IPv4, (tos 0x0, ttl 64, id 20468, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.10.11 > 192.168.10.12: ICMP echo request, id 5034, seq 5, length 64
15:08:34.265730 06:7c:a0:69:97:f2 > c6:94:59:4b:7a:34, ethertype 802.1Q (0x8100), length 102: vlan 10, p 0, ethertype IPv4, (tos 0x0, ttl 64, id 20469, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.10.11 > 192.168.10.12: ICMP echo request, id 5034, seq 6, length 64
15:08:34.276974 06:7c:a0:69:97:f2 > c6:94:59:4b:7a:34, ethertype 802.1Q (0x8100), length 46: vlan 10, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Reply 192.168.10.11 is-at 06:7c:a0:69:97:f2, length 28
15:08:35.265745 06:7c:a0:69:97:f2 > c6:94:59:4b:7a:34, ethertype 802.1Q (0x8100), length 102: vlan 10, p 0, ethertype IPv4, (tos 0x0, ttl 64, id 20470, offset 0, flags [DF], proto ICMP (1), length 84)
  • 场景2,镜像VLAN流量

清理mirror:

#ovs-vsctl clear bridge mtest mirror

设置mirror:

#ovs-vsctl -- --id=@p3 get port p3 \
-- --id=@m create mirror name=m0 select-all=true select-vlan=10 output-port=@p3 \
-- set bridge mtest mirrors=@m

# ip netns exec test3 tcpdump -ni p3 -v -e  icmp or arp
tcpdump: WARNING: p3: no IPv4 address assigned
tcpdump: listening on p3, link-type EN10MB (Ethernet), capture size 65535 bytes
15:11:13.122744 06:7c:a0:69:97:f2 > c6:94:59:4b:7a:34, ethertype 802.1Q (0x8100), length 102: vlan 10, p 0, ethertype IPv4, (tos 0x0, ttl 64, id 20498, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.10.11 > 192.168.10.12: ICMP echo request, id 5089, seq 23, length 64
15:11:13.122769 c6:94:59:4b:7a:34 > 06:7c:a0:69:97:f2, ethertype 802.1Q (0x8100), length 102: vlan 10, p 0, ethertype IPv4, (tos 0x0, ttl 64, id 50262, offset 0, flags [none], proto ICMP (1), length 84)
    192.168.10.12 > 192.168.10.11: ICMP echo reply, id 5089, seq 23, length 64
15:11:14.122704 06:7c:a0:69:97:f2 > c6:94:59:4b:7a:34, ethertype 802.1Q (0x8100), length 102: vlan 10, p 0, ethertype IPv4, (tos 0x0, ttl 64, id 20499, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.10.11 > 192.168.10.12: ICMP echo request, id 5089, seq 24, length 64
15:11:14.122741 c6:94:59:4b:7a:34 > 06:7c:a0:69:97:f2, ethertype 802.1Q (0x8100), length 102: vlan 10, p 0, ethertype IPv4, (tos 0x0, ttl 64, id 50263, offset 0, flags [none], proto ICMP (1), length 84)
    192.168.10.12 > 192.168.10.11: ICMP echo reply, id 5089, seq 24, length 64
  • 场景3,RSPAN(远程端口镜像)

拓扑模型如下:

mirror_rspan.png

添加ovs bridge:

#ovs-vsctl add-br mspan
#ip netns add test4
#ovs-vsctl add-port mspan p4 -- set interface p4 type=internal -- set port p4 tag=200
#ip link set dev p4 netns test4
#ip netns exec test4 ip link set up p4

patch口:

#ovs-vsctl \
-- add-port mtest mpatch0 \
-- set interface mpatch0 type=patch options:peer=mpatch1 \
-- add-port mspan mpatch1 \
-- set interface mpatch1 type=patch options:peer=mpatch0

设置mirror:

  1. 需要将p1或p2口的数据,镜像至vlan 20
#ovs-vsctl -- --id=@p1 get port p1 \
-- --id=@m create mirror name=m0 select-src-port=@p1 output-vlan=200 \
-- set bridge mtest mirrors=@m
  1. 在mspan上,将VLAN 22的流量镜像至p4口
#ovs-vsctl -- --id=@p4 get port p4 \
-- --id=@m create mirror name=m1 select-all=true select-vlan=200 output-port=@p4 \
-- set bridge mspan mirrors=@m


# ovs-vsctl list mirror
_uuid               : 46ef8c49-a242-4558-8035-fd7aae88f3e3
external_ids        : {}
name                : "m0"
output_port         : []
output_vlan         : 200
select_all          : false
select_dst_port     : []
select_src_port     : [985b0e1d-8cf6-486c-b7ab-3336cffe0e7a]
select_vlan         : []
statistics          : {tx_bytes=7658, tx_packets=81}

_uuid               : 3a86586a-8fe2-4409-bbd0-31017d1ff564
external_ids        : {}
name                : "m1"
output_port         : []
output_vlan         : []
select_all          : true
select_dst_port     : []
select_src_port     : []
select_vlan         : [200]
statistics          : {tx_bytes=0, tx_packets=0}

抓包测试:

# ip netns exec test1 ping 192.168.10.12
PING 192.168.10.12 (192.168.10.12) 56(84) bytes of data.
64 bytes from 192.168.10.12: icmp_seq=1 ttl=64 time=0.442 ms
64 bytes from 192.168.10.12: icmp_seq=2 ttl=64 time=0.051 ms

# ip netns exec test4 tcpdump -ni p4 -v -e  icmp or arp
tcpdump: WARNING: p4: no IPv4 address assigned
tcpdump: listening on p4, link-type EN10MB (Ethernet), capture size 65535 bytes
16:30:40.649825 06:7c:a0:69:97:f2 > c6:94:59:4b:7a:34, ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 64, id 20855, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.10.11 > 192.168.10.12: ICMP echo request, id 6512, seq 1, length 64
16:30:41.649750 06:7c:a0:69:97:f2 > c6:94:59:4b:7a:34, ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 64, id 20856, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.10.11 > 192.168.10.12: ICMP echo request, id 6512, seq 2, length 64
16:30:42.649747 06:7c:a0:69:97:f2 > c6:94:59:4b:7a:34, ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 64, id 20857, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.10.11 > 192.168.10.12: ICMP echo request, id 6512, seq 3, length 64
16:30:43.649736 06:7c:a0:69:97:f2 > c6:94:59:4b:7a:34, ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 64, id 20858, offset 0, flags [DF], proto ICMP (1), length 84)
  • 场景4, ERSPAN

封装远程端口镜像,ovs中,利用gre隧道路由镜像流量。

  • HOST1: 172.21.12.8
  • HOST2: 712.21.12.163

拓扑模型如下:

mirror_erspan.png

HOST1:

#ovs-vsctl add-port mtest lgre0 -- set interface lgre0 type=gre options:remote_ip=172.21.12.163 options:key=0x0010

HOST2:

#ovs-vsctl add-br mtest
#ovs-vsctl add-port mtest ml -- set interface ml type=internal
#ip netns add rmon
#ip link set ml netns rmon
#ip netns exec rmon ip link set up ml
添加vxlan端口:
#ovs-vsctl add-port mtest rgre0 -- set interface rgre0 type=gre options:remote_ip=172.21.12.8 options:key=0x0010 

HOST1,添加mirror:

#ovs-vsctl -- --id=@p1 get port p1 \
-- --id=@lgre0 get port lgre0 \
-- --id=@m create mirror name=m0 select-src-port=@p1 output-port=@lgre0 \
-- set bridge mtest mirrors=@m

HOST2,测试:

# ip netns exec rmon tcpdump -ni ml -v -e icmp or arp 
tcpdump: listening on ml, link-type EN10MB (Ethernet), capture size 65535 bytes
15:55:31.571555 06:7c:a0:69:97:f2 > c6:94:59:4b:7a:34, ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 64, id 17776, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.10.11 > 192.168.10.12: ICMP echo request, id 26594, seq 1, length 64
15:55:32.571376 06:7c:a0:69:97:f2 > c6:94:59:4b:7a:34, ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 64, id 17777, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.10.11 > 192.168.10.12: ICMP echo request, id 26594, seq 2, length 64
15:55:33.571340 06:7c:a0:69:97:f2 > c6:94:59:4b:7a:34, ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 64, id 17778, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.10.11 > 192.168.10.12: ICMP echo request, id 26594, seq 3, length 64
15:55:34.571304 06:7c:a0:69:97:f2 > c6:94:59:4b:7a:34, ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 64, id 17779, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.10.11 > 192.168.10.12: ICMP echo request, id 26594, seq 4, length 64
15:55:35.571292 06:7c:a0:69:97:f2 > c6:94:59:4b:7a:34, ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 64, id 17780, offset 0, flags [DF], proto ICMP (1), length 84)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,378评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,356评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,702评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,259评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,263评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,036评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,349评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,979评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,469评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,938评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,059评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,703评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,257评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,262评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,501评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,792评论 2 345

推荐阅读更多精彩内容