3 Ocak 2010 Pazar

Juniper Lab Kurulumu - Qemu ve Olive


Juniper routerlarda kullanılan işletim sistemi olan Junos aslinda linux kernel üzerinde derlenmiş ve özünde FreeBSD olan bir işletim sistemi.
Dolayısı ile routerın control plane ortamını bir PC üzerinde oluşturmak ve bu platform ile Juniper lab kurmak mümkün.
PC'de çalışan Junos'a Olive ismi veriliyor. Olive aslinda bir codename ve Juniper tarafından desteklenmiyor ancak engellenmiyor da :) detaylar icin bu linki inceleyebilirsiniz. Özetle denmiş ki:


Juniper's official position is that Olive does not exist. Considering that Olive is an unsupported and unsupportable platform using "free" (aka illegally licensed) software, this is not an unreasonable official position.

Olive is essentially a hackers platform, with absolutely no support of any kind, and it is not suitable for any type of commercial use. If you are in any doubt, or if you are not able to figure it out, you should invest in a low-cost platform such as J-Series instead.

It is also important to remember that Olive exists because Juniper allows it to exist, and is a testament to the mutual respect between the extremely knowledgeable developer and user bases.

If the Olive platform became widely abused, Juniper could easily add additional software checks to prevent it from working.


Olive PC üzerinde çalışan Junos olduğuna göre, Junos da FreeBSD temeline dayandığına göre FreeBSD çalıştırabilecek bir PC ortamı labın ilk adımları olarak işimizi görecektir. FreeBSD çalıştırmak için 3 yöntem söz konusu:
1- Doğrudan FreeBSD kurmak - Bilgisayarın başka amaçlarla kullanımını engeller.
2- Mevcut işletim sistemi üzerine VMware kurmak ve oluşturulan VM'e (sanal makina) FreeBSD kurmak - VMware ürünü lisanslı ve ücretli bir ürün ayrıca multicast desteği kısıtlı olacağı için kurulan labda ospf,ldp ve diğer multicast gerektirecek senaryolarda problem yaşamak söz konusu.
Multicast desteği için harici yamalar gerekli.
3- Mevcut işletim sistemi üzerine QEMU kurmak ve oluşturulan VM'e (sanal makina) FreeBSD kurmak - Ücretsiz ve en verimli yöntem. Kurulum ve konfigurasyon VMware kadar kolay olmasa da elde edilen sonuçlar çok iyi.

Ben kendi lab ortamımda QEMU kullandım. QEMU için ana işletim sistemi Windows da olabilir Linux da olabilir ancak CPU ve RAM kullanım verimliliği açısından Linux üzerinde QEMU kullanımını tercih ettim ve ana işletim sistemi olarak Ubuntu kurdum. Ancak Qemu kurulum adımı dışındaki tüm adımlar her iki işletim sistemi için de aynı. Kurulum adımındaki fark da windows ve linux'e program kurma farkından ibaret sadece. Bu özet giriş sonrası Ubuntu üzerine Qemu kurulumu ve ardından Qemu üzerine Olive kurulumu ile yazıya devam ediyorum. Farklı platformlar (windows/linux) ve kurulum adımlarındaki karşılaştığınız problemler ile ilgili yorumlarınızı paylaşabilirsiniz.

Ubuntu için Qemu Kurulumu:

İlk olarak Qemu konfigurasyon ve kurulumu için gerekli destek dosyaları (packet dependency) elde edilmeli ve kurulmalıdır.
$sudo apt-get install build-essential
$sudo apt-get build-dep qemu
$sudo apt-get install libpcap-dev

Son sürüm Qemu'nun indirilebilmesi ve derlenebilmesi için de subversion ve gcc yüklü olmalıdır. Tüm linux dağıtımlarında gcc geliyor o nedenle gcc versiyonunun 3.4 ve üstü olmasına dikkat etmek yeterli olacaktır.
$sudo apt-get install gcc-3.4
$sudo apt-get install subversion

Çalışan Qemu performansını arttırmak ve bir PC'de performans sorunu yaşamadan birden fazla Qemu oluşumu çalıştırabilmek için "Qemu Accelerator" olarak adlandırılan KQemu indirilmeli ve kurulmalıdır.
$wget http://www.nongnu.org/qemu/kqemu-1.4.0pre1.tar.gz
$tar zxfv kqemu-1.4.0pre1.tar.gz
$cd kqemu-1.4.0pre1
$./configure
$make
$sudo make install

Yüklenen KQemu linux çekirdeğine (kernel) eklenmelidir.
$sudo modprobe kqemu

En güncel kaynak kodun indirileceği geçici bir klasör oluşturulmalı ve bu klasör içine qemu indirilmelidir (subversion yardımı ile)
$mkdir ~/qemu-lab
$cd ~/qemu-lab
$svn co svn://svn.savannah.nongnu.org/qemu/trunk -r 5193
Daha sonra multicast desteği sağlayacak olan yama linkten siteden indirilmeli ve uygulanmalıdır. (eger ilgili yama siteden elde edilemezse benimle iletişime geçebilirsiniz)
$cd trunk
$wget http://shef.net.ru/misc/qemu-cvs20080910-brb_01-olive.patch
$patch -p1 < qemu-cvs20080910-brb_01-olive.patch

Tüm destek dosyaları kurulumları tamamlandıktan sonra sıra Qemu derleme ve kurulumuna geldi. Default olarak kurulum /usr/local altına yapılıyor. Eğer bu dizini değiştirmek
isterseniz --prefix parametresine kurulumu istediğiniz path'i yazmanız gerekli. Ben /usr/local altında kurulumu yaptım.
$./configure --prefix=/usr/local/ --target-list=i386-softmmu
$make
$make install

Olive yüklemek için FreeBSD platformuna ihtiyaç duyulduğundan bahsetmiştim. FreeBSD platformu yüklediğimiz Qemu ile oluşturacağımız sanal makinaya kurulmalıdır.
Bunun için önce FreeBSD 4.11'i indirmemiz gerekli. FreeBSD versiyonu JunOS'un kernel uyumluluğu için önemli. mini iso dosyasını bu linkten indirebilirsiniz.
$wget ftp://ftp-archive.freebsd.org/pub/FreeBSD-Archive/old-releases/i386/ISO-IMAGES/4.11/4.11-RELEASE-i386-miniinst.iso

Daha sonra 4GB'lık bir disk alanını qemu kullanımı için reserve etmemiz lazım. Reserve ettiğimiz alan Qemu disk image formatında olmalı yani qcow2 (qemu copy on write) formatında.
qemu-img komutu ile olive-base.img adinda 4GB'lık bir disk alanı reserve edeceğiz. olive-base.img daha sonra kullanacağımız yeni router imajları için bir model olacak ve bu sayede her router için 4GB
alan kullanmaktan kurtulacağız. Örneğin 3 router R1.img, R2.img ve R3.img imajlarına sahip olacak ve sadece farklar bu img disklerine (sanal disk) yazılacak, ortak veriler olive-base.img'de yer alıyor olacak.
qemu ile ilgili komutları yürütürken bulunduğunuz dizin ve binarylerin bulunduğu path önemlidir. Hata ile karşılaşırsanız önce path'i kontrol etmenizde fayda var.
$qemu-img create olive-base.img -f qcow2 4G

Oluşturulan disk imajı Qemu ile boot edilmeli, boot ederken daha önceden indirilmiş FreeBSD 4.11 iso dosyasını kullanabiliriz ve bu sayede FreeBSD kurulumunu başlatmış oluruz.
FreeBSD kurulumu için boot edilen sanal makinada 1 adet ethernet interface'i olması yeterli. Bu interface "user" modunda ayarlanırsa NAT sayesinde sanal makinanın ana makina ile
haberleşmesi ve bu sayede yüklenecek JunOS'un sanal makinaya kopyalanması sağlanabilir.
$qemu -m 256 -hda olive-base.img -cdrom 4.11-RELEASE-i386-miniinst.iso -boot d \
-curses -localtime -net nic,macaddr=00:aa:00:00:01:01,model=i82559er -net user
Boot edilen sanal makinamız üzerine FreeBSD kurulumuna başlayabiliriz artık. Ekranda makinanın bootable FreeBSD CDsinden açıldığını görebilirsiniz.
Kurulumu başlatmalı ve default değerlerle FreeBSD Installation Tool menusune kadar ilerlemeliyiz. Bu menuye gelince de Standart kurulum seçeneğini seçerek kurulumu başlatmalıyız.
(Bu aşamada Express kurulum adımı da seçilebilir)


Kurulum başladıktan sonra en önemli ve hatasız yapılması gereken adım disk bölümlendirme adımıdır. Junos diski genel olarak aşağıdaki yapıda kullanır :
ad0s1a / 512M
ad0s1b swap 1024M
ad0s1e /config 100M
ad0s1f /var rest

Kurulum sırasında doğru bölümlendirilmiş disk aşağıdaki gibi gözükecektir (alanların boyutlarını yukarıdaki tabloya göre verebilirsiniz):

Bu tabloyu elde etmek için disk formatlama ve bölümlendirme adımında izlenmesi gereken yol sırası ile aşağıdaki gibidir:

FDISK Parition Editor menusunde tüm diski kullanmak içim A'yı tuşla ve ardından Q'yu tuşlayarak menuden çık.

Boot Manager menusunde "Standard - Install a standard MBR (no boot manager)" seçeneğini seç.

Disklabel Editor menusunde:

1/4: C ile partition oluştur, size bölümüne 512M yaz, FS (File System) bölümünde de system root anlamına gelen / sembolunu gir.

2/4: C ile partition oluştur, size bölümüne 1024M yaz, bu alanı FS değil Swap olarak seç.

3/4: C ile partition oluştur, size bölümüne 100M yaz, FS (File System) bölümünde de /config yaz.

4/4: C ile partition oluştur, size bölümünde kalan disk alanını kullan yaz, FS (File System) bölümünde de /var yaz.

Q ile menuden çık.


Disk formatlama ve bölümlendirme işleminden sonra ethernet interface'i ile ilgili adımda ipv4 konfigurasyonunda DHCP etkinleştirmeliyiz ve sistemin root kullanıcısına şifre atamalıyız.
Diğer tüm seçenekleri "No" ile geçebiliriz.
Daha önce en az bir kere linux kurulumu gerçekleştirmiş birisi için bu adımlar çok hızlı geçecektir. Kurulum tamamlandıktan sonra sanal makina reboot olacaktır, bu aşamada
qemu processini sonlandırabilirsiniz.
$sudo killall qemu

FreeBSD kurulumu tamamlandıktan sonra sıra üzerine Olive kurmaya geldi. Bunun için olive-img diskli makinamızı boot etmemiz gerekli. Bu sefer cdrom'dan degil diskten boot edeceğiz,
diğer parametreler bir önceki ile aynı olacak.
$qemu -m 256 -hda olive-base.img -boot c -localtime -curses \
-net nic,macaddr=00:aa:00:00:01:01,model=i82559er -net user

Sanal makina açıldıktan sonra FreeBSD işletim sistemine root ile login olup daha önceden ana makimanıza kopyaladığımız JunOS'u sanal makina üzerine almalıyız.
(JunOS telif hakkına sahip bir yazılım olduğu için temini konusunda juniper.net sitesinden yararlanmanızı öneririm. )
ifconfig ve netstat -rn komutları yardımı ile makinamızın ip aldığını teyid edebiliriz. Genellikle makina 10.0.2.15 ip adresini alır ve default gateway olarak da 10.0.2.2 adresini kullanır.
10.0.2.2 adresi ana makinanin sanal makinaya bakan adresidir (sanal makina dış dünyaya NAT ile çıkabilmektedir bu durumda). Kopyalama işlemi için scp komutundan yararlanabiliriz.
Burada kullanıcı adı olarak ana makinadaki kullanıcı hesabı kullanılır ve kopyalanacak junos'un pathi verilir.
$scp arda@10.0.2.2:~/Desktop/jinstall-8.3R1.5-domestic-signed.tgz /var/tmp

Artık JunOS sanal makinamızda var ve Olive kurulum öncesi son bir adım kaldı. Juniper yeni JunOS'larda PIC uyumluluk kontrolu yapıyor. Bunu da checkpic isimli bir programcıkla
yapıyor. PC'ye JunOS kurarken de bu programcık sorun çıkartıyor bu nedenle JunOS'u kurmadan önce paketin içindeki bu programcıkı değiştirmemiz gerekmekte. Bunun için yapılması gerekenler paketi aç dosyayı değiştir ve yeniden paketle adımlarından oluşmaktadır. Aşağıdaki şekilde yapılabilir:
$cd /var/tmp
$mkdir jinst-signed
$cd jinst-signed
$tar zxvf ../jinstall-8.3R1.5-domestic-signed.tgz

$mkdir jinst
$cd jinst
$tar zxvf ../jinstall-8.3R1.5-domestic.tgz

$mkdir pkgtools
$cd pkgtools
$tar zxvf ../pkgtools.tgz

$cd bin
$cp /usr/bin/true ./checkpic
$cd ..

$tar zcvf ../pkgtools.tgz *
$cd ..
$rm -rf pkgtools
$tar zcfv /var/tmp/jinstall-8.3R1.5-domestic-olive.tgz *

$md5 -q jinstall-8.3R1.5-domestic-olive.tgz > jinstall-8.3R1.5-domestic-olive.tgz.md5
$openssl sha1 jinstall-8.3R1.5-domestic-olive.tgz > jinstall-8.3R1.5-domestic-olive.tgz.sha1


Bu işlem tamamlandıktan sonra jinstall-8.3R1.5-domestic-olive.tgz Junos PC üzerine yüklenmeye hazırdır yani Olive yüklenmeye hazır durumdadır ve aşağıdaki komut ile Olive yüklemesi tamamlanır.
$pkg_add -f /var/tmp/jinstall-8.3R1.5-domestic-olive.tgz
Yüklemeden sonra "halt" komutu ile sanal makina kapatılır ve qemu programından çıkılır : "sudo killall qemu"


Ve ilk boot...
Labınızı çalıştırmadan önce referans img olarak kullanacaginiz olive-base.img ile yapmanız gereken bir işlem daha var. O da bu img'yi boot etmek.
Sadece boot edip boot işleminden sonra sanal makinayı kapatmanız yeterli olacak. Burada ram seçeneğini bir defaya mahsus yüksek seçmemiz önemli, bundan sonra çalıştıracağımız
routerlarda 96mb ram işimizi görecektir. Junos default olarak görüntüyü ekrana degil serial porta verir (routerlardaki console) biz de olive-base.img ile calıştırdığımız sanal makinanın
serial interfaceini (sanal com port) standart input olarak ekrana vereceğiz. Bu adımdan sonra router imajlarında ekran çıktısını bir tcp portuna yönlendirip reverse telnet ile routerlara
login olacağız.
$qemu -m 256 -hda olive-base.img -boot c -localtime -nographic -serial stdio

Ve sonunda ilk routerımızı çalıştırabiliriz. Beilgisayarımızın performansına göre aynı anda bir çok router da çalıştırabiliriz...

Referans img dosyamızı kullanarak R1 routerını oluşturuyoruz : R1.img adında qcow2 formatında yeni bir disk alanı, ancak bu sefer boyut bildirmiyoruz sadece referans veriyoruz.
$qemu-img create -b olive-base.img -f qcow2 R1.img

ve R1.img boot edilmeye hazır. Bu router'i standalone çalıştırmak için tek bir interface ile boot edip Junos CLI'ina login olabiliriz.
R1 console'u icin 2001. porta reverse telnet yapmamız gerekli. oluşturulan interface şu an hiç bir yere bağlı değil sadece 6000. portu dinliyor (bu aşamada önemli değil)
$qemu R1.img -m 96 -nographic -daemonize -serial telnet::2001,server,nowait -localtime \
-net nic,macaddr=00:aa:00:60:00:01,model=i82559er -net socket,listen=:6000

ve router kullanıma hazır: (router calisirken performans arttırıcı Kqemu'nun çalışırlığını da kontrol etmekte fayda var, bunun için lsmod komutunun aşağıdaki kullanımını inceleyebilirsiniz)
telnet 127.0.0.0 2001


Artık labımız hazır ve JunOS Cli'ini tanımamız için önümüzde bir engel yok...
Takip eden yazılarımda bu lab ile basit topolojiler oluşturmayı göstereceğim ve topolojiler üzerindeki testlerimi paylaşacağım.

2 Ocak 2010 Cumartesi

Netwok mühendislerinin yeni bir dizayn yaparken ya da karşılaştıkları bir problemi analiz ederken, en çok da kişisel gelişimleri için en temel ihtiyacı lab olmuştur. Ben de 2004 senesinden beri sürdürdüğüm Network Mühendisi kariyerimde elimin altında sürekli olarak bir lab bulundurmaya özen gösterdim.

Peki her ihtiyaç duyulduğunda lab kurmak çok maliyetli değil mi, nasıl bir yatırım ile bu temel ihtiyaç aşılabilir? Eskiden evet maliyetliydi ama artık "emulator" yardımı ile gerek Cisco gerekse de Juniper ürünleri kullandığınız kişisel bilgisayarınız kadar size yakın (tabi sadece control plane seviyesinde olduğu için bu cümle ile bir PC'den cisco/juniper oluşturmak ve networkte konumlandırmaktan ziyade bir PC'de cisco/juniper softwarelerini test etmek anlamını çıkartmalı ve softwarelere erişim için legal gereksinimleri unutmamalıyız :) ). IOS'leri (Cisco) dynamips emulatorü ile çalıştırmak, Junos'lari (Juniper) da qemu veya vmware üzerine kurulan Olive ile çalıştırmak artık mümkün. İşi ileriye götürüp farkli vendor/platformlardan bir network oluşturmak ve hepsini tek bir PC'de toplamak da mümkün.

Bu sistemlerin nasıl kurulduğu, lab topoloji örnekleri, benim yaptığım bazı problem analizleri ve feature testlerini ilerleyen yazılarımda paylaşacağım. Bir kısmı daha
önce denediğim şeylerin şimdi yazıya aktarılması olacak dolayısı ile merak ettiklerinizi, kafanıza takılanları, cevabını öğrenmek için beklemek istemediğiniz konuları benimle paylaşırsanız düşündüğüm sıralamada değişiklikler yapabilir veya özelinize tecrübelerimi aktarabilirim.
Blogumda genel olarak mesleğim ile ilgili teknik içerik ve yaşantım ile ilgili paylaşmak istediğim detayları bir arada aktarmaya çalışacağım.
Etiketlemeye değecek kadar çok içerik elde ettikten sonra ziyaretçilerin ilgisini çekebilecek kategoriler oluşturarak yazıları etiketleyeceğim.
Bu da teknik içerik arayanların teknik içeriğe kolayca erişmesini sağlarken ailem ve arkadaşlarımın teknik içerik arasında kaybolmasını engelleyecek (umarım :)).
Belki ileride farkli bir blog açarak içeriği tamamen ayırırım ama henüz ikinci güncellemede buna karar vermek için erken...

1 Aralık 2009 Salı

Garip bir başlangıç... 2009

2009...
Evet 2009'da hayatımda bir çok şeyi değiştirdim. Aslında bunları bütün bir yıla mal etmek yanlış olur çünkü hepsini koca yılın küçük bir zaman dilimine sığdırmayı da başardım.
İş değişikliği yaptım, bu değişikliği çevre değişikliği takip etti, çevre dediğim de yan mahalle, başka semt, en fazla başka şehir değil; kökten değişiklik. Yaşadığım ülkeyi değiştirdim. İstanbul'un en kalabalık köylerinden biri olan yerli Texas Mecidiyeköy'den, İrlanda'ya Dublin'e taşındım. Tabi bu taşınma işin bir gereğiydi.
Bütün bu değişikliği tek başıma kaldıramayacağımı biliyordum, O'nu da bu koşuşturmaya dahil etmem gerekiyordu. Evlenme teklifi, kız isteme, nişan ve evlilik hepsi bir anda bir kaç ay içinde oluverdi... Dönüp baktığımda diyebiliyorum ki ne de güzel olmuş :) Tek başına hızlı bir depar sonrası kesilip yorulmaktansa; birlikte, temponu yanındakine göre ayarlayarak, omuz omuza koşmak hep en güzeli olmamış mıdır ? :)
Bütün bu süreçte hayatımı sürdürürken uzaklaştığım insanlarla paylaşımımı arttırabilmek adına parçası olduğum teknolojiyi kullanmaya karar verdim. Yani sosyal medyanın daha aktif bir kullanıcısı olacaktım. Twitter, friendfeed, facebook ve bloglar ile bağlantıda olduğum insanlara daha rahat ulaşmak ve kendimi unutturmamak için bu blogu açmaya karar verdim. 2009 içinde bir adım daha :) Bu sefer hikaye biraz ters, insanlık için küçük (şimdilik - ehehe) ama benim için büyük bir adım.

Blogun içeriği ve fikirlerimi yeni yayınlarda paylaşacağım. Her şeyi ilk post içinde bitirmek ilk deparda kesilmek olur..

Selamlar..