Ubuntu 14.04 KVM Network

Daha önceki 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. Bunlardan bir tanesi default network konfigurasyonudur. Bu Usermode Networking olarak da 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.

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 konfigürasyonda, 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 ikisi de 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:

1

sudo apt-get install bridge-utils

Öncelikle bridge-utils paketlerini kuruyoruz.

1

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.

01

auto lo

02

iface lo inet loopback

 

03

 

04

auto eth0

 

05

iface eth0 inet manual

06

 

 

07

auto br0

08

iface br0 inet static

 

09

address 192.168.1.10

10

network 192.168.1.0

 

11

netmask 255.255.255.0

12

broadcast 192.168.1.255

 

13

gateway 192.168.1.1

14

bridge_ports eth0

 

15

bridge_stp off

16

bridge_fd 0

 

17

bridge_maxwait 0

veya eğer DHCP kullanıyorsanız;

01

auto lo

02

iface lo inet loopback

 

03

 

04

auto eth0

 

05

iface eth0 inet manual

06

 

 

07

auto br0

08

iface br0 inet dhcp

 

09

bridge_ports eth0

10

bridge_stp off

 

11

bridge_fd 0

12

bridge_maxwait 0

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

1

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 konfigürasyonuna aşağıdaki parametreyi ekliyoruz.

1

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  konfigürasyonunu 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.

01

[DEFAULT]

02

# Default is 1G tmpfs; Uncomment this line if you’ve >=2G of free RAM.

 

03

#tmpfs = suid,dev,size=2G

04

 

 

05

#arch = amd64

06

arch = i386

 

07

domain = example.com

08

part = vmbuilder.partition

 

09

user = localadmin

10

name = LocalAdmin

 

11

pass = default

12

 

 

13

[kvm]

14

libvirt = qemu:///system

 

15

#network = br0

16

bridge = br0

 

17

virtio_net = true

18

 

 

19

[ubuntu]

20

#mirror = http://127.0.0.1:9999/ubuntu

 

21

# If using package cache software (apt-proxy), uncomment line below and set correct IP and Port:

22

#install-mirror = http://127.0.0.1:9999/ubuntu

 

23

suite = lucid

24

flavour = virtual

 

25

#components = main,universe,restricted,multiverse

26

components = main,universe

 

27

# Example adding PPA and installing extra software packages after base OS installation:

28

#ppa = bcfg2/lucidtesting

 

29

#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.

1

<interface type=’network’>

2

<mac address=’00:11:22:33:44:55’/>

 

3

<source network=’default’/>

4

</interface>

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

1

<interface type=’bridge’>

2

<mac address=’00:11:22:33:44:55’/>

 

3

<source bridge=’br0’/>

4

</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.

01

yhamon@paris:/etc/libvirt/qemu$ ls

02

mirror.xml networks vm2.xml

 

03

yhamon@paris:/etc/libvirt/qemu$ virsh –connect qemu:///system

04

Connecting to uri: qemu:///system

 

05

Welcome to virsh, the virtualization interactive terminal.

06

 

 

07

Type: ‘help’ for help with commands

08

‘quit’ to quit

 

09

 

10

virsh # list

 

11

Id Name State

12

———————————-

 

13

10 vm2 running

14

15 mirror running

 

15

 

16

virsh # shutdown mirror

 

17

Domain mirror is being shutdown

18

 

 

19

virsh # define mirror.xml

20

Domain mirror defined from mirror.xml

 

21

 

22

virsh # start mirror

 

23

Domain mirror started

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

Private Virtual Switch (Guest-Only Network)

Önceki bölümde virtual machine’i external network’e bağlamıştık. Dolayısıyla bu virtual machine internete çıkabilir hale gelmişti. İsterseniz virtual machine’leri kendi içerisinde haberleştirebilir dış dünya ile iletişim kurmasını engelleyebilirsiniz. Bu işlemi yapmanız için öncelikle virtual machine üzerinde aşağıdaki parametreleri çalıştırıyoruz.

01

user$ sudo su

02

root# cat << __EOF__ >> /etc/network/interfaces

 

03

 

04

#———————–

 

05

auto privatebr0

06

iface privatebr0 inet static

 

07

address 10.3.11.254

08

netmask 255.255.255.0

 

09

pre-up brctl addbr privatebr0

10

post-down brctl delbr privatebr0

 

11

__EOF__

12

root# /etc/init.d/networking restart

Virsh kullanarak private network oluşturuyoruz.

01

user$ virsh net-list –all # check existing KVM networks

02

Name State Autostart

 

03

—————————————–

04

default active yes

 

05

 

06

user$ echo ‘ privatenet ‘ >> /tmp/net.xml

 

07

user$ virsh net-define /tmp/net.xml

08

Network privatenet defined from /tmp/net.xml

 

09

 

10

user$ virsh net-list –all

 

11

Name State Autostart

12

—————————————–

 

13

default active yes

14

privatenet inactive no

 

15

 

16

user$ virsh net-start privatenet

 

17

Network privatenet started

18

 

 

19

user$ virsh net-list –all

20

Name State Autostart

 

21

—————————————–

22

default active yes

 

23

privatenet active no

24

 

 

25

user$ virsh net-autostart privatenet

26

Network privatenet marked as autostarted

 

27

 

28

user$ virsh net-list –all

 

29

Name State Autostart

30

—————————————–

 

31

default active yes

32

privatenet active yes

Artık virtual machine‘e network eklerken privatenet’i seçerek Private network ekleyebilirsiniz. Böylece bu eklemiş olduğunuz network ile oluşturduğunuz Private Switch’e bağlantı sağlanacaktır.

 

Port Redirect:

KVM üzerinde çalışan bir virtual machine’in belirli bir port’unu başka bir IP’ye yönlendirmek isteyebilirsiniz. Bunun için host üzerinde aşağıdaki komutu kullanabilirsiniz.

1

iptables -t nat -A PREROUTING -d 192.168.0.10 -p tcp –dport 25 -j DNAT –to-destination 192.168.122.90:25

Bu işlemleri siz isterseniz GUI ara yüzünden de gerçekleştirebilirsiniz. Tamamen size kalmış bir durum.

Umarım faydalı olmuştur.

İyi çalışmalar.

Umarım faydalı olmuştur.

İyi çalışmalar.

Exit mobile version