Leoman’s blog

bi blög

Archive for the ‘mikrotik’ tag

Mikrotik’te uzak noktaya otomatik yedek nasıl alınır?

leave a comment

Bir çok uzak noktada Mikrotik cihaz/PC’ye sahip olduğumuzu düşünelim. Bunları belirli periyotlarla elle yedeklemek unutulma, dosya isimlerinde çıkacak karışıklık vb. türlü türlü problem yüzüden pek mümkün olmayacak, ayrıca bu her noktaya bağlanarak tek tek yedek almak ta ciddi bir zaman kaydı olacaktır.

Bunun yerine otomatik olarak Mikrotik’lere “Şu kadar günde bir yedek al! Aldığın yedekleri bana mail at!” diyebilme seçeneğiniz mevcut.

Bu işlem için öncelikle bir SMTP sunucuya sahip olmalı, Mikrotik cihazlarının bu SMTP server’a erişebilmesi, SMTP server’ın da Mikrotik için kullanıcı doğrulaması gerektirmeden mailleri kabul edebilmesi gerekmektedir.

Tüm bu şartların sağlanmış olduğunu düşünürsek, Mikrotik üzerinden yapılacak iş iki adımdan oluşmakta. Birinci adım olarak kayıtlı bir script yaratma, ikinci adım olarak kayıtlı olan bu script’i belirli zaman aralıklarında çalıştırmak.


/system script add name="Oto-Yedek" \
policy=ftp, read, write, policy, test \
source="/system backup save=oto_yedek \
/tool e-mail send body=\"yedek\" to=\"alici@domain.com\" file=\"oto_yedek\" \
server=\"xxx.xxx.xxx.xxx\" from=\"gonderen@domain.com\" \
subject=\"XXX Mikrotik Yedegi\""

İle yeni Oto-Yedek adından bir yedekleme script’i oluşturduk ve;


/system scheduler add comment="Otomatik yedekleme scriptini zamanlar"\
name="Oto-Yedek-Zamanla" on-event=Oto-Yedek \
start-date="Jun/11/2009" start-time="01:00:00" interval="1d" \
disabled=no

zamanlaması ile hergün saat gece 1’de yedekleme scriptinin çalışmasını sağlayabiliriz. Bu işlem sonucunda artık Mikrotik’e login olmaya gerek kalmadan otomatik olarak yedekler belirttiğiniz e-mail adresine gelecek ve yedek alma zamanını sıfıra indirecektir.

Written by leoman

June 11th, 2009 at 9:51 am

Akademik Bilişim’09 – Şanlıurfa/Türkiye

2 comments

11-13 Şubat 2009 tarhleri arasında Harran Üniversitesi’nde yapılacak olan Akademik Bilişim Konferasında Arda Çetin ile birlikte Mikrotik Router OS, Mikrotik Router Board ve Appliance cihazları tanıtıp anlatacağız hatta ve hatta 30dk. süremiz içerisine sığdırabilirsek ufak bir uygulamada yapacağız.

Written by leoman

February 5th, 2009 at 3:09 pm

Posted in Gezegen,GNU/Linux

Tagged with ,

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