openvswitch实践三 vxlan内核态实现与openvswitch实现对比

1.vxlan内核态实现

1.1 测试环境

 1.2 试验配置

host 172.16.0.100

brctl addbr br0

ip addr add 10.1.1.2/24 dev br0

ip link set dev br0 up 

ip link add vxlan0 type vxlan id 1 group 239.1.1.1 dev eth1 dstport 4789
brctl addif br0 vxlan0

ip link set dev vxlan0 up

host 172.16.1.175

brctl addbr br0

ip addr add 10.1.1.3/24 dev br0

ip link set dev br0 up 

ip link add vxlan0 type vxlan id 1 group 239.1.1.1 dev eth1 dstport 4789
brctl addif br0 vxlan0

ip link set dev vxlan0 up

1.3 试验验证

 1.4 试验补充

查看fdb表项

bridge fdb show dev vxlan0
fe:38:17:75:3b:4e master br0 
4e:fd:3c:3f:bc:60 master br0 permanent
4e:fd:3c:3f:bc:60 vlan 1 master br0 permanent
00:00:00:00:00:00 dst 239.1.1.1 via eth0 self permanent
fe:38:17:75:3b:4e dst 172.16.0.100 self 

查看邻居表项

ip neigh show
172.16.0.100 dev eth0 lladdr fa:16:3e:ee:d2:a0 STALE
172.16.0.2 dev eth0 lladdr fa:16:3e:60:e5:8a STALE
10.1.1.2 dev br0 lladdr fe:38:17:75:3b:4e STALE
172.16.0.1 dev eth0 lladdr fa:16:3e:3d:b5:44 REACHABLE

确认学习到的mac fe:38:17:75:3b:4e 是否正确

br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1400
        inet 10.1.1.2  netmask 255.255.255.0  broadcast 0.0.0.0
        inet6 fe80::645a:25ff:feca:dc67  prefixlen 64  scopeid 0x20<link>
        ether fe:38:17:75:3b:4e  txqueuelen 1000  (Ethernet)
        RX packets 36  bytes 2672 (2.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 38  bytes 3260 (3.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

查询vxlan0端口信息,可以发现vni 为1 并且加入组播组239.1.1.1

ip -d link show dev vxlan0
4: vxlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1400 qdisc noqueue master br0 state UNKNOWN mode DEFAULT qlen 1000
    link/ether fe:38:17:75:3b:4e brd ff:ff:ff:ff:ff:ff promiscuity 1 
    vxlan id 1 group 239.1.1.1 dev eth0 srcport 0 0 dstport 4789 ageing 300 
    bridge_slave state forwarding priority 32 cost 100 hairpin off guard off root_block off fastleave off learning on flood on port_id 0x8001 port_no 0x1 designated_port 32769 designated_cost 0 designated_bridge 8000.fe:38:17:75:3b:4e designated_root 8000.fe:38:17:75:3b:4e hold_timer    0.00 message_age_timer    0.00 forward_delay_timer    0.00 topology_change_ack 0 config_pending 0 proxy_arp off proxy_arp_wifi off mcast_router 1 mcast_fast_leave off mcast_flood on addrgenmode eui64 

2.openvswitch实现

OVS不支持组播,需要为任意两个主机之间建立VXLAN单播隧道。与上边示例的拓朴结构相比,我们使用了两个OVS网桥,将虚拟逻辑网络的接口接入网桥br-int,将所有VXLAN接口接入br-tun。两个网桥使用PATCH类型接口进行连接。由于网桥br-tun上有多个VTEP,当BUM数据包从其中某个VTEP流入时,数据包会从其他VTEP接口再流出,这会导致数据包在主机之间无限循环。因而我们需要添加流表使VTEP流入的数据包不再转发至其他VTEP。若逻辑网络接口与VTEP连接同一网桥,配置流表将比较繁琐。单独将逻辑网络接口放到独立的网桥上,可以使流表配置非常简单,只需要设置VTEP流入的数据包从PATCH接口流出。

2.1 试验环境

 2.2 试验配置

host 172.16.0.100 

ovs-vsctl add-br br-int

ovs-vsctl add-br br-tun

ovs-vsctl add-port br-int patch-int -- set interface patch-int type=patch options:peer=patch-tun

ovs-vsctl add-port br-tun patch-tun -- set interface patch-tun type=patch options:peer=patch-int

ovs-vsctl add-port br-tun vxlan0 -- set interface vxlan0 type=vxlan options:remote_ip=172.16.1.75 options:key=100

查看br-tun portid 和配置流表

ovs-ofctl show br-tun
OFPT_FEATURES_REPLY (xid=0x2): dpid:0000a604364a044d
n_tables:254, n_buffers:256
capabilities: FLOW_STATS TABLE_STATS PORT_STATS QUEUE_STATS ARP_MATCH_IP
actions: OUTPUT SET_VLAN_VID SET_VLAN_PCP STRIP_VLAN SET_DL_SRC SET_DL_DST SET_NW_SRC SET_NW_DST SET_NW_TOS SET_TP_SRC SET_TP_DST ENQUEUE
 1(patch-tun): addr:b2:cf:ce:c5:4f:94
     config:     0
     state:      0
     speed: 0 Mbps now, 0 Mbps max
 3(vxlan0): addr:92:7f:4f:a2:cc:30
     config:     0
     state:      0
     speed: 0 Mbps now, 0 Mbps max
 LOCAL(br-tun): addr:a6:04:36:4a:04:4d
     config:     0
     state:      0
     speed: 0 Mbps now, 0 Mbps max
OFPT_GET_CONFIG_REPLY (xid=0x4): frags=normal miss_send_len=0

ovs-ofctl add-flow br-tun 'table=0, priority=1, in_port=1 actions=resubmit(,1)'

ovs-ofctl add-flow br-tun 'table=0, priority=1, in_port=3 actions=resubmit(,2)'

ovs-ofctl add-flow br-tun 'table=0, priority=0 actions=drop'

ovs-ofctl add-flow br-tun 'table=1, priority=0,dl_dst=00:00:00:00:00:00/01:00:00:00:00:00 actions=resubmit(,20)'

ovs-ofctl add-flow br-tun 'table=1, priority=0,dl_dst=01:00:00:00:00:00/01:00:00:00:00:00 actions=resubmit(,21)'



ovs-ofctl add-flow br-tun 'table=2,priority=0,actions=learn(table=20,hard_timeout=300,priority=1,NXM_OF_ETH_DST[]=NXM_OF_ETH_SRC[],load:NXM_NX_TUN_ID[]->NXM_NX_TUN_ID[],output:NXM_OF_IN_PORT[]), output:1'

ovs-ofctl add-flow br-tun "table=20,priority=0,actions=resubmit(,21)"

ovs-ofctl add-flow br-tun 'table=21, priority=0, actions=output:3'

配置tap口

ovs-vsctl add-port br2 tap2 -- set Interface tap2 type=internal

ip netns add ns2

ip link set tap2 netns ns2

ip netns exec ns2 ip addr add 1.1.1.1/24 dev tap2

ip netns exec ns2 ip link set tap2 up

ip netns exec ns2 ip link set lo up

host 172.16.1.75 配置

ovs-vsctl add-br br-int

ovs-vsctl add-br br-tun

ovs-vsctl add-port br-int patch-int -- set interface patch-int type=patch options:peer=patch-tun

ovs-vsctl add-port br-tun patch-tun -- set interface patch-tun type=patch options:peer=patch-int

ovs-vsctl add-port br-tun vxlan0 -- set interface vxlan0 type=vxlan options:remote_ip=172.16.0.100 options:key=100

查看br-tun portid 和配置流表

ovs-ofctl show br-tun
OFPT_FEATURES_REPLY (xid=0x2): dpid:0000b2661fec0a4f
n_tables:254, n_buffers:256
capabilities: FLOW_STATS TABLE_STATS PORT_STATS QUEUE_STATS ARP_MATCH_IP
actions: OUTPUT SET_VLAN_VID SET_VLAN_PCP STRIP_VLAN SET_DL_SRC SET_DL_DST SET_NW_SRC SET_NW_DST SET_NW_TOS SET_TP_SRC SET_TP_DST ENQUEUE
 1(patch-tun): addr:2a:53:4e:00:bc:d1
     config:     0
     state:      0
     speed: 0 Mbps now, 0 Mbps max
 2(vxlan0): addr:02:6e:52:34:e9:0b
     config:     0
     state:      0
     speed: 0 Mbps now, 0 Mbps max
 LOCAL(br-tun): addr:b2:66:1f:ec:0a:4f
     config:     0
     state:      0
     speed: 0 Mbps now, 0 Mbps max
OFPT_GET_CONFIG_REPLY (xid=0x4): frags=normal miss_send_len=0

ovs-ofctl add-flow br-tun 'table=0, priority=1, in_port=1 actions=resubmit(,1)'

ovs-ofctl add-flow br-tun 'table=0, priority=1, in_port=2 actions=resubmit(,2)'

ovs-ofctl add-flow br-tun 'table=0, priority=0 actions=drop'

ovs-ofctl add-flow br-tun 'table=1, priority=0,dl_dst=00:00:00:00:00:00/01:00:00:00:00:00 actions=resubmit(,20)'

ovs-ofctl add-flow br-tun 'table=1, priority=0,dl_dst=01:00:00:00:00:00/01:00:00:00:00:00 actions=resubmit(,21)'



ovs-ofctl add-flow br-tun 'table=2,priority=0,actions=learn(table=20,hard_timeout=300,priority=1,NXM_OF_ETH_DST[]=NXM_OF_ETH_SRC[],load:NXM_NX_TUN_ID[]->NXM_NX_TUN_ID[],output:NXM_OF_IN_PORT[]), output:1'

ovs-ofctl add-flow br-tun "table=20,priority=0,actions=resubmit(,21)"

ovs-ofctl add-flow br-tun 'table=21, priority=0, actions=output:2'

配置tap口

ovs-vsctl add-port br2 tap2 -- set Interface tap2 type=internal

ip netns add ns2

ip link set tap2 netns ns2

ip netns exec ns2 ip addr add 1.1.1.2/24 dev tap2

ip netns exec ns2 ip link set tap2 up

ip netns exec ns2 ip link set lo up

2.3 试验验证

 2.4 试验补充

1.ns2 namespace能学习到对端的mac地址

 2.br-int 能学习到对端mac

 3. 抓包

 查看port 流量统计

在查看端口的流量统计也可以使用:ovs-ofctl dump-ports br-int

 

2.5 整体br-tun流表处理逻辑如图

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值