Mencapai perkhidmatan klien VPN: terowong terbalik atau DNAT
Mencapai perkhidmatan pada klien OpenVPN tanpa pemajuan port: bandingkan terowong SSH terbalik dengan DNAT di sebelah pelayan dan tiga syarat yang memilihnya.
Malah komputer riba di belakang NAT pembekal boleh melayani rakan sekerja, asalkan pelayan VPN menjadi tempat pertemuan. Dua mekanisme sampai ke sana: klien mendail keluar dan meminta pelayan memegang port mendengar, atau pelayan menerbitkan port dan menterjemahkannya ke dalam terowong. Kedua-duanya menyelesaikan masalah ketersampaian yang sama dan berkelakuan berbeza semasa kegagalan, penyeliaan dan pengelogan. Tiga syarat menentukan yang mana sesuai dengan persediaan anda.
Dua bentuk, satu tempat pertemuan
Dalam bentuk pertama klien membuka sesi SSH keluar dan meminta pelayan mendengar pada port yang dipilih, memajukan setiap sambungan kembali melalui sesi itu. Tiada apa yang dimajukan pada pelayan dan tiada terjemahan paket berlaku, jadi satu-satunya keperluan ialah akaun SSH, pemajuan yang dibenarkan dan peraturan tembok api untuk port itu. Perkhidmatan kekal terikat pada loopback di klien, yang biasanya memang dikehendaki.
ssh -N -R 8081:127.0.0.1:8080 -o ExitOnForwardFailure=yes -o ServerAliveInterval=30 [email protected]
Dalam bentuk kedua pelayan memiliki port awam dan menulis semula setiap sambungan ke arah alamat terowong klien. Itu memerlukan pemajuan IP diaktifkan, terjemahan destinasi semasa masuk dan terjemahan sumber semasa keluar, dan ia terus berfungsi apabila tiada sesi SSH. Port itu milik pelayan dan bukan sesi, dan sifat itulah yang menentukan kebanyakan kes sebenar.
Tiada satu pun bentuk lebih selamat secara semula jadi. Kedua-duanya akhirnya mendedahkan satu port perkhidmatan kepada sesiapa yang boleh mencapai alamat awam pelayan, dan kedua-duanya masih bergantung pada pengesahan perkhidmatan itu sendiri.
Syarat satu: perlukah port hidup lebih lama daripada sesi
Pemajuan terbalik hidup tepat selama sesi SSH yang menciptanya. Apabila pautan putus, pendengar hilang dan rakan sekerja melihat sambungan ditolak dan bukannya laluan perlahan. Penyeliaan arahan dengan unit systemd dan dasar mula semula menyelesaikannya, dan ExitOnForwardFailure=yes menjadikan pengikatan gagal kelihatan serta-merta dan bukannya meninggalkan sesi yang berjalan tanpa pemajuan.
Port yang diterjemah bertahan daripada but semula jika peraturan disimpan, tetapi ia bergantung pada klien mengekalkan alamat terowong yang sama. Kolam dinamik yang memberikan komputer riba alamat lain selepas sambung semula menghalakan peraturan itu secara senyap ke tiada. Tempah alamat terowong dahulu, kemudian tulis peraturan, dan anggap kedua-duanya sebagai satu perubahan.
Jika perkhidmatan perlu menjawab pada pukul tiga pagi tanpa sesiapa memerhati, bentuk dengan port yang diterbitkan pelayan mempunyai bahagian bergerak yang lebih sedikit, kerana satu-satunya proses yang mesti kekal hidup ialah terowong itu sendiri.
Syarat dua: siapa memiliki tembok api dan log
Bentuk terbalik menyimpan semua dasar di dua tempat. sshd memutuskan melalui AllowTcpForwarding sama ada pemajuan jauh dibenarkan sama sekali, dan GatewayPorts memutuskan sama ada pendengar terikat pada loopback atau pada setiap alamat. Dengan nilai lalai no rakan sekerja di luar pelayan tidak dapat mencapai port itu walaupun pemajuan berjaya, dan itu kelihatan seperti terowong rosak sedangkan sebenarnya ia alamat pengikatan.
sudo ss -ltn '( sport = :8081 )'
sudo grep -E '^(GatewayPorts|AllowTcpForwarding)' /etc/ssh/sshd_config
Bentuk terjemahan memerlukan pemajuan diaktifkan dan dua peraturan, dan peraturan kedua ialah tempat kebanyakan resipi salah. Menghadkan terjemahan sumber kepada keadaan conntrack DNAT bermakna hanya sambungan yang dicipta oleh peraturan destinasi ditulis semula, bukannya setiap paket yang dihantar pelayan ke dalam terowong.
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8081 -j DNAT --to-destination 10.88.0.6:8080
sudo iptables -t nat -A POSTROUTING -o tun0 -m conntrack --ctstate DNAT -j SNAT --to-source 10.88.0.1
Penulisan semula itu juga memusnahkan atribusi. Selepas itu klien melihat setiap pemanggil sebagai alamat terowong pelayan, yang meruntuhkan sebarang had kadar bagi setiap alamat kepada satu baldi dan menyembunyikan siapa menghantar apa. Jika atribusi penting, tamatkan sambungan pada pelayan atau kekalkan keputusan kebenaran di sana dan hantar identiti dalam pengepala yang dipercayai perkhidmatan. Memilih antara dua pembetulan itu bergantung pada sama ada perkhidmatan membaca pengepala proksi sama sekali.
Syarat tiga: satu port atau banyak, dan siapa memiliki nama
Satu perkhidmatan pada satu port ialah kes di mana pemajuan terbalik menang dari segi usaha. Anda memerlukan satu arahan, satu akaun dan satu peraturan tembok api, dan pembersihan ialah mematikan sesi. Beberapa perkhidmatan pada alamat awam yang sama mendorong anda ke arah bentuk terbitan pelayan, kerana setiap pemajuan terbalik memerlukan port pelayannya sendiri dan set itu berkembang dengan setiap perkhidmatan.
Nama merumitkannya lagi. Pemajuan terbalik boleh duduk di belakang proksi TCP yang menyalurkan mengikut SNI, manakala port terjemahan biasanya satu port bagi setiap perkhidmatan. Jika perkhidmatan menamatkan TLS sendiri dan memerlukan nama hos asal, pendekatan proksi mengekalkannya dan pendekatan DNAT hanya mengekalkannya jika perkhidmatan menerima nama itu pada port itu.
Catat syarat mana antara tiga yang menentukan bentuk itu. Jika tidak, orang seterusnya yang menambah perkhidmatan kedua akan membuka semula perbandingan yang sama dengan konteks yang lebih sedikit.
Putuskan, kemudian uji dari luar
Uji laluan dari rangkaian yang tidak mempunyai laluan ke komputer riba, dan perhatikan pembilang pada pelayan semasa permintaan berjalan. Menguji dari pelayan ke alamat awamnya sendiri tidak membuktikan apa-apa di sini, kerana paket dicipta secara setempat dan tidak pernah mencapai cangkuk terjemahan masuk, jadi ujian boleh lulus sedangkan laluan sebenar rosak.
sudo iptables -t nat -L PREROUTING -n -v
sudo tcpdump -ni any 'tcp port 8081' -c 20
Pembilang yang kekal rata bermaksud paket tidak pernah sampai ke peraturan, yang menunjuk kepada pembekal atau tembok api hos. Pembilang yang bergerak sementara perkhidmatan menolak menunjuk kepada tembok api klien sendiri atau alamat tempat perkhidmatan mendengar. Terowong yang membawa paket tetapi tidak memulangkan apa-apa ialah masalah laluan atau laluan balik, dan tiada satu pun daripada tiga hasil ini boleh dinyahpepijat dengan menyunting penyesuai klien. Catat pembilang mana yang bergerak sebelum anda mengubah apa-apa, kerana ujian seterusnya memerlukan garis dasar itu.
Sebaik bentuk itu berfungsi, catat port, pemilik dan kaedah penyeliaan di sebelah konfigurasi terowong. Pembetulan ketersampaian yang hanya wujud dalam sejarah shell seseorang berada satu but semula daripada insiden berulang.