Satu klien perlu mencapai perkhidmatan SSH klien lain, dan seluruh kolam harus kekal terasing seperti sekarang. Suis yang menggoda ialah client-to-client, yang menghidupkan akses antara rakan sebaya untuk semua orang sekali gus dan menyerahkan keputusan kepada OpenVPN dan bukan kepada kernel. Jawapan yang lebih sempit membiarkan suis itu dimatikan dan membiarkan penghalaan serta tembok api pelayan sendiri membawa tepat satu aliran.

Mekanisme lebih penting daripada teks peraturan, kerana kedua-dua pendekatan meletakkan paket di tempat yang berbeza. Mengetahui yang mana anda pilih menjelaskan kedua-dua peraturan yang kelihatan tidak melakukan apa-apa dan rakan sebaya yang bersambung tanpanya.

Ke mana client-to-client memindahkan paket

Dengan client-to-client dihidupkan, pelayan memajukan paket rakan sebaya secara dalaman dan bukannya menghantarnya semula keluar melalui peranti terowong, jadi paket itu tidak pernah sampai ke laluan pemajuan kernel. Itu mudah dan ia juga bermakna tembok api anda tidak pernah melihat aliran yang sepatutnya diawasinya. Biarkan pilihan itu dimatikan dan pelayan menghalakan paket semula keluar melalui antara muka yang sama, yang meletakkannya di hadapan netfilter. Antara muka sama masuk, antara muka sama keluar, dan rantaian FORWARD yang menentukan.

Pertukarannya jelas: anda memperoleh satu titik dasar dan anda mengambil alih kerja penghalaan serta pemajuan yang dahulu dilakukan jalan pintas untuk anda. Kerja itu kecil untuk satu aliran dan bertambah dengan setiap pengecualian yang anda tambah. Kira pengecualian itu sekarang, kerana set peraturan ialah tempat dasar antara rakan sebaya sebenarnya hidup.

Laluan yang sebenarnya dilalui paket rakan sebaya

Anggapkan perkhidmatan OpenVPN 2.6 Community pada Linux, pemprosesan TUN dalam ruang pengguna dan bukan DCO, topologi subnet, tun0, dan kolam 10.44.0.0/24 dengan klien A pada 10.44.0.21 dan klien B pada 10.44.0.37. Dengan topologi subnet, alamat dan topeng rangkaian yang diterima A sudah meliputi kolam itu, jadi A menghantar paket ke peranti terowong tanpa memerlukan laluan tolakan tambahan. Periksa laluan berkesan pada A dan bukannya menganggapnya ada.

Pada pelayan, paket tiba dialamatkan kepada B, yang bukan alamat setempat, jadi ia dimajukan. Pemajuan IPv4 mesti dihidupkan supaya itu berlaku sama sekali, dan carian laluan mesti menghantar paket semula keluar melalui tun0. Oleh itu tembok api melihat aliran yang dimajukan dengan antara muka yang sama pada kedua-dua belah, dan itulah perincian yang terlepas oleh kebanyakan set peraturan. Tiada terjemahan sumber diperlukan di sini, dan mengekalkan alamat A utuh itulah yang membolehkan B menggunakan peraturannya sendiri berasaskan sumber.

Dua peraturan pada pelayan, dalam susunan ini

Tiga peraturan membawa seluruh kebenaran: pemajuan, pengecualian pasangan, dan penolakan lalai untuk pasangan terowong. Peraturan penerimaan menamakan pasangan dan perkhidmatan itu, jadi kebenaran itu bertahan pada kolam yang bertambah. Letakkannya sebelum apa-apa penolakan menyeluruh bagi trafik terowong-ke-terowong, kerana padanan pertama yang menang:

sysctl -w net.ipv4.ip_forward=1
iptables -A FORWARD -i tun0 -o tun0 -s 10.44.0.21 -d 10.44.0.37 -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -i tun0 -o tun0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i tun0 -o tun0 -j DROP

Perintah itu bersifat ilustrasi dan tergolong dalam mekanisme yang digunakan oleh hos anda untuk menyimpan peraturan; sisipan semasa jalan lenyap pada but seterusnya. Peraturan stateful itulah yang membolehkan balasan B dan jabat tangan TCP kembali tanpa penerimaan kedua yang dicerminkan.

Periksa pembilang selepas itu dan bukannya senarai peraturan, kerana peraturan yang tidak pernah dipadankan kelihatan sama seperti peraturan yang berfungsi. Jika pembilang kekal pada sifar, paket itu tidak melalui laluan yang anda sangka.

Apa yang B masih mesti izinkan

B menjalankan perkhidmatan SSH, jadi B yang memutuskan sama ada ada sesuatu yang mendengar pada alamat terowong dan sama ada tembok api hosnya sendiri menerima sumber itu. Kebenaran rangkaian pada pelayan bukan kebenaran untuk mana-mana akaun pada B, dan pengesahan kunci hos serta pengesahan pengguna masih terpakai seperti dari mana-mana sahaja.

Uji kes positif dahulu: sambungan SSH baharu dari A ke alamat terowong B, diterima dengan kunci hos yang dijangka. Kemudian uji rakan sebaya lain atau port lain dan sahkan ia ditolak, kerana kebenaran yang diam-diam membenarkan segala-galanya tidak dapat dibezakan daripada yang berfungsi sehingga ia penting. Kedua-dua bahagian ujian itu perlu, dan yang kedua itulah yang orang langkau.

Catatkan alamat yang diberikan, laluan berkesan pada kedua-dua klien dan peraturan tepat pada pelayan dan pada B. Ping yang berjaya ke get laluan atau port terbuka pada pelayan tidak membuktikan mana-mana daripada ini, kerana kedua-duanya boleh benar sementara pemajuan antara rakan sebaya masih disekat. Tulis nombor itu semasa terowong naik, kerana alamat yang diterima klien selepas menyambung semula mungkin berbeza.

Artikel berkaitan