[转]在openvswitch上配置GRE tunnel

Posted in Linux
Application
at November 13th, 2012

如果你是用 openvswitch 内置的 GRE tunnel,那么配置很简单,基本上就一条命令:

ovs-vsctl add-port br0 gre0 -- set interface gre0 type=gre
options:remote_ip=192.168.1.10

本文想谈的显然不是这个。因为 upstream 内核(指 Linus tree)中的 openvswitch 是不支持 GRE tunnel
的,那我们如何在 upstream 内核中上使用 GRE tunnel 呢?

其实也不难,我们可以创建一个普通的 GRE tunnel,然后把它添加到 openvswitch bridge
中去就可以了。至少这在理论上是可行的,而实际操作中却有一些问题,你可以动手试一试。我们假设网络环境如下图所示:


我们的目标是让 HOST1 上面的两个 VM 和 HOST2 上面的两个 VM 通过 GRE tunnel
实现通信。因为两边的配置是对称的,所以下面只说明 HOST2 上是如何配置的,HOST1 上以此类推即可。

在这个环境中,一个很可能的错误是把 HOST2 上的 uplink,即 eth0 也加入到 openvswitch 的 bridge
中,这是不对的,需要加入仅仅的是 GRE tunnel 设备,即 gre1 (你当然也可以把它命名为其它名字)。

剩下的一个最重要的问题是,GRE tunnel 是无法回应 ARP 的,因为它是一个 point to point 的设备(ip addr add
192.168.2.1/24 peer 192.168.1.1/24 dev gre1),所以很明显设置了
NOARP。这个问题是这里的关键。因为这个的缘故,即使你在 VM1 上也无法 ping HOST2 上的
gre1。所以这里需要一个技巧,就是要给 bridge 本身配置一个 IP
地址,然后让 bridge 做一个 ARP proxy

所以最后在 HOST2 上面的配置如下:

[[email protected] ~]# ip tunnel show

gre0: gre/ip remote any local any ttl inherit nopmtudisc

gre1: gre/ip remote 10.16.43.214 local 10.16.43.215 ttl inherit

[[email protected] ~]# ip r s

192.168.2.0/24 dev ovsbr0 proto kernel scope link src 192.168.2.4

192.168.1.0/24 dev gre1 scope link

192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1

10.16.40.0/21 dev eth0 proto kernel scope link src 10.16.43.215

169.254.0.0/16 dev eth0 scope link metric 1005

default via 10.16.47.254 dev eth0

[[email protected] ~]# ovs-vsctl show

71f0f455-ccc8-4781-88b2-4b663dd48c5f

Bridge "ovsbr0"

Port "vnet0"

Interface "vnet0"

Port "ovsbr0"

Interface "ovsbr0"

type: internal

Port "vnet1"

Interface "vnet1"

Port "gre1"

Interface "gre1"

ovs_version: "1.7.0"

[[email protected] ~]# ip addr ls gre1 && ip addr ls ovsbr0

17: gre1: mtu 1476 qdisc noqueue state UNKNOWN

link/gre 10.16.43.215 peer 10.16.43.214

inet 192.168.2.1/24 scope global gre1

inet 192.168.2.1 peer 192.168.1.1/24 scope global gre1

13: ovsbr0: mtu 1500 qdisc noqueue state UNKNOWN

link/ether 66:d7:ae:42:db:44 brd ff:ff:ff:ff:ff:ff

inet 192.168.2.4/24 brd 192.168.2.255 scope global ovsbr0

inet6 fe80::64d7:aeff:fe42:db44/64 scope link

valid_lft forever preferred_lft forever

[[email protected] ~]# cat /proc/sys/net/ipv4/conf/ovsbr0/proxy_arp

1

HOST2 上面的 VM1 只需添加一个路由即可,配置如下:

[[email protected] ~]# ip r s

192.168.2.0/24 dev eth1 proto kernel scope link src 192.168.2.2

192.168.1.0/24 dev eth1 scope link src 192.168.2.2

[[email protected] ~]# ping 192.168.1.2

PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.

64 bytes from 192.168.1.2: icmp_seq=1 ttl=62 time=561 ms

64 bytes from 192.168.1.2: icmp_seq=2 ttl=62 time=0.731 ms

64 bytes from 192.168.1.2: icmp_seq=3 ttl=62 time=0.669 ms

64 bytes from 192.168.1.2: icmp_seq=4 ttl=62 time=0.765 ms

--- 192.168.1.2 ping statistics ---

4 packets transmitted, 4 received, 0% packet loss, time 3823ms

rtt min/avg/max/mdev = 0.669/140.860/561.275/242.726 ms

[转]在openvswitch上配置GRE tunnel,布布扣,bubuko.com

时间: 2024-12-13 07:22:55

[转]在openvswitch上配置GRE tunnel的相关文章

通过GRE协议在路由器上配置VPN隧道

50篇博客了,还从未上过推荐博客,今天抽出这点时间发表一篇博客,也想对自己说一下,我全部都是写给自己的,省的以后忘记(好随时点开查看一下),也是对自己的一种锻炼.锻炼自己写文档的能力,写项目的能力.废话少续,继续实验! 实验要求:通过在R2网关路由器上配置GRE路由协议使得R1和R5能够建立一条隧道,并且正常通信. 这里配置的只是一条隧道而已,因为并没有加密.只是GRE协议. 下面是操作步骤:ISP运营商上面只需要配置两个IP地址而已,其他什么都不需要(过程略). R1上不仅要配IP地址,还要配

[转]深入理解GRE tunnel

Posted in Linux Kernel at November 8th, 2012 / 1 Comment ? 我以前写过一篇介绍 tunnel 的文章,只是做了大体的介绍.里面多数 tunnel 是很容易理解的,因为它们多是一对一的,换句话说,是直接从一端到另一端.比如 IPv6 over IPv4 的 tunnel,也就是 SIT,它的原理如下图所示: 显然,除了端点的 host A 和 host B之外,中间经过的任何设备都是看不到里面的 IPv6 的头,对于它们来说,经过 sit

[转]深入理解 GRE tunnel

我以前写过一篇介绍 tunnel 的文章,只是做了大体的介绍.里面多数 tunnel 是很容易理解的,因为它们多是一对一的,换句话说,是直接从一端到另一端.比如 IPv6 over IPv4 的 tunnel,也就是 SIT,它的原理如下图所示: 显然,除了端点的 host A 和 host B之外,中间经过的任何设备都是看不到里面的 IPv6 的头,对于它们来说,经过 sit 发出的包和其它的 IPv4 的包没有任何区别. GRE tunnel 却不一样了,它的原理从根本上和 sit,ipip

GNS3 配置GRE(Generic Routing Encapsulation)

1.简述 GRE(Generic Routing Encapsulation)GRE是一种最传统的隧道协议,其根本功能就是要实现隧道功能,以实现异地网络之间可以通过内部私网相互访问. 以上图为例,假设IP地址为10.1.1.1的XP1想访问IP地址为192.168.1.1的XP2,其流程大致如下: 源IP为10.1.1.1,目的IP为192.168.1.1的数据包到达路由器R2后,由于R2配置有GRE,所以此时会在原有的数据包上再封装一个IP包头,源IP为1.1.1.1,目标IP为1.1.1.2

Linux GRE tunnel的构建原理

Generic Enapsulation Tunnel是一种网络隧道技术,之所以称为通用隧道技术,是它可以用来将Ethernet.IP.MPLS等多种报文封装在IP报文中予以转发,在网络中存在较为大规模的应用. Linux系统原生支持了GRE接口,其配置命令如下: ip tunnel add gret1 mode gre remote 45.42.104.183 local 189.245.246.51 ttl 128  # 配置一条以189.245.246.51为源地址,45.42.104.1

在CentOS7上配置Open vSwitch和VXLAN

在CentOS7上配置Open vSwitch和VXLAN 环境 实验环境 主机环境 [[email protected] ~]$ uname -a Linux node0 3.10.0-123.9.3.el7.x86_64 #1 SMP Thu Nov 6 15:06:03 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux [[email protected] ~]$ cat /etc/redhat-release CentOS Linux release 7.0

【Cisco】 GRE Tunnel隧道

说明:A公司的PC1所在网段192.168.1.0/24要和B公司PC2所在网段172.16.2.0/24建立GRE tunnel通信 配置思路:1.R1与R2要能通信--R1和R2分别配置默认路由到ISP2.新建tunnel端口,设置IP,双方要在同一网段:配置source即公网出口IP和destination即对方公网出口ip3.此时双方tunnel已经建立起来了,需要建立路由,PC1网段到PC2网段,PC2网段到PC1网段,下一跳地址为对端ip:此时配置结束. 拓扑图如下: 配置信息: R

debian 7上建立GRE隧道

1,GRE,即通用路由封装协议,GRE隧道是一种IP-over-IP的隧道,建立虚拟的点对点的连接,对通过隧道的某些网路层协议的数据报进行封装,使这些被封装的数据报能够在IPv4/IPv6 网络中传输,在Tunnel 的两端分别对数据报进行封装及解封装. 要在Linux上创建GRE隧道,需要ip_gre内核模块,它是GRE通过IPv4隧道的驱动程序. 2,搭建(平台debian 7 64位) HOST A: 139.162.24.229 HOST B: 106.187.53.161 HOST A

gre tunnel

http://searchenterprisewan.techtarget.com/tip/GRE-tunnel-vs-IPsec-tunnel-What-is-the-difference Encapsulating a packet for secure transportation on the network can be done using either GRE or IPsec protocols. This tip explains under what circumstance