tunn.ml ~ SSH Tunn.el yang Nganu 😁

tunn.ml ~ SSH Tunn.el yang Nganu 😁

@gojigeje

Ingin web server yang berjalan di mesin lokal bisa diakses oleh publik tapi jaringan tertutup oleh firewall atau modem tidak mendukung port forwarding? tunn.ml akan memberikan URL publik dan akan meneruskannya ke mesin lokal Anda lewat SSH tunnel.

- - - - - - - - - - - - - - - - - -

Coba sekarang: (membuat tunnel untuk webserver di localhost port 80)

ssh -N -R 0:localhost:80 http@tunn.ml -p 6071

atau

wget -qO - www.tunn.ml | bash -s http localhost:80

atau

curl www.tunn.ml | bash -s http localhost:80

- - - - - - - - - - - - - - - - - -

[ UPDATE 20/10/2019 ]
DNS Spoofing? ECDSA host key has changed?

tunn.ml baru saja migrasi ke server baru sehingga host key dan alamat IP nya berubah, bagi Anda yang sebelumnya pernah terhubung ke tunnel, akan mendapati pesan galat (error) seperti ini saat mencoba menghubungkan sesi tunnel yang baru:

Apabila Anda mengalaminya, cukup jalankan command yang tertera di baris ke-3 dari akhir pesan, yaitu:

ssh-keygen -f "/home/xxxx/.ssh/known_hosts" -R [tunn.ml]:6071

Kemudian coba ulangi sesi tunnel, seharusnya sesi akan berhasil terhubung dan tidak ada pesan galat. Galat ini tidak akan dialami oleh yang baru pertama kali mencoba menghubungkan tunnel.

- - - - - - - - - - - - - - - - - -

HTTP Tunnel

Untuk meneruskan akses ke web server (port 80) di mesin lokal, gunakan command berikut:

ssh -N -R 0:localhost:80 http@tunn.ml -p 6071

Bila perlu, ganti host localhost dan port 80 dengan alamat IP dan port mesin web server yang akan dituju (misalnya bila Anda hendak membuka tunnel untuk web server yang berjalan di mesin lain, pastikan mesin lokal Anda dapat mengakses mesin web server tujuan).

Akan ada output sebagai berikut di console:
Allocated port 12345 for remote forward to localhost:80

Selesai! Gunakan port yang didapat sebagai subdomain untuk mengakses web server publik Anda: http://12345.tunn.ml

Anda juga bisa mengakses web server publik melalui HTTPS dengan format URL sebagai berikut: https://12345.tunn.ml (makasih Let's Encrypt untuk Wildcard Certificate nya)

  • HTTP tunnel hanya bisa meneruskan HTTP request (tidak bisa digunakan untuk selain web server).
  • Server akan memutus sesi HTTP tunnel setiap 30 menit, jadi Anda harus membuka sesi tunnel baru dan mendapatkan port baru untuk sesi selanjutnya.
  • Anda bisa menggunakan TCP tunnel agar sesi tidak diputus.

- - - - - - - - - - - - - - - - - -

TCP Tunnel

Gunakan TCP tunnel untuk meneruskan akses ke service lain yang berjalan di protokol TCP. Misalnya SSH, server database, server game dan lainnya.

Untuk meneruskan akses ke SSH (port 22) di mesin lokal, gunakan command berikut:

ssh -N -R 0:localhost:22 tcp@tunn.ml -p 6071

Akan ada output sebagai berikut di console:
Allocated port 56789 for remote forward to localhost:22

Selesai! Gunakan host tunn.ml dengan port 56789 untuk mengakses SSH Anda dari luar jaringan:

ssh user@tunn.ml -p 56789
  • Sesi TCP tunnel hanya bisa dilakukan dengan otentikasi public key. Kirimkan public key Anda ke @gojigeje di Telegram sebelum memulai sesi TCP tunnel.
  • Jika Anda meneruskan akses web server melalui sesi TCP tunnel, Anda tetap bisa mengaksesnya melalui subdomain PORT.tunn.ml atau http://tunn.ml:PORT , juga lewat HTTPS seperti cara sebelumnya. Bedanya, sekarang sesi Anda tidak diputus tiap 30 menit.

- - - - - - - - - - - - - - - - - -

Shortcut

Apabila Anda kesulitan menghafalkan penulisan command SSH tunneling, Anda dapat menggunakan shortcut berikut:

curl -s www.tunn.ml | bash -s TIPE TARGET1 TARGET2 .. TARGET5
wget -qO - www.tunn.ml | bash -s TIPE TARGET1 TARGET2 .. TARGET5

Shortcut ini akan memudahkan dalam menuliskan target tunnel, tinggal memasukkan tipe diikuti dengan host:port-nya saja, mirip seperti ngrok.

  • Contoh membuat tunnel ke webserver di localhost port 80:
    curl -s www.tunn.ml | bash -s http localhost:80

    wget -qO - www.tunn.ml | bash -s http localhost:80
  • Contoh membuat tunnel ke server ssh di port 22:
    curl -s www.tunn.ml | bash -s tcp localhost:22
    wget -qO - www.tunn.ml | bash -s tcp localhost:22
  • Contoh membuka beberapa tunnel dalam satu sesi, tinggal ditumpuk targetnya:
    curl -s www.tunn.ml | bash -s tcp localhost:80 192.168.1.1:22 localhost:3000
    wget -qO - www.tunn.ml | bash -s tcp localhost:80 192.168.1.1:22

- - - - - - - - - - - - - - - - - -

Nganu..

  • Batasan lainnya
    - Maksimal 3 sesi/koneksi SSH per alamat IP
    - Maksimal 5 tunnel per sesi
  • Menentukan port tunnel
    Jika Anda tidak ingin mendapatkan port yang selalu berbeda pada setiap sesi, Anda bisa menentukan port yang akan dibuka di sisi server dengan cara mengubah angka 0 (nol) di bagian awal 0:localhost:80 dengan nilai yang lain, misalnya 44444:localhost:80, maka tunnel Anda akan dibuka pada port 44444 dan bisa diakses dengan alamat http://44444.tunn.ml.
  • Port yang disediakan
    Untuk sesi HTTP, port yang disediakan adalah port 50001 - 65535. Untuk sesi TCP, port yang disediakan adalah port 40001 - 65535. Tunnel yang dibuka di luar port tersebut tidak akan diteruskan samasekali atau akan diputus sesinya.
  • Membuka beberapa tunnel dalam satu sesi
    Tambah jumlah parameter -R dalam sesi ssh. Misalnya Anda hendak meneruskan web server di mesin lokal (localhost port 80), web server di mesin lain (192.168.1.2 port 81) dan SSH di mesin lain (192.168.1.3 port 22), commandnya adalah sebagai berikut:

    ssh -N -R 0:localhost:80 -R 0:192.168.1.2:80 -R 0:192.168.1.3:22 . . .


    Anda bisa membuka maksimal 5 tunnel sekaligus dalam satu sesi, membuka tunnel lebih dari 5 akan langsung diputus sesinya.
  • Menemukan bug?
    Mohon jangan di-abuse, laporkan bug ke @gojigeje πŸ™
  • Fak dis shet! Udah ada layanan tunnel macem ngrok yang lebih banyak fiturnya, ente ngapain repot bikin ginian?
    Fakkk! Buat be.la.jar.

Report Page