Tunnel Dinamis Dengan SSH


Belum lama ini saya berdiskusi dengan kawan saya yang kebetulan di terminalnya terpasang sangat banyak ssh tunnel ke banyak mesin yang di kerjakannya.
Saking banyaknya port yang di mapping sampai-sampai dia membuat table untuk mencari tahu port berapa yang di mapping ke port berapa.

Teknik yang digunakan oleh kawan saya ini bisa di padankan dengan perintah ssh sebagai berikut

ssh -f user@jumphost -L 2021:192.168.100.1:22 -N

Yang artinya, ssh ke jumphost dengan username user, buat port 2021 di localhost yang kalau port 2021 tersebut dipanggil maka akan membuka koneksi ke ip 1982.168.100.1 port 22. Dengan cara ini kawan saya bisa melakukan ssh ke ip 192.168.100.1 pada port standar ssh yaitu port 22 dengan menggunakan perintah

ssh -p 2021 user@localhost

Bila perintah pertama dilakukan untuk banyak mesin dengan port berbeda-beda maka hasilnya seperti nampak pada ilustrasi dibawah ini

 

ssh tunnel ilustration

Tentu kalau jumlah mesin dan port yang akan di mapping sedikit tidak masalah. Tapi bagaimana kalau jumlahnya mencapai ratusan ?

Mari kita coba cara yang lebih mudah.

Saya  memilih menggunakan fitur untuk sock proxy yang tersedia pada ssh

ssh -D 9054 user@jumphost

Artinya, ssh ke jumphost dan buat sock proxy di localhost pada port 9054

Kemudian saya menggunakan ssh dengan bantuan tools nc seperti ini

ssh -o ProxyCommand=’nc -x localhost:9054 %h %p’ user@192.168.100.1

Arti perintah diatas adalah ssh yang diantarkan oleh tools nc ke alamat proxy localhost dan port 9054, dengan username user dan ip yang akan di ssh adalah 192.168.100.1. Sedangkan %h berarti host dan %p adalah port (dapat dilihat referensinya pada manual ssh dibagian proxycommand).

Untuk browser dapat dengan mengaktifkan sock proxy ke localhost port 9054 atau menggunakan command line

chromium –proxy-server=”socks5://127.0.0.1:9054″

selanjutnya jelas akan lebih mudah, saya tidak perlu menghafalkan port mana untuk menghubungkan ke mesin mana dan port yang mana.

 

, , ,

Leave a Reply

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