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 根本装不上——白忙活一场。
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
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-server 和 ovs-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-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 的流量监控能力比传统交换机灵活得多。