суббота, 29 августа 2015 г.

KVM + Ubuntu = love

Вообще виртуализация - это затертая до дыр тема, но кое-что я для себя помечу.

Допустим, у нас имеется компьютер/сервер с предустановленной Бубунтой. И мы хотим его использовать в качестве гипервизора. Есстно ОС гипервизора должна работать только с виртуальными машинами, т.е. своего рода ферма. ОС гипервизора у нас будет Ubuntu 14.04.3
Задача такая. На гипервизоре есть виртуальная машины, и мы хотим через виртуалку гонять трафик в Сеть. Т.е. проще говоря, шлюз. Так же на гипервизоре даны два сетевых интерфейса, один смотрит в Интернет, другой в нашу локалку. Нужно прокинуть оба интерфейса в вирутальную машину. Как лучше это сделать? Вариантом много, но я поступил следующим образом.

на гипервизоре в настройке /etc/network/interfaces вот такое вот

auto lo
iface lo inet loopback

auto p2p1
iface p2p1 inet manual

auto br0
iface br0 inet static
        address 192.168.13.20
        network 192.168.13.0
        netmask 255.255.255.0
        dns-nameservers 192.168.13.1
        gateway 192.168.13.1
        broadcast 192.168.13.255
        bridge_ports p3p1
        bridge_fd 9
        bridge_hello 2
        bridge_maxage 12
        bridge_sftp off


Теперь по пунктам. Петлевой интерфейс не трогаем, следующий интерфейс - это тот, который смотрит в Интернет. Его нужно просто держать включенным при старте, именно поэтому стоит опция manual
В ручном режиме данный интерфейс можно спокойно прокидывать в виртуальную машину. Это необходимо, чтобы настройки на интерфейс смогла назначить сама виртуальная машина. В противном случае будут конфликты.

Следующий интерфейс, который смотрит локальную сеть, я перевел в режим моста. Для чего это нужно? Это очень удобно, так как в режиме моста, данный интерфейс работает как обычный switch. Т.е. последующие создаваемые виртуальные машины, также можно направлять в нашу локальную машину. Стоит также отметить, что гипервизор - обычный клиент сети с ip-адресом 192.168.13.20, а у шлюза 192.168.13.1
Теперь через virt-manager (ubuntu), нужно создать два сетевых интерфейса в виртуальной машине шлюза.
Один завести подключить через созданный мост (br0), а второй Hostdivace p2p1 macvtap, device model: virtio, source mode: Privat

Вот так прокинуты интерфейсы в виртуалку. Ну и в виртуалке эти интерфейсы будут как eth0 и eth1