Begini Cara Akses Server Lokal dari Internet Menggunakan Ngrok

Posted by

Untuk mengakses sebuah komputer (khususnya server) dari internet, bisa dilakukan dengan beberapa cara. Jika memiliki IP public, maka server tersebut bisa langsung dipasang IP public. Atau menggunakan metode PAT/DNAT/Port Forward bagi yang menggunakan IP lokal. Namun bagaimana jika tidak memiliki IP public static ataupun dynamic?

Jika hanya terdapat akses internet dan tidak memiliki IP public, saya biasanya menggunakan Teamviewer atau AnyDesk atau Zoho Assist. Pernah juga menggunakan LogMeIn Hamachi. Yang metodenya mirip seperti VPN. Namun penggunaannya sangat terbatas. Hanya bisa diakses oleh saya sendiri yang mengetahui ID dan passwordnya.

Kira-kira ada ngga ya suatu metode yang bisa mengakses server lokal secara langsung via Public URL/internet. Dan bisa diakses oleh siapa saja?. Ternyata ada. Yang penting server tersebut memiliki akses internet. Ada satu aplikasi namanya ngrok. Pengertian ngrok sendiri

ngrok exposes local servers behind NATs and firewalls to the public internet over secure tunnels..

Begitu kira-kira keterangan dari website ngrok : https://ngrok.com/product.

Saya sendiri menggunakan ngrok ini untuk mengexpose local web server ataupun akses SSH ke internet. Bisa juga aplikasi lain. Karena kemampuannya untuk melakukan http tunnel, tls tunnel dan tcp tunnel. Ketika ngrok ini dijalankan, nantinya akan menampilkan link acak dari ngrok untuk mengakses local webserver ataupun SSH. Tentu link nya bisa disesuaikan apabila menggunakan tipe berbayar πŸ™‚

Instalasi dan penggunaannya cukup mudah. Cukup download binary nya dan jalankan opsi-opsi yang disediakan. Begini cara saya menggunakan ngrok

Login pada website ngrok.com untuk mendapatkan token. Bisa registrasi terlebih dahulu atau login langsung menggunakan account Github/Google. Setelah login, akan ditampilkan menu download ngrok. Silakan download dan sesuaikan dengan OS yang digunakan.

Adapun IP lokal, OS dan contoh aplikasi yang saya gunakan sebagai berikut :

IP Address lokal : 10.142.0.2
OS : GNU/Linux Ubuntu 16.04.5 LTS
Aplikasi : SSH, Nginx dan Jenkins

# Download aplikasi Ngrok

Download aplikasi ngrok dari server lokal yang akan diexpose ke internet

cd /srv/
wget -c https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
unzip ngrok-stable-linux-amd64.zip

Lakukan autentikasi token. Token bisa dicek pada menu https://dashboard.ngrok.com/auth. Kemudian jalankan perintah berikut :

/srv/ngrok authtoken token-dari-dashboard-ngrok

# Expose Nginx port 80

Jalankan ngrok untuk mengexpose nginx

/srv/ngrok http 80

Maka akan muncul informasi seperti berikut :

Berikut hasil testing akses nginx dari ip lokal

Akses nginx dari ip lokal

Berikut hasil testing akses nginx dari Public URL ngrok

Akses nginx dari public URL ngrok

Tidak ada perbedaan tampilan ketika akses dari IP lokal ataupun via public url ngrok. Bedanya, setelah dilakukan ngrok, nginx dapat diakses dari internet melalui random url yang diberikan πŸ™‚

# Expose Jenkins port 8042

Jalankan ngrok untuk mengexpose Jenkins. Kebetulan port aplikasi Jenkins saya ubah dari default 8080 menjadi 8042

/srv/ngrok http -bind-tls=false 8042

Penambahan opsi -bind-tls=false untuk memastikan ngrok hanya listen akses via http. Jika tanpa opsi -bind-tls=false, maka public url dapat diakses via http ataupun https. Seperti contoh nginx diatas yang dapat diakses dengan http atau https

Jenkins diakses dari public URL ngrok

# Expose SSH port 22

Jalankan ngrok untuk mengexpose SSH

/srv/ngrok tcp 22

Contoh output proses ketika melakukan tunnel port SSH seperti berikut :

Testing akses SSH pada public url yang digenerate oleh ngrok

Testing akses SSH via public URL ngrok

Dari hasil testing akses diatas, saya berhasil akses SSH server lokal saya melalui public url ngrok

# Menjalankan multiple tunnels

Ngrok versi free hanya bisa melakuan 1 online ngrok proses. Ketika melakukan expose nginx secara langsung, maka expose Jenkins ataupun SSH tidak dapat dilakukan. Karena sudah ada 1 online ngrok proses yang berjalan. Namun versi free ini bisa menjalankan hingga 4 tunnels dalam satu ngrok proses. Untuk menjalankan multiple tunnels, aplikasi yang hendak di tunnels harus didefinisikan pada sebuah file yml. Lokasi file ini berada di home direktori user. Jika ngrok dijalankan sebagai user root, maka lokasinya ada di /root/.ngrok2/ngrok.yml. Jika berada di user lain, maka lokasinya ada di /home/namauser/.ngrok2/ngrok.yml.

Contoh disini, saya menjalankan ngrok sebagai user root. Maka file yang saya sesuaikan lokasinya di /root/.ngrok2/ngrok.yml. Isinya seperti berikut :

authtoken: 2udG6q3GRixxxxxxxxxxxxxxxxxxxxxxxxxxx
tunnels:
  nginx:
    addr: 80
    auth: usersaya:passwordsaya
    bind_tls: false
    proto: http

  jenkins:
    addr: 8042
    bind_tls: false
    proto: http

  ssh-access:
    addr: 22
    proto: tcp

Contoh isi file yml diatas berisi 3 tunnels. Tunnel nginx, jenkins dan SSH. Pada contoh tunnel nginx, saya tambahkan auth. Ketika public url ngrok diakses dari internet, maka akan ditanya username dan password terlebih dahulu, sebelum muncul tampilan asli dari nginx. Jangan lupa juga untuk mendefinisikan opsi bind_tls: false. Jika opsi bind_tls: menjadi true, pada tunnel dengan protocol http akan otomatis dibuatkan juga public url ngrok https nya. Alhasil satu protokol http akan menjalankan 2 tunnel proses. Yaitu tunnel http dan https. Proses tunnel SSH yang dibawahnya bisa jadi tidak diproses. Karena maksimal ngrok proses untuk versi free hanya 4 tunnels.

Setelah file yml disesuaikan, jalankan perintah berikut untuk menjalankan proses tunnel

/srv/ngrok start -all

Berikut contoh proses tunnel yang muncul

Perhatikan pada bagian forwarding. Disana terdapat 3 proses tunnels. Tunnel untuk nginx dengan port 80, Jenkins dengan port 8042 dan SSH dengan port 22. Masing-masing tunnel dapat diakses dengan public url yang berbeda-beda

# Tips menjalankan Ngrok pada background proses

Ketika ngrok dijalankan, maka prosesnya akan langsung muncul. Dan apabila ditutup consolenya, maka proses ngrok juga berhenti. Supaya ngrok dapat dijalankan pada background proses, tambahkan opsi log

/srv/ngrok start -all -log=stdout > /tmp/ngrok.log &

# Cek status Ngrok dari Dashboard

Jika ngrok dijalankan dengan mode background proses, maka public url ngrok tidak muncul. Untuk mengetahui akses urlnya, bisa dicek menggunakan curl. Berikut perintahnya :

curl http://localhost:4040/api/tunnels

Hasil dari perintah curl diatas seperti berikut :

Lihat pada bagian public_url. Url tersebut adalah url ngrok yang bisa diakses dari internet. Atau cara paling gampang untuk mengetahui url nya dengan masuk pada dashboard ngrok bagian status : https://dashboard.ngrok.com/status

# Tips auto start Ngrok menggunakan Crontab

Supaya ngrok otomatis start ketika booting, tambahkan baris berikut pada crontab :

@reboot /srv/ngrok start -all -log=stdout > /tmp/ngrok.log &

Untuk status tunnel, bisa dicek dengan perintah curl atau langsung akses dashboard ngrok status.

Dengan menggunakan ngrok, saya merasa terbantu untuk mengecek server yang tidak memiliki ip public static secara langsung. Cukup ada koneksi internet disisi server, maka server dapat diakses dari internet melalui ngrok tunnel πŸ™‚

Sekian panduan penggunaan ngrok untuk melakukan expose service via http ataupun tcp tunnels ke internet. Silakan beli ngrok versi berbayar untuk mendapatkan benefit lebih seperti custom url dan limitasi tunnel yang lebih banyak πŸ™‚

Jika dirasa artikel ini bermanfaat, jangan sungkan untuk share pada media sosial πŸ™‚

Silakan dicoba dan semoga bermanfaat πŸ™‚

Leave a Reply

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.