Begini Cara Akses Server Lokal dari Internet Menggunakan Ngrok
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
Berikut hasil testing 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
# 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
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 🙂
Tidak ada komentar:
Posting Komentar