Sunday, 8 August 2021

Nge-Rok Part 1 : Mudahnya Port Forward Server Lokal ke Internet Menggunakan Layanan Ngrok

 

    Halo sobat, artikel kali ini saya akan membahas mengenai langkah-langkah port forward server pribadi saya menggunakan layanan dari Ngrok

    Asal punya cerita, saya menggunakan cara ini karena sekarang saya sudah jarang sekali mendapatkan IP Publik dari Internet Service Provider (ISP) plat merah yang saya sewa. Kalau dulu, setiap kita langganan layanan internet dari ISP tersebut, kita akan mendapatkan IP Publik (meskipun dinamis/berubah-ubah) yang dapat kita gunakan untuk mem-forward atau mengekspos komputer atau server yang ada di jaringan lokal kita ke internet dengan hanya melakukan pengaturan port forwading pada modem yang diberikan oleh ISP tersebut. Namun sepertinya sekarang, untuk mendapatkan IP Publik Dinamis tersebut sulit dilakukan kecuali saya berlangganan paket internet yang cukup menguras dompet (cmiiw). Dan bertemulah saya dengan layanan Ngrok yang menurut saya sangat powerful dan solutif bagi saya.
    
    Sebelum menuju ke langkah-langkah instalasi, menjalankan layanan ngrok, hingga cara mengetahui endpoint port forward Ngrok, mari kita bahas sedikit mengenai port forwarding dan layanan Ngrok.    Oiya, saya asumsikan bahwa kita semua sudah memahami beberapa perintah CLI yang ada pada linux karena nanti kita akan sering menggunakan perintah-perintah CLI tersebut. Namun saya tetap akan mencoba menjelaskan fungsi-fungsi perintah yang kita gunakan nanti, apabila ada perintah yang kurang kalian pahami, kalian bisa langsung mengeceknya dari manpage linux

Konten

    Port Forwarding dan Ngrok

    Port Forwarding, mungkin ada beberapa dari kita yang baru mendengar istilah ini. Port forward adalah cara agar komputer/server kita yang ada di jaringan lokal di belakang Firewall/NAT dapat di akses dari internet (yang seharusnya tidak dapat diakses dari internet). Firewall/NAT sendiri bukanlah suatu hal yang buruk karena dapat melindungi jaringan lokal kita dari ancaman keamanan dari internet, karena dengan itu mereka tidak tahu juga tidak dapat menghubungi apapun dan siapapun yang ada di dalam jaringan lokal kita.

    Sedangkan Ngrok, adalah layanan port forwarding yang dapat digunakan untuk mengekspos komputer atau server yang ada dibelakang Firewall/NAT ke internet melalui secure tunnel sehingga dapat di akses oleh siapapun dan dimanapun. Dan kerennya lagi, Ngrok itu Multi Platform sehingga bisa digunakan diberbagai macam sistem operasi. Berikut tangkapan layar mengenai sistem operasi yang dapat menjalankan Ngrok.

sumber gambar: https://dashboard.ngrok.com/get-started/setup

    bagaimana, sistem operasi yang didukung cukup banyak bukan?

    Instalasi Ngrok

    Nah, sekarang kita lanjut pada langkah-langkah Instalasi Ngrok. Dalam artikel ini saya menggunakan server dengan sistem operasi Debian 10 (Buster) dengan arsitektur Arm64 sehingga file instalasi yang saya gunakan adalah untuk arm64. Dan saya ingatkan, semua perintah cli dibawah ini dilakukan sebagai user root dan ini praktik yang simpel namun sangat tidak disarankan karena alasan keamanan.
  • Oke. langsung saja ke langkah pertama yakni mengunduh aplikasi Ngrok yang ada di web resminya disini dan sesuaikan dengan sistem operasi yang kalian gunakan
        ~# wget -c https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-arm64.zip
  • Kita ekstrak saja aplikasinya 
        ~# unzip ngrok-stable-linux-arm64.zip
    • Setelah itu, karena saya menggunakan server debian maka saya perlu menambahkan hak eksekusi aplikasi pada file ngrok yang telah di unduh tadi 
            ~# chmod +x ngrok
        • Selanjutnya adalah mendapatkan kode otentifikasi (Authtoken) ngrok dengan membuat akun pada website resminya disini. saya tidak akan menjelaskan secara rinci tata cara pendaftarannya karena kurang lebih sama seperti pendaftaran akun pada umumnya.
        • Lalu dapatkan Authtoken milikmu pada halaman dashboard ngrok.
        sumber gambar: https://dashboard.ngrok.com/get-started/your-authtoken
        • Salin Authtoken tersebut dan daftarkan pada aplikasi Ngrok yang telah kita unduh tadi
                ~# ./ngrok authtoken <kode Authtoken milik kalian>
              • Authtoken tersebut akan tersimpan secara otomatis pada file konfigurasi Ngrok yang secara default tersimpan pada path "~/.ngrok2/ngrok.yml
              Nah, sampai sini kita sudah berhasil melakukan instalasi Ngrok pada server debian

                  Menjalankan Ngrok

                  Setelah berhasil melakukan instalasi Ngrok, kita bisa langsung mencobanya dengan perintah berikut
                      ~# ./ngrok http 80
                  Perintah tersebut memiliki fungsi untuk mem-forward port 80 sebagai layanan http, sehingga kita dapat mengakses layanan http yang berjalan pada port 80 di server kita melalui subdomain milik Ngrok, contohnya sebagai tangkapan layar berikut


                  Dari tangkapan layar diatas kita bisa tahu bahwa kita dapat mengakses layanan http yang berjalan pada port 80 di localhost server kita dari internet melalui endpoint yang berada di subdomain Ngrok yakni http://9266e9a7c438.ngrok.io .

                  Lalu, bagaimana jika kita ingin mem-forward layanan ssh melalui Ngrok? kurang lebih caranya sama, yakni seperti berikut.
                      ~# ./ngrok tcp 22 --region ap
                  Perintah tersebut berfungsi untuk melakukan forward protokol tcp pada port 22 (ssh) dan memilih region server Asia/Pasifik (ap). 


                  Dari tangkapan layar diatas dapat kita ketahui bahwa port 22 (ssh) yang kita ekspos dapat diakses melalui endpoint pada domain 0.tcp.ap.ngrok.io dengan port 18034. Contoh ketika kita ingin login ssh ke server melalui internet dapat menggunakan perintah
                      ~# ssh root@0.tcp.ap.ngrok.io -p 18034
                  Dan tara... kita berhasil login melalui internet. 

                  Sebagai tambahan, jika kita ingin mengetahui public url seperti tangkapan layar diatas, kita juga bisa melihatnya melalui dashboard Ngrok milik kita pada alamat berikut ini. Dari dashboard tersebut kita dapat mengetahui status koneksi serta public url untuk mengakses layanan server yang telah kita ekspos.

              Konfigurasi Ngrok

                  Loh, Ngrok tadi sudah jalan dengan lancar kenapa harus di konfigurasi lagi?
              Konfigurasi ini kita lakukan agar kita mendapatkan manfaat yang maksimal dari layanan Ngrok, karena langganan gratis dari Ngrok memiliki fitur cukup terbatas (tapi gratis tis tis) yakni maksimal 4 tunnels dengan 1 proses ngrok yang berjalan dan dengan total maksimal 40 koneksi terhubung dalam satu menit. 
                  Sedangkan apabila kita menggunakan cara yang tadi, kita hanya bisa membuat 1 tunnel dengan 1 proses ngrok yang berjalan. Agar kita bisa membuat 4 tunnel  dengan 1 proses ngrok dengan mudah, maka kita perlu memperbarui konfigurasi ngrok yang berada pada path "~/.ngrok2/ngrok.yml". Langsung saja kita modifikasi file tersebut dengan ubahan yang kurang lebih seperti berikut.

              beberapa opsi dalam konfigurasi tersebut yang perlu kita perhatikan adalah:
              • authtoken, opsi ini berisi token atau kode otentifikasi yang telah kita daftarkan pada awal instalasi Ngrok. Dan tentunya, authtoken dalam file konfigurasi yang saya bagikan itu sudah saya sensor, hehe.
              • region, opsi menjelaskan pilihan region server Ngrok yang ingin kita gunakan, defaultnya adalah US. Kalian bisa melihat langsung pada dokumentasi Ngrok yang sudah saya lampirkan pada referensi untuk informasi region yang bisa digunakan dimana saja,
              • tunnels, opsi ini berisi tunnel-tunnel yang ingin kita buat dan dalam kasus saya ada 4 tunnel yakni openvpn, ssh, jellyfin, dan torrent-client. 
              • addr, adalah opsi tunnel yang menerangkan alamat IP dan port mana yang akan kita forward menggunakan Ngrok. Dalam kasus tunnel jellyfin milik saya adalah localhost dengan port 8096. Apabila saya isi dengan "addr: 12.34.56.78:666" maka yang saya forward adalah apapun yang berjalan pada port 666 di alamat IP 12.34.56.78, namun pastikan server kalian dapat mengakses IP dan port tersebut (cmiiw, correct me if i'm wrong).  
              • proto, opsi tunnel ini di isi protokol yang akan kita gunakan. ada 3 isian yang bisa kita gunakan yakni tcp, http, dan tls. Jika kita menggunakan proto tcp maka koneksi kita akan di forward menjadi port lain, sedangkan jika kita menggunakan proto http atau proto tls maka koneksi kita akan di forward sebagai aplikasi web dengan port 80 dan kita akan mendapat subdomain dari Ngrok. Untuk layanan ssh, vpn, ataupun ftp tentunya kita akan menggunakan proto tcp.
              • bind_tls, opsi tunnel ini menerangkan apakah kita ingin mengikat http atau https. Nilai defaultnya (apabila tidak kita isi opsi ini) kalau tidak salah adalah "both", jadi jika kita menggunakan proto http dan kita tidak mendefinisikan "bind_tls:false" maka tunnel http kita akan membuat 2 tunnel (http dan https) secara bersamaan dan tentunya hal itu akan memakan jumlah tunnel kita yang terbatas. Saya contohkan pada konfigurasi di bawah ini
               
              maka bisa kita lihat hasilnya yakni ada 2 tunnel (http dan https) yang berjalan dalam satu waktu

              lalu kita coba untuk mendefinisikan "bind_tls:false" pada file konfigurasi


              maka hasil yang terjadi adalah hanya satu tunnel saja yang ngrok buat 

              • Dan masih banyak opsi konfigurasi lainnya sperti memberikan otentifikasi http,  yang dapat kalian baca pada dokumentasi resmi Ngrok yang sudah saya sertakan pada referensi

                  Oke, sampai ini kita sudah bisa membuat 4 tunnel yang memang jumlah maksimal tunnel yang dapat dibuat oleh akun ngrok secara gratis ( mungkin ada yang minat membelikan saya? haha ).

               Menjalankan Ngrok sebagai Background Process

                  Setelah kita berhasil menjalankan Ngrok menggunakan cara diatas, sadarkah kalian bahwa ada kekurangan pada cara tersebut? ya! prosesnya belum berjalan sebagai background process sehingga rawan terinterupsi oleh kegiatan lain kita pada server. Caranya mudah banget, kita tinggal mengeksekusi perintah berikut pada console terminal server kita
                      ~# ./ngrok start --all -log=stdout > /root/logs/ngrok.log &
                  Perintah "ngrok start --all -log=stdout" memungkinkan kita menjalankan ngrok dan memunculkan log-nya pada antarmuka terminal kita, namun munculan tersebut disimpan pada file "/root/logs/ngrok.log".

                  Cara yang lainnya adalah menggunakan aplikasi screen. Umumnya, aplikasi screen ini sudah terinstall secara default pada server debian. Caranya juga sama mudahnya, kita hanya perlu mengeksekusi perintah ini pada terminal kita.
                      ~# screen -S ngrok -dm /root/ngrok start --all -log=/root/logs/ngrok.log 
                  Argumen "-S ngrok" pada perintah screen tersebut memiliki arti menjalankan screen dengan nama sesi "ngrok", argumen "-dm" berarti melepas screen tersebut untuk kembali ke layar utama dengan perintah yang di eksekusi dalam screen tersebut yakni "/root/ngrok start --all -log=/root/logs/ngrok.log"

                 Dari dua cara diatas, saya pribadi lebih familiar menggunakan cara yang pertama karena ngrok berjalan sendiri tanpa bantuan dari screen meskipun menurut saya penggunaan cara kedua itu bagus karena terkesan lebih rapi. Jadi pilihan penggunaan cara akan saya kembalikan lagi ke kalian :).

               Mengetahui Endpoint Port Forward dari Ngrok

                  Untuk mengetahui endpoint atau alamat Ngrok yang dapat kita gunakan untuk mengakses port yang telah kita forward, kita bisa menggunakan dua cara yakni melalui dashboard akun ngrok kita atau melalui log yang telah kita masukkan pada perintah, contoh pada kasus saya lognya ada di "/root/logs/ngrok.log". Untuk melihatnya kita bisa menggunakan perintah 
              ~# awk '/started tunnel/ {print substr($6,6)": " substr($8,5)}' /root/logs/ngrok.log | tail -4 
                  Perintah diatas memungkinkan kita untuk mengambil log yang berisi "started tunnel" pada file log lalu output-nya dimodifikasi sedemikian rupa dan di ambil hanya 4 baris terakhir (karena kita mempunyai 4 tunnel). Adapun contoh hasilnya bisa dilihat seperti tangkapan layar di bawah
                  
              tangkapan layar hasil dari log 

              tangkapan layar dari dashboard akun ngrok

                  Dari dua tangkapan layar di atas bisa kita lihat hasilnya tidak jauh berbeda, namun lebih detail hasil dari log karena juga memperlihatkan nama tunnel yang telah kita buat.

                  Nah, sekian artikel saya mengenai Nge-Rok Part 1 dari saya. Tunggu artikel Nge-Rok Part 2-nya yang berkaitan dengan cara membuat layanan ngrok tetap aktif yaa... 

              [UPDATE]

              Referensi:

              Previous Post
              Next Post

              0 comments: