Terkadang beberapa clients secara bersamaan menonton video youtube yang sama – dan hal ini berimbas pada penggunaan bandwidth yang besar. Dengan menggunakan squid, kita dapat melakukan efisiensi penggunaan bandwidth dengan melakukan dynamic content caching – termasuk didalamnya melakukan caching video youtube.
Pertanyaan yang sering muncul : pilih lusca atau squid?
Lusca di kembangkan berdasarkan squid 2.7, dan memiliki opsi tuning lebih banyak. Lusca dapat di implementasikan lebih baik dalam hal melakukan video caching jika dibandingkan dengan squid versi lainnya.
Kekurangannya adalah, lusca di kembangkan secara pribadi (oleh Adrian Chadd) dan menggunakan dasar squid 2.7. Squid 2.7 sendiri sudah “agak” lama tidak didevelop oleh developer squid. Squid 2.7 dinyatakan obsolete dan tidak didukung lagi jika squid 3.2 secara resmi dirilis.
Apa saja yang bisa di cache oleh lusca?
Ada banyak, seperti windows update, antivirus updates, video streaming seperti pada Youtube, Tube8 dan tube-tube lainnya, Facebook, mp3, mp4 dan sebagainya.
Lusca dapat dengan mudah di instal pada mesin berbasis *NIX, seperti Linux (Ubuntu dan CentOS sangat saya rekomendasikan), FreeBSD, OpenBSD, dan lain-lainnya.
Walaupun demikian, tutorial ini dapat di implementasikan pada squid2.7STABLE9 dan LUSCA
Catatan – Read me!!
Pada posting ini youtube yang akan di rewrite adalah youtube range (video youtube yang di split menjadi beberapa bagian yang ukurannya bervariasi antara 1 – 15 Mb).
Jika anda ingin me-rewrite youtube non-range (alias video youtube di cache secara full / bukan di split atau dipisah menjadi beberapa bagian), silakan membaca posting saya yang berjudul “Squid Caching Youtube Non-Range“.
Pada update youtube terbaru, tampaknya mustahil untuk “memaksa” agar video yang di play menjadi non-range :(
Bagaimana melakukan caching youtube dengan Lusca / squid2.7STABLE9?
Saya berasumsi Lusca/Squid sudah terinstal dengan baik dimesin anda. Jika anda belum menginstal Lusca/Squid atau kebingungan melakukan instalasinya, silakan bertanya kepada mbah Google. :)
Pertama, carilah tag konfigurasi seperti dibawah ini pada squid.conf, kemudian hapus:
acl QUERY urlpath_regex cgi-bin \? cache deny QUERY
Kemudian, tambahkan konfigurasi berikut ini (sesuaikan dengan konfigurasi anda!) :
# allow cache untuk youtube acl youtube dstdomain .youtube.com cache allow youtube cache allow all # max. object 128 Mb / bisa disesuaikan minimum_object_size 512 bytes maximum_object_size 128 Mb # acl untuk URL youtube yang dikirim ke storeurl acl youtube url_regex -i youtube.*(ptracking|stream_204|player_204|gen_204).*$ acl youtube url_regex -i \.c\.(youtube|google)\.com\/(get_video|videoplayback|videoplay).*$ storeurl_access allow youtube # acl tambahan untuk storeurl - 1 domain perbaris :) # bisa di jadiin 1 baris, tapi kata temen ane yg bule, biar squid lebih # efisien parsing config, sebaiknya dijadiin beberapa baris.. (bener nggak ya?) acl storeurl_domain dstdomain .fbcdn.net acl storeurl_domain dstdomain .dailymotion.com acl storeurl_domain dstdomain .metacafe.com acl storeurl_domain dstdomain .filehippo.com acl storeurl_domain dstdomain .redtube.com acl storeurl_domain dstdomain .tube8.com acl storeurl_domain dstdomain .phncdn.com acl storeurl_domain dstdomain .download.youporn.com acl storeurl_domain dstdomain .static.blip.tv storeurl_access allow storeurl_domain # catch all... deny all... acl store_regex url_regex -i cdn(.?)/[0-9a-zA-Z_-]*.?\.(jpg|jpeg|gif|png|ico|mp3|flv|mp4) acl store_regex url_regex ^http:\/\/([a-zA-Z-]+[0-9-]+)\.[A-Za-z]*\.[A-Za-z]* acl store_regex url_regex (([a-z]{1,2}[0-9]{1,3})|([0-9]{1,3}[a-z]{1,2}))\.[a-z]*[0-9]?\.[a-z]{3} storeurl_access allow store_regex storeurl_access deny all # setting storeurl-nya disini nih... # kalo user yg dilayani squid jumlahnya banyak, maka children bisa ditambah storeurl_rewrite_program /etc/squid/storeurl.pl storeurl_rewrite_children 7 storeurl_rewrite_concurrency 50 # refresh_pattern refresh_pattern (get_video\?|videoplayback\?|videodownload\?) 5259487 99999999% 5259487 override-expire ignore-reload ignore-private refresh_pattern -i \.(flv|mp4)$ 10080 90% 999999 ignore-no-cache override-expire ignore-private ##### jika ada refresh pattern lain, letakkan dibawah baris ini ##### refresh_pattern -i \.fbcdn.net.*\.(jpg|gif|png|mp3) 10080 80% 10080 ignore-reload override-expire ignore-no-cache ##### default refresh_pattern, letakkan paling bawah! ##### refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_pattern . 0 0% 4320
Selanjutnya, bikin storeurl nya (credits mas ucok_karnadi)
# vim /etc/squid/storeurl.pl
Isi storeurl nya :
#!/usr/bin/perl $|=1; while (<>) { @X = split; if ( $X[0] =~ m/^http\:\/\/.*/) { $x = $X[0]; $_ = $X[0]; $u = $X[0]; } else { $x = $X[1]; $_ = $X[1]; $u = $X[1]; } if ($x =~ m/^http\:\/\/.*(profile|photo|creative).*\.ak\.fbcdn\.net\/((h|)(profile|photos)-ak-)(snc|ash|prn|frc)[0-9]?(.*)/) { $out="http://fbcdn.net.squid.internal/" . $2 . "fb" . $6 ; } elsif ($X[1] =~ m/^http(|s)\:\/\/.*youtube.*(ptracking|stream_204|player_204|gen_204).*(video_id|docid|v)\=([^\&\s]*).*/){ $vid = $4 ; @cpn = m/[&?]cpn\=([^\&\s]*)/; $fn = "/var/log/squid/@cpn"; unless (-e $fn) { open FH,">".$fn ; print FH "$vid\n"; close FH; } print $x . $X[1] . "\n"; } elsif ($X[1] =~ m/^http\:\/\/.*(youtube|google).*videoplayback.*/){ @itag = m/[&?](itag=[0-9]*)/; @ids = m/[&?]id\=([^\&\s]*)/; @mime = m/[&?](mime\=[^\&\s]*)/; @cpn = m/[&?]cpn\=([^\&\s]*)/; if (defined($cpn[0])) { $fn = "/tmp/@cpn"; if (-e $fn) { open FH,"<".$fn ; $id = <FH>; chomp $id ; close FH ; } else { $id = $ids[0] ; } } else { $id = $ids[0] ; } @range = m/[&?](range=[^\&\s]*)/; print $x . "http://video-srv.youtube.com.SQUIDINTERNAL/id=" . $id . "&@itag@range@mime\n"; } elsif ($x =~ m/^http:\/\/i[1-4]\.ytimg\.com\/(.*)/) { $out="http://ytimg.com.squid.internal/" . $1 ; } elsif ($x =~ m/^http:\/\/.*\.dl\.sourceforge\.net\/(.*)/) { $out="http://dl.sourceforge.net.squid.internal/" . $1 ; #Speedtest } elsif ($x =~ m/^http\:\/\/.*\/speedtest\/(.*\.(jpg|txt)).*/) { $out="http://speedtest.squid.internal/" . $1 ; #BLOGSPOT } elsif ($x =~ m/^http:\/\/[1-4]\.bp\.(blogspot\.com.*)/) { $out="http://blog-cdn." . $1 ; #AVAST } elsif ($x =~ m/^http:\/\/download[0-9]{3}.(avast.com.*)/) { $out="http://avast-cdn." . $1 ; #AVAST } elsif ($x =~ m/^http:\/\/[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\/(iavs.*)/) { $out="http://avast-cdn.avast.com/" . $1 ; #KAV } elsif ($x =~ m/^http:\/\/dnl-[0-9]{2}.(geo.kaspersky.com.*)/) { $out="http://kav-cdn." . $1 ; #AVG } elsif ($x =~ m/^http:\/\/update.avg.com/) { $out="http://avg-cdn." . $1 ; #maps.google.com } elsif ($x =~ m/^http:\/\/(cbk|mt|khm|mlt|tbn)[0-9]?(.google\.co(m|\.uk|\.id).*)/) { $out="http://" . $1 . $2 ; #gstatic and/or wikimapia } elsif ($x =~ m/^http:\/\/([a-z])[0-9]?(\.gstatic\.com.*|\.wikimapia\.org.*)/) { $out="http://" . $1 . $2 ; #maps.google.com } elsif ($x =~ m/^http:\/\/(khm|mt)[0-9]?(.google.com.*)/) { $out="http://" . $1 . $2 ; #Google } elsif ($x =~ m/^http:\/\/www\.google-analytics\.com\/__utm\.gif\?.*/) { $out="http://www.google-analytics.com/__utm.gif"; } elsif ($x =~ m/^http:\/\/(www\.ziddu\.com.*\.[^\/]{3,4})\/(.*?)/) { $out="http://" . $1 ; #cdn, varialble 1st path } elsif (($x =~ /filehippo/) && (m/^http:\/\/(.*?)\.(.*?)\/(.*?)\/(.*)\.([a-z0-9]{3,4})(\?.*)?/)) { @y = ($1,$2,$4,$5); $y[0] =~ s/[a-z0-9]{2,5}/cdn./; $out="http://" . $y[0] . $y[1] . "/" . $y[2] . "." . $y[3] ; #rapidshare } elsif (($x =~ /rapidshare/) && (m/^http:\/\/(([A-Za-z]+[0-9-.]+)*?)([a-z]*\.[^\/]{3}\/[a-z]*\/[0-9]*)\/(.*?)\/([^\/\?\&]{4,})$/)) { $out="http://cdn." . $3 . "/squid.internal/" . $5 ; #for yimg.com video } elsif ($x =~ m/^http:\/\/(.*yimg.com)\/\/(.*)\/([^\/\?\&]*\/[^\/\?\&]*\.[^\/\?\&]{3,4})(\?.*)?$/) { $out="http://cdn.yimg.com/" . $3 ; #for yimg.com doubled } elsif ($x =~ m/^http:\/\/(.*?)\.yimg\.com\/(.*?)\.yimg\.com\/(.*?)\?(.*)/) { $out="http://cdn.yimg.com/" . $3 ; #for yimg.com with &sig= } elsif ($x =~ m/^http:\/\/([^\.]*)\.yimg\.com\/(.*)/) { @y = ($1,$2); $y[0] =~ s/[a-z]+([0-9]+)?/cdn/; $y[1] =~ s/&sig=.*//; $out="http://" . $y[0] . ".yimg.com/" . $y[1] ; } else { $out=$x; } if ( $X[0] =~ m/^http\:\/\/.*/) { print "$out\n" ; } else { print $X[0] . "$out\n" ; } }
Lakukan chmod pada storeurl agar dapat di eksekusi :
# chmod +x /etc/squid/storeurl.pl
Jalankan lusca/squid anda, dan monggo cek Youtube dan access.log untuk memastikan video cachingnya berjalan baik.
Catatan :
- Youtube biasanya suka gonta ganti coding, yang mengakibatkan storeurl.pl tidak dapat melakukan redirect dengan benar. Oleh karena itu, biasakan mengupdate storeurl.pl dengan versi terbaru.
- Untuk konfigurasi dasar squid2.7STABLE9 atau Lusca, bisa dilihat disini.
Last update : 17 Desember 2013
Catatan :
- Jangan asal copas… perhatikan kode / perintah yang anda copas.
- Saya tidak menjamin panduan ini bisa berhasil melakukan cache Youtube atau tidak. Just give a try! :)
_____________________________
Credits :
- http://aacable.wordpress.com/2012/01/11/howto-cache-youtube-with-squid-lusca-and-bypass-cached-videos-from-mikrotik-queue/
- http://wiki.squid-cache.org/ConfigExamples/DynamicContent/YouTube
- http://www.forummikrotik.com/linux-support/21089-new-storeurl-untuk-youtube-file-range.html (thanks mas ucok_karnadi)
Pake yg mana ya mas bro…saya sdh pake yg punya bang ucok karnadi update terakhir tgl 25 des 2012 semua link youtube ter chache dengan baik kecuali link diatas fatin shidqia – grenade. boleh minta storeurl.pl nya masbro fazar?
storeurl nya yg saya pake sama kok. monggo cek http://pastebin.com/SDxRFGTV
Mas bro fazar…coba buka video ini masih An error occurred. Please try again later.
www.youtube.com/watch?v=G-tZHIfKD2A
bisa kok masbro… fatin shidqia – grenade. lancar jaya mas. coba mas update storeurl nya :)
untuk script storeurl.pl , caching youtube & speedtes masih works nggak?
tested and works like a charm..
hello,
is this still working now ??
thank you
i can confirm this work.i used it on my network.
Mas fazar ….bisa ngeremot proxy and mikrotik Ku ???
thanks yah…..
ada masalah apa ya pakbro? silakan hubungi saya di facebook.com/symbio jika memerlukan bantuan. :)
Mas Fazar, saya ini pemula yang sementara berusaha di RT-RWnet dengan ROS Mikrotik. Awal berdiri biasa-biasa saja karena pelanggan masih sedikit. Tetapi ketika pelanggan mulai banyak dengan berbagai selera ber-internet, mulai dari yang game, facebook-an, dan download serta yang lebih parah menurut saya yaitu yang gemar nonton Youtube. Saya tertarik dengan penjelasan di atas. Tapi saya minta saran dari mas Fazar, kira-kira untuk RTRW saya, paling pas untuk proxy-nya pake yang mana, karena setelah saya googling, ternyata ada banyak macam (Ubuntu, Ipfire, Ipcop, dll). Perlu diketahui saya menggunakan mikrotik untuk pengaturan jaringan RB 7xxx, dan atas saran teman jika akan menggunakan proxy sebaiknya saya menggunakan sistem DMZ. Mungkin jalan keluar dari permasalahan saya akan terjawab atas saran Mas Fazar….
semakin banyak user rtrw, semakin asik untuk bereksperimen :)
untuk distribusi linux yg dijalankan sebagai proxy sebenernya itu terserah kepada masbro sendiri. mau pilih ubuntu, centos, ipcop, ipfire, clearos, freebsd, openbsd, atau apa saja terserah, karena squid dapat bekerja optimal di distribusi linux apapun (terkecuali windows – untuk windows bisa pake handycache). saya pribadi pake ipfire karena sistemnya yg ringkas dan mudah diatur lewat web browser. kalo boleh tau user hotspot nya ada berapa banyak?
mikrotik seri RB7xx kalo untuk hotspot kecil-kecilan nggak masalah, tapi kalo usernya udah mulai banyak dan hobi download, dsb maka masbro perlu mempertimbangkan untuk pake routerboard yg lebih mumpuni (minimal RB450G) karena seri 7xx mempunyai resiko jadi “budeg” alias nggak bisa kasih response pada saat cpu load dan penggunaan memory melonjak saat di pakai banyak user secara bersamaan.
apakah boleh dan penting proxy dimasukkan dalam DMZ (demilitarized zone)? di mikrotik nggak ada setting spesifik untuk DMZ, yang ada adalah fungsi firewall > nat. DMZ biasanya dipake untuk webserver, mailserver, atau server data yg bisa diakses dari jaringan luar. sedangkan proxy cuman digunakan untuk melayani jaringan internal. jika di DMZ malah ada kemungkinan server proxy anda digunakan dari luar jaringan internal.
demikian sedikit tambahan dari saya, semoga bermanfaat, dan salam hangat untuk rekan-rekan disana. good luck! :)
Mas Fazar yang baik hati,
Terima kasih untuk suggest-nya yang pasti saya juga pingin mencoba Ipfire, tapi saya mohon juga bantuan masbro jika ada masalah saat instalasi dan settingan.
Soal ROS Mikrotik RB 7xx, mungkin dugaan masbro ada benarnya juga. Terus terang saat ini saya menggunakan IPcop. Awalnya saya menggunakan settingan Squid.conf dan storeurl.pl yang ada di http://aacable.wordpress.com/2012/01/11/howto-cache-youtube-with-squid-lusca-and-bypass-cached-videos-from-mikrotik-queue/
tetapi mulai bulan november kemarin kayaknya khusus untuk Youtube, sudah tidak berfungsi lagi. Artinya untuk cache youtube kadang jalan tapi kadang juga tidak. Apakah itu juga pengaruh dari script youtube sudah berubah atau memang ROS mikrotik yang kayaknya tidak mampu untuk mensupply permintaan client ke proxy
struktur/topologi jaringan saya seperti ini:
Modem ====>Mikrotik<===== IPCop Proxy
+
+
Client
Ok, thank's berat utk mas Fazar.
tampilan topologi nya agak mungkin tidak sesuai, kalo diartikan saya pake sistim semua sejajar di mikrotik, baik modem, client dan proxy. :=D
Nggak masalah.. :)
Kemaren youtube memang merubah coding mereka, dan hasilnya video tidak tercache dengan baik jika user menggeser seekbar di video player youtube. Tapi sepertinya masalah tersebut sudah tidak terjadi, dan tutorial dari aacable bisa dipake kembali.
Ipfire mirip seperti ipcop, walaupun demikian ipfire dibuat berdasarkan linux from scratch. Untuk storeurl bisa kok pake yg ada ditutorial saya.
Pertimbangkan untuk mengganti rb anda.
Mas Fazar,
karena pingin problem solved one by one, sehari ini saya coba cari referensi soal IPFire. Saya jadi tertarik untuk mencobanya. Ternyata setelah saya googling, rata2 di Indonesia mengarah ke maz Fazar sendiri. (Jangan-jangan mas, suhunya Ipfire…..oupsss!!!!). Jujur saja mas, saya jadi penasaran nich.
Kalo ipfire mirip ipcop, lalu dimana letak perbedaannya?
Lalu untuk spesifikasinya khusus HDD, apakah perlu yang kapasitas besar? Soalnya ipcop kelemahannya secara otomatis sistem mempartisi HDD yang menurut pengalaman yang saya rasakan, HDD 500Gb mubazir. Gak kepake semua, terbaca disistemnya.
Kalo spec kompi, yang kaya ginian support IPfire gak ya?
1. Proc Dual Core 2,5 Ghz
2. DDR3 4gb
3. HDD 500Gb
4. 2 buah Lancard
Untuk RB rencanya udah mau diganti dengan yang lebih support untuk banyak client.
Kalo dibilang suhu sih nggak juga, hehehe. Karena saya hanya ikut membantu memperkenalkan ipfire berdasarkan permintaan dari developernya.
Ipfire mendukung penggunaan hardware terbaru dipasaran karena menggunakan kernel dan modul modul yang selalu update. Update ipfire sendiri rilis berkala antara 30 sampai dengan 60 hari dan dikenal dengan istilah update core. Update core terakhir sampai tulisan ini saya buat adalah update core 65.
Support penggunaan sata, raid, dsb. Saya sendiri pake proxy ipfire menggunakan harddisk 1 terabyte dan udah running 1 tahunan tanpa masalah. Interface dan pengaturannya identik dengan ipcop, namun “daleman”nya 100% beda.
Spek tersebut udah cukup banget. Dengan 1 lan juga bisa jalan (cek tutsnya di www.ipfire.web.id).
Fyi, ipfire pake squid 3.x yg nggak support zph. Kalo mau pake zph, silakan pake lusca proxy (unofficial) yg ada diblog ini. Saran saya, coba dulu install dan pelajari di sistem virtual (vmware, virtualpc, dsb) agar masbro lebih familiar dengan ipfire. Kalo udah ngerti, baru deh instal ke pc beneran. Goodluck dan semoga bermanfaat.
mass ngatasi youtube seeking bar gimana mzz.
salam dr alam-net jambi
nunggu petuahnya juga :D
kl range sih aman seekbarnya cuman kl non range jd ga mau seekbarnya
Kebalik kali yah.. yg range aman seekbarnya, sedangkan kalo yg full seekbarnya bermasalah.
saya pemula di bidang seperti ini mas, maaf kalau pertanyaan saya lucu atau gimana, bagaimana cara menambahkan delay pool pada lusca terima kasih sebelumnya, soalnya saya telah mencoba dan kayaknya tidak berfungsi
Boleh dunk mas minta refresh patern yang baik dan bagus… Yang saya gunakan sekarang masih terlalu banyak miss nya. Minta saran dari mas fazar refresh_patern dan storeurl.pl yang dipakai sekarang model bagimana..?
“agar video di cache sepenuhnya, buatlah acl url_path video youtube yg partial”
Kebetulan saya sudah mencoba beberapa konfigurasi dan nampaknya masih gagal.
bagaimana ACLnya yang partial itu dan kenapa di deny ?