Leoman’s blog

bi blög

Archive for the ‘how to’ tag

BIND ile DNS bölümleme (Split DNS)

one comment

Bildiğiniz üzere BIND dünya üzerinde en çok kullanılan ve popüler olan DNS sunucusudur. Bu üstünlük Domain Name System [1] protokolünün ortaya koyulduğu 1983 yılınını takip eden 1984 yılında geliştirilmeye başlanmış olması gibi gözükse de bu kadarla da sınırlı değildir. Bu popülerliğin arkasında yatan etkenlerden biri de yeterince esnek bir yapıya sahip olmasından da geliyor.

Esnek derken?
Esnek bir yapı derken BIND size neler sağlayabilir? Daha önceki blog girdilerimden birinde bahsettiğim gibi mysql-bind [2] gibi bir veritabanı sürücüsü ile zone’larınızı MySQL üzerinde tutabilirsiniz. Yine Dynamically Loadable Zones [3] (DLZ) ile farklı veri kaynakları üzerinde (MySQL, PostgreSQL, File system, ODBC, LDAP) zone’larınızı saklayabilirsiniz. DNS Spliting ile isteyeceğiniz herhangi bir kaynağa isteyeceğiniz herhangi bir cevabı döndürebilirsiniz.

Split DNS mi?
Çok basit bir değiş ile aynı alan adı için yapılan DNS sorgulamasında isteği yapan kaynak IP adreslerine göre değişik IP cevapları verme işlemine split-horizon/split-view/split-brain [4] DNS adını veriyoruz. Bir çok DNS sununucu tarafından desteklenen bu metot [5] BIND’ın içerisinde de ön tanımlı olarak desteklenmektedir.

Nasıl?

Bind konfigrasyonu içerisinde bunu anlatan ifade “view”‘dır. Oluşturacağınız view bloklarına göre [6] istediğiniz kaynaklara istediğiniz cevapları döndürebilirsiniz.

Bunun gibi bir named.conf konfigürasyonu ile yapılandıracağımız DNS sunucumuza 192.168.0 ile başlayan bir client’tan gelecek istek dahilinde db.domain.tld.conf.local konfigürasyon dosyamızın içerindeki zone tanımlamaları geçerli olacak ve bu clientlar aynı zamanda recursive query’ler için de kullanabilecekler, bunun haricinde olan tüm IP adresleri bu DNS sunucuya recursive query’ler için kullanmazkan domain.tld isteklerinde db.domain.tld.conf konfigürasyon dosyası içerisinde tanımlı olan zone’lara göre cevap alacaklar.

Daha düzenli konfigürasyon ve daha anlaşılır olması için şöyle bir örnek senaryo çizebiliriz. Elimizde Internet üzerinde çalışacak bir proje geliştiren bir ekip bütünü var. İki farklı lokasyonda VPN ile birbirine bağlı ve ofisler birbirine erişebiliyor. Ekip aynı ofisi paylaşan yazılım geliştiriciler ve geliştiricilerin kullandığı sunucu, geliştiriciler ile aynı ofisi paylaşan test ekibi, ikinci lokasyonda bulunan pre-live izleyicileri ve yine ikinci lokasyonda bulunan test ekibi.
Bu coğrafik olarak dağıtık fakat aynı network içinde çalışan ofis örneğinde dev.newapp.com’a istek gönderen her ekibin farklı sunucuya erişmesini şu şekilde sağlarız.

Öncelikle DNS sunucumuza bir Access Control List (ACL)’leri (istek yapan IP kaynaklarını belirleyen) alt bir konfigürasyon dosyası oluşturmakla başlayalım.  Bunun için /etc/bind9/named.conf.acls adında bir dosya oluşturarak içerisine ilgili acl listelerini oluşturuyoruz.

Bu işlemin ardından sırasıyla zone detaylarının yer alacağı konfigürasyon dosyalarını yaratıyoruz.

Bu dosyaların arından varolan named.conf’unuzunu içerisine öncelikle named.conf.acls dosyasını include etmeniz ve her üç durum için de ayrı bir view eklemeniz yeterli olacaktır.

 

 

[1] http://tr.wikipedia.org/wiki/DNS
[2] http://mysql-bind.sourceforge.net/
[3] http://bind-dlz.sourceforge.net/
[4] http://en.wikipedia.org/wiki/Split-horizon_DNS
[5] http://en.wikipedia.org/wiki/Comparison_of_DNS_server_software#Feature_matrix
[6] http://www.isc.org/files/arm96.html#id2549625

Written by leoman

February 21st, 2011 at 12:20 am

Posted in GNU/Linux,Sistem Yönetimi

Tagged with , ,

Parallels Plesk Asp.NET MVC2 ‘Access is denied’ hatası

leave a comment

Plesk yüklü sunucunuza Asp.NET MVC2 yükledikten sonra applicationlar üzerinde aşağıdaki gibi bir hata almanız olasıdır.

Server Error in ‘/’ Application

Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))

Could not load file or assembly ‘System.ServiceModel, Version=3.0.0.0 Culture…..

Bunun nedeni MVC ile yüklenen assembly’lerin Microsoft.NET kurulum dizini yerine %windir%\assembly içerisinde olmasındandır.
Bu dizine gerekli izinlerin verilmesi için %plesk_dir%\etc\DiskSecurity\DiskSecurity.xml içerisine tagleri arasına aşağıdaki satırları ekleyerek Plesk Reconfigurator Tool içerisinden Correct disk permissions’ı çalıştırmak bu problemi çözmek için yeterli olacaktır.

Written by leoman

January 11th, 2011 at 1:35 pm

Parallels Plesk Windows üzerinde MS DNS problemi

leave a comment

Windows 2008 üzerinde Parallels Plesk kurulumu yaptınız ve standart olarak gelen DNS sunucu olan Bind’ı Microsoft DNS Server ile değiştirmek istiyorsanız bu işlemi yaptığınızda ya da DNS ile ilgili bir işlem yapmak istediğinizde;

dnsmng.exe REMOVE * also worked without any errors

Benzeri bir hata almanız olasıdır. Aynı hatanın farklı versiyonlarını yine DNS ile ilgili işlemler sırasında almanız mümkündür.

Bu problemi MS tarafından yayınlanmış “Visual C++ 2005 Redistributable Package ATL Security Update” paketi ve Parallels’in yeniden yayınladığı bir DLL’i güncelleyerek çözebilirsiniz .

Bunun için Microsoft download sayfasından linkteki dosyayı indirerek yüklemeniz;

http://www.microsoft.com/downloads/details.aspx?familyid=766a6af7-ec73-40ff-b072-9112bab119c2&displaylang=en

Arından da %plesk_bin%\MsProv.dll dosyasını Plesk sürümünüze uygun olanla (her ihtimale karşın eski dosyayı yedeklemeyi unutmayınız) değiştirmeniz yeterli olacaktır.

Plesk 8.6;
http://kb.parallels.com/Attachments/13357/Attachments/MsProv86.zip
Plesk 9.0-9.3;
http://kb.parallels.com/Attachments/13357/Attachments/MsProv.dll.900-930.zip

Plesk 9.5;
http://kb.parallels.com/Attachments/13357/Attachments/MsProv.950.zip

Dökümanın orjinali için;

http://kb.parallels.com/en/8652

Written by leoman

December 15th, 2010 at 3:53 pm

Posted in Sistem Yönetimi

Tagged with , , ,

Hyper-V üzerine Debian Lenny kurulumu

leave a comment

Hyper-V üzerinde Lenny guest kurulumu yapacaksanız dikkat etmeniz gereken sadece iki ufak nokta vardır.

Bunlardan birincisi Lenny üzerinde henüz default kernel 2.6.26 olduğu için Hyper-V tarafından sağlanan synthetic device’lar ile konuşamamktadır (kernel 2.6.32 upgrade’i ile de bunu aşabilirsiniz). Bunun için sanal makineye normal bir ethernet kartı değil “Legacy Network Adapter” eklemeniz gerekmektedir.

Böylece problemsiz olarak ethernet kartlarını kullanmaya başlayabilirsiniz.

 

Bir diğer problem ise öntanımlı olarak framebuffer device’tan dolayı installer ekranlarının geç render olması. Bunun için boot etmeden önce fb=off parametresi ile framebuffer device’ı disable edebilir ve console ortamında daha rahat çalışabilirsiniz.

Written by leoman

July 31st, 2010 at 8:49 pm

Mikrotik betiklerinde döngüler ve koşullar

leave a comment

Belli bir öğe dizisi için bir özelliği belli koşullara göre ayarlamamız gerekiyorsa bunu winbox üzerinden defalarca tıklayarak yapmak bir çözüm olabileceği gibi aynı işi bir betik aracılığı ile de yapmak mümkün olacaktır.

Kabuk üzerinde koşul dizilimi şu şekildedir.


[admin@Mikrotik] > :global deger1 "degerli"
[admin@Mikrotik] > :global deger2 "degersiz"
[admin@Mikrotik] > :if ($deger1 = $deger2) do={:put "Eslesiyor"}\
[admin@Mikrotik] > else={:put "Eslesmiyor"}

Bu şekilde şartlara göre seçimimizi yapabilir ve işlemlerimizi gerçekleştirebiliriz.

Döngüler; belirtmiş olduğumuz durum sağlanıncaya kadar işlem tekrarıdır.
Kabuk içerisindeki söz dizimi ise şu şekildedir;


[admin@Mikrotik] > :for i from=1 to=10 do={:put $i}

ile 1’den 10’a kadar sayıları ekrana bastırabiliriz.

Daha reel bir uygulama yapacak olursak kuyruk listemizde ekli olan tüm kuralların maksimum download ve upload’ını 1Mb ile limitlendirelim;


[admin@Mikrotik] > :local queueLen [ :len [ /queue simple find ]]; \
:for i from=0 to=$queueLen do={ /queue simple set $i max-limit=1000000/1000000}

Bu örnekte öncelikle :len ile tüm kuyrukta yer alan kuralların sayısı aldık. Bu değeri daha sonra kullanabilmek için lokal bir değişken olan queueLen’e atadık. Bir sonraki komut dizesinde ise tüm kuyruk boyunca max-limit değerini 1Mb olarak atamış olduk.

Yine diğer programlama dillerinden aşina olduğumuz diziler üzerinde çalışabilmeyi mümkün kılan foreach döngüsünü de kabuk üzerinde kullanabilmekteyiz.

[admin@Mikrotik] > :local toplamIP [/ip address find interface="ether1"];\
:foreach idIP in=$toplamIP do={\
:local durum [/ip address get $idIP disabled];\
:local IPadresi [/ip address get $idIP address];\
:if ($durum="false") do={:put ($IPadresi . " Kapali\n")}\
else={:put ($IPadresi . " Acik\n")}}

Burdaki örnekle beraber ether1 üzerindeki IP adreslerinin Kapalı ya da Açık olması durumuna dair bir listesi alınabilir.

Sadece belli sayıdaki işlemler için değil belirli bir koşula göre işleyebilecek bir döngümüz de var. Bu döngümüz do..while ya da while…do döngüsü. Bu döngüye ait söz dizilimi de şu şekildedir.

[admin@Mikrotik] > :global ethernetCount [:len [/interface find type=ether]]; :global $i 0;
[admin@Mikrotik] > :while ($i < $ethernetCount) do={\ :put [/interface ethernet $i name]; :set i ($i+1);}


[admin@Mikrotik] > :global i 11;
[admin@Mikrotik] > :do {:put $i; :set i ($i - 1);} while=($i > 0)
[admin@Mikrotik] > :unset i;

Written by leoman

January 20th, 2009 at 8:34 am

Mikrotik betik programcılığı – Değişkenler

leave a comment

Mikrotik betik dili üzerinde iki tip değişken bulunmaktadır.

  • global – Tüm aktif kullanıcılar ve betikler tarafından erişilebilen değişken tipidir. global deyimi ile tanımlanır.
  • local – Sadece tanımlandığı blok içerisinden erişilebilen değişken tipidir, yine local deyimi ile tanımlanır.


[admin@Mikrotik] > :local testDegiskeni; :set testDegiskeni "Test ediyoruz"; :put $testDegiskeni

Aynı kod bloğu içerisinde öncelikle local bir testDegiskeni adında bir değişken oluşturduk, değerini Test ediyoruz olarak atadık, daha sonrada değişkenimizin değerini ekrana bastırdık.

Peki bu değişkeni daha birden fazla satırı ve/veya kod bloğu olan bir betik içerisinde kullanma ihtiyacımız olsa idi?

[admin@Mikrotik] > :global testDegiskeni
[admin@Mikrotik] > :set testDegiskeni "Mikrotik dunyasina hosgeldin\n"
[admin@Mikrotik] > :for i from=1 to=3 do={:put $testDegiskeni}

Bu örnekte de görülebileceği gibi testDegiskeni adında bir global değişken tanımladık ve daha sonraki kod bloklarımızdan değişkenimize ulaşarak gerekli işlemleri yaptık.

Written by leoman

January 20th, 2009 at 6:08 am

Mikrotik üzerinde betik programcılığı

leave a comment

Mikrotik bildiğiniz üzre kolay kullanımı için güzel bir görsel kullanıcı arayüzüne sahiptir.  Bu arayüz sayesinde çok kolay ayarlanabilen, takip edilebilen, kullanıcı dostu bir işletim sistmidir.

Bu kadar kolaylık arasında ya kendimize/duruma özel işlemler yapmak istersek? Ya aynı işlemi defalarca yapmak zorunda isek? Ya da bir işlemi sayısız kere belirli aralıklarla yapmak zorunda isek?

Bu kadar esnek bir sistem tabi ki de buna da imkan tanıyacaktır. Mikrotik güçlü kabuğu sayesinde tüm işlerinizi otomatik hale getirmenize ya da durumlara özel çareler üretmenize yardımcı olacaktır.  Kabuk üzerinden (Telnet/SSH/Winbox/Serial) işinize uygun bir betik yazarak dilediğiniz gibi tüm işlemlerinizi gerçekleştirebilirsiniz.

Genel anlamda kullanacağımız kabuk *nix üzerinde yer alan kabuklardan pek te farklı değildir. Bash ya da sh’ta kullanmış olduğumuz “\”, “;” ,”#”,”{}”,”[]”  sınırlayıcılar pek fark olmadan yine bu kabuk üzerinde kullanılabilir.

Veri tipleri

Betik yazımı sırasında sık sık kullanacağımız değişkenler için önceden belirlenmiş tipler mevcuttur. Bunlar;

  • number – 64 bitlik Integer tipi değişken türü (işaretli +/-), aynı zamanda hexadecimal veri girişi de mümkündür.
  • boolean – doğru/yanlış veri tipi, true ya da false değerlerini alabilmektedir.
  • string – karakter dizisidir. “test verisi” gibi bir değer alabilir.
  • IP – IP adresi barındırabilen veri tipidir.
  • time – tarih ve zaman tutan veri tipidir.
  • array – dizi verileri tutabilen veri tipidir.
  • nil – öntanımlı veri tipidir, değişken değer verilmediği sürece değeri nil’dir.

Ayrımlama işaretleri

  • \”       –  çift tırnak
  • \\     – ters bölü
  • \n     – yeni satır
  • \r     – satır başı
  • \t     – yatay sekme
  • \$
  • \?
  • \_     – boşluk
  • \a     – zil
  • \b     – gerisilme
  • \f     – sayfa ileri
  • \v     – yatay sekme
  • \xx     – onaltılık düzende değer

Operatörler

Aritmetiksel Operatörler

  • +  toplama
  • –   çıkarna
  • /  bölme
  • *  çarpma
  • –  negatif

Karşılaştırma Operatörleri

  • < küçükse
  • > büyükse
  • <= küçük ve eşitse
  • >= büyük ve eşitse
  • = eşitse
  • != eşit değilse

Mantıksal Operatörler

  • “!” / “not”  değilse
  • “&&” / “and” ve
  • “||” / “or” veya

Bitsel Operatörler

Bitsel operatörler yanlızca number ve IP veritiplerindeki değişkenler/değerler için kullanılabilmektedir.

  • “~”  değil, bitin tersini alma
  • “&” ve (1 ve işleminde etkisiz, 0 biti ise yutan elemandır)
  • “|” veya (0 ve işleminde etkisiz, 1 biti ise yutan elemandır)
  • “^” özel veya (aynı bitler için 0, farklı bitler için 1 elde eder)
  • “<<” sola kaydırma  (belirtilen değer kadar bitleri sola kaydırır)
  • “>>” sağa kaydırma (belirtilen değer kadar bitleri sağa kaydırır)

Birleştirme operatörleri

  • “.” İki karakter dizisini birbirine bağlar.
  • “,” Dizi elemanlarını birbiri ardına sıralar/Diziye yeni değer ekler.

Written by leoman

January 20th, 2009 at 6:05 am