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 🙂

47 comments

    1. Ngrok hanya salah satu metode agar lokal server yang tidak memiliki IP public dapat diakses secara langsung dari internet. Kenapa lambat? karena IP public yang digunakan bukan IP public region Indonesia. Ngrok hanya melakukan tunnel sebagai jembatan. Jika ingin cepet aksesnya, pastikan servernya memiliki IP public static secara langsung dan koneksi internet yang cepat

  1. Kenapa di saya, respon di ngrok untuk akses won local dengan webserver nginx muncul Get/. 303 see other…
    Di client TDK muncul content yg diakses

    1. Hi mas Risnandar,
      Pastikan servernya bisa diakses secara local terlebih dahulu. Jika sudah bisa, coba akses via NGROK. Jika masih sama problemnya, coba expose service lain untuk komparasi. Misalnya service SSH

  2. Thanks gan penjelesannya mantab, saya mau tanya gan bagaimana caranya ngrok tetap aktif dan bisa diakses saat pc/laptop server dalam mode hibernate?

  3. permisi kak,.. maaf menyimpang dari topik. mau tanya, saya jika di tempat kerja saya bisa akses semua aplikasi, web perusahaan, admin access point,server POS, server lokal dan bahkan server pusat pun bisa saya akses, tapi ketik saya akses dengan jaringan lain dia refuse. karena memang hanya bisa diakses by jaringan lokal. jadi sebenarnya saya punya akses kemana saja asalkan saya nyambung ke jaringan lokal. bisa gak kita buat akses sendiri untuk masuk ke jaringan tsb, by vpn mungkin, atau yang lainnya,.. biar saya bisa kerja tanpa harus di tempat kerja.
    Terimakasih.

    1. Hi puji,
      Untuk case tersebut bisa saja Server memang hanya boleh dan hanya bisa diakses via lokal jaringan. Adapun jika ingin bisa diakses dari luar jaringan :
      1. Gunakan VPN yang diberikan dari perusahaan (jika ada)
      2. Gunakan tools untuk remote PC yang ada dikantor. Misalnya Teamviewer, Anydesk. Itu juga jika diopen aksesnya

  4. siang mas ahmad, sya adi, ijin bertanya berhubung sedang work from home, sya ingin localhost sya yang isinya cbt soal bisa diakses lwt ngrok sdh bisa, yg ingin ditanyakan sya pakai windows 10,
    1. apakah perintah yml tetap sama untuk running di background services?
    2. maksudnya 40 koneksi per menit apa mas? apa maksimal localhost via ngrok hanya 40 user sja per menit.
    3. agar bisa terakses dengan baik localhost cukup seting 1 tunel buat localhost sja atau ada tambahan, sya menggunakan laragon, php 7.4, apache, mariadb?
    mohon edukasinya. terima kasih atas bantuannya mas

  5. Maaf mas, saya kebetulan baca, kebetulan saya mengalami masalah tsb, tapi tertarikmya menggunakan anydesk, bisa tidak kita akses ip localhost menggunakan anydesk, trims sebelumnya

    1. Hi mas Ngurah,
      Anydesk fungsinya sama seperti Teamviewer atau remote desktop sejenis. Jika hendak akses servernya, tentu harus akses anydesk nya terlebih dahulu. Baru bisa akses localhost dari server tersebut.

      1. apakah bisa akses localhost server tersebut di komputer kita? saya baca tcp tuneling anydesk tapi blum paham apakah bisa untuk hal tsb.. terimakasih pemcerahannya..

  6. siang mas ahmad, maaf saya awam , saya masih belum maksud yang anda jelaskan,
    saya sudah daftar dengan akun google saya kemudian download ,ekstrak ngrok , nah untuk di point jalankan perintah ……. itu di masukan di mana ya…kalau bisa saya di kasih link youtubenya mas. makasih.

    1. Hi pak Gunanto,
      Untuk settingan di Ngrok cukup pointing ke port yang digunakan oleh si Moodle pak. Jika Moodle menggunakan webserver dengan port 80, maka bisa memakai port tersebut

  7. Maaf tanya mas Ahmad Imanuddin, saya sudah mencoba menggunakan ngrok di ubuntu 16.04, ketika ngrok itu direstart (ctr+q), kemudian ngrok diaktifkan lagi akan dapat alamat forwarding yang berbeda. Bagaimana caranya agar alamat forwarding tidak berubah setelah ngrok direstar?

  8. Mas Ahmad ini ngrok nya ada trouble too many connection, apakah ngrok free dibatasi 20 koneksi permenit ya cuma di keterangan ngroknya 40 koneksi permenitnya itu beda…apa memang seperti itu ya mas?

  9. salam, mas ahmad mau nanya untuk penggunaan ngrok itu sendiri apakah ada session expired nya atau harus server harus online, soalnya pas saya mau buka ada keterangan tunel ….ngrok.io not found. terimakasih

    1. Hi,
      Untuk server nya tentu harus dalam keadaan online dan ada akses internetnya. Adapun untuk alamatnya, bisa juga berubah karena sempat restart atau sejenisnya. Untuk perubahan alamat bisa dicek via dashboard ngrok bagian status

  10. Bagaimana caranya supaya url / link nya yang diberikan ngrok tetap (tidak berubah-ubah) setelah server dimatikan.

  11. hallo pak saya mau nanya untuk komputer core i5 dan ram 8 dapat menampung berapa clin sekalian akses ya pak dengan ngrok..makasih

  12. halo mas ijin bertanya jika untuk kebutuhan agar jitsi meet yang di setup di local langkah langkah nya apa saja apa tinggal install si ngrok ini lalu sesuaikan apa bagaimana ?
    terimakasih mas

    pengen test ing saja sebenernanya

      1. Mas, saya sudah berhasil install jitsi (punya 2 IP : 1 ip public, sub domain, https dan 1 ip megarah ke local ) ,
        tetapi jika client nya (ip local dan tidak punya akses internet) saat join selalu putus (reconnecting terus menerus).

        pertanyaan saya apakah jitsi memang tidak bisa di implementasi di local area network ?
        apakah ada solusi lain video Conference selain jitsi yang bisa di implementasi di local area network ?

  13. permisi mau nanya bang , saat ini saya sedang pembuatan tugas akhir , dimana saya membuat server cloud computing ( owncloud ) lokal di virtualbox dgn ubuntu dan diminta untuk mengakses jaringan private tadi menggunakan jaringan publik (jaringan biasa) , cara menghubungkan akses private tadi ke publik menggunakan ngrok tadi gimana ya ??
    terimakasih ..

  14. halo pak saya mau nanya tapi ini diluar dari aplikasi ngrok. saya sudah pernah membuat host ip menggunakan no.ip.com sudah, setting di duc dan berhasil setting ke modem dan mengonlinekan. tetapi, no ip saya expired karena telat mengupdate lagi. saat membuat hosname baru dengan email yang sama dan sudah di set di duc, tidak berhasil mengonlinekan kembali. adakah sarannya pak?

  15. Mas, saya uji coba memakai moodle mengalami error Object not found!
    The requested URL was not found on this server. If you entered the URL manually please check your spelling and try again.

    If you think this is a server error, please contact the webmaster.

    tapi kalau di akses jaringan lokal bisa, hanya ketika akses pakai link ngrok jadinya seperti itu mas

    1. Hi mas Risky,
      Apakah ada menggunakan Virtual Host? jika iya, akses pada Moodle harus sesuai dengan nama yang didefinisikan pada vhost nya. Coba simpan moodlenya tanpa Vhost. Jadi jika diakses pakai IP atau pakai nama, hasilnya akan tetap sama

  16. Mas. Saya menggunakan “ngrok” untuk input raport. tapi linknya sering error. cara agar “ngrok” tetap tabil bagaimana?

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.