Update Accelerator feat. Mikrotik Proxy HIT

Update Accelerator adalah software kecil yang ditulis dengan bahasa Perl, dan memiliki fungsi melakukan cache Windows Updates, software updates, antivirus updates, patch game online dan sebagainya. Dapat diintegrasikan dengan baik pada squid atau advanced proxy, sehingga sangat bermanfaat dalam melakukan efisiensi penggunaan bandwidth dalam jaringan yang menggunakan banyak klien, misalnya perkantoran, wifi hotspot, gamecenter atau warnet, dan lain-lainnya.

Permasalahan yang sering muncul adalah jika update accelerator berjalan bersama dengan squid, dan disandingkan dengan mikrotik yang memiliki traffic shaper (bandwidth limiter) baik dengan simple queue atau queue tree maka cache yang hit dari update accelerator akan tetap di penalti / terkena limit pada mikrotik.

Bagaimana hal ini bisa terjadi? Perhatikan contoh dibawah ini :

Coba kita perhatikan alur data yang terjadi pada saat klien mengirim request/permintaan mendownload sebuah file update atau patch. Misalnya update ini memiliki url http://update.windodol.com/update.cab.

Client –> [Mikrotik + Proxy/Adv. Proxy + Upd. Accelerator] –> Internet

Pada saat pertama request, klien mengirimkan permintaan http://update.windodol.com/update.cab lewat mikrotik dan mesin proxy (misalnya memiliki IP 192.168.90.2), kemudian diteruskan menuju ke internet.

Selanjutnya, jika file tersebut ditemukan, maka internet akan menyampaikannya ke klien melewati perantaraan mikrotik dan mesin proxy. Update accelerator akan menyimpan (cache) file update.cab dan menyimpan url file yang bersangkutan (http://update.windodol.com/update.cab) kedalam databasenya.

Client <– [Mikrotik + Proxy/Adv. Proxy + Upd. Accelerator (Cached)] <– Internet

Jika ada klien kedua yang merequest patch yang sama dengan url yang identik, maka squid akan mengambil file update.cab dari url cache lokal, misalnya http://192.168.90.2/updatecache/asdfasdf/update.cab (Update Accelerator HIT).

Akan tetapi, proses pengambilan patch dari cache lokal ini akan di “masquerade” oleh squid. File patch yang disampaikan ke klien oleh squid tetap memiliki URL asli yaitu http://update.windodol.com/update.cab, bukan menggunakan url cache (http://192.168.90.2/updatecache/asdfasdf/update.cab).

Hasilnya, patch yang hit tersebut akan tetap terkena penalti di traffic shaping mikrotik karena mikrotik menganggap file yang di didownload berasal dari internet. Download patch tersebut tidak akan disampaikan dengan full speed ke klien.

before trick

Bagaimana cara untuk mengatasi hal ini?

Sederhananya adalah dengan memaksa penyampaian patch langsung menggunakan URL cache lokal. Dalam contoh implementasi hal ini saya menggunakan :

  • Mikrotik RB750 dengan IP mikrotik – proxy 192.168.90.1, dan IP mikrotik – klien 192.168.1.1
  • Mesin proxy berbasis IPFire dengan IP interface green0 (menuju LAN) 192.168.90.2

Pengaturan disisi proxy

Pertama, menandai semua paket data yang keluar dari port 81 dengan DSCP 12 dengan menggunakan iptables. IPFire secara default membuka akses HTTP pada port 81. Hal ini menjadi menguntungkan, karena tidak menggunakan port 80 yang bersinggungan langsung dengan aktivitas akses squid. Agar rule iptables nya jalan setiap kali start-up tambahkan rule tersebut didalam file /etc/sysconfig/firewall.local.

vim /etc/sysconfig/firewall.local

tambahkan baris berikut ini :

## add your 'start' rules here
iptables -t mangle -A OUTPUT -p tcp --sport 81 -j DSCP --set-dscp 12

Catatan: green0 adalah interface IPFire yang menuju LAN.

Kedua, IPFire memiliki modul PHP namun secara default belum diaktifkan, oleh karena itu kita harus mengaktifkannya secara manual. Kita akan mengaktifkan PHP untuk memanipulasi proses pengambilan patch/updates di update accelerator.

vim /etc/httpd/conf/loadmodule.conf

Temukan baris #LoadModule php5_module /usr/lib/apache/libphp5.so, dan hilangkan tanda pagar didepannya. Menjadi :

LoadModule php5_module /usr/lib/apache/libphp5.so

Selanjutnya tambahkan php handler :

vim /etc/httpd/conf/global.conf

Tambahkan php handler pada global.conf

AddHandler php5-script php htm html

Restart apache agar membaca konfigurasi baru

apachectl -k graceful

Oke.. step ketiga, menambahkan script PHP yang akan meredirect request update accelerator dan squid ke cache lokal.

vim /srv/web/ipfire/html/get.php

Copas script berikut ini :

<?php
$ipfire = "http://192.168.90.2:81/updatecache/";
$updxlget = $ipfire.$_GET['vendorid'];
header("Location: $updxlget");
exit;
?>

Catatan untuk PHP coder :

404 Not Found? Impossible.. karena update accelerator akan terlebih dahulu memeriksa eksistensi file yang bersangkutan.

Ke empat, edit file update accelerator. Jika anda sedang menggunakan advanced proxy dan mengaktifkan update accelerator, silakan non-aktifkan dahulu update accelerator untuk menghindari terjadinya kesalahan.

cp /usr/sbin/updxlrator /usr/sbin/updxlrator.bak

vim /usr/sbin/updxlrator

Carilah baris berikut ini :

$cacheurl="http://$netsettings{'GREEN_ADDRESS'}:$http_port/updatecache/$vendorid/$uuid/$updfile";

kemudian ganti menjadi :

$cacheurl="http://$netsettings{'GREEN_ADDRESS'}:$http_port/get.php?vendorid=$vendorid/$uuid/$updfile";

Selesai, you are good to go!

Pengaturan disisi mikrotik

Pengaturan di mikrotik cukup sederhana, cukup tambahkan DSCP matcher di mangle.

/ip firewall mangle
add action=mark-packet chain=postrouting comment="dscp matcher" dscp=12 \
new-packet-mark=packet-hits passthrough=no

Kemudian tambahkan simple queue atau queue tree sesuai selera anda. Dalam contoh ini saya melimit paket HIT advanced proxy atau Update Accelerator 30 Mbps menggunakan queue tree.

/queue tree
add max-limit=30M name=cache-hits packet-mark=packet-hits parent=global-out priority=1 \
queue=default-small

Jika anda menggunakan squid / advanced proxy yang support ZPH ToS atau QoS, anda tidak perlu menambahkan rule tambahan pada mangle, cukup dengan menggunakan DSCP matcher maka paket HIT proxy atau update accelerator akan ditangani hanya dengan satu rules.

Screenshot setelah menggunakan trik redirection ini :

after trick

Log httpd pada saat update / patch diambil dari cache lokal :

httpd log

Screenshot status Update Accelerator yang saya gunakan saat ini :

mycachestats

Pada gambar diatas terlihat efisiensi bandwidth mencapai indeks 15 lebih (1500%) dan bandwidth yang diselamatkan oleh Update Accelerator berjumlah 2 terabyte lebih.

Semoga tutorial ini bermanfaat!

Pembaca yang baik selalu meninggalkan komentar yang bermanfaat atau mengucapkan terima kasih jika posting ini bermanfaat. Dilarang keras copas tutorial ini, kecuali dengan menyertakan linkback ke blog ini. :)

69 Comments

  1. obiwan

    Mas fajar, saat ini saya masih pake ipcop, dan saya berencana pindah ke ipfire (masih baca2 dan pelajari) karena game facebook (https) tidak bisa di cache di ipcop. Saya sudah baca di tutorial mas fajar bahwa ipfire bisa untuk cache https.
    Dari tuts diatas, berarti ada perbedaan ya antara ipcop dan ipfire?, kalo di ipcop kan gak perlu di tambah apa2 untuk update acceleratornya. Cukup tambahkan 0x30 di include.acl ipcop dan mangle dscp 12 di mikrotik maka adv-proxy dan update accelerator sudah bisa loss.
    Benar begitu ya, mas? Untuk ipfire, update acceleratornya harus “dioprek” lagi agar bisa hit loss?

    • fazar

      qos untuk cache internal squid memang bisa langsung pake 0x30, tapi kalo cache eksternal seperti update accellerator harus di oprek seperti itu mas. demikian. :)

      • obiwan

        Terimakasih untuk jawabannya, mas Fajar. Berarti emang sedikit beda ya sama ipcop.
        Satu lagi mas, sebagaimana di ipcop, apakah di ipfire ketika instalasi awal, kita bisa menentukan sendiri ukuran partisi (dimana disini partisi untuk update accelerator akan saya buat paling besar) dengan perintah “interupsi”: vmlinuz fdisk?

        • fazar

          saya belum pernah nyoba sih ngatur partisi sendiri, tapi kemungkinan besar bisa karena IPFire sendiri di porting dari IPCop. Untuk coba cache https atau test yang lain, silakan pakai core 85 di http://bahaya.kebiasaan.ml/ :)

          • obiwan

            Lapor mas..hehe..
            1. Setelah saya perhatikan, partisi ipcop dan ipfire beda, mas.
            Di ipfire ini, partisi untuk cache udah otomatis dibikin paling gede dan jadi satu, kalo di ipcop, partisi untuk cache dan update-accelerator sendiri-sendiri.
            2. Mulanya saya install ipfire menggunakan 2 interface, green-red, untuk akses webif harus masquerade. Setelah saya ganti pake single interface green only (ikut panduan), gak perlu masquerade langsung bisa.
            Sekian mas, semoga berguna untuk pembaca yang lain. Salam.

          • fazar

            Wah.. sip banget buat konfirmasi dan info nya, ini info berharga buat yang mau pindah dari IPCop ke IPFire.. trims mas.

  2. Rheinsnet

    simak az dlu gan…sambil belajar

  3. intel xeon

    terima kasih kang sangat sangat bermanfaat…..

  4. masih meraba-raba om fazar.
    masih fresh dalam mikrotik, moga aja step by step sy bisa belajar dari Dunia Internet, khususnya site om fazar.
    lam kenal
    :)

  5. jowan

    mas saya mau tanya
    saya coba merubah baris :
    Temukan baris
    #LoadModule php5_module /usr/lib/apache/libphp5.so,
    dan hilangkan tanda pagar didepannya.
    Menjadi :
    LoadModule php5_module /usr/lib/apache/libphp5.so

    tetapi saya tidak menemukannya ?
    apa saya tambahkan saja.. atau ada kekurangan di ipfire saya yah..?

    • fazar

      pastikan bahwa file yang mas edit/sunting adalah /etc/httpd/conf/loadmodule.conf
      jika memang tidak menemukan baris tersebut, silakan menambahkannya sendiri. demikian, dan semoga membantu. :)

      • bejo

        dikita malah udah tanpa #
        LoadModule php5_module /usr/lib/apache/libphp5.so

        • fazar

          semenjak ane bahas squid monitoring pake sqstats di forum resmi ipfire (sqstats perlu modul php), developer akhirnya menetapkan modul php secara default sudah aktif di ipfire core terbaru. :)

          • bejo

            mas, klo pake single interface g bisa y? kok di kita tetep kelimit

          • fazar

            Bisa kok mas.. periksa kembali dscp/mark packetnya.

  6. newbie

    kok saya g keluar gt ya mas, update accelerator nya, moodo marble jg blom terhit

    • fazar

      modoo kalo nggak salah patch nya 206. secara normal nggak bisa di cache oleh squid.

  7. Priyo

    boleh minta literatur yg lengkap cara update isi proxy saya..??
    biar waktu buka game fb gak lemot
    krn ni komputer saya kasih defrizz.. jd setiap on game fb harus dr awal.. klo proxy normal kan bisa enak.. lgsg kebuka

    • fazar

      squid proxy terisi secara otomatis pada saat kita browsing, mungkin yg perlu di tuning adalah konfigurasinya agar squid bisa menghasilkan hit yg lebih optimal. kalo mas ada permasalahan, monggo share disink biar kita periksa bareng..

  8. Priyo

    masih bingung gan.. :lol:
    ni saya bru mo coba update isi ubuntu server
    tp msih bingung cara’y
    soal’e.. game2 di fb gk bisa ke cas ma proxy

    • fazar

      update accelerator tidak di desain untuk ubuntu. akan tetapi jika masbro pake squid, maka biarkanlah squid nya jalan sekitar seminggu untuk ngisi cache. kalo cache udah terisi, ntar keliatan kok hit nya naik signifikan.

  9. Ass.
    Mantab ilmunya nih gan.
    Akhirnya ketemu juga caranya, tapi sayangnya mesin proxy-nya yang tdk sama dengan mesin proxy yang saya gunakan.
    Bagaimana caranya jika mesin proxy-nya menggunakan lusca ubuntu 11.10 server gan?

    Tolong pencerahannya y?

    Tks.
    Wass.

  10. masanom

    mas Fajar… Pertanyaan saya belum terjawab :D

    • fazar

      ane juga bingung, coz ditempat ane semuanya jalan normal. beberapa visitor blog ini juga berhasil dengan baik melakukan implementasi teknik ini.
      namun ane rada curiga sama kode php nya itu – kudu dibenerin buat ngecek eksistensi file. ada yg bisa bantu nggak? :D

Leave a Reply

Your email address will not be published. Required fields are marked *