Ubuntu下使用OvS实现路由功能

本文详细介绍了如何在Ubuntu环境下,通过OpenvSwitch(OvS)配置虚拟机之间的路由功能,包括主机和虚拟机的安装配置,OvS的编译与驱动安装,以及相同和不同网段下虚拟机的互通测试。通过流表规则设置,实现了在同一网段和跨网段的通信。
摘要由CSDN通过智能技术生成


本文主要介绍在Ubuntu下安装配置OvS,实现相同网段和不同网段下两台虚拟机的互通。

1 虚拟机安装配置

本节主要介绍主机和虚拟机的安装配置,以及在主机上安装配置OvS。

1.1 主机配置

  • 安装Ubuntu18.04作为主机系统,安装流程参见Window下安装Ubuntu系统
  • 使用egrep -c '(vmx|svm)' /proc/cpuinfo查看CPU是否支持虚拟化技术,如果输出的数值不是0,表示支持虚拟化。
  • 使用sudo apt install qemu-kvm virt-manager virtinst libvirt-clients bridge-utils libvirt-daemon-system -y安装KVM和QEMU。
  • 使用uname -r查看内核版本,下载相应的OvS版本。编写下述脚本,与OvS软件包放在一起,添加执行权限,执行脚本安装配置OvS。
    • 虚拟机下的Ubuntu系统在执行make命令时出现”/bin/bash: libtool: No such file or directory“。执行make clean清除编译文件,先使用命令./condigure,执行make进行编译,编译可以顺利完成。清除编译文件,再执行命令./condigure --with-linux=/lib/modules/$(uname -r)/build,然后再进行编译,此时编译也能成功。
    • 执行modprobe openvswitch安装的是Ubuntu系统自带的OvS驱动,而执行insmod datapath/linux/openvswitch.ko安装的是自己编译的OvS驱动。
    • 执行sudo insmod datapath/linux/openvswitch.ko时提示“insmod: ERROR: could not insert module datapath/linux/openvswitch.ko: Unknown symbol in module”。执行modinfo datapath/linux/openvswitch.ko显示驱动信息,从depends一项可以看出openvswitch.ko依赖其它驱动,依次执行sudo modprobe nf_conntrack,modprobe tunnel16…,然后再执行sudo insmod datapath/linux/openvswitch.ko安装驱动,驱动安装成功。
tar -zxvf ./openvswitch-2.17.5.tar.gz && 
cd openvswitch-2.17.5 &&
./configure --with-linux=/lib/modules/$(uname -r)/build &&
make &&
make install &&
make modules_install;
# /sbin/modprobe openvswitch && 
insmod datapath/linux/openvswitch.ko
/sbin/lsmod | grep openvswitch;
echo 'export PATH=$PATH:/usr/local/share/openvswitch/scripts' > /etc/profile.d/ovs.sh && 
source /etc/profile.d/ovs.sh && 
ovs-ctl start &&
echo "openvswitch is installed and started successfully" && 
ps -e | grep ovs
  • 执行ovs-vsctl add-br br0添加网桥br0。
  • 执行ovs-vsctl add-port br0 vnet0 -- set interface vnet0 type=internalovs-vsctl add-port br0 vnet1 -- set interface vnet1 type=internal创建两个虚拟端口,并添加到网桥br0上。
  • 执行sudo gedit /etc/network/interfaces编辑网络配置文件,添加下述内容,执行/etc/init.d/networking restart重启网络。
    • 添加br0后无法连上网,可执行ifconfig br0 down禁用br0,在需要使用时执行ifconfig br0 up启用br0。
    • 修改br0的IP地址后重启网络发现IP地址并未改变,删除br0桥,重新创建br0桥后IP地址改变。
auto br0
iface br0 inet static
	address 10.159.11.1
	network 255.255.255.0
	dns-search ctler
	bridge_stp off
	brdige_fd 0
	brdige_maxwait 0

1.2 虚拟机配置

  • 执行sudo virt-manager打开虚拟机管理界面,按下述步骤安装虚拟机。
    • 点击“文件”→“新建虚拟机”→“本地安装介质”→“使用ISO镜像”,点击“浏览”,“本地浏览”选择Ubuntu镜像→设置内存和CPU→设置磁盘大小→设置虚拟机名称,选择网络为“主机设备 vnet0:macvtap”,存在提示“在多数配置中,macvtap不能为主机到客户机的网络通信工作”,不影响使用。
    • 安装时出现“watchdog: BUG: soft lockup-CPU#0 stuck for 22s”的错误提示,更换一个Ubuntu镜像后问题解决。
    • 按照提示安装Ubuntu虚拟机,在Installation type中选择Erase disk and install Ubuntu。
  • 点击“编辑”→“虚拟机详情”,点击“查看”→“详情”可以查看虚拟机的详细设置,在NIC标签中可以查看和修改虚拟机的网络匹配,修改的内容会在主机的/etc/libvirt/qemu/ubuntu18.04.xml的<interface>中体现。
  • 以同样的方式安装第二台虚拟机,网络选择为“主机设备 vnet1:macvtap”。

2 OvS路由功能测试

本节主要介绍使用OvS实现相同网段和不同网段下虚拟机间的通信,路由的相关知识查看网络基础知识。OvS设置的相关知识查看OvS介绍OvS安装使用

2.1 相同网段实现互通

虚拟机和物理机的网络配置如下图所示,两个虚拟机配置在同一网段,默认网关设置为10.159.11.1。
在这里插入图片描述
在流表匹配规则保持原始配置,即只有一条normal规则时,虚拟机1和2可以相互ping通。删除原始流表项,执行下述语句添加流表项,虚拟机之间仍可互通。

ovs-ofctl add-flow br0 arp,arp_tpa=10.159.11.21,actions=output:vnet0
ovs-ofctl add-flow br0 ip,nw_dst=10.159.11.21,actions=output:vnet0
ovs-ofctl add-flow br0 arp,arp_tpa=10.159.11.22,actions=output:vnet1
ovs-ofctl add-flow br0 ip,nw_dst=10.159.11.22,actions=output:vnet1

2.2 不同网段实现互通1

虚拟机和物理机的网络配置如下图所示,编辑/etc/network/interfaces文件,新增网桥br0的IP地址,并将虚拟机2的IP地址修改为10.159.12.22,默认网关改为10.159.12.1。

auto br0
iface br0 inet static
	address 10.159.11.1
	network 255.255.255.0
	dns-search ctler
	bridge_stp off
	brdige_fd 0
	brdige_maxwait 0
iface br0 inet static
	address 10.159.12.1
	network 255.255.255.0

在这里插入图片描述
在流表匹配规则保持原始配置,即只有一条normal规则时,虚拟机1和2可以相互ping通。删除原始流表项,执行下述语句添加流表项,虚拟机之间仍可互通。

ovs-ofctl add-flow br0 arp,arp_tpa=10.159.11.1,actions=normal
ovs-ofctl add-flow br0 ip,nw_dst=10.159.11.1,actions=normal
ovs-ofctl add-flow br0 arp,arp_tpa=10.159.11.21,actions=output:vnet0
ovs-ofctl add-flow br0 ip,nw_dst=10.159.11.21,actions=mod_dl_dst:52:54:00:20:2A:2E,output:vnet0
ovs-ofctl add-flow br0 arp,arp_tpa=10.159.12.1,actions=normal
ovs-ofctl add-flow br0 ip,nw_dst=10.159.12.1,actions=normal
ovs-ofctl add-flow br0 arp,arp_tpa=10.159.12.22,actions=output:vnet1
ovs-ofctl add-flow br0 ip,nw_dst=10.159.12.22,actions=mod_dl_dst:52:54:00:62:4E:21,output:vnet1

2.2 不同网段实现互通2

虚拟机和物理机的网络配置如下图所示,新建网桥br1,编辑/etc/network/interfaces文件,新增网桥br1,其IP地址为10.159.12.1。修改网桥br0和br1自带的端口br0和br1的类型为patch,并将端口br0和br1连接到一起,同时将虚拟机2连接到网桥br1的端口vnet1上。

auto br0
iface br0 inet static
	address 10.159.11.1
	network 255.255.255.0
	dns-search ctler
	bridge_stp off
	brdige_fd 0
	brdige_maxwait 0
auto br1
iface br1 inet static
	address 10.159.12.1
	network 255.255.255.0
	dns-search ctler
	bridge_stp off
	brdige_fd 0
	brdige_maxwait 0

在这里插入图片描述
在流表匹配规则保持原始配置,即只有一条normal规则时,虚拟机1和2可以相互ping通。删除原始流表项,执行下述语句添加流表项,虚拟机之间仍可互通。

ovs-ofctl add-flow br0 arp,arp_tpa=10.159.11.1,actions=normal
ovs-ofctl add-flow br0 ip,nw_dst=10.159.11.1,actions=normal
ovs-ofctl add-flow br0 arp,arp_tpa=10.159.11.21,actions=output:vnet0
ovs-ofctl add-flow br0 ip,nw_dst=10.159.11.21,actions=output:vnet0
ovs-ofctl add-flow br0 arp,arp_tpa=10.159.12.22,actions=output:br0
ovs-ofctl add-flow br0 ip,nw_dst=10.159.12.22,actions=output:br0

ovs-ofctl add-flow br1 arp,arp_tpa=10.159.12.1,actions=normal
ovs-ofctl add-flow br1 ip,nw_dst=10.159.12.1,actions=normal
ovs-ofctl add-flow br1 arp,arp_tpa=10.159.11.21,actions=output:br1
ovs-ofctl add-flow br1 ip,nw_dst=10.159.11.21,actions=output:br1
ovs-ofctl add-flow br1 arp,arp_tpa=10.159.12.22,actions=output:vnet1
ovs-ofctl add-flow br1 ip,nw_dst=10.159.12.22,actions=output:vnet1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值