Как установить KVM и libvirt на CentOS 6.2 с мостовой сетью
Быстрое содержание
- Кому предназначено: системным администраторам и инженерам виртуализации.
- Результат: работающий KVM/libvirt на CentOS 6.2 с мостовой сетью (br0).
- Ключевые шаги: проверка CPU, установка пакетов, настройка прав, создание бриджа, настройки iptables и sysctl.
Введение
В этом руководстве описано, как установить гипервизор KVM и библиотеку управления libvirt на CentOS 6.2 и как настроить мостовую сеть, чтобы гостьные ОС были доступны в локальной сети так же, как физические машины. Руководство сохраняет команды и примеры вывода для наглядности.
Что такое KVM и libvirt (в двух строках)
KVM — это полнофункциональный гипервизор на базе ядра Linux, использующий аппаратную виртуализацию (Intel VT/AMD-V).
libvirt — это библиотека и набор инструментов для управления виртуальными машинами через единый API и утилиты (virsh, virt-manager).
Требования
- Аппаратно: процессор с поддержкой Intel-VT или AMD-V.
- Память: достаточно для хостовой ОС и нескольких гостей.
- Сеть: подключение к LAN.
- Софт: CentOS 6.2 с современным ядром и доступом к зеркалу/репозиторию.
Пример сведений хоста, использованных в этом руководстве:
$ uname -r2.6.32-220.2.1.el6.x86_64$ lsb_release -aLSB Version: :core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor ID: CentOS
Description: CentOS release 6.2 (Final)
Release: 6.2
Codename: FinalПроверка поддержки виртуализации (Intel VT / AMD-V)
Войдите под пользователем с sudo-привилегиями (например, bozz) и выполните:
$ egrep '^flags.*(vmx|svm)' /proc/cpuinfoВ выводе должно присутствовать vmx (Intel) или svm (AMD). Пример вывода из хоста:
flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm ida dts tpr_shadow vnmi flexpriority ept vpidЕсли вывод пуст — CPU не поддерживает аппаратную виртуализацию, или она отключена в BIOS/UEFI.
Шаги установки
1) Установка пакетов
Установите kvm и libvirt:
$ sudo yum install kvm libvirtОбновите пакеты до доступной версии:
$ sudo yum update libvirt kvmПроверка версий (пример вывода):
$ yum info libvirtInstalled Packages
Name : libvirt
Arch : x86_64
Version : 0.9.4
Release : 23.el6_2.4$ yum info qemu-kvmInstalled Packages
Name : qemu-kvm
Arch : x86_64
Epoch : 2
Version : 0.12.1.2
Release : 2.209.el6_2.12) Перезапуск демона libvirtd
$ sudo service libvirtd restart3) Проверка загрузки модулей KVM
Убедитесь, что загружены модули kvm и kvm_intel/kvm_amd:
$ lsmod | grep kvmkvm_intel 50380 0
kvm 305113 1 kvm_intel4) Проверка доступа через virsh (локально)
$ sudo virsh sysinfoПример обрезанного вывода:
5) Доступ для небезопасных пользователей (не root)
По умолчанию доступ к гипервизору требует root. Чтобы позволить небезопасным пользователям управлять KVM, выполните следующие шаги.
- Проверьте, создана ли группа kvm:
$ cat /etc/group | grep kvmkvm:x:36:qemu- Добавьте пользователя bozz в группу kvm и выйдите/войдите снова:
$ sudo usermod -a -G kvm bozz
$ logout- Проверьте членство и права устройства /dev/kvm:
$ iduid=500(bozz) gid=500(bozz) groups=500(bozz),10(wheel),36(kvm) context=...$ ls -l /dev/kvmcrw-rw-rw-. 1 root kvm 10, 232 Jan 17 14:50 /dev/kvmНа системах с udev добавьте правило, чтобы устройство автоматически получало группу kvm:
$ cat /etc/udev/rules.d/80-kvm.rulesKERNEL=="kvm", GROUP="kvm", MODE="0666"6) PolicyKit для управления libvirt без root
Создайте группу libvirt, добавьте в неё пользователя и создайте локальное правило PolicyKit:
$ sudo groupadd libvirt
$ sudo usermod -a -G libvirt bozz
$ logoutЗатем создайте файл:
$ sudo nano /etc/polkit-1/localauthority/50-local.d/50-libvirt-remote-access.pklaСодержимое файла:
[libvirt Management Access]
# For allowing access to specific user only:
#Identity=unix-user:bozz
# For allowing access to a group (like this guide):
Identity=unix-group:libvirt
Action=org.libvirt.unix.manage
ResultAny=yes
ResultInactive=yes
ResultActive=yesПерезапустите libvirtd:
$ sudo service libvirtd restartПроверьте локальный доступ:
$ virsh -c qemu:///system sysinfoИ удалённый доступ через SSH (с клиента):
Для Ubuntu клиента:
$ sudo apt-get install libvirt-binДля CentOS клиента:
$ sudo yum install libvirtПодключение:
$ virsh -c qemu+ssh://bozz@SERVER/system sysinfo7) Разрешения для каталога образов
Измените владельца и права каталога по умолчанию для образов виртуальных машин:
$ sudo chown root:libvirt /var/lib/libvirt/images
$ sudo chmod g+rw /var/lib/libvirt/images8) Файлы конфигурации при запуске libvirtd как небезопасный пользователь
Если libvirtd (>= 0.9.3) запускается не от root, он попытается читать ~/.libvirt/libvirtd.conf. Создайте файл, чтобы избежать ошибок:
$ mkdir -p ~/.libvirt
$ touch ~/.libvirt/libvirtd.confПроверка:
$ virsh list Id Name State
----------------------------------Настройка мостовой сети (br0)
Создайте файл конфигурации для моста:
$ sudo nano /etc/sysconfig/network-scripts/ifcfg-br0Пример содержимого (подставьте свои IP/шлюз/маску):
DEVICE="br0"
TYPE=Bridge
DELAY=0
ONBOOT="yes"
BOOTPROTO=static
IPADDR=192.168.11.12
NETMASK=255.255.255.0
NETWORK=192.168.11.0
GATEWAY=192.168.11.1
DNS1=192.168.11.2
PEERDNS="yes"
NM_CONTROLLED=noОтредактируйте конфигурацию физического интерфейса (пример eth0):
$ sudo nano /etc/sysconfig/network-scripts/ifcfg-eth0DEVICE="eth0"
HWADDR="00:2C:C2:85:29:A3"
ONBOOT="yes"
BRIDGE=br0
NM_CONTROLLED=noПерезапустите сеть:
$ sudo service network restartПроверьте состояние бриджа:
$ brctl showПример вывода:
bridge name bridge id STP enabled interfaces
br0 8000.002cc28529a3 no eth0
...Настройка iptables и sysctl для пропуска трафика через бридж
Разрешите пересылку для бриджа:
$ sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT
$ sudo service iptables save
$ sudo service iptables restartЧтобы бридж-движок не проходил трафик через iptables (увеличивает производительность), добавьте в /etc/sysctl.conf:
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0Примените настройки:
$ sudo sysctl -p /etc/sysctl.confПерезапустите libvirtd или перезагрузите его конфигурацию:
$ sudo service libvirtd reloadКритерии приёмки
- virsh показывает информацию о гипервизоре для пользователя bozz:
virsh -c qemu:///system sysinfoвозвращает данные. - Бридж br0 поднят и содержит физический интерфейс:
brctl showпоказывает br0 с интерфейсом eth0. - Гости получают IP из LAN (при статике или DHCP) и доступны с других хостов в сети.
Тесты и случаи проверки
- Проверить, что гостевая ОС пингуется с другого хоста в сети.
- Создать и запустить простую VM через virt-manager или
virt-install. - Убедиться, что iptables не блокируют бриджированный трафик.
Типичные ошибки и способы устранения
- Модуль kvm не загружен: проверьте BIOS/UEFI (включите Intel VT/AMD-V), затем
lsmod | grep kvm. - /dev/kvm имеет неправильные права: настройте udev правило
80-kvm.rulesи перезагрузите udev. - Пользователь не видит qemu:///system: проверьте членство в группах kvm/libvirt и файл PolicyKit.
- Бридж не поднимается: проверьте синтаксис ifcfg-br0 и ifcfg-eth0, перезапустите сеть и используйте
brctl show. - Трафик проходит через iptables и замедляет бридж: проверьте sysctl параметры bridge-nf-call-* и iptables FORWARD.
Альтернативные подходы
- NAT-сеть при помощи libvirt (virbr0) — проще для изолированных тестовых сред, но гостьные ОС не видны в LAN напрямую.
- Использование отдельных VLAN и привязка виртуальных интерфейсов к trunk-портам — полезно в инфраструктурах с VLAN.
- Использовать Open vSwitch для более сложных сетевых сценариев и политик.
Роли и чек-листы
Для системного администратора:
- Проверить поддержку VT/AMD-V.
- Установить и обновить kvm/libvirt/qemu.
- Настроить PolicyKit и права каталога образов.
Для девопса/сетевого инженера:
- План IP/маршрутизации для бриджа.
- Обеспечить правила фаервола и производительность бриджа.
Для пользователя рабочего стола (virt-manager):
- Установить клиент libvirt/virt-manager.
- Подключиться к qemu+ssh://user@SERVER/system и управлять VM.
Факты и числа (фактически приведённые примеры)
- Пример kernel: 2.6.32-220.2.1.el6.x86_64.
- Пример релиза libvirt: 0.9.4.
- Пример qemu-kvm: 0.12.1.2.
Безопасность и рекомендации
- По возможности не предоставляйте доступ qemu:///system посторонним пользователям без контроля.
- Для удалённого управления используйте SSH с ключами и ограничьте доступ на уровне PolicyKit.
- Логи libvirt и systemd (если применимо) помогают расследовать сбои.
Краткая методология (mini-methodology)
- Проверить аппаратные возможности.
- Установить и обновить пакеты.
- Настроить группы и PolicyKit.
- Создать мост и корректно настроить физический интерфейс.
- Обновить правила брандмауэра и sysctl.
- Перезапустить службы и тестировать.
Когда этот подход не годится
- Если вы не хотите, чтобы гостевые машины имели прямой доступ к LAN — используйте NAT-сеть libvirt.
- В облачных или контейнерных средах, где управление сетью централизовано, лучше применять сетевые плагины или SDN (Open vSwitch).
Краткое резюме
Вы установили KVM и libvirt на CentOS 6.2, настроили доступ для небезопасных пользователей через группы и PolicyKit, создали мост br0 и сконфигурировали iptables/sysctl для корректной работы бриджа. После этого виртуальные машины могут получать адреса и быть доступными в вашей LAN так же, как физические хосты.
Важно: подставляйте собственные IP/MAС и внимательно проверяйте конфигурацию сети перед перезапуском сервисов.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента