نصب Open vSwitch بر روی Rocky Linux 8|AlmaLinux 8
اگر مدتی در اکوسیستم لینوکس بوده اید، اصطلاح OVS یا Open vSwitch باید زنگ خطر را به صدا درآورد. در محیط های مجازی سازی و رایانش ابری مانند OpenStack، Open vSwitch یک جزء کلیدی در توابع شبکه است. اگر کامپوننت در زمان نصب انتخاب شده باشد، دسترسی به شبکه های خارجی و ارتباطات عمومی بین VM دارای لایه OVS است.
Open vSwitch یا به اختصار OVS یک سوئیچ چندلایه مجازی پیشرفته و منبع باز است. برای استفاده جدی در تولید با پشتیبانی از پروتکل های استاندارد و رابط های مدیریتی (به عنوان مثال NetFlow، LACP، sFlow، IPFIX، RSPAN، CLI، و 802.1ag) ایجاد شده است. Open vSwitch برای پشتیبانی از توزیع در چندین سرور فیزیکی مشابه VMware’s vNetwork distributed vswitch یا Cisco’s Nexus 1000V طراحی شده است. در مقایسه با پل های نرم افزار استاندارد لینوکس، دارای ویژگی های بسیاری است.

نصب Open vSwitch بر روی Rocky Linux 8|AlmaLinux 8
Open vSwitch از ویژگی های زیر پشتیبانی می کند:
- قابلیت مشاهده در ارتباطات بین VM از طریق آینه های NetFlow، sFlow(R)، IPFIX، SPAN، RSPAN و GRE
- LACP (IEEE 802.1AX-2008)
- مدل استاندارد VLAN 802.1Q با ترانکینگ
- جاسوسی چندپخشی
- IETF Auto-Attach SPBM و پشتیبانی اولیه LLDP مورد نیاز
- نظارت بر لینک BFD و 802.1ag
- STP (IEEE 802.1D-1998) و RSTP (IEEE 802.1D-2004)
- کنترل QoS ریز دانه
- پشتیبانی از HFSC qdisc
- براساس traffic policin رابط VM
- اتصال NIC با متعادل کننده بار منبع-MAC، پشتیبان گیری فعال و هش L4
- پشتیبانی از پروتکل OpenFlow (از جمله پسوندهای زیادی برای مجازی سازی)
- پشتیبانی از IPv6
- چندین پروتکل تونل زنی (GRE، VXLAN، STT، و Geneve، با پشتیبانی IPsec)
- پروتکل پیکربندی از راه دور با اتصالات C و Python
- گزینه های موتور فوروارد هسته و فضای کاربر
- خط لوله حمل و نقل چند جدولی با موتور ذخیره جریان
- انتقال انتزاع لایه برای سهولت انتقال به پلتفرم های نرم افزاری و سخت افزاری جدید
در این مقاله، نصب Open vSwitch را بر روی راکی لینوکس 8 / AlmaLinux 8 انجام خواهیم داد. همچنین با ایجاد ماشین مجازی در پشته مجازی سازی KVM، نمایشی در مورد استفاده اولیه از آن انجام خواهد شد. اگر نصب را روی یک ماشین مجازی انجام می دهید، می توانید سناریوی آزمایشی ما را رد کنید.
نصب Open vSwitch بر روی Rocky Linux 8|AlmaLinux 8
دو گزینه نصب برای Open vSwitch در Rocky Linux 8 / AlmaLinux 8 وجود دارد:
- Open vSwitch را روی Rocky Linux 8 / AlmaLinux 8 از منبع نصب کنید – ساخت بسته به صورت دستی از روی کد منبع
- برای نصب Open vSwitch در Rocky Linux 8 / AlmaLinux 8 از RDO (OpenStack repos) استفاده کنید.
ما با دومی پیش خواهیم رفت زیرا بهروزرسانی بستهها پس از نصب ساده و آسان است. RDO جامعهای از افرادی است که از OpenStack در CentOS، Fedora و Red Hat Enterprise Linux استفاده و اجرا میکنند. راکی لینوکس 8 و آلمالینوکس 8 مبتنی بر Red Hat هستند، مخازن باید به خوبی کار کنند.
مرحله 1 – مخزن RDO را به Rocky Linux 8|AlmaLinux 8 اضافه کنید
مخازن RDO RPM به طور پیش فرض در Rocky Linux 8 / AlmaLinux 8 در دسترس نیستند، ما باید مخازن را به صورت دستی اضافه کنیم و سپس Open vSwitch را انجام دهیم.
آخرین نسخه OpenStack در زمان نوشتن این مقاله Xena است . اگر می خواهید از مخازن قدیمی تر استفاده کنید، می توانید این کار را انجام دهید.
برای افزودن مخزن RDO OpenStack به سیستم خود دستورات زیر را اجرا کنید:
sudo dnf install -y https://repos.fedorapeople.org/repos/openstack/openstack-yoga/rdo-release-yoga-1.el8.noarch.rpm
تأیید کنید که نصب با موفقیت انجام شده است. شما باید خروجی مشابه این بگیرید:
Dependencies resolved.
======================================================================================================================================================================================================
Package Architecture Version Repository Size
======================================================================================================================================================================================================
Installing:
rdo-release noarch yoga-1.el8 @commandline 16 k
Transaction Summary
======================================================================================================================================================================================================
Install 1 Package
Total size: 16 k
Installed size: 12 k
Downloading Packages:
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : rdo-release-yoga-1.el8.noarch 1/1
Verifying : rdo-release-yoga-1.el8.noarch 1/1
Installed:
rdo-release-yoga-1.el8.noarch
Complete!
مخازن RDO در /etc/yum.repos.d
دایرکتوری پیکربندی شده اند.
$ ls -lh /etc/yum.repos.d/rdo*
-rw-r--r--. 1 root root 338 Oct 13 17:16 /etc/yum.repos.d/rdo-release.repo
-rw-r--r--. 1 root root 3.7K Oct 13 17:16 /etc/yum.repos.d/rdo-testing.repo
مرحله ۲ – Open vSwitch را روی Rocky Linux 8|AlmaLinux 8 نصب کنید
نصب Open vSwitch در راکی لینوکس 8 / AlmaLinux 8 اکنون می تواند از مخازن RDO که به تازگی اضافه کرده ایم انجام شود. برای نصب بسته وابستگی openvswitch و libibverbs دستورات زیر را اجرا کنید .
sudo yum install openvswitch libibverbs
تمام پیش دپ های مورد نیاز توسط نصب کننده از مخازن RDO و OS برای شما انجام می شود. هیچ نصب وابستگی در خارج از مخازن موجود وجود ندارد.
Transaction Summary
======================================================================================================================================================================================================
Install 9 Packages
Total download size: 16 M
Installed size: 48 M
Is this ok [y/N]: y
هنگامی که درخواست ها را دریافت کردید، وارد کردن همه کلیدهای GPG مورد نیاز را بپذیرید.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total 22 MB/s | 16 MB 00:00
CentOS-8 - NFV OpenvSwitch 1.0 MB/s | 1.0 kB 00:00
Importing GPG key 0x9D2A76A7:
Userid : "CentOS NFV SIG (https://wiki.centos.org/SpecialInterestGroup/NFV) <security@centos.org>"
Fingerprint: 3515 4228 1749 01BE FA8E 69A6 2146 5E28 9D2A 76A7
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-NFV
Is this ok [y/N]: y
Key imported successfully
OpenStack Yoga Repository 1.0 MB/s | 1.0 kB 00:00
Importing GPG key 0x764429E6:
Userid : "CentOS Cloud SIG (http://wiki.centos.org/SpecialInterestGroup/Cloud) <security@centos.org>"
Fingerprint: 736A F511 6D9C 40E2 AF6B 074B F9B9 FEE7 7644 29E6
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-Cloud
Is this ok [y/N]: y
جزئیات بسته را می توان با استفاده از rpm
دستور با -qi
گزینه های زیر بررسی کرد:
$ rpm -qi rdo-openvswitch
Name : rdo-openvswitch
Epoch : 1
Version : 2.15
Release : 2.el8
Architecture: noarch
Install Date: Mon Sep 5 15:46:29 2022
Group : System Environment/Daemons
Size : 0
License : Public domain
Signature : RSA/SHA256, Tue Jul 20 16:31:17 2021, Key ID f9b9fee7764429e6
Source RPM : rdo-openvswitch-2.15-2.el8.src.rpm
Build Date : Tue Jun 8 15:52:32 2021
Build Host : x86-06.rdu2.centos.org
Relocations : (not relocatable)
Packager : CBS <cbs@centos.org>
Vendor : CentOS
URL : http://www.openvswitch.org
Summary : Wrapper rpm to allow installing OVS with new versioning schemes
Description :
Wrapper rpm for the base openvswitch package
پس از نصب بسته ها، می توانید مخازن مورد استفاده را غیرفعال کنید:
sudo dnf config-manager --set-disabled centos-rabbitmq-38 ceph-pacific openstack-yoga centos-nfv-openvswitch
در حال به روز رسانی Open vSwitch
برای به روز رسانی بسته ها ابتدا مخازن غیرفعال را فعال کنید:
sudo dnf config-manager --set-enabled centos-rabbitmq-38 ceph-pacific openstack-yoga centos-nfv-openvswitch
sudo dnf update openvswitch libibverbs
مرحله 3 – سرویس openvswitch را شروع کنید
پس از نصب باید سرویس openvswitch را به صورت دستی شروع کنیم. در سیستم های مبتنی بر ردهت، مدیریت خدمات مسئولیت کامل شماست.
$ sudo systemctl enable --now openvswitch
Created symlink /etc/systemd/system/multi-user.target.wants/openvswitch.service → /usr/lib/systemd/system/openvswitch.service.
بررسی وضعیت سرویس با استفاده از systemctl
دستور:
$ systemctl status openvswitch
● openvswitch.service - Open vSwitch
Loaded: loaded (/usr/lib/systemd/system/openvswitch.service; enabled; vendor preset: disabled)
Active: active (exited) since Sat 2022-01-08 22:54:50 CET; 16s ago
Process: 67524 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 67524 (code=exited, status=0/SUCCESS)
Jan 08 22:54:50 ovirt-node-01.hirebestengineers.com systemd[1]: Starting Open vSwitch...
Jan 08 22:54:50 ovirt-node-01.hirebestengineers.com systemd[1]: Started Open vSwitch.
این ovs-vsctl
ابزار برای پرس و جو و پیکربندی ovs-vswitchd ارائه شده است. این یک رابط سطح بالا برای پیکربندی پایگاه داده پیکربندی Open vSwitch فراهم می کند.
برای بررسی نسخه OVS دستور زیر را اجرا کنید
$ ovs-vsctl show
748c9a24-9d53-401b-b1c7-41bb233f2fa5
ovs_version: "2.15.6"
برای چاپ یک پیام راهنمای مختصر به کنسول، از موارد زیر استفاده کنید:
$ ovs-vsctl --help
مرحله 4 – پل OVS را ایجاد و پیکربندی کنید
در یک پیکربندی شبکه معمولی که از OVS استفاده می کند، یک پل ایجاد شده مستقیماً به یک رابط شبکه اختصاصی در سیستم میزبان متصل می شود. این پل و مهمانان متصل را به استفاده از رابط میزبان محدود می کند.
برای اهداف نمایشی، ما باید یک پل نرم افزاری ایجاد کنیم که به رابط میزبان خاصی متصل یا متصل نباشد. با این کار، پشته TCP/IP در سیستم میزبان میتواند مسیریابی ترافیک خروجی را به رابط مناسب بر اساس IP مقصد یا زیرشبکه مدیریت کند.
مسیریابی IP در کرنل را فعال کنید
قبل از ایجاد یک پل، اجازه دهید مسیریابی IP را با تنظیم پارامترهای هسته در زمان اجرا با استفاده از sysctl
.
sudo tee /etc/sysctl.d/iprouting.conf<<EOF
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
EOF
تنظیمات را اعمال کنید:
sudo sysctl --system
تأیید تنظیمات جدید:
$ sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
$ sysctl net.ipv6.conf.all.forwarding
net.ipv6.conf.all.forwarding = 1
ایجاد پل OVS
مرحله بعدی ایجاد یک پل OVS است. نام آن را ovs-br0 می گذاریم . برای تداوم پیکربندی شبکه، یک فایل در پوشه اسکریپت های شبکه ایجاد می کنیم. دارای مطالبی است که در بخش کد زیر به اشتراک گذاشته شده است.
$ sudo vim /etc/sysconfig/network-scripts/ifcfg-ovs-br0
DEVICE=ovs-br0
BOOTPROTO=none
ONBOOT=yes
TYPE=OVSBridge
DEVICETYPE=ovs
USERCTL=yes
PEERDNS=yes
IPV6INIT=no
IPADDR=192.168.70.1
PREFIX=24
جایی که:
- TYPE روی OVSBridge تنظیم شده است
- DEVICETYPE روی ovs تنظیم شده است
- نام پل ovs-br0 است
- آدرس IP اختصاص داده شده 192.168.70.1/24 است
پل OVS را با دستور ifup بالا بیاورید :
$ sudo ifup ovs-br0
$ ip link show dev ovs-br0
5: ovs-br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/ether a2:a9:f2:6d:7f:4f brd ff:ff:ff:ff:ff:ff
در اینجا اطلاعات آدرس IP همانطور که پیکربندی کردیم آمده است.
$ ip ad show dev ovs-br0
5: ovs-br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
link/ether a2:a9:f2:6d:7f:4f brd ff:ff:ff:ff:ff:ff
inet 192.168.70.1/24 brd 192.168.70.255 scope global ovs-br0
valid_lft forever preferred_lft forever
inet6 fe80::a0a9:f2ff:fe6d:7f4f/64 scope link
valid_lft forever preferred_lft forever
ما میتوانیم از iptables برای هدایت ترافیک از طریق رابط اصلی از زیرشبکه شبکه مورد استفاده در پل استفاده کنیم.
sudo iptables -t nat -A POSTROUTING -o enp0s31f6 -s 192.168.70.0/24 -j MASQUERADE
برای ذخیره قوانین می توانیم دستور زیر را اجرا کنیم:
$ sudo /sbin/iptables-save > /etc/sysconfig/iptables
#To restore
$ sudo /sbin/iptables-save < /etc/sysconfig/iptables
اگر پل ما به یک رابط فیزیکی متصل بود، تنظیمات این رابط شبیه به زیر خواهد بود:
DEVICE=eth1
ONBOOT=yes
TYPE=OVSPort
DEVICETYPE=ovs
OVS_BRIDGE=ovs-br0
مرحله 5 – استفاده از پل در ماشین های مجازی لینوکس (KVM)
با پیکربندی پل OVS و آماده استفاده، میتوانیم یک Test VM روی KVM ایجاد کنیم و کارکرد آن را تأیید کنیم.
ایجاد تصویر VM:
$ sudo virt-builder centos-8.2 --format qcow2 \
--size 40G -o /var/lib/libvirt/images/centos8.qcow2
[ 1.0] Downloading: http://builder.libguestfs.org/centos-8.2.xz
######################################################################################################################################################################### 100.0%
[ 10.8] Planning how to build this image
[ 10.8] Uncompressing
[ 15.6] Resizing (using virt-resize) to expand the disk to 40.0G
[ 45.0] Opening the new disk
[ 50.0] Setting a random seed
[ 50.0] Setting passwords
virt-builder: Setting random password of root to 8Udxd5HbuAtfNIr6
[ 51.0] Finishing off
Output file: /var/lib/libvirt/images/centos8.qcow2
VM را از تصویر سیستم عامل ایجاد شده ایجاد کنید.
sudo virt-install \
--name centos8 \
--ram 2048 \
--vcpus 1 \
--disk path=/var/lib/libvirt/images/centos8.qcow2 \
--os-type linux \
--os-variant rhel8.0 \
--network=bridge:ovs-br0,model=virtio,virtualport_type=openvswitch \
--graphics none \
--serial pty \
--console pty \
--boot hd \
--import
پیکربندی اطلاعات آدرس IP در ماشین مجازی:
$ vim /etc/sysconfig/network-scripts/ifcfg-enp1s0
NAME="enp1s0"
DEVICE="enp1s0"
ONBOOT="yes"
NETBOOT="yes"
BOOTPROTO="none"
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
DEFROUTE="yes"
IPADDR=192.168.70.2
PREFIX=24
GATEWAY=192.168.70.1
DNS1=8.8.8.8
رابط شبکه را در ماشین مجازی فعال کنید:
[root@localhost ~]# ifup enp1s0
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6)
جزئیات آدرس IP را بررسی کنید
# ip ad
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:36:ad:26 brd ff:ff:ff:ff:ff:ff
inet 192.168.70.3/24 brd 192.168.70.255 scope global noprefixroute enp1s0
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe36:ad26/64 scope link
valid_lft forever preferred_lft forever
تست دسترسی به اینترنت
# ping -c 2 google.com
PING google.com (142.250.185.142) 56(84) bytes of data.
64 bytes from fra16s50-in-f14.1e100.net (142.250.185.142): icmp_seq=1 ttl=118 time=5.47 ms
64 bytes from fra16s50-in-f14.1e100.net (142.250.185.142): icmp_seq=2 ttl=118 time=5.55 ms
--- google.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 5.465/5.507/5.549/0.042 ms
این تأیید می کند که نصب OVS ما موفقیت آمیز بوده است. اگر باید یک رابط سیستم عامل مهمان KVM موجود را برای استفاده از پل Open vSwitch پیکربندی کنید، سپس فایل پیکربندی بند XML را برای شامل موارد زیر ویرایش کنید:
<interface type="bridge">
<source bridge="ovs-br0"/>
<virtualport type='openvswitch'/>
<model type="virtio"/>
<driver name="vhost"/>
</interface
هنگام کار با فایل XML به صورت محلی، VM مهمان را با استفاده از دستورات virsh دوباره تعریف کنید:
sudo virsh undefine <kvm-guest-domain>
sudo virsh define <kvm-guest-domain-xml-file>
و در آخر، مهمان KVM را مجددا راه اندازی کنید تا تغییرات اعمال شوند.
sudo virsh destroy <kvm-guest-domain>
sudo virsh start <kvm-guest-domain>