KVM'de Sanallara Gerçek IP Vermek

By samed, 3 December, 2013

KVM'de sanal makinelerinize iki farkı yolla gerçek IP verebilirsiniz. Bunlardan birisi host makinenin (sanallaştırmanın yapıldığı makine) ilgili ağ arabirimi (network interface, örn: eth0) ve sanal makinenizin ağ kartını aynı köprü (bridge) içerisine almanız. Bu yöntemde sanal makineniz ve host makine aynı switch (ağ anahtarma elemanı) üzerine bağlıymışçasına davranır. Sanal makine doğrudan host makinenin ağ arabirimine gönderir paketlerini ve bulundukları ağ içerisinde sanal makine ve host makinenin MAC (Media Access Control, ağ cihazlarının ikinci seviyede [Layer-2, OSI Katmanları] kullandıkları kimlik/adres) adresleri ayrı ayrı görüntülenir. Bu yöntemde bazı servis sağlayıcılarının (Hetzner gibi) güvenlik nedeniyle porttan yalnızca belirli MAC adresine ait paketlerin gelip gitmesine izin veren access list'ler tanımlamış olması durumunda sanal makineleriniz ağa çıkamazlar. Sanal makinelerinizin MAC adreslerini servis sağayıcısına bildirmeniz ve access list'e ekletmeniz gerekir.

Bir diğer yöntem de host makinenin router (yönlendirici) gibi davranmasını sağlayarak sanal makinelerinizi host makine üzerinden internete çıkartmanızdır. Bu yöntemde host makinenin bağlı olduğu ağda birden fazla IP tek bir MAC adresinde görünür. Bu da yukarıda bahsettiğim gibi durumların oluşmasının önüne geçer. Ek olarak host makinenizi bir firewall (güvenlik duvarı) gibi kullanabilmenize imkan sağlar. Ek olarak makinenin mevcut IP ayarlarına herhangi bir değişikliğe gerek kalmaz.

Bu yazıda host ve istemci makine Centos 6.4-64Bit'tir.

Host Ayarları
Host makinemizin IP adresi (eth0, br0): 5.5.5.2/32
Sanal makinemizin IP adresi (eth0): 5.5.5.3/32

Makinemizin IP ayarlarında hiç bir değişiklik yapmıyoruz ve bridge'mizi (br0) yapılandırıyoruz.

cat /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
TYPE=Bridge
BOOTPROTO=static
IPADDR=5.5.5.2
NETMASK=255.255.255.255
ONBOOT=yes

br0'a ait rota tanımlamalarımızı yapıyoruz.

cat /etc/sysconfig/network-scripts/route-br0
5.5.5.3/32 dev br0

Rota ayarımızıda yaptıktan sonra network'ü yeniden başlatıyoruz.

service network restart

Sanal Ayarları
Sanal makinemizin eth0'ının source device'ını (kaynak aygıt) br0 birdge'sine ayarladıktan sonra sanal makinemizi açıyoruz ve IP ayarlamalarını yapıyoruz.

cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
NAME="System eth0"
IPADDR=5.5.5.3
NETMASK=255.255.255.255
SCOPE="peer 5.5.5.2"

Bu ayarda şu noktaya dikkat etmemiz gerekiyor. Sanal makinemize IP atarken /32 subnet'ini kullandık. Bu sanal makinemizin eth0'da yalnızca kendi IP'sinin var olduğu anlamına gelir. Yani yalnızca kendisinin olduğu, başka hiç bir makinenin bulunmadığı bir uzay. Böyle bir durumda bırakın internete çıkmayı host makineye dahi erişemez.

SCOPE="peer 5.5.5.2"

İşte bu parametre ile biz sanal makinemize 5.5.5.2 IP'sine th0'dan peer-to-peer, yani doğrudan, hiç bir aracı olmaksızın direk bağlı olduğunu belirtiyoruz. Artık sanal makinemiz host makineye erişebilir duruma geldi. Şimdi sırada diğer ağa eriştirmeye geldi.

cat /etc/sysconfig/network-scripts/route-eth0 
ADDRESS0=0.0.0.0                                                                              
NETMASK0=0.0.0.0                                                                              
GATEWAY0=5.5.5.2

Son olarak da doğrudan erişemediğin bütün IP adreslerine 5.5.5.2 IP'si üzerinden eriş diyoruz. Son olarak da network'ü yeniden başlatıyoruz.

service network restart

Artık sanalımız 5.5.5.3 IP'si ile ağa çıkabilir olmuştur. Aynı şekilde bu sanala da ağın içinden ve dışından bu IP üzerinden erişilebilir.