在文章介绍了VXLAN的原理。本文介绍,如何基于OVS构建一个VXLAN的VPC。后续我们将基于Openstack Neutron的VXLAN机制手动构建VPC网络,并建立虚机。
基于OVS的简易VPC网络
原理图:
OVS-VXLAN基于以上网络图,VPC网络构建。
SERVER 1:
方便后续的测试,将网卡enp2s0f0设置混杂模式,挂载在ovs桥上
br-mgmt为实际承载VXLAN业务的underlay网
#ovs-vsctl add-br br-mgmt
#ovs-vsctl add-port br-mgmt enp2s0f0
#cat /etc/sysconfig/network-scripts/ifcfg-br-mgmt:
TYPE=Ethernet
BOOTPROTO=static
NAME=br-mgmt
DEVICE=br-mgmt
ONBOOT=yes
IPADDR=172.21.12.8
NETMASK=255.255.255.0
GATEWAY=172.21.12.1
#ifup br-mgmt
#ovs-vsctl set port br-mgmt tag=12
以上完成基础配置
配置overlay网络
#ovs-vsctl add-br ovs-vxlan
添加一个命名空间
#ip netns add ns-ser
添加一个veth口,连接ovs及namespace
#ip link add name veth1 type veth peer name veth1p
#ip link set dev veth1 netns ns-ser
#ovs-vsctl add-port ovs-vxlan veth1p
#ip link set veth1p up
#ip link set ovs-vxlan up
#ip netns exec ns-ser ip link set veth1 up
设置VPC IP
#ip netns exec ns-ser ip addr add 192.168.10.11/24 dev veth1
设置vxlan tunnel,其中vni=222,添加vxlan tunnel 对端的endpoint:172.21.12.163
#ovs-vsctl add-port ovs-vxlan vxlan-tun -- set interface vxlan-tun type=vxlan options:remote_ip=172.21.12.163 options:key=222
SERVER 2上配置:
方便后续的测试,将网卡enp2s0f0设置混杂模式,挂载在ovs桥上
br-mgmt为实际承载VXLAN业务的underlay网
#ovs-vsctl add-br br-mgmt
#ovs-vsctl add-port br-mgmt enp2s0f0
#cat /etc/sysconfig/network-scripts/ifcfg-br-mgmt:
TYPE=Ethernet
BOOTPROTO=static
NAME=br-mgmt
DEVICE=br-mgmt
ONBOOT=yes
IPADDR=172.21.12.163
NETMASK=255.255.255.0
GATEWAY=172.21.12.1
#ifup br-mgmt
#ovs-vsctl set port br-mgmt tag=12
以上完成基础配置
配置overlay网络
#ovs-vsctl add-br ovs-vxlan
添加一个命名空间
#ip netns add ns-ser
添加一个veth口,连接ovs及namespace
#ip link add name veth1 type veth peer name veth1p
#ip link set dev veth1 netns ns-ser
#ovs-vsctl add-port ovs-vxlan veth1p
#ip link set veth1p up
#ip link set ovs-vxlan up
#ip netns exec ns-ser ip link set veth1 up
设置VPC IP
#ip netns exec ns-ser ip addr add 192.168.10.11/24 dev veth1
设置vxlan tunnel,其中vni=222,添加vxlan tunnel 对端的endpoint:172.21.12.8
#ovs-vsctl add-port ovs-vxlan vxlan-tun -- set interface vxlan-tun type=vxlan options:remote_ip=172.21.12.8 options:key=222
Note,如果有防火墙,需要放开udp 4789端口:
#iptables -I INPUT -p udp --dport 4789 -j ACCEPT
测试:
SERVER 1上抓包:
#tcpdump -i enp2s0f0 udp
SERVER 2,ping:
# ip netns exe ns-ser ping 192.168.10.11
PING 192.168.10.11 (192.168.10.11) 56(84) bytes of data.
64 bytes from 192.168.10.11: icmp_seq=1 ttl=64 time=5.74 ms
64 bytes from 192.168.10.11: icmp_seq=2 ttl=64 time=1.53 ms
64 bytes from 192.168.10.11: icmp_seq=3 ttl=64 time=1.10 ms
64 bytes from 192.168.10.11: icmp_seq=4 ttl=64 time=1.47 ms
SERVER 1抓包结果如下,可以看到vxlan的包,其中vni:222:
19:41:42.399714 IP 172.21.12.163.41764 > 172.21.12.8.4789: VXLAN, flags [I] (0x08), vni 222
IP 192.168.10.12 > 192.168.10.11: ICMP echo request, id 11644, seq 1, length 64
19:41:42.400310 IP 172.21.12.8.39683 > 172.21.12.163.4789: VXLAN, flags [I] (0x08), vni 222
IP 192.168.10.11 > 192.168.10.12: ICMP echo reply, id 11644, seq 1, length 64
19:41:43.397934 IP 172.21.12.163.41764 > 172.21.12.8.4789: VXLAN, flags [I] (0x08), vni 222
IP 192.168.10.12 > 192.168.10.11: ICMP echo request, id 11644, seq 2, length 64
19:41:44.399117 IP 172.21.12.163.41764 > 172.21.12.8.4789: VXLAN, flags [I] (0x08), vni 222
IP 192.168.10.12 > 192.168.10.11: ICMP echo request, id 11644, seq 3, length 64
网友评论