Ubuntu 14.04 KVM – Networking – Part 1

tarafından 29 Haziran 2015 tarihinde Linux kategorisine yazıldı.

Merhaba,

Daha önecki bölümlerde KVM kurulumu ve Storage Pool oluşturulmasından bahsetmiştim. Bu yazımda ise KVM’in networking bölümünü anlatacağım.

KVM içerisinde çalıştırdığınız virtual machine’leri external network ile haberleştirmenizin birkaç farklı yolu vardır. Bunnlardan birtanesi default network konfigurasyonudur. Bu Usermode Networking olarakda bilinir. Virtual machine’ler External network ile NAT‘lanarak haberleşir. Bir diğeri ise bridge kullanılarak virtual machine’leri doğrudan external network ile konuşturma yönetimidir.

ufLGE

Usermode Networking:

Default konfigurasyonda, virtual machine’lerin network servislerine erişimi olacaktır ancak bu diğer virtual machine’ler tafaından görülmeyecektir. Siz bu virtual machine üzerinden websitelerine girip gezinebilirsiniz ancak bu virtual machine üzerine bir web server kurup site barındırmanız mümkün olmayacaktır.

Default konfigurasyonda, guest OS yani virtual machine 10.0.2.0/24 aralığından bir IP alacaktır ve host ise 10.0.2.2 IP’sinden ulaşılabilir olacaktır. Buradaki IP’leri tamamen kendi ortamıma bağlı kalarak örneklendiriyorum. Bu şartlarda Host içerisinden virtual machine’ e SSH ile veya SCP ile bağlanabilirsiniz. Çünkü her ikiside aynı network’de. Yukarıda da belirttiğim gibi bu Usermode Networking olduğu için host ile guest (virtual machine) birbirleri ile NAT yaparak haberleşir.

Bridge Networking:

Bridge network; virtual machine üzerinde takılı olan virtual interface’in, fiziksel interface üzerinden dış network ile konuşmasına olanak sağlar. Ek olarak; Bridge network’u Wireless Device’lar üzerinde oluşturamazsınız.

Bridge Network Oluşturma:

sudo apt-get install bridge-utils

Öncelikle bridge-utils paketlerini kuruyoruz.

sudo invoke-rc.d networking stop

Network konfigurasyonunu değiştirmek için ilk olarak networking’i yukarıdaki komut ile stop duruma getiriyoruz. Tabi eğer siz uzak bağlantınızı yani remote connection’ı kaybetmek istemiyorsanız network’u stop duruma getirmeyin 🙂

Şimdi bridge için kullanacağımız interface’i editlememiz gerekiyor. Bunun için vi /etc/network/interfaces dosyasına girip editliyoruz.  Config dosyasını editlerken aşağıdaki değerleri kendi network’unuze göre değiştirin.

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
address 192.168.1.10
network 192.168.1.0
netmask 255.255.255.0
broadcast 192.168.1.255
gateway 192.168.1.1
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0

veya eğer DHCP kullanıyorsanız;

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0

Yukarıda config dosyasında yaptığımız işlemlerden dolayı br0 interface’i oluşacaktır.

sudo /etc/init.d/networking restart

Networking’i restart ediyoruz.

Networking’i restart ederken eğer sizn virtual machine’leriniz anlık olarak donabilir çünkü Linux bridge’da dış network ile haberleşmek için hardware address en düşük olan interface kullanılır. Tabi bunun workaround’u var. Bunun için bridge konfigurasyonuna aşağıdaki parametreyi ekliyoruz.

post-up ip link set br0 address f4:6d:04:08:f1:5f 

Yukarıdaki mac adresini siz kendi donanımınıza göre değiştirmeniz gerekmektedir.

ubuntu-vm-builder  konfigurasyonunu ayarlamak:

KVM üzerinde oluşturulan her virtual machine bir XML dosyasında tutulur. Ubuntu-vm-builder ‘ı biz virtual machine oluşturmak için kullanacağız. Bu araç ise template olarak;  /etc/vmbuilder/libvirt/libvirtxml.tmpl (Ubuntu 8.10 öncesinde /usr/share/ubunt-vm-builder/templates/libvirt.tmpl) dosyası kullanılır.

Ubuntu 10.04 ‘de (Lucid ve sonraki sürümlerde) libvirtxml.tmpl dosyası içerisinde bridge=br0 ayarlı durumdadır. Aşağıdaki dosya /etc/vmbuilder.cfg ‘nin bir örneğidir. Kullanmak için tayfundeger.com olan bölümleri değiştirebilirsiniz.

[DEFAULT]
# Default is 1G tmpfs; Uncomment this line if you've >=2G of free RAM.
#tmpfs = suid,dev,size=2G

#arch = amd64
arch = i386
domain = example.com
part = vmbuilder.partition
user = localadmin
name = LocalAdmin
pass = default

[kvm]
libvirt = qemu:///system
#network = br0
bridge = br0
virtio_net = true

[ubuntu]
#mirror = http://127.0.0.1:9999/ubuntu
# If using package cache software (apt-proxy), uncomment line below and set correct IP and Port:
#install-mirror = http://127.0.0.1:9999/ubuntu
suite = lucid
flavour = virtual
#components = main,universe,restricted,multiverse
components = main,universe
# Example adding PPA and installing extra software packages after base OS installation:
#ppa = bcfg2/lucidtesting
#addpkg = openssh-server, unattended-upgrades, bcfg2, acpid 

Varolan virtual machine’in network’unu değiştirme:

Eğer halihazırda kullanmış olduğunuz bir virtual machine’iniz var ise ve bunu bridge network’e almak istiyorsanız xml dosyasını editlemeniz gerekiyor. Bunun için /etc/libvirt/qemu/ içerisinde bulunan xml dosyasını editleyebilirsiniz.


<interface type='network'>
<mac address='00:11:22:33:44:55'/>
<source network='default'/>
</interface>

Aşağıdaki gibi değiştirebilirsiniz.


<interface type='bridge'>
<mac address='00:11:22:33:44:55'/>
<source bridge='br0'/>
</interface>

Yaptığınız değişikliklerin geçerli olması için libvirtd ‘i restart etmeniz gerekmektedir. Ancak bunun haricinde bir yol daha var. Eğer virtual machine’i stop edip tekrar restart ederseniz, o virtual machine konfigurasyonu yeniden okuyacak ve değişiklikler aktif hale gelecektir. Aşağıda bunun bir örneğini görebilirsiniz.


yhamon@paris:/etc/libvirt/qemu$ ls
mirror.xml networks vm2.xml
yhamon@paris:/etc/libvirt/qemu$ virsh --connect qemu:///system
Connecting to uri: qemu:///system
Welcome to virsh, the virtualization interactive terminal.

Type: 'help' for help with commands
'quit' to quit

virsh # list
Id Name State
----------------------------------
10 vm2 running
15 mirror running

virsh # shutdown mirror
Domain mirror is being shutdown

virsh # define mirror.xml
Domain mirror defined from mirror.xml

virsh # start mirror
Domain mirror started

Bu işlemi yaptıkdan sonra artık virtual machine bridge network’unu kullanacaktır.

Umarım faydalı olmuştur.

İyi çalışmalar.

email

Bu yazı blog üzerinde Tayfun DEĞER tarafından paylaşılmıştır. 2009 yılında açılan blog kısa zaman içerisinde büyük bir izleyici kitlesine sahip olmuştur.Tayfun DEĞER danışmanlık ve eğitimler vermektedir. vExpert 2013-2017, VCP5, VCP5-DT, VCP-Cloud ve MCSE sertifikalarına sahiptir.Twitter 'dan @tayfundeger veya RSS ile sitedeki değişiklikleri takip edebilirsiniz.

  • Eline sağlık Tayfun, ama KVM gibi büyük bir sanallaştırma sisteminde tam bir salaklık hala düzeltmediler.

    • Neyi düzeltemediler tam anlamadım 🙂

      • Hala adam akıllı bir network yönetimi yapmadılar, VirtualBox da Vmware de Linux üzerinde çalışıyor ve hiç böyle dandirikten işlere gerek kalmıyor bridge interface için.

        • Evet haklısın ancak GUI arayüzünü kullanırsan bu yöntemlerede pek gerek kalmıyor. Büyük bir nebze olsun hafifletiyor iş yükünü. Ama yinede haklısın 🙂