4 Eylül 2015 Cuma

Kendin-yap Osiloskop


Bu yazımın konusu, daha önce bahsettiğim kendin yap (DIY) osiloskop kiti. Türkiye'de bulunuyor mu bilmiyorum, ben yurtdışından getirttim. Kitin bağlantısı şöyle:

http://www.dx.com/p/diy-dso138-digital-oscilloscope-kit-electronic-learning-kit-black-red-383995

Özellikleri kısaca:
- 12 bit ADC
- 200Khz'ye kadar bant genişliği
- 0.01/0.1/1V skala; 1x,2x,5x çarpan. Toplamda 10mV'tan 5V'a kadar
- Tek sinyal girişi
- AC/DC ve GND modları
- 2.4 inç TFT LCD (320 X 240 dotmatrix, 262K renk)

Cihazın ayrıntılı özellikleri sayfasında da var. Bu özellikler masaüstü modellerin yanından bile geçmese de yeni başlamak ve osiloskop çalışma prensiplerini kavramak için bence yeterli. Ve elbette masaüstü modellerin fiyatları da bu cihazın fiyatının yanından geçemez. Parantez arasında masaüstü modeller hala son kullanıcı için fiyat ve özellikleri bakımından lüks ama USB bağlantılı modeller bence osiloskopları son kullanıcı seviyesine indirdiler. USB osiloskoplarda yalnız sinyal toplama ve ADC katları bulunuyor. Geri kalan, sinyallerin depolanması ve en önemlisi ekranda gösterilmesi gibi işler bilgisayarla hallediliyor. Bu cihazların ekranı ve belleği olmadığından ucuzlar ama ADC'leri ve örnekleme hızları masaüstü cihazlara göre yavaş kalıyor.

Benim sözünü edeceğim kitin üreticisi JYE Tech adında bir Çin firması. Sayfasında hazır osiloskop modelleri ve başka kendin-yap kitler bulunuyor. Benim anlatacağım bu kitlerin en gelişmişi gibi görünen DSO-138 modeli olacak.

Paketin içeriği
Öncelikle gelen paketin içeriği sipariş ettiğim diğer paketlere göre bir hayli iyiydi. Parça sayısı çok ve çıkan belgeler hem zengin hem de anlaşılır. Fotoğraftaki kullanıcı kılavuzunda parçaların listesi ve yanında lehimledikçe işaretlemek için kutucuklar var. Bu belgelere http://www.jyetech.com/Products/LcdScope/UserManual_138.pdf adresinden  ulaşılabilir. Kullanım kılavuzunun son sayfasında tüm devre katlarının şeması verilmiş. Şema sayesinde lehimleme yada çalışma sırasında bir hata oluşmuşsa bunu bulmak ve onarmak kolay hale geliyor. Kiti ilk sipariş ettiğimde SMD elemanların olduğunu bilmiyordum. Daha doğrusu sitede yazmıyordu. İlk farkettiğimde gözüm korktu ama sonradan çok da korkutucu olmadığını farkettim. Bu kullanım kılavuzunun dışında bir tane de SMD elemanların bir listesi geliyor: http://www.jyetech.com/Products/LcdScope/DSO138_SMD_Assembly.pdf  Fotoğrafta baskı devreye lehimli tek bir eleman görünüyor, yukarıdaki SMD eleman listesinde de pre-soldered olarak geçiyor. Bu eleman Cortex-M3 ARM mikrodenetleyici (STM32F103C8). JYE Tech'in kendi deyimiyle osiloskobun kalbi. Osiloskobun firmware'i burada yüklü olarak geliyor. Kodu derlemeye veya yüklemeye gerek yok ama göz atmak isteyenler için osiloskobun kaynak kodu da ürünün JYE Tech'teki sayfasında var. SMD parça listesinin ayrı olmasının nedeni, aynı ürünün tüm SMD elemanları önceden lehimlenmiş olarak satıldığı başka bir modelinin daha olması.

SKU: 13803K -- One DSO138 kit with all SMD parts pre-soldered
SKU: 13804K -- One DSO138 kit with only the major IC chip (the MCU) pre-soldered

Benim bahsedeceğim ürün ikincisi.

Ürünün kullanım kılavuzunda gerekli aletler olarak 20W havya, lehim teli, multimetre, tornavida, yan keski ve cımbız sayılmış. Ben buna bir de lehim pompasını ekliyorum. Benim kullandığım cihazlar ve çalışma ortamı aşağıda:
Çalışma ortamı

Kullanım kılavuzundaki sırayı takip ederek öncelikli THT dirençleri lehimlemekle başladım. Bu arada fotoğrafta görüleceği gibi lehimlemek için boş bir kabın kenarını kullanıyorum. Mengene de vardı ama çok fazla parça yokken bu benim kolayıma geliyor.


Her ne kadar THT dirençleri lehimlemek kolay desem de ben yine arada bazı yerlerde soğuk lehim yapmış bulundum.

Baskı devre çift taraflı. Delikler baskı devrenin her iki yönüne pad'ler koyulup bırakılmamış; içleri de kaplanmış. Bu nedenle devre elemanlarını tek bir yüzden lehimlemek yeterli. Lehim bir yüzeyden delik boyunca diğer yüzeye akıyor. Hatta kullandıkları malzeme neyse çok kaliteli. Lehim yapmayı keyifli hale getiriyor. Ancak asıl sorun dirençlerin soğuk lehimlenmesi değildi. Yandaki fotoğraftan da gayet net görülebilir ki SMD elemanlar lehimlenirken adeta acı çektiler, adeta can çekiştiler. R23 ve R20 bir bacağında çok fazla lehim var, çünkü bunlarda 1.5mm'lik lehim telinden küçük bir parça kesmeye çalışıp kesemedim. Kesilen parça fazla geldi. Diğer bacakları soğuk lehim ve yamuk duruyorlar çünkü cımbızım da normal cımbızdı ve devre elemanları için ucu çok büyük kaldı. R17'nin durumu daha da içler acısı. Fotoğrafta belli değil ama lehim tutmadı diye tekrar tekrar söküp takarken yanlışlıkla bakır yolu plakadan kaldırdım. En son bir daha denemeyip olduğu biri bırakmaya karar verdim. Devre şemasından değerine ve direncin bağlantılı olduğu elemanlara baktım. Multimetre ile deneyip doğru direnç değerini okuyunca yeterince doğru olduğuna kanaat getirip olduğu gibi bıraktım.

Bu durum beni SMD lehimleme işinden soğuttu. O hafta sonu baskı devreyi olduğu gibi bırakıp çalışmaya ara verdim. Ertesi haftasonu Yazıcıoğlu'ndan kendime bu iş için yeni oyuncaklar aldım:

Sırayla; ince 0.5mm lehim teli, 0.6mm'lik lehim topu, flux, ince uçlu cımbız ve lehim sehpası. Kullanışlılık açısından, ince lehim telini almam yararlı oldu. SMD'lerin yanısıra bacakları birbirine çok yakın 20 pinli konnektörü lehimlerken işime yaradı. Flux'u yalnızca SMD entegre lehimlerken kullandım. Dirençleri lehimlerken olmasa da olabilir ama entegre için en azından benim için olmazsa olmaz. Cımbızın da olması iyi oldu. Olmasaydı işler çok daha zor olurdu. Bu fotoğraftaki en gereksiz birinci parça lehim sehpası ki aslında ben böyle birşeyi ne zamandır almak istiyordum. Hazır bu kadar parçayı almışken sehpayı da alayım dedim ama boş kap üzerinde de lehimlesem olurmuş. Benim açımdan fazla farkettirmedi. Lehim toplarıyla elbette BGA entegre lehimlemedim ama lehim telinden parça kesip lehim yapmaktansa bu toplardan iki tanesini pad'e koyup havyanın ucunu değdirdim. Sonuç çok iyi oldu.

Bunları aldıktan sonra devreyi kurmaya geri döndüm. Yukarıda da baskı devrenin oldukça kaliteli olduğunu söylemiştim. Aşağıdaki fotoğrafta yakın çekimden hem delikler ve deliklerin iç kaplaması hem de lehimler görünüyor. Lehimlerin bazılarının gerçekten kötü olduğunun farkındayım.

Lehim Yüzeyi

Devre elemanlarının bulunduğu yüzey
Yandaki fotoğrafta başta sözünü ettiğim, osiloskobun kalbini oluşturan ve baskı devreye lehimli olarak gelen ARM işlemcinin yakın çekim görüntüsü hem de lehimleme sırasında altta kalan tarafa (parçaların bulunduğu ön yüzeye) akan lehimin görüntüsü var. R28, R38, R40 ve L4 fena değil. SMD'lerden R29 ve R30 da fena değil. Yalnız maalesef görüntü biraz bulanık. Burada henüz yalnızca pasif elemanların lehimlemesini tamamladım. Buraya kadar zaten çok fazla sorun olmadı.
Yandaki fotoğrafta baskı devrenin tümü daha net bir şekilde görülebiliyor. Dikkatle bakılırsa baskı devrede üst sırada AV+, AV-, 3.3V, 5V pad'leri; alt sırada V1, V2, V3, TLVL, biraz yanında VBus, D+, D- vb. ve biraz daha sağda OSC gibi pad'ler var. Tahmin edileceği üzere bu pad'ler çalışma sırasında referans gerilim değerlerini okumak için. Kullanım kılavuzunda doğru çalışmada pinlerin üzerinde olması gereken gerilim değerleri ve bu pinlerden hangisinde sorun varsa hangi devre katının doğru çalışmadığını gösteren ufak bir akış şeması var. Bu da devrede bir sorun varsa ayrıca kolaylık sağlıyor. Bu fotoğrafta SMD elemanlara bakınca R32 ve R33'te lehim fazlam olmuş. Bir de bir uyarı yapmakta yarar var. Lehimlerken sıcaktan etkilenmesinler diye transistörerin (aslında iki TO-92 paketli transistör ile iki tane de TO-92 paketli regülatör. Halbuki bunların TO-220 paketlileri de var. Onlardan olsa karışmazdı.) bacaklarını elimden geldiğince uzun tutmaya çalıştım. Fakat LCD ekran son adımda bunların üzerine oturuyor. Transistörler uzun kalınca LCD baskı devresinin düzgün oturmasına engel oldu. Transistörleri biraz büküp iyi kötü oturttum ama bununla uğraşmamak için en baştan transistörlerin bacaklarını kısa tutmakta yarar var.

Transistör görünümlü regülatörler

Bu adımdan sonra zurnanın zırt dediği yere geldim. Daha önce başka bir devrede SMD transistör yaktığımdan dolayı entegreyi nasıl lehimlerin diye bir hayli düşünüyordum. En kötü olasılıkla aynı entegreden 4-5 tane daha alıp bozulmadan lehimlenene kadar denemeyi düşündüm. Bu adımda, izlediğim videolardan görüp anladığım kadarını uygulamaya karar verdim. Önce entegrenin birinci bacağını (aslında hangisi olduğunun bir önemi yok. Köşesindeki herhangi bir bacağını) flux'ladım ve çok az bir lehimle entegreyi yerine idareten sabitledim. Sonra entegrenin bir sıradaki geri kalan bacaklarını flux'ladım ve bacak başına 2-2.5 top düşecek kadar lehim topu koydum. Bunu yapmamdaki amaç bir elle havyayı tutarken diğer elimle cımbızı tutabilmek böylelikle lehimlerken telle uğraşmadan zamandan kazanmaktı. Bu arada fotoğrafı çektiğimde arka sırada kalan bacakları bu şekilde lehimlemiştim. Ön tarafı lehimlerken aynı tekniği kullandım. İlk sıra çok güzel ve sorunsuz lehimlendi. Tam ben bu işi yaparım derken ön sıradaki iki bacak arasında köprü oluştu. Havyayla aralarını ayırdımsa da düzelmedi. Havyanın ucunu temizleyip tekrar denedim yine olmadı. İkinci denemeden sonra entegreden zaten umudu kesmiştim. Aradaki fazla lehimi pompayla temizledim. Son defa çok az ince telle tekrar lehimledim. Sonuç aşağıda fotoğraftaki gibiydi.
Biraz lehim fazlası var ama fena değil.

Eğer en sonunda hiçbir şey çalışmazsa sorumlusu entegredir diyip lehimlemeye kaldığım parçadan devam ettim. Öte yandan entegre aslında tüm girişlere bağlı bir Op-Amp paketi ve eğer bozulursa dijital kısım doğru çalışır ama girişlerde sorun olduğundan giriş sinyali işlenemez (en azından bazı durumlar için. Örn. X5 için çalışmaz ama X2 için çalışır vb). Benzer şekilde flux sürüp topları üzerine yerleştirerek diğer entegreyi de (U3 - LM 1117) lehimledim.

Aşağıda soldaki fotoğraf bütün lehimlemeler bitip sıra LCD ekranı takmaya geldiğinde baskı devreyi gösteriyor. Transistörlerden dolayı LCD ekran tam oturmasa da en azından sinyalleri alacak kadar oturdu. Fakat kullanım kılavuzunun ikinci bölümünde ikinci madde gözümden kaçmış: "If voltage at TP22 is good disconnect power. Short JP4 with solder permanently". İlk başta LCD'de görüntü gelmediğinde kendi hatama bağlamıştım ama durum farklıymış. Herneyse JP4'ü kısa devre yaptım.
LCD ekran takılmaya hazır
Bunu yaptıktan sonra ekran görüntüsü yine gelmedi. Kullanım kılavuzundaki akış diyagramında herşey doğruydu. En sondaki "Check LCD board" adımına kadar geldim. Devre kartının oturmasında sorun yoktu. Bu arada sol taraftaki ikili iki konektör yalnız LCD ekranı sabitlemek için. Bu nedenle onlardan çıkması pahasına sağ tarafını konektöre daha iyi oturttumsa da sonuç alamadım. Devre şemasından tek tek konektörün hangi pini nereye bağlı takip ederek bağlantıların hangisine sinyal gelmediğini anlamaya çalıştım ama hiç hata bulamadım. Sonunda bütün konektör pinlerinin lehimlerini soğuk lehim olasılığına karşı tekrar lehimledim. Bir yandan da sorunu gidermek için internette araştırırken JYE Tech'in kullanıcı forumu olduğunu farkettim. http://www.jyetech.com/forum

Booting...
Forumdan arattığım kadarıyla da sorunun LCD'nin sinyallemesinde olduğu yazıyordu. Lehimleri yeniledikten sonra bir şekilde çalıştı ve "Booting..." yazan ekran geldi. Bu ekrandan kısa bir zaman sonra da osiloskobun alışıldık ekranı geldi.


Bu arada araştırırken veya denerken öğrendiğim bir kaç şey oldu. Bunlardan biri, yeşil LED sanıyorum osiloskobun tetikleme mekanizması bağlı. Kare dalga vb. bağlandığı zaman frekansla uyumlu olarak yanıp sönmeye başlıyor. Elle tutulunca da benzer davranışlar sergiliyor. İkincisi, forumda firmware güncellemesi yapılabileceğinden bahsediliyor. Yalnız, baskı devrenin alt kenarındaki USB konektörden hareketle bilgisayara bağlanarak yapılıyor gibi görünse de dökümanda konektörün hemen sağındaki seri port pinlerinin kullanılmasından bahsediliyor. Buna ek olarak forumda USB portla ilgili şu açıklama var: "USB port şu anda çalışmamaktadır. Gelecekteki firmware güncellemeleriyle kullanılması düşünülmekte yada kullanıcıların kendi amaçları doğrultusunda kullanmaları için eklenmiştir.". Uzun lafın kısası cihaz henüz ekran görüntüsünü bilgisayara vermekten uzak. Elbette ki kaynak kodları açık olduğundan yapılamaz değil. Zamanım olsa kendi uğraşmak isterdim.

Kurulumu tamamladıktan sonra osiloskopla bir kaç deneme yapmak istedim. Birinci olarak aletin kendi 1 Khz kalibrasyon osilatörünü girişe bağlayıp ekran için uygun ayarlamayı seçtiğimde herşeyin gayet iyi çalıştığını gördüm. Sinyalin üst ve alt uçlarındaki titreşimler fazlaysa bunları kırpmak için soldaki trimmerleri kullanın diyor ama ben uygun tornavida bulamadığım için o anda ayarlayamadım. Bir de başka bir sinyal üretici olarak flip-flop tabanlı bir yürüyen ışık devresini kullandım. Bu devrede de sayacı (counter) tetikleyen flip-flop katındaki dolma/boşalma fazları osiloskobun ekranından kolayca izlenebiliyor. Sinyal giriş katında sorun olmaması yani SMD entegrenin lehimlerken yanmamış olması entegrenin sıcaklığa çok hassas olmamasından kaynaklandığını düşündürüyor ama bundan çok da emin değilim.


Böylelikle osiloskop çalışabilir duruma geldi.

Bu cihazı internette bulmadan önce kendime, kurduğum radyo devrelerini denemek için alabileceğim bir USB osiloskop bakmaktaydım. Bu cihaz elbette radyo devrelerini incelemek için yetersiz kalıyor ancak en başta belirttiğim gibi ilk öğrenme ve kurcalama amaçlı olarak çok pahalı değil ve bunun yanında işlevsel bir cihaz.

4 Temmuz 2015 Cumartesi

SMD Devre Elemanları ve SMD Lehimlemeye Giriş


En son yazıda sözünü ettiğim osiloskobum geldi. Devrede SMD elemanlar kullanıldığından giriş olarak bu yazıda ağırlıklı SMD (yada SMT) elemanlardan bahsedip bunları lehimlemeyle ilgili öğrendiklerimi paylaşacağım. Baştan söylemeliyim ki SMD lehimlemeyi ben de yeni öğrendiğimden burada anlatacaklarım, "bu böyle yapılır"dan daha çok "ben böyle yaptım" şeklinde olacak. Yazı iki parça olacak. Osiloskopla ilgili asıl kısmı ikinci bölümde anlatmayı düşünüyorum. 

Öncelikle nedir bu SMD?
SMD, Surface Mount Device'in kısaltmasıdır. Kısaltma SMT olarak geçiyorsa, Surface Mount Technology anlamına gelir. Yandaki fotoğrafta sol üstteki kondansatör dışındaki elemanlar SMD elemanlardır. Eski tür elemanlar baskı devreyi delmeyi gerektirdiğinden Through Hole Technology olarak adlandırılır. SMT demek daha doğru ama ben ilk öğrendiğimde SMD olarak öğrendiğim için maalesef o şekilde kaldı. 

SMD elemanların delmeli elemanlara göre bir çok avantajı var. Her iki tarafta delik gerekmediğinden çift taraflı yada katmanlı baskı devrelerde yolları deliklerin çevresinden geçirmeye gerek kalmıyor. Delik sayısı azaldığından üretim süreci kolaylaşıyor. Ve en önemlisi daha küçükler. Böylelikle baskı devrede birim alandaki eleman sayısı arttırılıyor. 

SMT'leri baskı devreye lehimlemek biraz ustalık gerektiriyor. SMT'yle ilgili bir belgeyi bir kaç yıl önce MEGEP'ten (Meslek Lise'leri için eğitim belgeleri) indirip okumuştum. Belgeye ulaşmak için Modüller -> Bilişim Teknolojileri -> Elektronik Uygulamaları altında "SMD Elemanlar ve Çipsetler" bağlantısı yada doğrudan bağlantı kullanılabilir. Bu belgede oldukça detaylı bir anlatım var. Cımbız havyalardan ve çipset lehimlemek için olan dörtgen uçlara kadar bahsediyor. Ama evde sürekli SMD'lerle uğraşmadıkça yada cep telefonu tamir etmiyorsak evde bu kadar ayrıntılı parçalara sahip olmak biraz fazla kaçıyor. Ben bu belgede bahsedilen devreyi baskı devre üzerinde çizip normal lehim havyası ve teliyle lehimleyerek öğrenmeye çalıştım. Aynı devrenin hem THT hem de SMT olarak kurdum ama SMT'de transistörü lehimlerken yaktığımdan çalıştıramadım. THT olan çok da güzel çalışıyor. Uzun lafın kısası belgedeki aletler gözünüzü korkutmasın, normal lehim aletleriyle de birçok şey yapılabiliyor.


THT baskı devre
Baskı devrelerin çizimleri yanda. Elimden geldiği kadar parçaların ne olduklarını yazmaya çalıştım. Ancak hepsini yazınca çok karışık olacaktı. Zaten devrede az eleman var ve şeması da MEGEP'teki belgede bulunduğundan baskı devredeki eksikleri çıkarmak kolay olacaktır. Çizimlerin yanında milimetre cinsinden ölçülerini verdim. İlkinin SMT ile ilgisi olmadığından çok üzerinde durmayacağım. SMT olanını lehimlerken iki farklı teknikten yararlandım. Biri, belgede de anlatılan, "pad'e bir miktar lehim bırak, cımbızla sabitleyip havyayla bastır" tekniği. Diğeri de "lehim telinden çok ufak bir parça kes parçanın bacağına koy, havyayı değdir" tekniği. Lehim teli 1.5mm kalın olunca bazı parçalar için, kesilen ne kadar küçük bir parça olsa da lehim fazla kaçabiliyor. SMD lehimlemek için 0.5mm incelikte lehim telleri satılıyor. Hatta bunlardan bazılarının içinde fluks da olabiliyor. İlk defasında lehim için normal cımbız kullandım ama bunu normalde yapmamak gerek. Birincisi normal cımbız, SMD eleman için büyük kalıyor. İkinci olarak cımbız iletken olduğundan vücuttaki statik elektriği parçaya iletiyor. Pasif elemanlarda belki sorun olmaz ama aktif elemanlarda olacaktır. Özellikle entegre boyutları da küçüldüğünden elektrostatik yüke daha hassas olabiliyorlar. Lehimlemek için kendi 40W havyamı kullandım ama havya ucunun çok temiz olması gerekli. Ucu kütleşmişse değiştirmek yerinde olur. Ben havya ucunu temizlemek için hem bakır tel hem de sünger kullanıyorum. THT'leri lehimlerken 3-4 elemanda bir kere temizleme ihtiyacı hissederken SMD'ler için bu her bacakta yada her iki bacakta bir kereye kadar inebiliyor.

Basit parçaları lehimlemek için fazla alete ihtiyaç yok ama elbette bunlarla yapılacaklar sınırlı. Bir de aletlere ne kadar yatırım yaparsanız elinizden çıkan iş o kadar pratik ve güzel olur. Normal havya ile de SOIC lehimlemek olanaklı ama çok fazla bacağı olan bir entegre için sıcak hava ve krem lehimin sağladığı kolaylık inanılmaz olabilir. Veya fluksu kavanozdan alıp fırçayla uygulamak yerine ikinci videodaki gibi bir kalem kullanmak yine büyük kolaylık sağlar. Fluks denen madde bildiğimiz lehim pastası gibi lehim yaparken özellikle de bacakları biribirine çok yakın elemanları lehimlerken sürülürse sıcak lehimin bakırı ıslatıp ona tutunmasını arttırıyor. Bir yandan da bakırsız boş plaket üzerinde lehim kolaylıkla tutunamıyor. Entegreleri lehimlerken köprü oluşaması için fluks kullanımı gerekli. Belki bu ifade biraz hatalı, fluks kullanmadan da entegre lehimlenebilir ama kullanılırsa hata yapma olasılık bir hayli azalıyor. Krem lehimse fluks ve lehim tozunun karışımı. İkinci videoda görüleceği üzere lehim yapana büyük kolaylık sağlıyor. 

Son olarak bir de BGA'lardan (Ball grid array) ve lehim toplarından bahsedeceğim. BGA entegrelerin bacaklarında bakır teller yerine altında bakır oyuklar bulunur. Eski Pentium'ların bacaklarının kesilmişine benzer. Baskı devreye lehimleneceği yerlerde de yalnızca pad'ler bulunur. Wikipedia'daki fotoğraf oldukça açıklayıcı. Bunlar baskı devreye lehimlenirken eğer bacaklarda lehim topları bulunmuyorsa dışarda satılan lehim topları pad'lere dizilir. Piyasada BGA'lar için özel çıkarılmış bacak şablonları da bulunuyor. Daha sonra entegre altından sıcak hava tabancasıyla ısıtılır veya fırına sokulur. Toplar eriyip alt taraftaki pad'lerle birleşir. 

Bütün bu süreçle ilgili şu video biraz uzun ama açıklayıcı. Bu videoda önce entegrenin lehimlenecek tarafına fluks sürülüp sonra lehim temizleme fitiliyle eski lehimleri temizleniyor. Sonrasında tel lehimle bacakların üzerinden geçerek uçları bir miktar lehimle kaplanıyor. Aynı işlem baskı devre için tekrarlandıktan sonra beşinci dakikada bacak şablonu yerleştiriliyor. Sonrasında lehim topları dökülüp şablona oturtuluyor. Sıcak hava uygulanarak topların bacaklara yapışması sağlanıyor. Son olarak entegre anakart üzerine konup üzerinden tekrar sıcak hava uygulandığında alttaki toplar eriyip entegreyi anakarta yapıştırıyorlar. Videonun geri kalanında lehimlemeyle ilgili başka birşey bulunmuyor. 

SMD lehimlemede ustalaşmak için izlediğim yol, öncelikle video izleyerek ustalarının bu işi nasıl yaptıklarını incelemek oldu. Sonra ufak ve basit devrelerle, SMD elemanları kendim lehimlemeye çalışarak teoriden pratiğe geçtim. Bu arada pratik için yine DealExtreme reklamı yapacağım ama SMD lehim uygulama kiti adıyla SMD parçaları ve boş plaketi satıyorlar. İlk önce bununla çalışmak da yararlı olabilir. Ve bu konuda hala çok başarılı değilim. Bir sonraki yazıda anlatacağım osiloskop devresi de aslında pratik yaparak kendimi geliştirmeye çalıştığım başka bir devre oldu.

15 Mayıs 2015 Cuma

GNS3te Cisco Router ile Statik NAT Ayarları


Bu yazıyı yazma fikri çok anlık gelişti. Bugün ofiste otururken neden olmasın dedim, eve gelip senaryoyu hazırladım, makinaları kurup ayarları yaptım. 23:50'de yazmaya oturdum. Konu ne?

Önce NAT'ın (ve daha özelde PAT'ın) ne olduğuna değineyim. Elinizde özel (private) IP bloklarından bir ağ vardır. Nedir bunlar? 10.0.0.0/8, 172.16.0.0/12 veya 192.168.0.0/16. Bunlardan internete çıkmak istiyorsunuzdur. Yönlendirici (router) bu paketleri alır, kendinden çıkıyor gibi gösterir. Dönen cevabı da alıp iç ağdaki makinaya yönlendirir. Nasılına değinmeyeceğim, merak eden okuyucu Wiki'deki NAT maddesini okuyabilir. Hemen her ADSL veya Kablonet kullanıcısı farkında olsun olmasın NAT'ı kullanmaktadır.

Cisco cihazlarda 3 tür NAT bulunuyor (en azından benim bildiğim). Statik, dinamik ve Cisco'nun overload da dediği PAT (Port Address Translation). Kolay anlaşılabilir olması için örnekleri internete çıkmak üzerinden vereceğim ama kuracağım senaryoda tamamen özel IP'leri kullanacağım. Statik ve dinamik NAT için elimizde birden fazla internete çıkabilir (public) IP olması gerekiyor. Statik NAT'ta iç ağdaki her cihaza sabit bir dış IP karşılık geliyor. Örneğin servis sağlayıcılar bunu sunucularını korumak için kullanıyorlar. Sunucunun internetteki IP'si aslında bir firewall yada yönlendiricinin bacağıdır ve bunlar dışarıdan gelen kötü niyetli istekleri bloklayacak şekilde ayarlanmıştır. Dinamik NAT'ta tek fark iç ağdaki cihazların bir dış IP'lerinin sabit olmamasıdır. Yönlendirici, cihaz açılırken ayarlarda belirlenmiş bir dinamik NAT IP havuzundan sıradaki ilk IP'yi verir. Son olarak PAT'da dışa açılan tek bir IP vardır. İç ağdaki makinalar ağ geçidinin (gateway) farklı portlarından internete erişir. Örneğin iç makina 192.168.144.12 olsun ve 43210/tcp'den dışarıdaki bir sunucuya (mesela google) http isteği göndersin. Dışarıdaki IP (servis sağlayıcının atadığı) 120.130.140.150 olsun. İnternette dolaşan trafik 120.130.140.150'nin herhangi bir tcp portundan çıkıyor olabilir. Ağ geçidi o anda boş bulunan herhangi bir portundan trafiği çıkarabilir. Sıradan ev internet kullanıcısının kendi yerel ağından internete çıkarken PAT'dan yararlanır.

Benim senaryom iç ağda farklı bir VLAN'daki sunucuları başka bir ağa sanki standart VLAN'dan gelen trafikmiş gibi göstermek. Kullanacağım araçlar GNS3 (GNU Network Simulator-3), Oracle VirtualBox ve PuTTY. GNS3 başlı başına gelişkin ve bir çok bileşeni olan bir paket. http://www.gns3.com/ adresinden bulunabilecek bu yazılımda DynaMIPS, Qemu hypervisor'leri geliyor. Ayrıca Wireshark ve VirtualBox ile birlikte çalışabiliyor. DynaMIPS, Cisco cihazların IOS kalıp dosyalarını çalıştırarak sanal yönlendirici çalıştırmaya olanak sağlıyor. Wireshark'ı cihazlar arası bağlantılar üzerinde çalıştırarak gidip gelen paketler gözlemlenebiliyor ve VirtualBox ile oluşturulan sanal makinalar bu yönlendiricilere bağlanarak uç cihazlar oluşturuluyor. Wireshark ve VirtualBox GNS3 kurulumunda seçimlik. Ben, VirtualBox'ı kullanacağım.

GNS'in en son sanırım 1.2 sürümü çıkmıştı. Bende 0.8.6 sürümünü var ve yazıda bunu kullanacağım. Son sürümde bir çok şey değişmiş geldi, gözümü korkuttuğundan yeni sürüme geçmedim. GNS3'ün kurulumu, ayarları ve Cisco IOS kalıp dosyası atılması ayrı bir yazı konusu olabilir. O nedenle onu buraya sıkıştırmayacağım. Youtube'da bu konuyla ilgili bir çok video var (örneğin #1 yada #2).

Herşeyden önce VirtualBox'ta aşağıdaki gibi 3 tane "Host-Only" ağ oluşturdum. Bunlara sırayla 192.168.24.0/24, 192.168.25.0/24, 192.168.26.0/24 IP'lerini verdim. Bunun benzerini bir önceki yazıda VMware için de yapmıştım, okuyan varsa hatırlayacaktır. 

VirtualBox'da ağ oluşturma

Sonra bu ağlarda kullanmak üzere VirtualBox'ta 'Mazhar' adında bir sanal makina oluşturdum. Donanımda standart olmayan tek şey sanal makinanın iki ağ kartının olması. İlkini GNS3 kullanıyor. Onu NAT olarak bıraktım, ikincisini Host-Only#1 ağında olacak şekilde ayarlayıp üzerine CentOS6.6 minimal kurdum. eth0, IP'yi DHCP'den alıyor, eth1'e elle aşağıdaki ayarları girdim.

IPADDR=192.168.24.101
NETMASK=255.255.255.0
#GATEWAY=192.168.24.2

Ayarlar /eth/sysconfig/network-scripts/ifcfg-ethX dosyalarına girilecek. Ayrıca UUID ve HWADDR ile başlayan satırları silip ONBOOT=yes yapmakta yarar var.

Gerekli değil ama makinaya VirtualBox additions paketi kurulacaksa aşağıdaki adımları izlemek gerekiyor:

yum install kernel-firmware kernel-devel gcc perl
yum -y update
reboot
[ Sanal makina penceresinde Devices-> Insert Guest Additions ... seçilir. ]
mount /dev/sr0 /mnt
cp /mnt/VBoxLinuxAdditions.run .
./VBoxLinuxAdditions.run
reboot

Sonra bu makinadan 3 tane klon çıkardım. Adları sırayla Osman, Rustem ve Server.  İkinci ağ kartları Osman Host-Only#1'de, Rustem Host-Only#2'de ve Server Host-Only#3'te. Bütün makinaları açıp şu ayarları yaptım:
  1. Kartların numaralandırması /etc/udev/rules.d/70-persistent-net.rules dosyasından yapılır (Mazhar'ın MAC'ine ait girdiler silinebilir yada tüm girdiler silinip açılışta yeniden oluşması beklenir).
  2. /etc/sysconfig/network dosyasında doğru hostname'ler girilir.
  3. /etc/sysconfig/network-scripts/ifcfg-eth1 dosyasında IP'ler girilir. Osman için 192.168.24.101, Rustem için 192.168.25.101 ve GATEWAY=192.168.25.2 (başındaki # kalsın). Server için 192.168.26.101 ve GATEWAY=192.168.26.2 (başındaki # kalsın).
Server'de ek olarak apache ve php kurulumu şöyle yapılacak:
yum -y install httpd php
chkconfig httpd on

Ve /var/www/html/index.php dosyasının içeriği şöyle olsun:
<?php
$ip = getenv("REMOTE_ADDR") ;
Echo "Your IP is " . $ip;
?>

Bu betiği internette buldum. Böylece VirtualBox'ta ayarlar tamamlandı. Bütün makinaları kapatıp GNS3'e geçiyorum.


Şebekenin Topolojisi
GNS3'te yan görüntüdeki ağı kurdum. Kullandığım cihazlar; iki c7600 yönlendirici, iki switch ve önceden oluşturduğum 4 tane sanal makina. Sanal makinaları GNS3 içinde kullanmak için GNS3'e tanıtılmaları gerekiyor. Edit -> Preferences -> VirtualBox penceresinin VirtualBox Guest sekmesinde VMList'ten sanal makinalar seçilip GNS3'e import edilir. Nasıl yapılacağına dair yine youtube'da video var. Bu işlemden sonra sanal makinalar ağa eklenebilir duruma gelir (solda üstten üçüncü simge). Switch'lerde standart ethernet switch kullandım. SW2'de herhangi bir port ayarı yok. SW1'deki port ayarları aşağıdaki gibi: 

Switch SW1 port ayarları
Yönlendiricide modül ayarları
Son olarak yönlendiricileri ağa ekledim. Yönlendiricilerin üzerinde GNS3'te herhangi bir bağlantı modülü (bakır, fiber, seri vb.) gelmiyor. Bunlar grafik arayüzden elle eklenmelidir. Yandaki görüntüde kendi seçtiğim modülleri gösterdim. Modüller eklenip bağlantılar yapılınca (bağlantılar için sol sütun en alt simge) sıra sanal makinaları açıp yönlendiricilerdeki ayarları girmeye geliyor. Önce GNS3'te sanal makinalara sağ tıklayıp Start dedim. Makinalar açıldıklarında "default gateway" eth0 olacak. Her makinanın ifcfg-eth1 dosyasında GATEWAY ifadesinin başındaki # işaretini kaldırıp service network restart komutuyla ağı yeniden başlatıyorum. Böylelikle artık "default gateway" eth1 arabirimi oldu. 

Buraya kadar olan kısımda aslında hiçbirşey yapılmadı. Ağın iskeleti yönlendiricilerdeki ayarlarla oluşturulacak. Önce arabirimlere IP'lerini vermekle başlıyorum. Kolaylık açısından yönlendiricilere Alpha ve Bravo adını verdim. Hangi yönlendiriciye hangi ayar girdiğimi belirtirken bu adları kullanacağım. Yönlendiriciye sağ tıklayıp "Start" diyerek açıyorum.

GNS3'te yönlendiriciye çift tıklayınca önceden ayarlı olarak enable mod adı verilen modda başlıyor. Çift tıklayınca "Alpha>" gibi bir ifade varsa bu ayar bulunmuyordur. enable komutuyla bu moda geçilmelidir. Enable modda Alpha# ifadesi bulunur. Bu mod, yönlendiricinin Linux'taki root kullanıcısıyla çalıştığı kabuğa benzetilebilir. Yönlendiricinin modeli ve arabirimler aynıysa aşağıdaki komutlar sorunsuz çalışacaktır. Aynı olmaması durumunda doğru arabirimlerin adlarını girmek gerekecektir. 

Önce iki yönlendirici arasındaki ağı ayarlayıp bunun NAT'ta bir dış arabirim olduğunu bildirelim:


Alpha#configure terminal
Enter configuration commands, one per line.  End with CNTL/Z.
Alpha(config)#int gig0/0

Alpha(config-if)#ip address 192.168.27.1 255.255.255.252
Alpha(config-if)#ip nat outside
Alpha(config-if)#no sh
Alpha(config-if)#exit
Alpha(config)#


Sonra iç ağı ayarlayalım:
Alpha(config)#int FastEthernet 1/0
Alpha(config-if)#no sh
Alpha(config-if)#exit

Alpha(config)#int FastEthernet 1/0.10
Alpha(config-subif)#description VLAN10
Alpha(config-subif)#encapsulation dot1Q 10
Alpha(config-subif)#ip address 192.168.24.2 255.255.255.0
Alpha(config-subif)#ip nat inside
Alpha(config-subif)#exit
Alpha(config)#
Alpha(config)#int Fa 1/0.20
Alpha(config-subif)#desc VLAN20 

Alpha(config-subif)#encapsulation dot1Q 20
Alpha(config-subif)#ip address 192.168.25.2 255.255.255.0 
Alpha(config-subif)#exit
Alpha(config)#


İç ağda FastEthernet1/0'a bağlı iki alt-arabirim tanımladım. Linux'taki eth0:0 gibi. Alt-arabirim aynı ağ kartının birden fazla kart gibi davranmasını sağlıyor. Böylece tek arabirimle FastEthernet 1/0.10 VLAN10'daki makinalarla, FastEthernet1/0.20 ise VLAN20'deki makinalarla aynı ağda olabilecek. Bu yapıya "router-on-a-stick configuration" deniyor. Sanıyorum VLAN'ların üzerinde aktığı "trunk" bağlantısı, dondurma çubuğuna (stick) benzetiliyor. Örn. bu görüntü. Bu ayarlarda önemli bir nokta da VLAN10'daki cihazların NAT'ın iç tarafında olacaklarını bildirdim.

Yönlendirici kendi üzerindeki (doğrudan bağlı) ağlara gidip gelen trafiği yönlendirebilir ama ondan bir 'hop' uzaklıktaki 192.168.26.0/24 ağına hangi bacağıyla gideceğini bilemediğinden bunu statik yönlendirmeyle (elle) girmek gerek:

Alpha(config)#ip route 192.168.26.0 255.255.255.0 GigabitEthernet0/0

Yönlendiricideki arabirimlere .2'li IP vermemin nedeni, her ağın .1'li IP'sinin Windows'un kendi ağ arabirimi tarafından alınması. Bu ayarlar girildiğinde artık Mazhar, Rüstem'i yönlendirici üzerinden ping'leyebiliyor olacaktır (inter-vlan routing). Ancak henüz Server'e kimse ulaşamıyor çünkü Bravo yönlendiricisine geri dönüş rotaları girilmedi. Öyleyse önce arabirim IP'lerini verip rotalarını girelim:

Bravo#conf ter
Enter configuration commands, one per line.  End with CNTL/Z.
Bravo(config)#int Gig0/0
Bravo(config-if)#ip addr 192.168.27.2 255.255.255.252
Bravo(config-if)#no sh
Bravo(config-if)#exit
Bravo(config)#

Bravo(config)#int Fa1/0
Bravo(config-if)#ip addr 192.168.26.2 255.255.255.0
Bravo(config-if)#no sh
Bravo(config-if)#exit


Buraya kadar yalnız IP'ler girildi. Sağ taraf basit bir ağ olduğundan VLAN yada NAT ayarı bulunmuyor. Yalnız bu sefer iki tane ağ bilinmediğinden, iki tane rota girilecek:

Bravo(config)#ip route 192.168.24.0 255.255.255.0 GigabitEthernet0/0

Bravo(config)#ip route 192.168.25.0 255.255.255.0 GigabitEthernet0/0

Elbette bu iki rota 192.168.24.0 255.255.254.0 olarak özetlenebilirdi. Şimdi Mazhar'dan Server'e bir ping atmayı deneyelim:

Görüldüğü gibi gidip dönebiliyor. Bunu yaparken hangi IP'yi kullandı? Bunu bilmek için apache'de php ile yazdığımız betiği kullanacağız. curl ile web sayfasını çekip dönen cevaba bakalım:

Yönlendiricide hangi tarafın NAT için iç ve dış olduğunu tanımladık ama hangi iç IP'nin hangi dış IP'ye karşılık geldiğini yazmadık. Şimdi Alpha yönlendiricisine geri dönüp şu komutları girelim:

Alpha#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
Alpha(config)#ip nat inside source static 192.168.24.101 192.168.25.111
Alpha(config)#ip nat inside source static 192.168.24.102 192.168.25.112
Alpha(config)#


Bunlardan ilki Mazhar ikincisi Osman içindi. Komutları girdikten sonra Mazhar'a geri dönüp aynı komutları tekrar çalıştırdım:


Yukarıda görüldüğü gibi artık Mazhar statik NAT'la sunucuya erişmiş oldu.


Son olarak yazıyı burada bitirmeden, daha önce de aslında daha düşük seviye bazı yazılar yazmak istediğimi söylemiştim. Korumalı modla ilgili yazmak için araştırma yaparken WRK (Windows Research Kernel) ile ilgili bazı yazılar ilgimi çekti ancak konu benim alanımın dışına çıkıyor (C++'dan ötürü). Bununla birlikte elektronikle ilgili şeyler de yazmak istiyordum. Özellikle aklımdaki konu, şu arduino arabayı yapıp, yaparken de adım adım anlatıp incelemesini yapmaktı ama arabayı tamamladım ve tekrar bozup yapmak istemiyorum. Buraya kadar yazıyı okuyan biri bana bunu alırsa, arabayı yapıp yapılmış halde geri vereceğime dair söz veriyorum : ). Eğer o olmazsa şu osiloskobu sipariş ettim, yakında gelir. Belki bununla ilgili bir inceleme yaparım. Kim bilir...

15 Mart 2015 Pazar

Haydi Makinaları Ağdan Açalım (yada PXE Boot)


Başlıktan anlaşılacağı üzere makinaları ağdan açmayı yani network boot yada PXE boot adı verilen işlem için gerekli adımları bu yazıda anlatacağım. Bu iş fiziksel makinalarla da yapılabilir ama sanal makinalar kadar pratik olmayacaktır. Sanal makinalar için önce VirtualBox'ı denedim. Maalesef ağdan boot etme özelliği doğru çalışmıyor, bu nedenle VMware'de anlatmak zorunda kaldım. Yazıyı takip etmek için sahip olunması gerekenler:
  1. CentOS 6.6 minimal. Teorik olarak 7 dışında herhangi bir 6.x CentOS dağıtımı
  2. VMware Workstation yada en az iki fiziksel makina ve bunlara ait şebeke altyapısı
  3. Her evin olmazsa olmazı PuTTY ve onun kadim dostu WinSCP.
  4. Seçimlik olarak Live herhangi bir Linux sürümü. Ben KNOPPIX'i tercih ettim. DVD sürümü de bulunuyor ama ağdan açmak için tavsiye etmiyorum.
Fiziksel makina kurulumu hem pratik değil hem de şebeke kurulumu vb. konular için burada yer yetmeyecek. Yine yerden kısmak için Linux kurulumu kısa tutulacak, zaten DHCP, PXE boot gibi kavramlara en azından aşina olan okuyucunun kurulumu yapabileceği varsayılacaktır.

Önce VMware'in Virtual Network Editor'ünde diğer bütün ağlardan ayrı bir ağ oluşturulur. Virtual Network Editor'u açınca gelen pencerede "Add Network"e basılır. Penceredeki değeri değiştirmeye gerek yoktur. Tamam'a basınca yeni bir ağ tanımlanmış olur. Ağın türü 'Host-only' olmalı ve DHCP kapalı bırakılmalıdır. Alt-ağ adresi olarak 192.168.150.0/24 girilecektir. Normalde bu aralık rastgele atanır ama en alt satırda istenildiği gibi ayarlanabilir. Son durumda ayarlar yandaki gibi olacaktır. Tamam'a basınca Windows'ta 192.168.150.1 IP'li yeni bir sanal arabirim oluşur. 

Bundan sonra VMware'de sanal makina oluşturulacaktır. Makinayı oluştururken VMware'in ayarlara karışmaması için 'I will install the operating system later.' seçilir. Makinaya bir ad verilir. Ben "dhcpserver" adını verdim. Disk için tavsiye edilen 20GB olsa da masaüstü kurulum yapılmayacağından 8GB yeterlidir. Normalde disk "thin provision" olarak oluşturulduğundan yer sorunu olmaz. Yalnız sunucuda birden fazla işletim sistemi bulunacaksa, bütün işletim sistemlerinin dosyalarının diskte olması gerektiğinden daha büyük bir disk alanı gerekir. 

Ayarlarda disk dosyası tek dosya olarak saklanacak ve son adımda "Customize Hardware" diyip bazı değişiklikler yapılacaktır: Sırasıyla, RAM için 1GB ayarlanır. Optik sürücüde "Use ISO image file" diyip CentOS'un kalıp dosyası seçilir. Disket sürücü, ses kartı ve yazıcı kaldırılabilir. Sonuncu ama en önemlisi "Add" diyip bağlantısı "Custom" olan bir ağ kartı eklenir. Burada, yukarıda oluşturulan ağ girilmelidir (örn. VMnet02, yanında host-only yazmalı). İkincil ağ kartı, sunucu bir arabirimden IP dağıtıp diğer makinalarla haberleşirken diğer arabirimden Internet'e bağlanmasını sağlayacaktır. Internet bağlantısı sonradan yüklenecek paketler için gereklidir ve ağdan açılan makinaların Internet bağlantısı için ağ geçidi olarak hizmet verebilir. Bunlar tamamlandığında sunucu kuruluma hazır olur.
Kuruluma hazır sanal sunucu
Sunucu açılır ve CentOS kurulumuna geçilir. Kurulumda Türkçe klavye dışında bütün ayarlar olduğu gibi bırakılır. Hostname olarak ben "dhcpserver" verdim. Zaman dilimi seçilip kurulum tamamlanır. Ağ ayarları işletim sistemi açıldıktan sonra yapılacaktır. Makinanın, NAT yapacak Internet arabiriminin ve Host-only arabirimin MAC adresleri not edilmelidir. Bunlar kartları ayarlarken işe yarayacaktır.

Makina açılınca şu ayarlar yapılmalıdır:
  1. /etc/udev/rules.d/70-persistent-net.rules dosyasında NAT olarak ayarlı arabirimin MAC'inin eth0'a ve Host-only arabirimin eth1'e atanması. Bu adım seçimlik olsa da yazıda eth0 Internet ve eth1 iç ağ kabul edilecektir.
  2. /etc/selinux/config dosyasında SELINUX=disabled yapılır. Bu da seçimlik bir adım ama ileride beklenmedik hatalarla boğuşmayı engelleyecektir.
  3. /etc/sysconfig/network-scripts/ifcfg-eth0 dosyasında ONBOOT=yes olarak değiştirilir. 
  4. /etc/sysconfig/network-scripts/ifcfg-eth1 dosyasında ONBOOT=yes, BOOTPROTO=static olarak değiştirilir ve şu iki satır eklenir: IPADDR=192.168.150.10  NETMASK=255.255.255.0
Son iki adım zorunludur. Ben 192.168.150.10 IP'sini tercih ettim ama host makinaya atanan 192.168.150.1 dışındaki tüm IP'ler verilebilir. Bundan sonra reboot komutuyla makina yeniden başlatılır.

Artık makinaya PuTTY ile bağlanılabilir. Geri kalan işlemler için PuTTY'i kullanmak kopyala/yapıştır sağlaması nedeniyle konsoldan daha pratik olacaktır. 

Ağla yoğun olarak uğraşılacağından iptables kapatılmalıdır. Sanal makina internete NAT ile çıktığından hostta firewall çalışıyorsa iptables'ın kapatılmasının zararı yoktur. Yazının ileriki bölümlerinde iptables tekrar devreye alınacaktır. iptables'ı devre dışı bırakmak için: chkconfig iptables off; chkconfig ip6tables off; service iptables stop; service ip6tables stop komutları verilir. Son olarak SMTP de kapatılır: service postfix stop; chkconfig postfix off.

Makina sanal olduğundan VMware-tools yüklenebilir. Sanal makinada çalışmayanlar yada yüklemek istemeyenler için bu adım seçimliktir. Yükleme betiği perl ile yazıldığından önce yum install perl komutunu verilir. VMware araçlarının en yeni çekirdeğe kurulması için "yum update" komutu verilir. Bu güncelleme adımı da seçimliktir ama önemli bir ipucu: VMware araçları yüklendikten sonra çekirdek değişirse bu araçların yeniden yüklenmesi gerekir. Güncelleme bittikten sonra makina yeni çekirdekle başlatılır. Sanal makinanın sağ tuş menüsünden VMware araçlarının yüklemesi seçilir. Bu, VMware araçlarının bulunduğu CD kalıbının sanal sürücüye takılmasını sağlar. CD, herhangi bir dizine mount edilir; içindeki VMware-tools-<sürüm>.tar.gz dosyası diske kopyalanır, açılır ve içerisindeki vmware-install.pl betiği çalıştırılır. Minimal kurulumda, dizin paylaşım hizmetinin ve sürükle-bırak desteğinin açılması hizmet başlarken hata alınmasına yol açar.

paketleri yükle...
Buraya kadar olan adımlarla henüz boş bir makina oluşturulmuştur. Bundan sonra yum ile şu paketler yüklenmelidir:
  • dhcp
  • syslinux
  • tftp-server
  • nfs-utils
  • nfs4-acl-tools
  • portmap

DHCP Sunucusu Kurulumu
Dikkat: Yanlış ayarlanmış bir DHCP sunucusu bulunduğunuz ağdan atılmanıza neden olabilir.

Yazıda sanal makinanın arabirimi 'host-only' olduğundan sorun oluşturmaz ancak fiziksel makinalarda ve 'bridged mode'da çalışan arabirimleri olan sanal makinalarda dikkat etmek gerekir.

/etc/dhcp/dhcpd.conf dosyasının içeriği aşağıdaki gibi olmalıdır:

subnet 192.168.150.0 netmask 255.255.255.0 {
range 192.168.150.101 192.168.150.200;
option routers 192.168.150.10;
option domain-name-servers 212.252.114.8;
option subnet-mask 255.255.255.0;
option time-offset 2;
filename "pxelinux.0";
}

Anahtar kelimeler yeterince açık olduğundan açıklama verilmemiştir. Kelimelerle ilgili ayrıntılı belgeye http://linux.die.net/man/5/dhcpd.conf adresinden ulaşılabilir. "Option" ile başlayan satırlar seçimlik olup, istemcileri Internete çıkarırken işe yarayacaktır. Buradaki en önemli satır olan "filename "pxelinux.0";" satırı, bir makina ağdan boot etmek için sunucuya geldiğinde ona pxelinux.0 adlı dosyayı göndermesini sağlar. Bu olmazsa sunucu herhangi bir DHCP sunucu olur. DNS satırındaki IP, Superonline DNS'ine ait olup örnektir. Keyfi herhangi bir DNS de olabilir.

Sanal makina donanım ayarları
chkconfig dhcpd on; service dhcpd start komutuyla sunucu başlatılır. Bu aşamada sunucuyu denemek için disksiz bir sanal makina oluşturulup Knoppix ile açılacaktır. Daha önceki gibi bir sanal makina daha oluşturulur. Farklı olarak Knoppix, Debian tabanlı bir dağıtım olduğundan işletim sistemi olarak Linux ve "Debian 6 64-bit" seçilmelidir. Bu sanal makina sonradan istemci olarak da kullanılacağından ben adını dhcpclient01 verdim. Makina oluşturulduktan sonra "Settings" seçilerek donanım özellikleri ayarlanır. Sabit diski silinir, optik sürücüye Knoppix'in kalıp dosyası yerleştilir, ağ kartı host-only olarak VMnet02'ye bağlanır.

Makina Knoppix ile açıldıktan sonra terminalde hangi IP'yi aldığına bakınca sonuç başarılıdır.

Bu aşamada istemci açıkken, ihtiyaç olacak bazı dosyalar bu makinadan alınacaktır. Aslında bu yazıda anlatılan işi Knoppix otomatik olarak yapar ve bunun adı "Knoppix Terminal Server"dır.


Sunucu çalıştırılınca bazı sorular sorar ve buna göre bir PXE boot sunucusu çalıştırır. Bütün sorularda OK'a basılarak temel bir ayar oluşturulur, sonradan bu dosyalar sunucuda elle düzenlenecektir. Knoppix'de bu sunucu çalıştırıldığında /tmp/tftpboot dizinini oluşturur. Gereken dosyalar bu dizin altındaki miniroot.gz dosyası ve /tmp/tftpboot/pxelinux.cfg/default dosyasıdır. Bunların scp ile sunucuya kopyalanması gereklidir.



TFTP Sunucusunun Ayarlanması
TFTP ayarlanması muhtemelen en kolay sunucudur. /etc/xinetd.d/tftp dosyasında disable = yes satırı disable = no yapılır ve xinetd servisi yeniden başlatılır. xinetd altında çalışan hizmetlere chkconfig ile bakıldığında tftp: on görülmelidir. Aynı dosya içerisinde "server_args = -s" ile başlayan satır TFTP sunucunun kök dizinidir ve kurulumda /var/lib/tftpboot olarak gelir. Bunu sonraki adımlar için not etmek yararlı olur.


NFS Ayarları
NFS, istemci açılırken kernel yüklendikten ve miniroot açıldıktan sonra CD'deki dosyaların alınması için kullanılacaktır. Bunu ayarlamak da oldukça kolaydır. /etc/exports dosyası yoksa oluşturulur ve içine şu satır girilir:

/var/lib/tftpboot/Knoppix     192.168.150.0/24(ro,async,no_root_squash)

Yukarıdaki dizin oluşturulur. Sırayla rpcbind ve nfs servisi başlatılır. Bu servislerin de başlangıçta açılması için chkconfig rpcbind on ve chkconfig nfs on komutları verilir. Sunucunun çalışıp çalışmadığı diğer makinada "mount -t nfs 192.168.150.10:/var/lib/tftpboot/Knoppix /mnt" komutuyla denenir. Komut sorunsuz çalışmalı ve sözkonusu mount "df -h" çıktısında görülmelidir. Sonrasında istemci kapatılır ve sanal makinadan CD çıkarılır. İstenirse CD sürücü sanal makinadan kaldırılabilir.

Bundan sonra sunucuda PXELinux ayarlanacaktır. Önce, pxelinux.0 dosyası bulunur (/usr/share/syslinux/pxelinux.0 altında olmalıdır) ve /var/lib/tftpboot dizinine kopyalanır. Bu dizin altında pxelinux.cfg adında bir dizin daha oluşturulur. WinSCP ile Knoppix'in kalıp dosyası sunucuya kopyalanır ve dosya "mount knoppix.iso /var/lib/tftpboot/Knoppix -t iso9660 -o loop" komutuyla oluşturulan dizine bağlanır (mount edilir). Bu dizin farklı verilecekse NFS export'larında da aynı dizinin girilmesi gerekir. CD'de, isolinux dizinindeki dosyaların tümü (boot.msg, linux vb.) /var/lib/tftpboot dizini altına kopyalanır. Bir Fedora/RedHat dağıtımını ağdan açmak için gerekli dosyalar initrd.img ve vmlinuz adındadır. Son olarak sunucu yeniden başlatıldığında servisler çalışacaksa yukarıdaki mount işlemi /etc/fstab'a eklenmelidir.

Bundan sonra pxelinux.cfg dizininde bazı boş dosyalar oluşturulur. Bunların adları şöyle olmalıdır:
  1. İstemcinin MAC adresi iki nokta yerine eksi işaretiyle ayrılır. Başına fazladan bir "01-" eklenir. Örn. 01-00-0C-29-01-02-03. MAC adresi sanal makina ayarlarından bulunabilir.
  2. İstemcinin IP adresi onaltılık düzende yanyana yazılır. Örn. 192.168.150.101 için C0A89665. Bu sayının ilk basamağı için bir dosya, ilk iki basamağı için bir dosya, ... diye sekiz tane dosya. Örnekten hareketle C, C0, C0A, C0A8, C0A89, C0A896, C0A8966, C0A89665
  3. "default". Yalnızca default. Bu default'u elle oluşturulmak yerine istemciden alınan default kullanılacaktır. Bu nedenle dosya bu dizine taşınır.
"default" dosyasının içinde açılışta hangi çekirdeğin yükleneceğine, hangi boot parametrelerinin girileceğine dair ayarlar bulunur. Bunun için isolinux.cfg dosyasından da kopya çekilebilir. Bu dosyanın içerisinde "nfsdir=192.168.150.101:/mnt-system" şeklinde satırlar olmalıdır. Bu, Knoppix'in kendi üzerinde çalıştırdığı NFS sunucu IP'si ve yoludur. Bu ayardaki IP'yi sunucunun IP'si (192.168.150.10) ve yolu /etc/exports'da verilen yol olarak ayarlamak gerekir. Bu dosyadaki diğer anahtar kelimelerden başlıcaları şöyle:
  • secure kelimesi istemcilerde root kullanıcısına erişimi kapatır. Örneğin lab ortamı için tercih edilebilir. 
  • lang hem işletim sisteminin dilini hem de klavye düzenini belirler. Knoppix'de varsayılan Almanca QWERTZ klavyedir. lang=en yada lang=tr girilebilir.
  • video ile açılışın grafik yada metin ekranda yapılması seçilebilir.
  • tz saat dilimini seçmeye yarar. localtime BIOS saatini kullanır, başka bir zaman dilimi açılışta seçilebilir.
Buna benzer satırların birden fazla olduğu görülebilir. İlk satır varsayılan değer, diğerleri de seçeneklerdir. Tek bir seçenek için aşağıdaki kadarı yeterli olacaktır:

PROMPT 1
DEFAULT Knoppix
TIMEOUT 30
DISPLAY boot.msg
LABEL Knoppix
KERNEL linux
APPEND secure nfsdir=192.168.150.10:/var/lib/tftpboot/Knoppix   nodhcp lang=tr ramdisk_size=100000 init=/etc/init apm=power-off nomce loglevel=1 initrd=miniroot.gz libata.force=noncq tz=localtime BOOT_IMAGE=knoppix

Son olarak, bu makinaya daha önceden kopyalanan miniroot.gz de /var/lib/tftpboot dizine kopyalandığında sunucu hazır duruma gelir.

Şimdi istemciyi çalıştırınca Knoppix açılacaktır.


Bununla birlikte bir sonraki adım için route -n komutuyla bakıldığında varsayılan ağ geçidi (default gateway) 192.168.150.10 görünmeli ve /etc/resolv.conf'ta DHCP ayarlarında girilen DNS sunucunun IP'si bulunmalıdır. Örn. Superonline DNS.

iptables Kuralları ve Gateway'in Ayarlanması
En başta iptables kapatılmıştı. Şimdi NAT için iptables kullanılacağından chkconfig ile iptables ve her ne kadar kullanılmayacaksa da ip6tables açılıp, service iptables start ve service ip6tables start ile servisler başlatılsın. Bu halde iptables, istemcinin sunucuya erişimini kısıtlayacak ve makina açılamayacaktır. Burada tek tek portları anlatmak, özellikle RPC'nin statik olmayan portları kullanması nedeniyle zor (iptables için bu portlar ayar dosyalarıyla sabitlenir). Bu nedenle eth1'in bağlı olduğu iç ağ güvenilir kabul edilip, firewall iç ağa aşağıdaki komutla açılacaktır:

iptables -I INPUT -i eth1 -s 192.168.150.0/24 -j ACCEPT

service iptables save komutuyla bu kural kaydedilir. İstenirse iç ağda sunucu yada port bazında engellemeler yapılabilir. Bu ayarla artık sunucu sorunsuz açılır ama paketleri iletebilir durumda değildir. Bunun için /etc/sysctl.conf dosyası açılır ve net.ipv4.ip_forward değeri sıfırsa bir yapılır. Yapılan değişikliğin yeniden başlatmadan aktifleşmesi için echo 1 > /proc/sys/net/ipv4/ip_forward komutu girilir. 

Artık sunucu paketleri iletebilir fakat nereye ileteceğini bilemez. Bunun için iptables'da eth1'den gelen paketleri al eth0'a gönder, geri dönen cevapları da eth0'dan eth1'e gönder şeklinde bir kural aşağıdaki gibi girilecektir:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o eth1 -m state  --state RELATED,ESTABLISHED -j ACCEPT 
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

Bu komutlardan sonra tekrar service iptables save çalıştırılır. Son olarak /etc/sysconfig/iptables dosyası içinde -A FORWARD -j REJECT --reject-with icmp-host-prohibited satırı varsa, bu silinir ve iptables yeniden başlatılır. Bu satır RedHat kurulumunda standart olarak gelir ve FORWARD zincirinin başında, gelen paketleri reddeder. Yukarıda FORWARD zincirine eklenen satırlar, bu satırın altında kaldıklarından çalışamazlar. Bu satır silinip servis yeniden başlatıldığında sorun ortadan kalkar. 







Bu arada fark edileceği üzere iptables kuralları /etc/sysconfig/iptables dosyasında saklanmaktadır ancak kuralları komutla girmek daha pratik olduğundan tercih edilmiştir.

 Görüldüğü üzere artık paketler dışarı çıkabiliyor.
İstenirse iptables yerine sunucuda squid vekil sunucu da tercih edilebilir ancak vekil sunucu istemci tarafında ek ayar gerektirir.

Miniroot.gz Dosyası Hakkında
Açılışta Linux çekirdeği yüklendikten sonra boot parametrelerinde verilen miniroot.gz dosyası kök dizine açılarak init çalıştırılır. Bu dosyada işletim sisteminin minimumda çalışması için gerekli dosyalar sıkıştırılmış olarak bulunur. Yan görüntüdeki komutlar çalıştırılırsa (son komutun çıktısı biraz uzundur) başlangıçtaki dosya sistemi diske açılır. Peki bu neye yarar?

miniroot.gz, Knoppix'de oluşturulmadan önce sihirbaz hangi ethernet kartlarını deneyeyim diye sormuştu. Soru, seçili olanlara dokunmadan OK diyip geçilmişti. Knoppix, bu kartların çalışması için gerekli çekirdek modüllerini /modules dizinine yükleyip açılışta bu modüllerin yüklenmesini sağlar. Örneğin açılışta bir makinanın ethernet kartı tanınmadıysa, "/init: cd: line 1: can't cd to /modules/net" gibi bir hatayla kabuk açılır ama hiçbir modül yüklenmemiş kabukta DOS'tan daha fazla seçenek yok gibidir. Sihirbaz kullanmadan bir modülü miniroot'a eklemek için; dosya sistemi açılır, gerekli çekirdek modülü /modules dizinine kopyalanır ve miniroot.gz şu komutla tekrar oluşturulur:

find . | cpio -oH newc | gzip -9 > ../miniroot.gz

Yeni miniroot'ta ethernet kartının modülleri olacağından düzgün bir şekilde yüklenip açılması beklenir. 


Birden Fazla Bilgisayarın Sunucudan Açılması
Gerçek bir durumda örneğin bir lab kurulması planlanıyorsa birden fazla bilgisayarın olacağı açıktır. Bu durumun benzetimini VMWare'de yapmak için ilk oluşturulan dhcpclient01'i klonlanır. Full Clone'la birlikte makinalar istenilen adlarla klonlanır. İlk makinanın diski olmadığından yeni makinalarda da disk bulunmaz ve disk olmadığından makinalar hızla klonlanabilir. Dört tane makina oluşturulup hepsi başlatıldığında sorunsuz açıldıkları görülmüştür. Burada belki SSD disk, performans açısından yararlı olabilir.


Kamera Arkası
Neden böyle bir bölüme gerek duydum? Açıkçası daha sık yazı eklemek istemekle birlikte bu yazı sanıyorum daha öncekiler arasında beni en çok uğraştıranı oldu. En önce VirtualBox beni uğraştırdı.

Fikir, Ekim-Kasım 2014 gibi ortaya çıkmıştı ancak VirtualBox'taki sorun nedeniyle yazıya Şubat ortasında başladım ve Mart ortasında içerik olarak bitirebildim. Editoryal kısım bunun dışındadır. İlk önce vmware-tools sorun çıkardı. Minimal'de kurduğumda açılışta hata alıyordu ancak Masaüstü sürümde hata almıyordu. Hangi paketin eksik olduğunu tek tek denedim. X paketlerine gelince sorunun pano paylaşımı ve sürükle-bırak'ta olduğunu farkettim. VMWare-tools kurulumu konusunda biraz da takıntılı davrandım. 

Yazının devamında işletim sistemi dosyalarını HTTP ile aktarmak istiyordum ancak Knoppix'te bununla ilgili kaynak bulamadım. Hatta tam makinayı ağdan açtım, yazıyı bağlayabilirim derken CD'yi sürücüde unuttuğumu farkettim. Çekirdek TFTP'den yükleniyordu ama init /dev/sr0'a baktığından tesadüfen doğru çalışmıştı.

Sonrasında yazıyı NFS'e çevirdimse de Knoppix'le bir hayli uğraşmak zorunda kaldım. Bir ara CentOS7 live'la açayım diye düşündüm. Bu arada dikkatli okuyucu "yum install" ekran görüntüsünde hala httpd olduğunu NFS olmadığını fark etmiştir. Sonrasında Knoppix'in kendi terminal sunucusunu keşfetmemle doğru ayarları buradan aldım ve yazı tam ortasında tekrar değişti. Son değişiklikleri gözden geçirmek için yazıdaki adımları tek tek yaparak kurulumu baştan gerçekleştirdim. 

En sonda ağ geçidi kurulumunda da iptables'da hangi kuralın beni engellediğini farketmem biraz zamanımı aldı ve bir aylık bir uğraş sonucunda yazı yayına hazır duruma geldi.

2 Ocak 2015 Cuma

KVM ile Ağ Ayarları


Bu yazıdaki başlık biraz aldatıcı oldu çünkü bütün ağ ayarlarını değil yalnızca kurup kullandığım, hakkında bilgi sahibi olduğum ayarları anlatacağım. Amacım iki fiziksel makinadaki sanal makinaları haberleştirmek. Bunu iki farklı yoldan anlatacağım. 

Gerekli deney ortamı için ethernet kartı olan iki fiziksel makina gerekli. Makinalarda RedHat 6.5 bulunuyor, qemu-kvm ve buna bağlı paketler kurulu. Host makinalarının birbiriyle haberleştikleri ağ kartı bende eth4 olduğundan ayarları buna göre vereceğim. Eğer makinada birden fazla boş ethernet portu varsa bir bağlantıyı hostların kendi aralarındaki iletişimi diğer bağlantıyı sanal makinaların kendi aralarındaki iletişime atamak yararlı olur. Son olarak kurulumda kullanılan CentOS yada RHEL iso'su yada DVD'si şimdilik bir kenarda dursun. Sanal makinaların kurulumu için tekrar ihtiyaç olacak. 

Yazının ileriki kısımlarında birinci fiziksel makinayı host01, üzerindeki sanal makinayı vm01; ikinci fiziksel makinayı host02 ve üzerindeki sanal makinayı vm02 olarak adlandıracağım. Her iki durum için de sanal makinaların aralarında haberleştikleri alt-ağ ile fiziksel makinaların aralarında haberleştikleri alt-ağ farklı olacak. 


Host makinaları kurulduktan sonra herhangi bir sorun olmaması için iptables kapatılmalıdır. Ben hostların arasındaki bağlantıyı noktadan noktaya olarak tanımladım ama bununla ilgili herhangi bir kısıtlama yok. İkinci host üzerindeki eth4'ün ayarları şöyle olmalı:

[root@host02 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth4
DEVICE=eth4
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=192.168.5.6
NETMASK=255.255.255.252
IPV4_FAILURE_FATAL=yes
NAME="System eth4"


Uygun ayarlar host01 makinasında da yapılır ve makinaların birbirini pingleyebildikleri görülür. 

[root@host02 ~]# ping -c 4 192.168.5.5
PING 192.168.5.5 (192.168.5.5) 56(84) bytes of data.
64 bytes from 192.168.5.5: icmp_seq=1 ttl=64 time=0.108 ms
64 bytes from 192.168.5.5: icmp_seq=2 ttl=64 time=0.096 ms
....


Birinci Yol: İki Makina Farklı Alt-ağlardaysa (Routed vNet)


Bu başlığın ilk paragraflarında anlatacaklarım aslında genel konfigürasyona ait. Bu ayarlar ikinci konfigürasyonda da kullanılacak ancak bu başlıkta yazacaklarıma da bağlantılı. 

Makinalar birbirlerinin root kullanıcılarına şifresiz ssh yapacak şekilde ayarlanır. Yukarıda saydığım paketlere ek olarak virt-manager ve virt-viewer gibi paketler de yüklenmelidir. Paketler yüklendiyse 'virt-manager' komutunu verince sanal makina yönetim penceresinin gelmesi gerekir. Bu pencerede önce 'File -> Add Connection' seçilir. Makinaların birbirini görmesi için yanda bulunan görseldeki ayarlar girilir ve bağlan'a basılır. Bağlantı başarılı olursa host makinaları birbirlerini ve üzerlerinde çalışan sanal makinalar vb. bilgileri görebilir. 


Fiziksel ağ bağlantı ayarları
Bu adımı sorunsuz geçtikten sonra her iki hostta birer sanal arabirim, Edit -> Connection Details'te çıkan pencerenin Virtual Networks sekmesinde oluşturulur. Burada sol alttaki "+" simgesine basılır. Verilecek ağ adının herhangi bir önemi yoktur. Ben her iki hostta da routnet adını seçtim ve örneklerde bunu kullanacağım. Alt-ağ olarak birinden farklı iki ağ seçilir. Ben host01 üzerinde ağ olarak 10.0.0.0/24 ve host02 üzerinde 10.0.1.0/24 ağını seçtim. DHCP'nin bir önemi yok. Sanal makinaların ihtiyaçlarına göre seçilebilir. Önemli olan kısım bu sanal ağın fiziksel ağa nasıl bağlanacağının seçilmesi. Burada "destination" olarak eth4 ve "mode" olarak "routed" seçilmeli. Görselde de görülüyor.

Oluşturulan sanal arabirim bundan sonra listede görünecek. Hem de ifconfig komutuyla görüntülenebilecek. Sanal makina kaynaklı bir paket de eth4 üzerindeki ağa yönlendirilecek. Bu işlemin her iki makinada da yapılması gerekiyor. 


Bundan sonra sanal makina kurulumu gelir. Host02'de makina adına vm02 verip kurulum için "local media" seçilir. Diğer makinayla bağlantı sağlandıysa "Connection:" olarak localhost yerine diğer makina seçilerek, sanal makinanın onda da oluşturulması sağlanabilir. Sonraki adımda kurulum için DVD yada iso dosyası seçilir. Ben iso'yu tercih ettim. Alt kısımda "OS type: Linux" ve "Version: Red Hat Enterprise Linux 6" gözden kaçırılmamalıdır. Bu ayarlar KVM'in çalışma parametrelerini iyileştirmesini sağlar ancak herhangi birşey seçilmemişse de sorunsuz çalışacaktır. 



Sanal arabirimin seçilmesi
Makinalar deneme amaçlı kurulduğundan diğer seçenekleri olduğu gibi bıraktım. Gerekirse bu bilgiler amaç doğrultusunda özelleştirilebilir. Bu seçeneklerde en önemli adım en son ekranda, "Advanced Options"a basınca ortaya çıkıyor. Bu adımda kurulacak sanal makinın ağ kartının hangi sanal ağda olacağı belirleniyor. Burada önceden oluşturulan routnet ağı seçilmelidir. Böylelikle sanal makina oluşturma sihirbazı tamamlanmış olur. Bu işlemi komut satırından yapmak için şu komut girilmelidir:

virt-install --virt-type kvm \
--os-type=linux --os-variant=rhel6 \
--name vm02 --ram=1024 \
--vcpus sockets=1,cores=1,threads=1 \
--autostart --force \
--location=file:///root/CentOS-6.5-x86_64-minimal.iso \
--disk path=/var/libvirt/images/vm02.img \
--vnc --network bridge=routnet,mac=52:54:00:c6:f3:f0 & 

Bu işlemin benzeri diğer hostta da gerçekleştirilir ve vm01'in kurulumu yapılır. İşletim sistemleri kurulduktan sonra ağ kartlarına uygun IP atamaları sanal ağın IP aralıkları gözönüne alınarak yapılır. Başka bir deyişle 10.0.1.0/24 tanımlı arabirimde 10.0.0.2 IP'li bir sanal makina tanımlanmamalıdır. Ben her iki makinaya son okteti .2 olarak IP verdim. Gateway olarak sanal arabirimin ifconfig çıktısında görülen ve son okteti büyük olasılıkla .1 olan IP verilmelidir. Son olarak yine herhangi bir sorun yaşamamak için iptables sanal makinalarda da devre dışı bırakılır. 

Herşey doğru olarak ayarlandıysa artık KVM bir sanal router olarak çalışarak vm01 kaynaklı paketleri host01'e ve vm02 kaynaklı paketleri host02'ye yönlendirir. Bundan sonra yapılacak tek iş host01'e gelen paketleri host02'ye göndermek ve geri dönüşler için tam tersini yapmaktır. O da şu şekilde yapılır: 

[root@host01 ~]# ip route add 10.0.1.0/24 via 192.168.5.6
[root@host02 ~]# ip route add 10.0.0.0/24 via 192.168.5.5

Bundan sonra artık sanal makinalar birbirlerini ping'leyebilir.


İkinci Yol: İki Makina Aynı Alt-ağdaysa (Virtual Bridge)

Burada tekrar sanal makina kurmamak için aynı makinaları kullanarak açıklayacağım ancak artık routnet ağına gerek kalmadı. Önce sanal makinalar kapatılır ve Edit -> Connection Details'te çıkan pencerenin Virtual Networks sekmesinde önceki adımda oluşturulan routnet sanal arabirimi durdurulur (kırmızı çarpı) sonra da silinir (çöp tenekesi). Yalnız silmeden önce göstermek istediğim birşey daha var. Komut satırında "virsh net-dumpxml routnet" komutuyla routnet'e ait bilgilerin olduğu xml görüntülenebilir veya "virsh net-edit routnet" komutuyla düzenlenebilir. 

Virtual Bridge kurulumu için fiziksel ethernet arabiriminde bazı ayar değişiklikleri yapılması gerekir. Aşağıda bu değişikler gösteriliyor. 

[root@host02 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth4
DEVICE=eth4
ONBOOT=yes
BRIDGE=virtbr0

[root@host02 ~]# cat /etc/sysconfig/network-scripts/ifcfg-virtbr0
DEVICE=virtbr0
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.5.6
NETMASK=255.255.255.252
DELAY=0
STP=off

Önce arabirim için bir bridge oluşturulur. Sonrasında bu bridge'le aynı adda bir ifcfg dosyası oluşturulur. Artık IP tanımlamalarını burada yapmak gerekir. Son satıradaki STP=off, arabirimin bağlı olduğu switch portunda Root Guard yada benzeri bir teknoloji çalışıyorsa portun swtich'ten düşmesini engelleyecektir. İstenirse arabirimin gerçek bir bridge gibi davranarak .1q etiketli paketler de göndermesi sağlanabilir. Bunun için STP=off yerine VLAN=XX yazılmalıdır. Sonra host makinanın ağ servisleri yeniden (bazı durumlarda iki kere) başlatılmalıdır. 

Benzer değişiklikler diğer hostta da yapıldıktan sonra artık hostlar birbirlerini bridge arabirimden ping'leyebilmelidir. Her ne kadar eski sanal makinalar üzerinden anlatacağımı söylesem de eğer yeni sanal makina kurulacaksa son adımda virtbr0 bridge'ine karşılık gelen "host device" seçilir. 

Varolan sanal makinalar üzerinde değişiklik, ya sanal makinaya sağ tuşla tıklayıp Open -> Details'da soldaki listede ağ kartı seçilip, bunu virtbr0 arabirimine atanarak yada daha önce arabirim için anlattığım gibi xml'i düzenlenerek yapılır. Birinci yol zaten açık. İkinci yol için "virsh edit vm01" ile ilgili sanal makinanın xml'i vi'da açılır ve xml'in ilgili yeri aşağıdaki gibi değiştirilir.

<interface type='bridge'>
  <mac address='52:54:00:c6:f3:f0'/>
  <source bridge='virtbr0'/>
  <model type='virtio'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
</interface>

Dosya kaydedilir ve çıkılır. Virsh kullanılarak düzenlemenin getirisi çıkışta yazımı denetleyerek bir ayar hatasında vi'dan çıkmaya izin vermemesidir. Yoksa aynı işlem virsh dumpxml çıktısı dosyaya kaydedilip virsh define komutuyla da yapılabilir. 

Son olarak aynı işlem vm02 için tekrarlanır. Artık sanal makinalar sanal virtbr0 switch'ine takılmış gibi davranacaktır. Bu değişiklikler sanal makinalar açıkken algılanmaz. Kapalı olmaları gerekir yada kapanıp tekrar açılmaları gerekir. Her iki sanal makina açıldıktan sonra sanal makinaların IP ayarları aynı alt-ağ üzerinde olacak şekilde değiştirilmelidir. Daha önceki IP ayarları aynı kalmak üzere alt-ağ maskesi (subnet mask) 255.255.254.0 olarak değiştirilir ve GW'ler kaldırılırsa artık sanal makinalar birbirini ping'leyebilir duruma geleceklerdir.