2. 环境搭建:在 Ubuntu/CentOS 上安装 OVS,启动与验证服务

好,咱们正式开始动手。这一章我带你把 Open vSwitch 装起来,然后跑通它。说实话,环境搭建这事儿看着简单,但坑不少。我当年第一次装 OVS,光编译就折腾了大半天,后来才发现直接用包管理器装省心多了。咱们这次就走最稳的路。

2.1 操作系统与前置准备

先说说系统。我个人习惯用 Ubuntu 20.04 LTS 或 CentOS 7.9。这两个版本我都在生产环境验证过,兼容性最好。你想想看,如果系统太新,内核版本跟 OVS 模块不匹配,那才叫头疼。

检查一下你的系统版本:

# Ubuntu
cat /etc/os-release

# CentOS
cat /etc/redhat-release

嗯,这里要注意:内核版本最好在 4.15 以上。为什么?因为 OVS 的 datapath 模块需要内核支持。我遇到过有人用 CentOS 6,内核 2.6,结果 OVS 根本装不上——白忙活一场。

避坑指南: 我曾经在 Ubuntu 18.04 上直接 apt install openvswitch-switch,结果装了个 2.9 的老版本。后来才发现官方仓库里的版本往往滞后。建议先添加 OVS 官方源,或者直接用源码编译最新稳定版。

2.2 在 Ubuntu 上安装 OVS

Ubuntu 下安装 OVS 有两种方式。我推荐你用第二种——从源码编译。虽然多花几分钟,但你能拿到最新特性,而且编译参数可控。

方式一:apt 快速安装(适合测试)

sudo apt update
sudo apt install -y openvswitch-switch openvswitch-common

装完就完事了?别急,先验证一下:

sudo systemctl status openvswitch-switch

如果看到 active (running),说明服务已经起来了。但说实话,这种方式装的是 OVS 2.13 左右的老版本。如果你只是练手,够用。但咱们做流量监控,我建议用新版本——新版本对 GTP、ERSPAN 这些隧道协议支持更好。

方式二:源码编译安装(推荐)

我个人更倾向这种方式。咱们一步步来:

# 安装编译依赖
sudo apt install -y build-essential autoconf automake libtool \
  pkg-config python3 python3-pip python3-sphinx \
  libssl-dev libcap-ng-dev libnl-3-dev libnl-route-3-dev

# 下载 OVS 源码(以 3.3.0 为例)
wget https://www.openvswitch.org/releases/openvswitch-3.3.0.tar.gz
tar -xzf openvswitch-3.3.0.tar.gz
cd openvswitch-3.3.0

# 配置、编译、安装
./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc
make -j$(nproc)
sudo make install

这里有个小技巧:--prefix=/usr 让 OVS 安装到系统默认路径,后续管理方便。我见过有人装到 /usr/local,结果每次启动都要写全路径,麻烦得很。

编译完成后,初始化数据库:

sudo mkdir -p /var/run/openvswitch
sudo ovsdb-tool create /etc/openvswitch/conf.db \
  /usr/share/openvswitch/vswitch.ovsschema

然后启动 OVS 服务:

sudo ovsdb-server --remote=punix:/var/run/openvswitch/db.sock \
  --pidfile --detach --log-file
sudo ovs-vswitchd --pidfile --detach --log-file
小提示: 如果你不想每次手动启动,可以配置 systemd 服务。在源码目录的 debian 文件夹下有现成的 service 文件,复制到 /etc/systemd/system/ 即可。

2.3 在 CentOS 上安装 OVS

CentOS 的安装思路跟 Ubuntu 类似,但包名和依赖略有不同。我当年在 CentOS 7 上部署 OVS 时,踩过一个坑——selinux 默认会阻止 OVS 创建虚拟网卡。所以第一步,先关掉 selinux 或者放行 OVS。

方式一:yum 安装(RDO 仓库)

sudo yum install -y centos-release-openstack-train
sudo yum install -y openvswitch
sudo systemctl start openvswitch
sudo systemctl enable openvswitch

这种方式装的是 OVS 2.11 左右。说实话,版本有点老。如果你做生产环境,我建议用源码编译。

方式二:源码编译(CentOS)

# 安装依赖
sudo yum install -y gcc make autoconf automake libtool \
  python3 python3-pip python3-sphinx \
  openssl-devel libcap-ng-devel libnl3-devel

# 下载编译(步骤同 Ubuntu)
wget https://www.openvswitch.org/releases/openvswitch-3.3.0.tar.gz
tar -xzf openvswitch-3.3.0.tar.gz
cd openvswitch-3.3.0
./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc
make -j$(nproc)
sudo make install

CentOS 下有个特殊步骤——加载内核模块

sudo modprobe openvswitch
lsmod | grep openvswitch

如果看不到输出,说明模块没加载成功。我遇到过这种情况,原因是内核版本跟 OVS 不匹配。解决办法是升级内核,或者用 --enable-ssl 重新编译 OVS。

2.4 启动与验证服务

装完了,怎么知道它跑起来了?别光看进程,咱们做几个验证:

验证一:检查进程

ps -ef | grep ovs

你应该看到两个关键进程:ovsdb-serverovs-vswitchd。少一个都不行。我见过有人只启动了 ovsdb-server,忘了启动 ovs-vswitchd,结果创建网桥时报错——说白了,数据库在,但转发引擎没起来。

验证二:查看版本

ovs-vsctl --version
ovs-ofctl --version

输出应该显示你安装的版本号。比如:

ovs-vsctl (Open vSwitch) 3.3.0
ovs-ofctl (Open vSwitch) 3.3.0

验证三:创建测试网桥

这是最直观的验证方式:

sudo ovs-vsctl add-br test-br
sudo ovs-vsctl show

输出应该类似:

a1b2c3d4-e5f6-7890-abcd-ef1234567890
    Bridge "test-br"
        Port "test-br"
            Interface "test-br"
                type: internal
    ovs_version: "3.3.0"

看到这个,说明 OVS 已经正常工作了。然后清理掉测试网桥:

sudo ovs-vsctl del-br test-br
核心要点: OVS 的验证不只是看进程活着,还要确认它能正常创建网桥、管理端口。我建议你每次重启系统后,都跑一遍 ovs-vsctl show,确保服务自动启动了。

2.5 常见问题与排错

安装过程中难免遇到问题。我把这些年遇到的典型问题列出来:

问题现象 可能原因 解决办法
ovs-vswitchd 启动失败 内核模块未加载 sudo modprobe openvswitch
创建网桥报错 "permission denied" SELinux 或 AppArmor 限制 临时关闭 SELinux 或添加规则
ovsdb-server 无法创建 socket /var/run/openvswitch 目录不存在 sudo mkdir -p /var/run/openvswitch
编译时报错 "libssl not found" 缺少 OpenSSL 开发包 安装 libssl-dev(Ubuntu)或 openssl-devel(CentOS)

嗯,这里再补充一个我踩过的坑:ovs-vswitchd 启动后,过一会儿自己挂了。查日志发现是内存不足——OVS 默认会占用大量内存用于流表缓存。解决办法是限制内存使用:

sudo ovs-vsctl set Open_vSwitch . other_config:flow-limit=100000

把流表上限设到 10 万条,一般够用了。

2.6 本章小结

到这步,你的 OVS 环境应该已经跑起来了。咱们做了三件事:安装、启动、验证。说白了,环境搭建是后面所有实验的基础。我建议你把这个环境保留下来,后面章节的端口镜像、抓包、流量监控都要用它。

下一章,咱们开始玩真的——配置端口镜像,把流量抓到 Wireshark 里看。到时候你会发现,OVS 的流量监控能力比传统交换机灵活得多。