OVS使用GRE隧道连接VMs

本文档详述了如何利用OpenvSwitch(OVS)在两台不同宿主机上搭建GRE隧道,实现虚拟机间的跨主机通信。通过具体步骤指导读者创建OVS网桥、关联虚拟机接口及设置GRE隧道端口,最终确保虚拟机间网络连通性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文档介绍如何使用Open vSwitch允许两个位于不同宿主机的虚拟机通过基于端口的GRE隧道进行通信。

注意:

本指南介绍配置GRE隧道所需的步骤。相同的方法可用于配置Open vSwitch支持的任何其它隧道协议。

在这里插入图片描述

建立

本指南假设环境配置如下所述。

两个物理网络

  • 传输网络
    以太网网络,用于运行OVS的主机之间的隧道通信。取决于正在使用的隧道协议(本文使用GRE),可能需要修改物理交换机的一些配置(例如,需要调整MTU值)。物理交换设备的配置不在本文的讨论范围内。

  • 管理网络

    严格来说,这个网络是不需要的,但它是一个简单的方法为物理主机提供远程访问的IP地址,因为IP地址不能直接分配给作为OVS网桥成员的物理接口。

两个物理主机

当前环境假定使用两个名为host1host2的主机。两个主机都是运行Open vSwitch的hypervisor。每台主机都有两个NIC,eth0和`eth1``,配置如下:

  • eth0连接到传输网络。eth0的IP地址用于通过传输网络与主机2通信。

  • eth1连接到管理网络。eth1的IP地址用于到达进行管理的物理主机。

四个虚拟机

每个主机将运行两个虚拟机(VM)。vm1vm2运行在主机host1,而vm3vm4运行在host2

每个虚拟机都有一个在物理主机上显示为Linux设备(如tap0)的单一接口。

注意:
对于Xen/XenServer,VM接口以Linux设备的形式出现,名称类似与vif1.0。其它Linux系统可能会将这些接口显示为vnet0vnet1等。

配置步骤

在开始之前,你需要确保知道分配到host1host2上的eth0接口的IP地址,因为在配置过程中需要用到。

host1上执行以下配置。

#. 创建OVS网桥:

   $ ovs-vsctl add-br br0

注意:

  你不需要添加`eth0`到OVS网桥下.

#. 启动host1主机上的vm1vm2. 如果这两个虚拟机没有自动关联到OVS,关联他们到你刚刚创建的OVS网桥上 (以下的命令假定 tap0 对应 vm1 以及 tap1 对应 vm2)::

   $ ovs-vsctl add-port br0 tap0
   $ ovs-vsctl add-port br0 tap1

#. 添加一个GRE隧道端口:

   $ ovs-vsctl add-port br0 gre0 \
       -- set interface gre0 type=gre options:remote_ip=<IP of eth0 on host2>

使用相同的基本步骤,在host2主机上创建镜像配置:

#. 创建OVS网桥, 但是不在网桥上添加任何物理接口:

   $ ovs-vsctl add-br br0

#. 启动host2主机上的vm3vm4, 如果需要将他们的接口添加到OVS网桥(再次, tap0 对应于 vm3 以及 tap1 对应于 vm4)::

   $ ovs-vsctl add-port br0 tap0
   $ ovs-vsctl add-port br0 tap1

#. 在host2上创建GRE隧道接口, 这次在指定remote_ip远端IP地址时,使用host1上``eth0`接口的IP地址:

   $ ovs-vsctl add-port br0 gre0 \
     -- set interface gre0 type=gre options:remote_ip=<IP of eth0 on host1>

测试

无论虚拟机是否在同一主机上或不同主机上运行,四个虚拟机直接的PING操作都应正常工作。

使用ip route show(或等效命令),在虚拟机内部运行的操作系统的路由表不应显示主机使用的IP子网的任何信息,仅显示在虚拟机操作系统中配置的IP子网。为了帮助说明这一点,最好在客户虚拟机中使用与主机系统完全不同的IP子网。

排错

如果不同主机上的虚拟机之间的连接不能工作,请检查以下项目:

  • 确保host1host2通过eth0的网络连接(连接到传输网络的NIC)。这可能需要使用额外的IP路由或IP路由规则。

  • 确保host1上的gre0指向host2上的eth0,并且host2上的gre0指向’host1’上的eth0

  • 确保所有虚拟机都被分配了同一子网中的IP地址;此配置中不需要IP路由功能。

### 如何配置 Open vSwitch (OVS) 连接虚拟机或物理网络 #### 安装 Open vSwitch 为了使用 Open vSwitch,首先需要在其所在的主机上完成安装。通常可以通过包管理器来安装 OVS 工具集以及相关依赖项[^1]。 ```bash sudo apt-get update sudo apt-get install openvswitch-switch openvswitch-common ``` #### 创建网桥并启用 STP 和 VLAN 功能 创建一个名为 `br0` 的网桥,并将其作为核心交换结构的一部分: ```bash ovs-vsctl add-br br0 ``` 如果需要支持生成树协议(STP),可以启用该功能以防止环路: ```bash ovs-vsctl set-fail-mode br0 secure ovs-vsctl set bridge br0 stp_enable=true ``` 对于 VLAN 支持,可以在接口上指定特定的 VLAN ID 或者通过 trunk 方式处理多个 VLAN 流量。 #### 添加端口至网桥 无论是连接虚拟机还是物理设备,都需要将对应的网络接口添加到之前创建好的网桥中。假设存在一块物理网卡 `eth0` 要加入此网桥,则执行命令如下所示: ```bash ovs-vsctl add-port br0 eth0 ip link set eth0 up ``` 针对虚拟环境中的虚拟机适配器同样适用上述操作逻辑;只需确保这些虚拟 NIC 正确关联到了所定义之上的 OVS 网桥即可[^2]。 #### 设置虚拟机网络接口 在 KVM/QEMU 平台上运行的虚拟机会自动检测可用的网桥资源,在启动时可直接选择已建立起来的新网桥比如前面提到过的 `br0` 来替代默认提供的 NAT 类型网桥 `virbr0` 。这样做的好处是可以让外部流量顺利进入内部网络空间而不受限制[^3]。 最后一步就是验证整个架构是否正常运作——检查连通性和性能指标等方面的表现情况。 ```python import os def test_connectivity(): result = os.system('ping -c 4 www.google.com') if result == 0: print("Network connectivity is fine.") else: print("There might be some issues with the network setup.") test_connectivity() ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值