STEP BY STEP创建大二层网络
2020-01-15 15:52:52
皮皮鲁
背景
在一个客户项目中,需要在两台物理主机上创建多台BIGIP,并且保证这些BIGIP都在同一个二层网络里。
因为当时还不清楚具体的客户需求,所以我们一方面和售前交流获取具体用户需求的信息,比如两台物理机的位置,它们的网络连接情况等等。与此同时,我们也根据两台物理机的不同的连接以及DHCP服务情况准备了两套方案来应备可能的需求。
最终的情况比我们想象的要简单,两个物理宿机本身就在同一个二层网络里面,而且有外部的DHCP服务可以使用。使用一个简单的FLAT网络模型就可以满足客户的需求。
在我们准备的另外一套方案里面,可以满足两台物理宿机在不同的地点,只能三层可达,而且DHCP服务也需要我们自行解决的需求。
现在通过一个实验和大家分享一下我们的预备方案,顺便也理解一下如何使用openvswitch通过vxlan协议创建overlay网络解决在不同云(多云)的数据中心的主机上创建同一的二层网络的这一问题。
实验描述
我们将试图构建下面的二层网络。VM1和VM2是我们模拟的处于同一个二层的虚拟主机。这两个虚拟主机所在的宿主主机分别位于我们PD北京的实验室和阿里云杭州数据中心的一台虚机。这两台宿主机通过Internet可以互访。
这两个虚机VM1和VM2的IP地址都是通过左边的PD北京实验室宿主机上面的dhcp服务获得的同一网段的IP地址。最终,VM1和VM2获得同一网段IP地址,并且可以互通。

实验步骤:
为了安全起见,我们隐藏了宿主机真实的IP信息。
在PD北京实验室主机上
a)
使用openvswitch
创建交换机 br0
ovs-vsctl add-br br0
b)
在上述的br0上创建一个vlan100的内部接口qdhcp用来连接dhcp服务进程,启动dhcp服务
1)
ovs-vsctl add-port br0 qdhcp --
set interface qdhcp type=internal
ovs-vsctl set
port qdhcp tag=100
2)
启动qdhcp接口并且 设置IP地址
ip link set
dev qdhcp up
ip addr add
172.17.0.1/24 dev qdhcp
3)
启动dnsmasq进程绑定上述创建的qdhcp接口,并且指定通过它分配的IP地址范围
dnsmasq --strict-order
--bind-interfaces --interface=qdhcp --except-interface=lo
--leasefile-ro --dhcp-range=172.17.0.2,172.17.0.254,255.255.255.0,12h
--conf-file=
c)
使用netnamespace来模拟和创建VM1
1)
创建VM1
ip netns add VM1
2)
创建veth
pair虚拟接口用来连接VM1和openvswitch的交换机br0
ip link add
veth0 type veth peer name veth1
3)
把上述创建的veth
pair虚拟接口的一端veth0连接到br0上,并且设置vlan为100
ovs-vsctl
add-port br0 veth0
ip link set
dev veth0 up
ovs-vsctl set
port veth0 tag=100
4)
把上述创建的veth
pair虚拟接口的一端veth1连接到VM1上,并且通过dhclient使得veth1接口获得ip地址。
ip link set
veth1 netns VM1
ip netns exec VM1
ip link set dev veth1 up
ip netns exec VM1
dhclient -i veth1
至此,我们可以看到VM1的接口veth1已经通过本机的dnsmasq获得IP地址172.17.0.254
d)
创建openvswitch
br0的vxlan接口
1)
指定接口的另外一端是的位于杭州阿里云的另外一台主机的ip地址121.43.*.*。指定key为12345,这个key将会被用作vxlan协议的vni。
ovs-vsctl add-port br0 vxlan --
set interface vxlan type=vxlan options:remote_ip=121.43.*.* options:key=12345
121.43.*.* (需要用真实的IP代替)
2)
设置这个vxlan接口为trunk模式。
ovs-vsctl set
port vxlan vlan_mode=trunk
在杭州阿里云的主机上
a)
使用openvswitch
创建交换机 br0
ovs-vsctl add-br br0
b)
使用netnamespace来模拟和创建VM2
1)
创建VM2
ip netns add VM2
2)
创建veth
pair虚拟接口用来连接VM2和openvswitch的交换机br0
ip
link add veth0 type veth peer name veth1
3)
把上述创建的veth
pair虚拟接口的一端veth0连接到br0上,并且设置vlan为100
ovs-vsctl add-port br0 veth0
ip link set dev veth0 up
ovs-vsctl set port veth0 tag=100
4)
把上述创建的veth
pair虚拟接口的一端veth1连接到VM2上,并且通过dhclient使得veth1接口获得ip地址。
ip link set
veth1 netns VM2
ip netns exec VM2
ip link set dev veth1 up
ip netns exec VM2
dhclient -i veth1
至此,我们可以看到VM2的接口veth1已经通过北京PD实验室主机上的dnsmasq获得IP地址172.17.0.18
c)
创建openvswitch
br0的vxlan接口
1)
指定接口的另外一端是的位于PD北京实验室的另外一台主机的ip地址183.84.*.*。指定key为12345,这个key将会被用作vxlan协议的vni。
ovs-vsctl
add-port br0 vxlan -- set interface vxlan type=vxlan options:remote_ip=183.84.*.*
options:key=12345
183.84.*.* (需要用真实的IP代替)
2)
设置这个vxlan接口为trunk模式
ovs-vsctl set
port vxlan vlan_mode=trunk
连通性测试
a)
在北京实验室主机上测试VM1到VM2的连通性
ip netns exec VM1 ping 172.17.0.18
ping 172.17.0.18
PING 172.17.0.18 (172.17.0.18): 56 data bytes
64 bytes from 172.17.0.18: icmp_seq=0 ttl=53 time=18.756 ms
64 bytes from 172.17.0.18: icmp_seq=1 ttl=53 time=12.976 ms
^C
--- 172.17.0.18ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 12.976/15.866/18.756/2.890 ms
b)
在杭州阿里云主机上测试VM2到VM1的连通性
ip netns exec VM2 ping 172.17.0.254
ping 172.17.0.254
PING 172.17.0.18 (172.17.0.254): 56 data bytes
64 bytes from 172.17.0.254: icmp_seq=0 ttl=53 time=18.756 ms
64 bytes from 172.17.0.254: icmp_seq=1 ttl=53 time=12.976 ms
^C
--- 172.17.0.18ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 12.976/15.866/18.756/2.890 ms
c)
通过分别在北京和杭州两台主机上使用tcpdump抓包,我们可以很清楚的看到icmp报文是如何被封装成vxlan报文进行传递的
发布评论 加入社群
秦溱
2020-02-05 09:21:54
0
不错
相关文章

k8s 1.27.2中使用helm安装cilium cni
宗兆伟
2023-06-16 12:21:12 217

编排AS3新尝试-jinja2
宗兆伟
2021-09-25 14:08:00 705

使用ELK机器学习演示态势预测和异常检测
宗兆伟
2020-04-14 17:19:59 1477

回复评论
发布评论