编者按:Open vSwitch搭建GRE隧道实现不同AS网络互连互通。GRE(通用路由协议封装)是由Cisco和Net-smiths等公司于1994年提交给IETF,标号为RFC1701和RFC1702。GRE 规定了如何用一种网络协议去封装另一种网络协议的方法。GRE的隧道由两端的源IP地址和目的IP地址来定义,允许用户使用IP包封装IP、IPX、AppleTalk包,并支持全部的路由协议(如RIP2、OSPF等)。通过GRE,用户可以利用公共IP网络连接IPX网络、AppleTalk网络,还可以使用保留地址进行网络互连,或者对公网隐藏企业网的IP地址。
1 实验目的
- 了解GRE协议及原理;
- 理解Open vSwitch如何配置GRE隧道实现通信。
2 实验原理
Open vSwitch 创建GRE 原理很简单,就是把对 GRE 头和外部 IP 头的一些操作从原来的代码中抽象出来,做成内核“库函数”的形式, Open vSwitch就可以直接调用它们。Open vSwitch GRE tunnel 没有注册网络设备,因此无法通过命令#ip link看到它,它只是一个 vport,能通过 ovs-vsctl show 可以看到。
3 实验部署
本实验已准备两台虚拟机,在两台虚拟机中安装并启动Open vSwitch服务,可参阅文章《Open vSwitch2.3.0版本安装部署及基本操作》,配置Open vSwitch,创建GRE隧道并进行验证。
实验中使用的网络拓扑如下:
4 实验步骤
一台虚拟机安装交换机的IP地址为192.168.5.23,另一台虚拟机安装交换机的IP地址为192.168.5.238,两台交换机已安装OvS2.3.0版本,并已启动。
4.1 配置VM1
(1)创建bridge:
1 2 |
ovs-vsctl add-br br0 ovs-vsctl add-br br1 |
(2)配置br0及br1
1 2 3 |
ifconfig br1 192.168.5.23/24 up route add default gw 192.168.5.1 dev br1 ifconfig br0 192.168.4.10/24 up |
(3)查看OVS配置
1 2 3 4 5 6 7 8 9 10 11 12 |
# ovs-vsctl show f2fc0e8f-7c5c-4113-852d-d9c65484f973 Bridge "br0" Port "br0" Interface "br0" type: internal Bridge "br1" Port "eth0" Interface "eth0" Port "br1" Interface "br1" type: internal |
(4)查看VM1网络配置
1 |
ifconfig |
4.2 配置VM2
(1)配置OVS,同配置虚拟机1
1 2 |
ovs-vsctl add-br br0 ovs-vsctl add-br br1 |
配置br0及br1
1 2 3 |
ifconfig br1 192.168.5.238/24 up route add default gw 192.168.5.1 dev br1 ifconfig br0 192.168.4.11/24 up |
(2)查看OVS配置
1 2 3 4 5 6 7 8 9 10 11 12 |
# ovs-vsctl show 6e48ba32-9494-4fd6-95a7-b2353f27d671 Bridge "br0" Port "br0" Interface "br0" type: internal Bridge "br1" Port "br1" Interface "br1" type: internal Port "eth0" Interface "eth0" |
(3)查看VM2网络配置
4.3 创建GRE前验证
创建GRE隧道之前,做如下操作。虚拟机1 ping 虚拟机2的br0,无法通信,如下图:
反过来用虚拟机2对虚拟机1进行ping操作得到同样的结果。
4.4 创建GRE隧道
(1)在虚拟机1上配置GRE
1 |
ovs-vsctl add-port br0 gre1 -- set interface gre1 type=gre option:remote_ip=192.168.5.238 |
(2)配置好的OVS如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# ovs-vsctl show f2fc0e8f-7c5c-4113-852d-d9c65484f973 Bridge "br0" Port "br0" Interface "br0" type: internal Port "gre1" Interface "gre1" type: gre options: {remote_ip="192.168.5.238"} Bridge "br1" Port "eth0" Interface "eth0" Port "br1" Interface "br1" type: internal |
(3)在虚拟机2上配置GRE
1 |
ovs-vsctl add-port br0 gre1 -- set interface gre1 type=gre option:remote_ip=192.168.5.23 |
(4)配置好的OVS如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# ovs-vsctl show 6e48ba32-9494-4fd6-95a7-b2353f27d671 Bridge "br0" Port "br0" Interface "br0" type: internal Port "gre1" Interface "gre1" type: gre options: {remote_ip="192.168.5.23"} Bridge "br1" Port "br1" Interface "br1" type: internal Port "eth0" Interface "eth0" |
4.5 验证GRE隧道
虚拟机1 与虚拟机2通过GRE隧道连接后,对虚拟机2的br0进行ping操作,可以通信。反过来用虚拟机1ping虚拟机2同样都可以通信,如下图所示:
4.6 抓包分析
通过抓包证明数据包的使用协议的确是GRE,具体如下图:
5 实验结论
Open vSwitch创建GRE隧道可以让两个无法通信的机器通信起来,实验中,GRE把两个不通信的网桥连接起来,可以推断出,假如网桥上接主机,那么主机之间也可以通信。这在连接两个不同域之间的SDN网络有很大的作用,且在南京无线谷和北京邮电大学节点间已使用GRE隧道连接。值得说的是用运行在Linux环境中的Open vSwitch创建GRE隧道,Linux Kernel的最低版本为3.11。