Bagaimana penerusan lokal SSH membawa sesi TCP OpenVPN
Satu port lokal, dua hubungan terautentikasi, tiga transport. Apa yang dipindahkan penerusan SSH, dan di mana loop serta pemeriksaan sertifikat masih berlaku.
Tiga transport menumpuk di sini, dan masing-masing punya pembingkaian sendiri. Muatan VPN berjalan di dalam sesi TLS, sesi TLS itu berjalan di dalam koneksi TCP ke port loopback, dan byte koneksi itu berjalan di dalam SSH ke host relay, yang membuka koneksi TCP sebenarnya ke pendengar VPN. Tidak ada yang berubah dalam susunan ini soal apa yang OpenVPN autentikasi, dan tidak ada yang membuat pendengar UDP dapat dijangkau lewat TCP. Baca sisanya sebagai deskripsi jalur byte, bukan resep untuk melewati kendali jaringan.
Apa yang sebenarnya dipindahkan penerusan lokal
Klien SSH mendengarkan di port lokal. Saat proses lokal terhubung, klien mengemas byte ke kanal terenkripsinya, dan sisi server membuka koneksi TCP baru ke tujuan yang disebut dalam permintaan penerusan.
Tujuan itu diresolusi oleh relay, bukan oleh mesin Anda, karena itu nama yang hanya ada di dalam jaringan jarak jauh tetap berfungsi. Ini juga berarti relay harus bisa menjangkau pendengar VPN dan punya rute balik ke sana. Nama yang diresolusi di laptop Anda tidak memberi tahu apa pun tentang apa yang bisa dilihat relay.
Memulai sesi SSH hanya membuktikan bahwa relay dapat dijangkau dan terautentikasi. Itu tidak mengatakan apakah pendengar berikutnya hidup, apakah firewall antara relay dan pendengar menerima koneksi, atau apakah VPN akan menerima profil Anda.
Arahkan klien ke pendengar lokal
Contoh yang dinyatakan: relay dapat menjangkau pendengar TCP di gw.internal.example:443, dan port lokal tinggi mengekspos jalur itu hanya ke mesin ini.
ssh -N -L 127.0.0.1:24011:gw.internal.example:443 [email protected]Panduan OpenSSH menjelaskan penerusan lokal sebagai penerimaan koneksi TCP secara lokal dan pembukaan koneksi berikutnya dari sisi jarak jauh. Ikat pendengar ke loopback alih-alih ke semua antarmuka, karena penerusan yang dapat dijangkau dari jaringan adalah relay terbuka dengan nama Anda. Pengikatan wildcard juga mengekspos port ke akun lokal lain di mesin bersama.
Lalu setel klien VPN ke mode TCP dan arahkan ke 127.0.0.1:24011. Jika profil memakai UDP, rancangan ini tidak bisa membantu: penerusan membawa aliran byte, dan tidak ada jalur datagram melewatinya.
Pisahkan kedua autentikasi
SSH mengautentikasi host relay. OpenVPN tetap mengautentikasi peer VPN, dan tujuan loopback tidak mengubah syarat itu. Menonaktifkan pemeriksaan sertifikat karena soket kini menunjuk ke localhost adalah jalan pintas terburuk dalam rancangan ini. Itu mengubah susunan transport menjadi susunan kepercayaan, dan tidak ada yang menyetujui yang kedua.
Pertahankan jangkar kepercayaan profil, pemeriksaan peran server, dan verifikasi nama tetap utuh. Jika klien Anda membandingkan nama server dengan alamat yang dihubungi, loopback mungkin perlu pengaturan nama eksplisit alih-alih pemeriksaan yang dinonaktifkan, dan dokumentasi profil adalah tempat untuk memastikan bidang mana yang dibandingkan.
Perlakukan relay sebagai pihak kedua dalam kisah kepercayaan: administratornya dapat melihat metadata koneksi dan dapat mengalihkan penerusan jika konfigurasi diubah. Susunan ini memerlukan persetujuan dari relay dan pemilik layanan VPN, bukan hanya dari yang membutuhkannya hari ini.
Jangan membangun loop di bawah terowongan
Setelah VPN memasang rute, koneksi SSH yang membawanya masih memerlukan jalur ke relay yang tidak melewati terowongan. Jika rute default pindah ke VPN dan relay hanya dapat dijangkau lewat terowongan yang sama, transport runtuh dan VPN ikut pergi. Kegagalan tampak seperti terowongan putus, bukan kesalahan perutean, karena itu salah didiagnosis.
Perbaikan biasanya adalah rute host ke alamat relay yang disematkan ke antarmuka fisik sebelum terowongan naik, ditambah pemeriksaan bahwa rute bertahan setelah koneksi ulang. Verifikasi dengan pencarian rute untuk alamat relay alih-alih menganggap urutannya benar.
Perkirakan juga tumpukan ini lebih lambat dan lebih rapuh daripada koneksi langsung, karena kini ada dua transport terurut dan satu lagi titik akhir yang harus dipelihara. Ini cara melintasi batas jaringan, bukan teknik kinerja.
Tutup pendengar setelah selesai
Hentikan sesi SSH saat terowongan tidak lagi diperlukan, dan pastikan port lokal telah dilepas. Penerusan yang terlupakan membiarkan jalur terautentikasi terbuka di mesin yang mungkin dipakai bersama.
Tinjau juga tujuan penerusan yang diizinkan pada relay, karena konfigurasi yang permisif mengubah akun mana pun yang disusupi menjadi poros umum. Catat port, relay, dan tujuan bersama-sama, agar orang berikutnya tahu untuk apa penerusan itu dan apakah masih disetujui.