_


суббота, 15 октября 2011 г.

KVM и сеть на Debian Squeeze. Установка. Настройка. Запуск виртуальных машин










KVM (или Kernel-based Virtual Machine) — это программное решение, обеспечивающее виртуализацию в среде Linux на платформе x86, которая поддерживает аппаратную виртуализацию на базе Intel VT (Virtualization Technology) либо AMD SVM (Secure Virtual Machine)

Привет :) Давайте настроим KVM на Debian Squeeze ...
Задача следующая: есть хост-машина с поддержкой аппаратной виртуализации.
Проверить можно вот так:

user@lan:~# egrep '(vmx|svm)' /proc/cpuinfo
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 lahf_lm dts tpr_shadow vnmi flexpriority

Воплотить в жизнь вот такую схемку:

Как видно из рисунка, HOST выступает в роли хостовой машины, содержащей гостевые ОС.
Внешний сетевой интерфейс имеет IP 80.80.80.80, а внутренний 10.0.0.100.
Гостевые машины имеют IP адреса из подсети 10.0.0.0/24.
Вообщем, получилось наглядно и очевидно :)

Для того, чтобы установить KVM желательно обновить ядро, чтобы получить желаемую поддержку (а может она уже присутствует). После обновления ядра устанавливаем KVM и сетевые утилиты для реализации моста:

apt-get install kvm qemu-kvm bridge-utils

Далее, редактируем файл:

nano /etc/network/interfaces
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
 allow-hotplug eth0
 iface eth0 inet dhcp # так как у меня IP получает по DHCP (80.80.80.80)

auto virbr
iface virbr inet static
address 10.0.0.100
netmask 255.255.255.0
bridge_ports none
bridge_fd 9
bridge_hello 2
bridge_maxage 12
bridge_maxwait 5
bridge_stp off
dns-nameservers 127.0.0.1

Как видно из конфига, добавляется мост с IP 10.0.0.100, который будет связующим звеном с адаптерами виртуальных машин.

Создаем файл, который будет создавать новый сетевой интерфейс для каждой виртуальной машины:

nano /var/virt/newIF.sh
#!/bin/sh
/sbin/ifconfig $1 0.0.0.0 up
/usr/sbin/brctl addif virbr $1
exit 0

Далее, перезагружаемся ...

После перезагрузки создаем директорию, где будут храниться виртуальные машины. В моем случае:

mkdir /var/virt

Теперь, создаем новый диск виртуальной машины следующей командой:

kvm-img create /var/virt/dsa.img 10G

Осталось запустить новую гостевую систему:

kvm -m 512 /var/virt/dsa.img -cdrom /путь_к_образу.iso -net nic,macaddr=00:11:22:33:44:55 -net tap,script=/var/virt/newIF.sh -daemonize -vnc :1

Включаем маршрутизацию:

sysctl -w net.ipv4.ip_forward=1
echo 1 > /proc/sys/net/ipv4/ip_forward

Добавляем правило в iptables:

iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE

Хостовая система готова к работе. На виртуальных машинах в качестве шлюза необходимо указать мост.

p.s. спасибо true_admin за помощь!

Комментариев нет:

Отправить комментарий