Local Port Forwarding
SSH Local Port Forwarding digunakan ketika dalam situasi kamu ingin mengakses sesuatu di jaringan internal server seperti server PostgreSQL, yang normalnya tidak dapat diakses tanpa mengeksposnya ke internet.
Pertama, di sisi server, buatlah server HTTP yang tidak diekspos ke internet dengan Python:
# dijalankan di server
python -m http.server --bind 127.0.0.1 8000
Di sisi klien, agar dapat mengakses server HTTP tersebut, harus mengaktifkan SSH Local Port Forwarding terlebih dahulu.
# dijalankan di klien
ssh -L 8888:localhost:8000 user@ip_server
Setelah local port forwarding diaktifkan, server HTTP pun dapat diakses melalui http://localhost:8888 di komputer lokal kamu.
# dijalankan di klien
curl -I http://localhost:8888
Remote Port Forwarding
SSH Remote Port Forwarding merupakan kebalikan dari Local Port Forwarding, ini digunakan dalam situasi ketika kamu ingin meng-online-kan localhost komputer lokal, baik itu yang dapat diakses melalui jaringan internal server atau melalui IP publik (internet).
Sama seperti tadi, buatlah server HTTP lagi, tetapi yang sekarang ini, server HTTP tersebut dijalankan di komputer lokal (sisi klien).
# dijalankan di klien
python -m http.server --bind 127.0.0.1 8000
Setelah itu, aktifkan Remote Port Forwarding.
# dijalankan di klien
ssh -R 8888:localhost:8000 user@ip_server
Server HTTP yang di komputer lokal pun sekarang dapat diakses di sisi server.
# dijalankan di server
curl -I localhost:8888
Pada konfigurasi default SSH server, port 8888 (sisi server) tidak diekspos di seluruh interface. Oleh karena itu, port tersebut tidak dapat diakses melalui IP publik.
Agar dapat diakses melalui IP publik (diekspos ke internet), harus dikonfigurasikan server SSH-nya dengan menambahkan konfigurasi berikut ke dalam file /etc/ssh/sshd_config
:
GatewayPorts yes
Atau juga dapat melalui klien langsung tanpa perlu mengedit konfigurasi server SSH:
# dijalankan di klien
ssh -o GatewayPorts=yes -R 8888:localhost:8000 user@ip_server
Setelah diaktifkan, semua pengguna internet dapat mengakses port 8888 yang terhubung dengan port 8000 di komputer lokal.
curl -I IP_PUBLIK:8888
Dynamic Port Forwarding
Dengan fitur Dynamic Port Forwarding pada SSH, kamu bisa mengakses beberapa port (sisi server) sekaligus di komputer lokal (sisi klien) tanpa perlu menyetel satu per satu Local Port Forwarding untuk setiap port yang ingin diakses.
Cara kerjanya menggunakan proksi SOCKS. Semua permintaan yang melalui proksi tersebut akan diteruskan dan diproses di server.
Cara mengaktifkan Dynamic Port Forwarding:
# dijalankan di klien
ssh -D 1080 user@ip_server
Port 1080 adalah port server proksi SOCKS5.
Buatlah dua server HTTP di jaringan internal server untuk keperluan uji coba:
# dijalankan di server
python -m http.server --bind 127.0.0.1 8000 &
python -m http.server --bind 127.0.0.1 8001 &
Contoh cara mengaksesnya dengan curl:
# dijalankan di klien
curl -I -x socks5h://localhost:1080 localhost:8000
curl -I -x socks5h://localhost:1080 localhost:8001
Format proksi SOCKS5 yang digunakan versi socks5h://
bukan yang socks5://
agar nama domain di-resolve di sisi server, karena itulah, ketika mengakses localhost
, permintaan akses tersebut dikirim ke localhost
server bukan localhost
komputer klien.
Tips & Trik
Untuk mengatasi koneksi SSH agar tidak putus-putus, kamu bisa menambahkan konfigurasi berikut ini dalam file /etc/ssh/sshd_config
:
Di sisi server:
ClientAliveInterval 30
ClientAliveCountMax 6
Di sisi klien:
ServerAliveInterval 30
ServerAliveCountMax 6
Dengan konfigurasi di atas server atau klien SSH menge-ping setiap 30 detik sekali maksimal 6 kali.
Tips lain, agar proses SSH Port Forwarding berjalan di background, tambahkan opsi -f
dan -N
:
ssh -f -N -L 8888:localhost:8000 user@ip_server
ssh -f -N -R 8888:localhost:8000 user@ip_server
ssh -f -N -D 1080 user@ip_server