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.