Bagaimana cara merutekan alamat tertentu melalui terowongan?

14

Ada beberapa situs web / layanan tertentu yang hanya dapat saya akses dari subnet di mana server saya berada (pikirkan skenario intranet khas). Apakah ada cara untuk mengarahkan lalu lintas secara transparan ke alamat-alamat ini melalui terowongan SSH?

Pertimbangkan pengaturan berikut:

Laptop saya terhubung di jaringan rumah. Itu tidak dapat mengakses layanan pada ips X dan Y secara langsung. Saya memiliki terowongan SSH ke server yang berada di subnet yang benar-benar dapat mengakses layanan ini.

Dapatkah saya entah bagaimana secara otomatis merangkum semua lalu lintas ke subnet X dan Y untuk melewati terowongan ini, tanpa harus menjalankan seluruh solusi VPN yang akan mengirim semua lalu lintas saya melalui server? Dengan kata lain: semua lalu lintas yang menuju ke subnet lain harus tetap pergi langsung dari laptop, tanpa melewati server (menggunakan terowongan).

Ruben Vermeersch
sumber

Jawaban:

6

Anda bisa menentukan antarmuka yang akan digunakan untuk mengarahkan lalu lintas di tabel perutean:

sudo route add <host.com> -interface <ppp0>

Di mana host.com adalah nama host atau ip yang ingin Anda akses melalui antarmuka, dan ppp0 adalah pengenal tautan untuk vpn Anda yang ditunjukkan dengan ifconfigperintah.

Sam Coles
sumber
2
Catatan: setidaknya di ubuntu -interfacebukan opsi routesehingga saran di atas memberikan kesalahan penggunaan. Juga bagaimana ini akan menghasilkan routing melalui ssh tunnel saat OP bertanya?
arielf
3

Versi terbaru OpenSSH mendukung tun / ketuk perangkat jaringan untuk dukungan VPN yang sebenarnya. Lihat https://help.ubuntu.com/community/SSH_VPN untuk beberapa dokumentasi dasar (jelas ditujukan untuk Ubuntu, tetapi prinsip dasar berlaku di tempat lain.)

durin42
sumber
Perhatikan bahwa ini membutuhkan hak akses root pada laptop dan host gateway.
Riccardo Murri
1

Penafian: Saya belum benar-benar menguji apa yang akan saya uraikan, dan memang itu bisa sepenuhnya salah, tetapi pertanyaan Anda sangat menarik sehingga saya tidak bisa menahan godaan untuk menyusun jawaban. :-) Selain itu, pengaturan di sini tergantung pada beberapa iptablesfungsi yang mungkin hanya ada di Linux.

Dengan asumsi Anda ingin terhubung dari laptop Anda ke port P1 spesifik pada server X1, ke port P2 di server X2, dll. - Saya akan menjelaskan cara merutekan lalu lintas TCP ke server khusus ini + pasangan port melalui terowongan SSH. Catatan: alamat IP X1, X2, dll adalah alamat IP server seperti yang terlihat dari host gateway (yang Anda masukkan ke SSH).

  1. Pilih beberapa port lokal yang tidak digunakan L1 (mis. 10.000), L2 (mis. 10001), dll. Port L1, L2, ..., harus semuanya berbeda dan jumlahnya harus sama dengan jumlah server (Xn, Pn) yang berbeda + pasangan port.

  2. Gunakan iptablesuntuk mengarahkan paket yang diarahkan ke Xn: Pn ke localhost: Ln

    iptables -t nat-OUTPUT -p tcp -d X1 --dport P1 -j DNAT --untuk menuju localhost: L1 iptables -t nat -P OUTPUT -p tcp -d X2 --port P2 -j DNAT - ke-tujuan localhost: L2

  3. Sekarang SSH ke gateway, menggunakan -Lopsi untuk tunnel traffic dari localhost: Ln to (Xn, Pn):

    ssh gateway.server -L localhost: L1: X1: P1 -L localhost: L2: X2: P2 ...

Contoh:

# access webserver.intranet (port 80) through localhost:10080
iptables -t nat -A OUTPUT -p tcp -d webserver.intranet --dport 80 -j DNAT --to-destination localhost:10080
ssh gateway.server -L locahost:10080:webserver.intranet:80

Peringatan:

  • ini hanya berfungsi untuk TCP, jika berfungsi sama sekali ...

  • jika Anda ingin mengakses lebih dari satu server, mungkin kurang bekerja untuk memasang VPN

  • mungkin masih lebih mudah untuk menggunakan -Dopsi SSH untuk mensimulasikan proxy SOCKS dan menyalurkan semua lalu lintas Anda melalui itu.

Riccardo Murri
sumber
Ini benar-benar berfungsi! (Sayangnya, itu tidak sesuai dengan situasi spesifik saya, di mana saya ingin merutekan lalu lintas yang berasal dari mesin virtual, bukan dari localhost.)
pvgoran
1

subnet X dan Y untuk melewati terowongan ini, tanpa harus menjalankan seluruh solusi VPN yang akan mengirim semua lalu lintas saya melalui server?

Yang Anda inginkan adalah definisi VPN.

VPN seharusnya tidak

kirim semua lalu lintas [Anda] melalui server?

Jika ya, itu tidak diatur dengan benar.

Diasumsikan bahwa mesin apa pun yang Anda coba akses melalui Tunnel atau VPN, menurut definisi, tidak dapat diakses melalui Internet. Jadi, hanya alamat perutean non-Internet yang diperlukan yang harus dialihkan ke VPN.

Jika Anda memiliki situasi yang lebih rumit, seperti hanya mesin X dan Y dan tidak ada yang lain. Staf TI Anda dapat menempatkan mereka pada subnet untuk Anda. Kemudian di komputer klien Anda, hanya rutekan subnet itu ke VPN.

Stephen Jazdzewski
sumber
0

Dapatkah saya entah bagaimana secara otomatis merangkum semua lalu lintas ke subnet X dan Y untuk melewati terowongan ini, tanpa harus menjalankan seluruh solusi VPN yang akan mengirim semua lalu lintas saya melalui server?

Ini agak aneh pada pandangan pertama karena itulah yang akan dilakukan VPN untuk Anda. SSH cenderung menjadi urusan point-to-point, gagasannya adalah bahwa Anda menghubungkan satu port pada mesin lokal Anda ke port mesin remote di tempat lain; itu benar-benar tidak dirancang untuk jenis lalu lintas yang Anda bayangkan.

Dengan kata lain: semua lalu lintas yang menuju ke subnet lain harus tetap pergi langsung dari laptop, tanpa melewati server (menggunakan terowongan).

Sekali lagi, VPN akan membereskannya.

Jika Anda khawatir tentang solusi "kelas berat" untuk mendapatkan lalu lintas VPN yang aman (yaitu Anda tidak ingin melakukannya karena itu akan terlalu rumit) Anda harus benar-benar melihat OpenVPN , yang akan melakukan apa yang Anda gambarkan. Tidak hanya akan merangkum semua lalu lintas, tetapi dapat dilakukan dengan cara yang hanya lalu lintas yang ditujukan untuk subnet yang akan melakukan perjalanan melalui pipa VPN. Saya akan memperingatkan Anda bahwa Anda masih perlu mengedit file teks pada mesin lokal dan jarak jauh, tetapi itu cukup mudah untuk dijalankan.

Untuk keperluan Anda, karena Anda tidak ingin pihak di tengah (server) melihat lalu lintas Anda, Anda akan mengatur VPN untuk terhubung langsung dari mesin Anda ke mesin jarak jauh. Paket yang dirutekankan akan dienkripsi sebelum meninggalkan laptop Anda, sehingga Anda akan memiliki cakupan 100% ujung ke ujung.

Avery Payne
sumber
0

Seperti yang orang lain katakan, jika Anda harus "merangkum semua lalu lintas ke subnet," maka Anda mungkin ingin menggunakan VPN.

Namun, untuk mengakses hanya beberapa layanan, Anda mungkin ingin menggunakan fitur penerusan port lokal SSH, yang sangat sederhana. Misalnya, jika Anda memasukkan (dari laptop Anda):

ssh -N -L 3333:localhost:2222 jump_box

lalu menyambung ke localhost:2222, akan seperti menyambung ke localhost:2222dari jump_box. Anda dapat menggunakan beberapa opsi -L sekaligus, dan Anda dapat terhubung ke layanan di host lain jika ssd_config on jump_boxmemungkinkannya.

Anda dapat menggunakan autosshdengan systemdatau sejenisnya untuk menjaga terowongan dan berjalan.

Jeff
sumber