Kau bisa bersembunyi dari kesalahanmu, tapi tidak dari penyesalanmu. Kau bisa bermain dengan dramamu, tapi tidak dengan karmamu.

  • About

    Seorang Teknisi Jaringan yang pernah berkecimpung di Internet Service Provider (ISP) dan akhirnya memutuskan diri untuk menjadi freelancer yang berdomisili di Solo, Surakarta Hadiningrat.

  • Services

    Melayani jasa pasang Internet berbasis Wireless maupun Fiber Optic, Jasa Pasang Tower/Pipa, Pointing Wireless, Setting Router, CCTV, Hotspot, Proxy, Web Server, Network Managed dan Monitoring

  • Contact

    Berbagai saran, kritikan, keluhan dan masukan akan sangat berarti bagi saya. Anda dapat menghubungi/whatsapp saya di nomor:08564-212-8686 atau melalui BBM:2128686

    Friday, November 16, 2018

    sebagai catatan untuk menangkap gadget yang berada di dhcp-server leases mikrotik kemudian ditambahkan ke addresslist. terserah mau di mark routing atau bagaimana yg jelas sudah masuk di addresslist

    :local newDynamics value=[/ip dhcp-server lease find dynamic=yes];
    :local newList value="";
    :foreach i in=[$newDynamics] do={
    :local dynamicIP [/ip dhcp-server lease get $i address];
    :local dynamicMAC [/ip dhcp-server lease get $i mac-address];
    :local dynamicHOST [/ip dhcp-server lease get $i host-name];
    :if ($dynamicHOST~"(Andro|andro|Redmi|redmi|Vivo|vivo|Iphone|iphone|Galaxy|galaxy|BLACKBER)") do={
          /ip firewall address-list add list=cidr_hs_office address=$dynamicIP comment=$dynamicHOST
          :log warning "$dynamicIP added"
          }
    }

    Saturday, November 3, 2018

    :global listrik
    :global limitmsgon
    :global limitmsgoff
    /in ethernet monitor ether1.MJGD once do={
       :global indikator $status
       :if ($indikator = "link-ok") do={:set listrik 1} else={:set listrik 0}
    }
    :local router [/system identity get name]
    :local time [/system clock get time]
    :local date [/system clock get date]
    :local voltage [/system health get voltage]
    :local tegangan (. [:pick $voltage 0 2] . "," . [:pick $voltage 2 3] ." volt")
    :local indication "PLN NYALA"
    :local indicatioff "PLN MATI"
    :local msgon ("[ $router ]%0A" . $indication . " pada : %0A" . $time .", ".$date."%0A"."voltase saat ini $tegangan%0A")
    :local msgoff ("[ $router ]%0A" . $indicatioff . " pada : %0A" . $time .", ".$date."%0A"."voltase saat ini $tegangan%0A")
    # reset counter
    :if ($listrik =1) do={:set limitmsgoff 0;:set limitmsgon ($limitmsgon +1)}
    :if ($listrik =0 && $limitmsgon >=5) do={:set limitmsgon 0}
    # start pesan listrik nyala
    :if (($listrik =1) && ($limitmsgon =2)) do={
    /tool fetch url="https://api.telegram.org/bot380992034:AAGn69QpFDuLSOQd3E3JtI5nhfUmgKlKmkls/sendMessage?chat_id=-203xxxxxx&text=$msgon" keep-result=no
    }
    # start pesan listrik mati
    :if ($listrik =0 && $limitmsgoff <5 ) do={
    /tool fetch url="https://api.telegram.org/bot380992034:AAGn69QpFDuLSOQd3E3JtI5nhfUmgKlKmkls/sendMessage?chat_id=-203xxxxxx&text=$msgoff" keep-result=no
    :set limitmsgoff ($limitmsgoff +1)
    }

    Tuesday, October 23, 2018

    apt install git gstreamer1.0-plugins-base gstreamer1.0-plugins-good gir1.2-gstreamer-1.0 python-gst-1.0 python-redis python-gi python-setuptools -y
    apt install git python-gst0.10 python-redis gstreamer0.10-plugins-base gstreamer0.10-plugins-bad gstreamer0.10-plugins-good gstreamer0.10-plugins-ugly gstreamer0.10-tools python-gobject python-gobject-2 gstreamer0.10-alsa python-setuptools -y
    apt install gstreamer-tools -y
    apt install redis-server -y
    apt install pulseaudio -y
    apt install python-pip -y
    apt install python3-gi -y
    sed -i.bak 's/bind 127.*/bind 0.0.0.0/' /etc/redis/redis.conf
    /etc/init.d/redis-server restart
    #pip install --user --upgrade setuptools wheel
    cd /usr/local/lib/python2.7/dist-packages
    wget https://pypi.python.org/packages/source/O/OpenOB/OpenOB-3.2.0.tar.gz
    # copykan openob ke existing direktori openob
    # lalu
    # openob 192.168.242.11 node-fm test-link tx 192.168.15.10

    Sunday, August 26, 2018


    Yeah, kali ini saya akan share script untuk me-generate netwatch. Hanya untuk catatan pribadi aja sih

    langsung saja

    :for x from=2 to=254 step=8 do={/tool netwatch add host="10.10.40.$x" interval=00:00:03 down-script=":local client [/tool netwatch get [/tool netwatch find host=\"10.10.40.$x\"] comment ];\n\n :log error \"\$client down\";\n\n /system script run telolet" up-script=":local client [/tool netwatch get [/tool netwatch find host=\"10.10.40.$x\"] comment ];\n\n :log warning \"\$client up\";\n\n /system script run up"}

    Saturday, June 2, 2018


    :foreach i in=[/ip firewall address-list find list=350 ] do={
    :local addrlist350 [/ip firewall address-list get $i address ]
    :log warning $addrlist350
    /ip fire mangle add chain=postrouting dst-address=$addrlist350 connection-mark=ggc_conn action=mark-packet new-packet-mark="ggc_$user" comment=$user

    Friday, June 1, 2018


    tambahkan script di scheduler dengan run startup
    :if ([:len ($000 || $150 || $200 || $250 || $300 || $350)] = 0) do={
    :global 000 10.8.8.0/27
    :global 150 10.8.8.32/27
    :global 200 10.8.8.64/26
    :global 250 10.8.8.128/26
    :global 300 10.8.8.192/27
    :global 350 10.8.8.224/27
    }

    kemudian bikin pool-ip
    /ip pool
    add name=000 ranges=10.8.8.2-10.8.8.30
    add name=150 ranges=10.8.8.33-10.8.8.62
    add name=200 ranges=10.8.8.65-10.8.8.126
    add name=250 ranges=10.8.8.129-10.8.8.191
    add name=300 ranges=10.8.8.193-10.8.8.222
    add name=350 ranges=10.8.8.225-10.8.8.254

    tambahkan di profile-pppoe on login
    :local parent PPPOE
    :local ippppoe [/ip address get [/ip address find interface=$user] network]
    :local ipclient
    :local iprouter [/ip address get [find  comment=$user] address ]
    :for i from=( [:len $iprouter] - 1) to=0 do={
    :if ( [:pick $iprouter $i] = "/") do={
    :set $ipclient ([:pick $iprouter 0 $i] +1)
    }
    }

    :if ($ippppoe in $suspend) do={
       :if ([:len [/ip firewall address-list find list=cidr_suspend comment=$user]] = 0 ) do={
       /ip firewall address-list add address=$ipclient list=cidr_suspend comment=$user
       }
    /queue simple add target=$ipclient name=$user parent=$parent max-limit=5000000/5000000
    }
    :if ($ippppoe in $150) do={
    /queue simple add target=$ipclient name=$user parent=$parent max-limit=2000000/2000000
    /ip firewall address-list remove [find list=cidr_suspend comment=$user]
    }
    :if ($ippppoe in $200) do={
    /queue simple add target=$ipclient name=$user parent=$parent max-limit=2500000/2500000
    /ip firewall address-list remove [find list=cidr_suspend comment=$user]}
    :if ($ippppoe in $300) do={
    /queue simple add target=$ipclient name=$user parent=$parent max-limit=3000000/3000000
    /ip fire mangle add chain=postrouting dst-address=$ipclient connection-mark=ggc_conn action=mark-packet new-packet-mark="ggc_$user" comment=$user
    /queue tree add name=$user limit-at=2000000 max-limit=5000000 parent=DN-PPPOE packet-mark="ggc_$user"
    /ip firewall address-list remove [find list=cidr_suspend comment=$user]
    }
    :if ($ippppoe in $350) do={
    /queue simple add target=$ipclient name=$user parent=$parent max-limit=3000000/3500000
    /ip fire mangle add chain=postrouting dst-address=$ipclient connection-mark=ggc_conn action=mark-packet new-packet-mark="ggc_$user" comment=$user
    /queue tree add name=$user limit-at=2000000 max-limit=8000000 parent=DN-PPPOE packet-mark="ggc_$user"
    /ip firewall address-list remove [find list=cidr_suspend comment=$user]
    }


    tambahkan di profile-pppoe on logout
    :log error "$user logout $ipclient"
    /queue simple remove [find name=$user]
    /queue tree remove [find name=$user]
    /ip fire mangle remove [find comment=$user]



    Kali ini saya akan berikan tips anti mainstream, dimana deliver ke pelanggan menggunakan ip static, namun secara management user dicontrol oleh userman. Teknik ini dibuat karena problem yang penulis alami ketika deliver bandwidth ke pelanggan mengalami kendala link dan perangkat yang dipasang pppoe-client tidak sempurna jika menggunakan produk selain mikrotik (tplink, tenda, maupun ubnt).
    Problem menggunakan TPLINK = dialup lama
    Problem menggunakan TENDA = dialup cenderung lebih cepat daripada TPLINK namun tetap saja ada jeda waktu yang membuat risih pelanggan, karena established pppoe butuh waktu yang cukup lama.
    Problem menggunakan UBNT = sama persis seperti TENDA maupun TPLINK.

    Nah, dari problem diatas, kita siasati seperti berikut :

    1. Sediakan Router utama, yang berisi userman berikut limiternya
    2. Sediakan Router khusus untuk dial pppoe-client
    3. Buat Point to point ip static antara ROUTER2 ke masing masing client, usahakan namanya sama dengan pppoe-client.
    4. Bikin semua point to point via pppoe dengan menggunakan kedua router tersebut
    5. Untuk Router point nomor 2, nantinya digunakan untuk dial semua user. Kemudian bikin environment gimana caranya agar ip p2p static dibikin mark-routing ke pppoe-client tadi.
    6. Dengan begitu, untuk 1 user memerlukan 1 mangle dan 1 mark routing, dan ini nanti kita buat secara otomatis berdasarkan user yang berhasil dial dengan status R pada interface pppoe-client.
    7. Trafik pppoe-client dan limiter pppoe-client tetap dibaca oleh Router point 1.
    8. Done !
    Ok langsung saja, script pada profile default ppp, pada on logon kasih script berikut :

    :local iface [/interface pppoe-client get [find running=yes] name]
    :local ipaddress ([/ip address get [find  comment=$iface] address ])
    :for i from=( [:len $ipaddress] - 1) to=0 step=-1 do={
          :if ( [:pick $ipaddress $i] = "/") do={
             :set ipaddress ( [:pick $ipaddress 0 $i] +1)
             }
          }
    :log warning $ipaddress
    /ip firewall mangle add comment=$iface chain=prerouting src-address=$ipaddress action=mark-routing new-routing-mark=$iface passthrough=no
    /ip route add routing-mark=$iface gateway=$iface

    Lalu untuk on logout script :
    :local iface [/interface pppoe-client get [find running=no] name]
    :log error "$iface removed"
    /ip fire mangle remove [find comment=$iface]
    /ip route remove [find routing-mark=$iface]

    Semoga bermanfaat.

    Monday, May 21, 2018


    Pernah mengalami seperti ini :

    Yubs, tentu sangat membosankan bukan? kenapa terjadi seperti itu ? jawabannya adalah karena si mbah google mendeteksi adanya malware atau sejenis spam yang melakukan query tertentu pada mesin pencarian google sehingga perlu adanya pembatasan atau pencegahan query. Bisa dibayangkan jika aktivitas spamming ini tidak diatasi pihak google. Tentu hal ini sudah dipikirkan mbah google agar kejadian ini teratasi dengan cara memberikan captcha. Perlu diketahui, ada beberapa kasus dimana tidak semua komputer terkena spam, mengenai hal ini saya kurang paham methode apa yg dipakai google untuk menerapkan pencegahan, karena fakta di lapangan ketika 1 ip public indih*me dishare ke banyak user, tidak semua kena spam. Namun jika terus menerus kena spam, dalam kurun waktu sekitar 30 menit maka semua komputer muncul captcha. Solusi satu-satunyanya saat ini harus generate ip baru. Nah lalu bagaimana cara mendeteksi kena spam ? tentu kita memanfaatkan domain ipv4.google.com/sorry/ bla bla bla yang akan kita tangkap dan kita eksekusi perintah untuk redial pppoe indih*me.

    Baiklah langsung saja, kali ini saya akan bagi tips versi kedua yang mana pada script ini ada pembaharuan sehingga lebih valid. Karena terkadang akses ke google kena spam hanya ke beberapa pc saja dan pc lainnya tidak kena. solusinya gunakan layer7.
    Pertama tama, buat regex layer7 pada mikrotik kasih nama spamgoogle :
    ^.*(ipv4.google.com)

    kemudian buat rule firewall filter agar address yg kena spam masuk ke address-list. (sesuaikan cidr_nat adalah pool ip client anda)
    /ip fi fi add action=add-src-to-address-list address-list=kena_spam address-list-timeout=\
    none-dynamic chain=forward comment=kena_spam layer7-protocol=spamgoogle protocol=tcp src-address-list=cidr_nat
    kemudian buat script seperti berikut dan jangan lupa buat schedulernya.
    :global iface 0pppoe0
    :global currentIP
    #:if ([:len [/ip firewall address-list find list=kena_spam dynamic=yes ]] != 0 ) do={
    :if ([/ip firewall address-list print  count-only where list=kena_spam] >=5) do={
    :log error "akses google kena spam"
    /in pppoe-client disable $iface
    :delay 2
    /in pppoe-client enable $iface
    :delay 2
    :set $currentIP ([/ip address get [find interface="$iface"] address])
    :for i from=( [:len $currentIP] - 1) to=0 step=-1 do={
          :if ( [:pick $currentIP $i] = "/") do={
             :set currentIP [:pick $currentIP 0 $i]
             }
          }
    :foreach i in=[/ip firewall address-list find list=kena_spam ] do={:put $i; /ip firewall address-list remove $i }
    :log warning "telah digenerate dengan ip baru : $currentIP"
    :local router [/system identity get name]
    :local time [/system clock get time]
    :local date [/system clock get date]
    :local voltage [/system health get voltage]
    :local tegangan (. [:pick $voltage 0 2] . "," . [:pick $voltage 2 3] ." volt")
    :local pesan ("[ $router ]%0A" ."GENERATE IP%0A$currentIP:81/userman%0A103.77.159.87:81/userman%0AKENA SPAM pada : %0A" . $time .", ".$date. "%0AVoltase saat ini $tegangan.")
    /tool fetch url="https://api.telegram.org/bot38xx21546:AAGn69QpFDuLSOQd3E3JtI5nhfUmg05hQys/sendMessage?chat_id=-20xx3762&text=$pesan" keep-result=no
    }
    :if ($currentIP  in 10.0.0.0/8) do={
    :log error "dapet ip private! redial kembali untuk mendapatkan ip kepala 36";
    /in pppoe-client disable $iface
    :delay 2
    /in pppoe-client enable $iface
    :delay 2
    :set $currentIP ([/ip address get [find interface="$iface"] address])
    :for i from=( [:len $currentIP] - 1) to=0 step=-1 do={
          :if ( [:pick $currentIP $i] = "/") do={
             :set currentIP [:pick $currentIP 0 $i]
             }
          }
    :foreach i in=[/ip firewall address-list find list=kena_spam ] do={:put $i; /ip firewall address-list remove $i }
    :log warning "telah digenerate dengan ip baru : $currentIP"
    :local router [/system identity get name]
    :local time [/system clock get time]
    :local date [/system clock get date]
    :local voltage [/system health get voltage]
    :local tegangan (. [:pick $voltage 0 2] . "," . [:pick $voltage 2 3] ." volt")
    :local pesan ("[ $router ]%0A" ."GENERATE IP%0A$currentIP:81/userman%0A103.77.159.87:81/userman%0AKENA SPAM pada : %0A" . $time .", ".$date. "%0AVoltase saat ini $tegangan.")
    /tool fetch url="https://api.telegram.org/bot38xx921546:AAGn69QpFDuLSOQd3E3JtI5nhfUmg05hQys/sendMessage?chat_id=-20353xx762&text=$pesan" keep-result=no
    }

    hasilnya :


    dan telah dilaporkan ke telegram Anda. semoga bermanfaat

    Sunday, May 20, 2018


    Kali ini saya akan bagi tips bagaimana cara agar si indihome ngga kena captcha google. Sebagaimana kita ketahui dialup pppoe pada indihome mendapatkan IP public dynamis. Artinya siapapun pelanggan indihome mendapatkan ip public secara acak. Nah, masalahnya kita terkadang mendapat dosa dari pelanggan dengan ip tertentu yangmana ip tersebut telah terindikasi spam oleh google. Nah, bagimana cara mengatasi hal ini ?
    clue :

    • pertama tama, wajib anda minta ke petugas telkom untuk men-set modem sebagai bridge. (Hal ini dimaksudkan agar dapat generate ip baru dengan method disable / enable pppoe-client)
    • kemudian dial-up pppoe di mikrotik
    • selanjutnya, arahkan semua pelanggan ke dns gateway router mikrotik anda
    • ketika ada pelanggan yang kena spam, maka terindikasi pada dns cache dengan cname ipv4.google.com
    • buat indikasi dugaan spam itu menjadi beberapa iterasi. Di sini saya gunakan 5x pengecekan dengan durasi 20 detik di setiap perulangan yang disimpan pada variable environment script. Karena ada beberapa pc yang berbeda tidak kena spam.
    • jika iterasi sudah ditempuh sebanyak 5x pengecekan maka lakukan generate ip
    • selain itu untuk memantau ip public sudah saya sertakan pada tutorial kali ini
    • let's go!
    berikut scriptnya 


    :global countSpam
    :global currentIP
    :global iface 0pppoe0
    :if ([:len [/ip dns cache all  find where name="ipv4.google.com" ]] = 1 ) do={
       :set countSpam ($countSpam +1)
       :log error "Akses ke google kena spam"
       }
    :if (($countSpam >= 5) && ([:len [/ip dns cache all  find where name="ipv4.google.com" ]] = 1 )) do={
       :log error "generate ip baru"
       :set countSpam 0
       /in pppoe-client disable $iface
       :delay 2;
       /in pppoe-client enable $iface
       /ip dns cache flush
       :log warning "DNS Cache has cleaned!"
       :delay 2;
       :set $currentIP [/ip address get [find interface="$iface"] address]
       :for i from=( [:len $currentIP] - 1) to=0 step=-1 do={
          :if ( [:pick $currentIP $i] = "/") do={
             :set currentIP [:pick $currentIP 0 $i]
             }
          }
       :log warning $currentIP
       :local router [/system identity get name]
       :local time [/system clock get time]
       :local date [/system clock get date]
       :local voltage [/system health get voltage]
       :local tegangan (. [:pick $voltage 0 2] . "," . [:pick $voltage 2 3] ." volt")
       :local pesan ("[ $router ]%0A" ."GENERATE IP%0A$currentIP:81/userman%0AKENA SPAM pada : %0A" . $time .", ".$date. "%0AVoltase saat ini $tegangan.")
       /tool fetch url="https://api.telegram.org/bot388921546:AAGn69QpCDuLSOQd3E3JtI5nhfUmg05hQys/sendMessage?chat_id=-203533762&text=$pesan" keep-result=no
       }

    perhatikan yang saya bold silahkan sesuaikan dengan nama pppoe-client pada router anda.

    Berikut hasilnya :

    Saturday, May 12, 2018


    Kali ini saya akan bagi tips bagaimana cara membuat dynamic mangle dan queue tree di sebuah sistem pppoe pada mikrotik. Studi kasus :

    • distribusi internet ke pelanggan menggunakan sistem pppoe
    • pelanggan 100rb-250rb per bulan dilayani dengan bandwidth fix (dynamic pppoe biasa)
    • pelanggan 300rb ke atas dikasih benefit tambahan bandwidth GGC/AKAMAI/ANY-CDN
    • otomatis tambahkan mangle jika pelanggan 300rb ke atas
    • otomatis tambahkan queue tree jika pelanggan 300rb ke atas
    solving :
    • pisahkan ip address (remote address) bagi pelanggan mix dan pelanggan premium
    • buat  2 pool address, pertama pppoe_addr_biasa dan pppoe_addr_premium
    • pada userman, profile 300rb ke atas pada menu constraints tambahkan pppoe_addr_premium pada address pool
    • buat profile pppoe dengan pool address global (misal 10.8.8.0/24)
    • let's go!

    pada on login script pppoe-profile tambahkan

    :local ipaddr [/ip address get [/ip address find interface=$user] network]
    :log warning "$user login dengan ip $ipaddr"
    :if ($ipaddr in 10.8.8.192/26) do={
    /ip fire mangle add comment=$user chain=forward out-interface=$user action=mark-packet new-packet-mark=$user src-address=118.98.0.0/17 passthrough=no
    :local parent [/queue tree find name=DN-PPPOE]
    :if ([:len $parent] = 0) do={/queue tree add name=DN-PPPOE parent=global }
    /queue tree add name=$user packet-mark=$user parent=DN-PPPOE limit-at=1000000 max-limit=8000000
    }

    kemudian pada on logout kasih script

    :log error "$user logout"
    /ip fire mangle remove [find out-interface=$user]
    /queue tree remove [find name=$user] 

    maka nanti hasilnya sebagai berikut


    Yups. jumpa lagi sob. setelah sekian lama ngga ngeposting blog, kali ini saya mau bagi script bagaimana cara membuat mangle maupun queue secara otomatis berdasarkan user ppx. ppx yang dimaksud kali ini yaitu bisa pptp, l2tp, pppoe dan any-ppp. terserah lah tergantung distribusi sobat ke pelanggan pake pptp apa pppoe atau yg lainnya. 

    Nah. untuk membuat ini berfungsi kita ambil action script nya pada ppp-profile mikrotik. Jangan lupa upgrade routeros sobat ke versi 6 (terbaru) untuk mendapatkan benefit yang lebih baik seperti bug fixing, peningkatan performa, fitur-fitur dan lainnya.

    Di tempat saya, distribusi internet ke pelanggan menggunakan pppoe yang diintegrasikan dengan userman agar ketika aktivasi pelanggan sama dengan expired pelanggan. Biasa, yang namanya jualan receh tu duit kecil dianggap remeh. Kita jual 150rb/bln bagi mereka itu duit kecil, akan tetapi seringkali menjadi persoalan ketika sudah jatuh tempo, kita susah nagihnya.  Nah dengan userman ini dapat membantu kita dalam mengetahui dan memberi notifikasi ke pelanggan bahwa telah masuk jatuh tempo pembayaran.

    Kali ini lebih spesifik. Di tempat saya, userman dibuat beberapa profil layanan. User kita buat kemudian di bawahnya kita masukkan profile suspend dimana profile suspend ini kita buat manual di routerosnya (terpisah dengan userman) dan kita buat redirect proxy agar ketika pelanggan mengakses internet khususnya port 80 kita arahkan ke notif-page buatan kita yang tujuannya mengingatkan pelanggan untuk segera membayar abonemen bulanan.

    Saya anggap masalah userman ini clear, dan sudah banyak tutor di internet dan silahkan mengambil ilmunya dan diterapkan sesuai dengan kondisi sobat.

    Di sini ambil kasus beberapa service / layanan internet. Misal, pelanggan termurah kita kasih harga 100rb atau 150rb. Dan ada beberapa service dengan biaya yang lumayan, anggap misalkan 450rb. Nah, untuk paket 400an ribu ke atas ini kita kasih benefit yang berbeda dengan yang lainnya, akan tetapi deliver tetep menggunakan pppoe. Hanya saja, untuk pelanggan dibawah 400rb kita kasih bandwidth fix. Kalau yang 400an ribu ini kita kasih benefit atau tambahan bandwidth seperti GGC, AKAMAI atau any CDN-X. Konsepnya, dial pppoe sebagai bandwidth regular, apa adanya. Kemudian untuk queue tree kita kasih mangle sesuai dengan profile pelanggan. 

    Ketika user pppoe ini aktif, maka yang terjadi harus membuat mangle otomatis dimana out interface adalah nama user tadi dan buat packet mark dengan nama yang sama, kemudian buat queue tree juga sekaligus. Dan ketika user logout atau diskonek juga harus menghapus mangle / queue yang telah dibuat secara otomatis oleh system. Langsung saja

    Buat profile pppoe pada menu PPP. Kemudian pada form script login kita isi seperti berikut.

    :log warning "$user login"
    /ip fire mangle add comment=$user chain=forward out-interface=$user action=mark-packet new-packet-mark=$user src-address=118.98.0.0/17 passthrough=no
    :local parent [/queue tree find name=DN-PPPOE]
    :if ([:len $parent] = 0) do={/queue tree add name=DN-PPPOE max-limit=10000000 parent=global }
    /queue tree add name=$user packet-mark=$user parent=DN-PPPOE limit-at=1000000 max-limit=10000000

    dan pada logout script kita kasih isi seperti ini

    :log error "$user logout"
    /ip fire mangle remove [find out-interface=$user]
    /queue tree remove [find name=$user]

    hasilnya gini


    Semoga bermanfaat dan silahkan dikembangkan, apabila masih ada pertanyaan silahkan japri. Makasih.


    Thursday, April 5, 2018


    Bagi pelanggan indih*me pernah ngga dapet ip private kepala 10.xx.xx.xx ?
    cara dapetin ip public caranya begini

    :local iface "indomiesedap"
    :if ( [/interface get $iface running] ) do={
    :if ( [/ip address get [find interface=$iface] address] in 10.0.0.0/8) do={
    /interface disable $iface
    delay 2
    /interface enable $iface
    }
    }

    kemudian untuk report ke telegram

    :local currentIP
    :local externalInterface "$iface"
    :set currentIP [/ip address get [find interface="$externalInterface"] address]
    :for i from=( [:len $currentIP] - 1) to=0 step=-1 do={
    :if ( [:pick $currentIP $i] = "/") do={
    :set currentIP [:pick $currentIP 0 $i]
    }
    }

    Sunday, April 1, 2018


    my_ip=$(ip route get 8.8.8.8 | awk 'NR==1 {print $NF}')
    my_interface=$(ip route get 8.8.8.8 | awk '/dev/ {f=NR} f&&NR-1==f' RS=" ")
    Dewasa ini teknologi komputasi semakin canggih. Dengan semakin canggih teknologi membuat perangkat pabrikan elektronik dibuat se-ramping mungkin.. Yah, contohnya seperti orange-pi, raspberry-pi dll. Dengan alat sekecil ini sudah mampu menjalankan desktop. Walaupun minimalis, raspberry-pi ini mampu dan siap digunakan sebagai solusi hemat listrik karena jika kebutuhan hanya sekedar display saja ngga perlu komputer bercatu daya listrik 220V. Baiklah, kali ini saya akan share cara mengaktifkan Access Point 2.4Ghz pada raspberry-pi 3.

    Pertama tama install hostapd dulu

    apt-get install hostapd bridge-utils -y
    kemudian edit /etc/hostapd/hostapd.conf
    # This is the name of the WiFi interface we configured above
    interface=wlan0
    # Use the nl80211 driver with the brcmfmac driver
    driver=nl80211
    # This is the name of the network
    ssid=RaspberryWiFi
    # Add to bridge
    # Jika menginginkan wlan0 di bridge dengan eth0 silahkan hapus tanda #
    #bridge=br0
    # Use the 2.4GHz band
    hw_mode=g
    # Use channel 6
    channel=6
    # Enable 802.11n
    ieee80211n=1
    # Enable WMM
    wmm_enabled=1
    # Enable 40MHz channels with 20ns guard interval
    ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40]
    # Accept all MAC addresses
    macaddr_acl=0
    # Use WPA authentication
    auth_algs=1
    # Require clients to know the network name
    ignore_broadcast_ssid=0
    # Use WPA2
    wpa=2
    # Use a pre-shared key
    wpa_key_mgmt=WPA-PSK
    # The network passphrase
    wpa_passphrase=11223344
    # Use AES, instead of TKIP
    rsn_pairwise=CCMP
    perhatikan yang saya beri tanda warna merah, silahkan sesuaikan. lalu edit /etc/default/hostapd
    nano /etc/default/hostapd
    # Defaults for hostapd initscript
    #
    # See /usr/share/doc/hostapd/README.Debian for information about alternative
    # methods of managing hostapd.
    #
    # Uncomment and set DAEMON_CONF to the absolute path of a hostapd configuration
    # file and hostapd will be started during system boot. An example configuration
    # file can be found at /usr/share/doc/hostapd/examples/hostapd.conf.gz
    #
    DAEMON_CONF="/etc/hostapd/hostapd.conf"
    # Additional daemon options to be appended to hostapd command:-
    #       -d   show more debug messages (-dd for even more)
    #       -K   include key data in debug messages
    #       -t   include timestamps in some debug messages
    #
    # Note that -B (daemon mode) and -P (pidfile) options are automatically
    # configured by the init.d script and must not be added to DAEMON_OPTS.
    #
    #DAEMON_OPTS=""
    kemudian restart service hostapd dengan cara
    /etc/init.d/hostapd restart
    atau
    service hostapd restart

    Jika dari eth0 sudah tersedia dhcp-server dari router maka kita buat bridge dengan menggabungkan eth0 dengan wlan0. Caranya :
    brctl addbr br0
    brctl addif br0 eth0
    brctl addif br0 wlan0
    untuk melihat konfigurasi bridge silahkan ketik seperti berikut
    root@new-noc:/home/pi# brctl show
    bridge name     bridge id               STP enabled     interfaces
    br0             8000.b827eba267d2       no              eth0
                                                            wlan0
    kemudian buat interface baru dengan mengedit /etc/network/interfaces
    # interfaces(5) file used by ifup(8) and ifdown(8)
    # Please note that this file is written to be used with dhcpcd
    # For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'
    # Include files from /etc/network/interfaces.d:
    source-directory /etc/network/interfaces.d
    auto lo
    iface lo inet loopback
    auto eth0
    allow-hotplug eth0
    iface eth0 inet manual
    auto wlan0
    allow-hotplug wlan0
    iface wlan0 inet manual
        wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
    allow-hotplug wlan1
    iface wlan1 inet manual
        wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
    auto br0
    iface br0 inet manual
    bridge_ports eth0 wlan0


    Jika sudah, silakan reboot. Silahkan konek dengan ssid yang anda buat tadi dan dengan password yang anda set di atas. Maka gadget anda mendapatkan ip dari router, karena dengan membuat bridge tadi dimaksudkan untuk menggabung eth0 dengan wlan0.

    Saturday, March 31, 2018


    Pernah kepikiran ngga, gimana caranya install di mesin B SAMA PERSIS seperti yang terinstall di mesin A ????

    gini caranya :
    di mesin A ketikkan :
    dpkg --get-selections > selections.txt
    perintah diatas maksudnya mencatat apa saja dependensi yang terinstall pada mesin A ke file selections.txt kemudian pindahkan file selections.txt tadi ke mesin B.

    kemudian pada mesin B :
    • install dselect
    apt-get install dselect
    • kemudian men-set dselect agar menginstall apa saja yang telah tercatat di selections.txt
    dpkg --set-selections < selections.txt
     dselect install

    dan, selesai :D gampang kan.

    Download jessie raspberry:
    https://downloads.raspberrypi.org/raspbian_lite/images/raspbian_lite-2017-07-05/2017-07-05-raspbian-jessie-lite.zip

    install package di masing masing mesin TX maupun RX
    apt-get update
    apt-get dist-upgrade
    apt-get install git python-gst0.10 python-redis \
    gstreamer0.10-plugins-base gstreamer0.10-plugins-bad \
    gstreamer0.10-plugins-good gstreamer0.10-plugins-ugly \
    gstreamer0.10-tools python-gobject python-gobject-2 gstreamer0.10-alsa python-setuptools lsof -y

    # optional
    apt-get install pulseaudio alsa-base

    apt-get install redis-server
    sed -i.bak 's/bind 127.*/bind 0.0.0.0/' /etc/redis/redis.conf

    /etc/init.d/redis-server restart
    test antar mesin dengan cara :
    redis-cli -h [iplawan] ping
    jika reply = PONG berarti redis-server sukses!
    kemudian :
    easy_install OpenOB

    untuk transmitter :
    - HARUS ADA USB SOUNDCARD sebagai input audio
    nano /usr/share/alsa/alsa.conf
    ubah nilai 0 menjadi 1

    defaults.ctl.card 1
    defaults.pcm.card 1

    kemudian start sisi TRANSMIT
    /usr/local/bin/openob 192.168.127.2 ngadirojo test-link tx 192.168.127.2
    #### START SCRIPT
    port=3000
    server=10.10.1.66
    while ! lsof -i @"$port"
    do
            echo -e "\e[38;5;198mPORT : $port is down,    - start STL\e[0m"
            /usr/local/bin/openob "$server" rahox test-link tx "$server"
    done
    #### END SCRIPT


    sisi RECEIVE
    /usr/local/bin/openob [ip-receiver] test-rx-node test-link rx
    #### START SCRIPT
    port=3000
    server=$(ip route get 8.8.8.8 | awk 'NR==1 {print $NF}')
    while ! lsof -i:"$port"
    do
            echo -e "\e[38;5;198mPORT : $port is down,    - start STL\e[0m"
            /usr/local/bin/openob "$server" test-rx-node test-link rx
    done
    #### END SCRIPT

    trobelshoot :
    lsof|grep "\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}" | grep openob
    usage: openob config_host node_name link_name tx [-h] [-a {auto,alsa,jack}]
                                                     [-d ALSA_DEVICE]
                                                     [-jn JACK_NAME] [-aj]
                                                     [-r SAMPLERATE]
                                                     [-e {pcm,opus}] [-p PORT]
                                                     [-m] [--no-multicast]
                                                     [-j JITTER_BUFFER]
                                                     [-b {16,24,32,48,64,96,128,192,256,384}]
                                                     [-l LOSS] [--dtx] [--no-dtx]
                                                     [--fec] [--no-fec]
                                                     [--complexity {0,1,2,3,4,5,6,7,8,9}]
                                                     [--framesize {2,5,10,20,40,60}]
                                                     receiver_host

    positional arguments:
      receiver_host         The receiver for this transmitter. The machine at this
                            address must be running an rx-mode Manager for this
                            link name

    optional arguments:
      -h, --help            show this help message and exit
      -a {auto,alsa,jack}, --audio_input {auto,alsa,jack}
                            The audio source type for this end of the link
                            (default: auto)
      -r SAMPLERATE, --samplerate SAMPLERATE
                            Set the sample rate to request from the input (Hz)
                            (default: 0)
      -e {pcm,opus}, --encoding {pcm,opus}
                            The audio encoding type for this link; PCM for linear
                            audio (16-bit), or Opus for encoded audio (default:
                            opus)
      -p PORT, --port PORT  The base port to use for audio transport. This port
                            must be accessible on the receiving host (default:
                            3000)
      -m, --multicast       Start this transmitter in multicast mode, enabling
                            multiple clients to connect at once using the address
                            specified in reciever_host (default: False)
      --no-multicast        Start this transmitter in unicast mode (default)
                            (default: False)
      -j JITTER_BUFFER, --jitter_buffer JITTER_BUFFER
                            The size of the jitter buffer in milliseconds. Affects
                            latency; may be reduced to 5-10ms on fast reliable
                            networks, or increased for poor networks like 3G
                            (default: 40)

    alsa:
      Options when using ALSA source type

      -d ALSA_DEVICE, --alsa_device ALSA_DEVICE
                            The ALSA device to connect to for input (default:
                            hw:0)

    jack:
      Options when using JACK source type

      -jn JACK_NAME, --jack_name JACK_NAME
                            JACK port name root (default: openob)
      -aj, --jack_auto      Disable auto connection for JACK inputs (default:
                            True)

    opus:
      Opus encoder options

      -b {16,24,32,48,64,96,128,192,256,384}, --bitrate {16,24,32,48,64,96,128,192,256,384}
                            Bitrate if using CELT/Opus (in kbit/s) (default: 128)
      -l LOSS, --loss LOSS  Expected packet loss percentage for Opus, between 0
                            and 100 (default: 0)
      --dtx                 Enable Opus Discontinuous Transmission support
                            (default: False)
      --no-dtx              Disable Opus Discontinuous Transmission support
                            (default) (default: False)
      --fec                 Enable Opus Inband Forward Error Correction support
                            (default) (default: True)
      --no-fec              Disable Opus Inband Forward Error Correction support
                            (default: True)
      --complexity {0,1,2,3,4,5,6,7,8,9}
                            Opus Computational Complexity, between 0 and 10 -
                            reduce on CPU-constrained devices (default: 9)
      --framesize {2,5,10,20,40,60}
                            Opus frame size (ms) (default: 20)


    Thursday, March 29, 2018


    Pernahkah anda berfikiran ingin memantau siapa saja yang login dan mendapat laporan ketika ada user yang masuk ke box Anda ? api telegram solusinya.
    Baiklah, pertama tama simak script berikut ini

    # simpan file ke /etc/profile.d/
    USERID="213567634"
    KEY="930289293:AAGn69QpFJKdlwkaJDLWADkladwa"
    TIMEOUT="10"
    URL="https://api.telegram.org/bot$KEY/sendMessage"
    DATE_EXEC="$(date "+%d %b %Y %H:%M")"
    TMPFILE='/tmp/ipinfo-$DATE_EXEC.txt'
    if [ -n "$SSH_CLIENT" ]; then
            IP=$(echo $SSH_CLIENT | awk '{print $1}')
            PORT=$(echo $SSH_CLIENT | awk '{print $3}')
            HOSTNAME=$(hostname -f)
            IPADDR=$(hostname -I | awk '{print $1}')
            curl http://ipinfo.io/$IP -s -o $TMPFILE
            CITY=$(cat $TMPFILE | jq '.city' | sed 's/"//g')
            REGION=$(cat $TMPFILE | jq '.region' | sed 's/"//g')
            COUNTRY=$(cat $TMPFILE | jq '.country' | sed 's/"//g')
            ORG=$(cat $TMPFILE | jq '.org' | sed 's/"//g')
            TEXT="<b>SSH Login!</b>%0A<b>pada:</b> <code>$DATE_EXEC</code>%0A<b>user:</b> ${USER} %0A<b>on hostname:</b> <code>$HOSTNAME</code>%0A<b>ip:</b> (<code>$IPADDR</code>)%0A<b>from:</b> <code>$IP</code>%0A- $ORG, %0A- $CITY, %0A- $REGION, %0A- $COUNTRY <i>%0Aon port:</i> $PORT"
            curl -s --max-time $TIMEOUT -d "chat_id=$USERID&parse_mode=HTML&disable_web_page_preview=1&text=$TEXT" $URL > /dev/null
            rm $TMPFILE
    fi

    ubah yang saya beri tanda merah dan sesuaikan dengan bot id telegram anda.
    kemudian install jq

    root@dns:/var/www/html/bot # apt-get install jq
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    The following additional packages will be installed:
      libjq1 libonig4
    The following NEW packages will be installed:
      jq libjq1 libonig4
    0 upgraded, 3 newly installed, 0 to remove and 58 not upgraded.
    Need to get 305 kB of archives.
    After this operation, 964 kB of additional disk space will be used.
    Do you want to continue? [Y/n]
    Get:1 http://mirror.rise.ph/raspbian/raspbian stretch/main armhf libonig4 armhf 6.1.3-2 [127 kB]
    Get:2 http://mirror.rise.ph/raspbian/raspbian stretch/main armhf libjq1 armhf 1.5+dfsg-1.3 [119 kB]
    Get:3 http://mirror.rise.ph/raspbian/raspbian stretch/main armhf jq armhf 1.5+dfsg-1.3 [58.9 kB]
    Fetched 305 kB in 1s (161 kB/s)
    Selecting previously unselected package libonig4:armhf.
    (Reading database ... 45136 files and directories currently installed.)
    Preparing to unpack .../libonig4_6.1.3-2_armhf.deb ...
    Unpacking libonig4:armhf (6.1.3-2) ...
    Selecting previously unselected package libjq1:armhf.
    Preparing to unpack .../libjq1_1.5+dfsg-1.3_armhf.deb ...
    Unpacking libjq1:armhf (1.5+dfsg-1.3) ...
    Selecting previously unselected package jq.
    Preparing to unpack .../jq_1.5+dfsg-1.3_armhf.deb ...
    Unpacking jq (1.5+dfsg-1.3) ...
    Setting up libonig4:armhf (6.1.3-2) ...
    Setting up libjq1:armhf (1.5+dfsg-1.3) ...
    Processing triggers for libc-bin (2.24-11+deb9u1) ...
    Processing triggers for man-db (2.7.6.1-2) ...
    Setting up jq (1.5+dfsg-1.3) ...

    Coba anda login ke ssh Anda, (coba dari luar network) nanti hasilnya seperti ini di telegram anda.
    Jika login dengan ip private nanti pesan balasannya null, null, null, tapi status login tetap diterima.


    Wednesday, March 28, 2018

    Kali ini saya akan share tips cara menambahkan simple queue untuk melimit device yang terkoneksi ke mikrotik routerboard melalui dhcp service. Konsepnya, setiap kali device yang mendapatkan ip dari dhcp server mikrotik akan dibuat queue secara otomatis. Syaratnya harus menggunakan mikrotik routeros versi 6.xx. Baiklah ini scriptnya.

    #add parent
    :local parent [/queue simple find name=ROOT]
    :local network "172.16.0.0/12,192.168.0.0/16"
    #tambahkan parent jika belum ada
    :if ([:len $parent] = 0) do={/queue simple add name=ROOT max-limit=10000k/10000k target="$network" packet-marks=no-mark}
    #action
    :local queueName "Client-$leaseActMAC";
    :if ($leaseBound = "1") do={
    /queue simple add name=$queueName target=($leaseActIP . "/32") limit-at=1000k/1000k max-limit=2000k/2000k burst-limit=3000k/3000k burst-threshold=2000k/2000k burst-time=8/8 parent=ROOT packet-marks=no-mark comment=[/ip dhcp-server lease get [find where active-mac-address=$leaseActMAC && active-address=$leaseActIP] host-name];
    } else={
    /queue simple remove $queueName
    }

    yang berwarna merah silahkan sesuaikan. Tambahkan script itu pada menu ip => dhcp-server pada textbox lease-script.
    Semoga membantu.


    Wednesday, February 14, 2018

    Pernahkah anda mengalami seperti berikut ini ketika me-remote server linux anda melalui ssh


    Hal itu terjadi ketika Anda meng-install openssh-server versi terbaru yang telah bundling dengan apt-get saat anda menggunakan server berbasis debian.

    Untuk mengatasi hal itu, pada server linux Debian/Ubuntu Anda  nano /etc/ssh/sshd_config
    Lalu tambahkan script berikut pada bagian akhir file sshd_config tadi
    Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc

    Kemudian tekan CTRL + O atau CTRL + X
    Save modified buffer (ANSWERING "No" WILL DESTROY CHANGES) ?
     Y Yes
     N No           ^C Cancel
    Tekan huruf Y lalu enter
    Lalu restart service ssh Anda dengan cara :
    root@deb8:/home/kangrahox# /etc/init.d/ssh restart
    [ ok ] Restarting ssh (via systemctl): ssh.service.
    Dan coba lagi remote ssh server Debian anda kembali sehingga berhasil login seperti berikut ini :