F5社区-F5技术交流中心

STEP BY STEP创建大二层网络

2020-01-15 15:52:52

皮皮鲁

背景

 

在一个客户项目中,需要在两台物理主机上创建多台BIGIP,并且保证这些BIGIP都在同一个二层网络里。

 

因为当时还不清楚具体的客户需求,所以我们一方面和售前交流获取具体用户需求的信息,比如两台物理机的位置,它们的网络连接情况等等。与此同时,我们也根据两台物理机的不同的连接以及DHCP服务情况准备了两套方案来应备可能的需求。

 

最终的情况比我们想象的要简单,两个物理宿机本身就在同一个二层网络里面,而且有外部的DHCP服务可以使用。使用一个简单的FLAT网络模型就可以满足客户的需求。

 

在我们准备的另外一套方案里面,可以满足两台物理宿机在不同的地点,只能三层可达,而且DHCP服务也需要我们自行解决的需求。

 

现在通过一个实验和大家分享一下我们的预备方案,顺便也理解一下如何使用openvswitch通过vxlan协议创建overlay网络解决在不同云(多云)的数据中心的主机上创建同一的二层网络的这一问题。

 

 

实验描述

 

我们将试图构建下面的二层网络。VM1VM2是我们模拟的处于同一个二层的虚拟主机。这两个虚拟主机所在的宿主主机分别位于我们PD北京的实验室和阿里云杭州数据中心的一台虚机。这两台宿主机通过Internet可以互访。

 

这两个虚机VM1VM2IP地址都是通过左边的PD北京实验室宿主机上面的dhcp服务获得的同一网段的IP地址。最终,VM1VM2获得同一网段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虚拟接口用来连接VM1openvswitch的交换机br0

ip link add veth0 type veth peer name veth1

3)    把上述创建的veth pair虚拟接口的一端veth0连接到br0上,并且设置vlan100

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 br0vxlan接口

1)    指定接口的另外一端是的位于杭州阿里云的另外一台主机的ip地址121.43.*.*。指定key12345,这个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虚拟接口用来连接VM2openvswitch的交换机br0

ip link add veth0 type veth peer name veth1

3)    把上述创建的veth pair虚拟接口的一端veth0连接到br0上,并且设置vlan100

 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 br0vxlan接口

1)    指定接口的另外一端是的位于PD北京实验室的另外一台主机的ip地址183.84.*.*。指定key12345,这个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)     在北京实验室主机上测试VM1VM2的连通性

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)    在杭州阿里云主机上测试VM2VM1的连通性

 

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

Login

手机号
验证码
© 2019 F5 Networks, Inc. 版权所有。京ICP备16013763号-1