Mengapa nftables tidak dapat melihat trafik OpenVPN antara klien
Trafik antara rakan setara dihantar di dalam proses VPN, jadi pembilang penghantaran tidak pernah bergerak. Untuk mengiranya, anda perlu memilih antara laluan kernel dan laluan proses.
Dua klien pada satu pelayan bertukar fail, pemindahan berjaya, dan setiap peraturan penghantaran yang anda halakan ke terowong melaporkan sifar paket. Peraturannya tidak rosak dan rantaiannya tidak salah letak. Apabila penghantaran antara rakan setara dihidupkan, paket dihantar di dalam proses pelayan dan timbunan hos tidak pernah menjadi penghala, jadi tembok api kernel tiada apa untuk dikira. Memahami pemisahan itu menentukan sama ada anda mengekalkan jalan pintas atau membina semula laluan melalui kernel.
Ikut satu paket menembusi pelayan
Dalam terowong yang dihalakan, daemon menyerahkan paket dinyahsulit setiap klien kepada peranti terowong. Dari situ hos menghalakannya, cangkuk penghantaran berjalan, dan peraturan yang sepadan dengan peranti terowong boleh mengira atau menggugurkan trafik. Itulah laluan yang diandaikan oleh kebanyakan contoh tembok api.
| Forwarding path | Who decides | What the host firewall sees |
|---|---|---|
| Kernel routing between clients | Host routing table and forward rules | Every inner packet, with interface names |
| Peer forwarding inside the server process | The VPN daemon's own peer table | Only the outer encrypted transport |
Jalan pintas mengeluarkan hos dari tengah. Paket dinyahsulit satu sesi diserahkan kepada sesi lain di dalam daemon, dan paket dalaman tidak pernah dipancarkan pada peranti terowong dan tidak dihalakan oleh hos. Trafik terkapsul masih melintasi antara muka fizikal, jadi tangkapan luar kelihatan sibuk sementara peraturan dalaman kekal senyap. Tangkapan yang diambil pada peranti terowong tidak menunjukkan apa-apa langsung, yang mengejutkan sesiapa yang menjangka melihat pemindahan di situ. Asimetri itu ialah cara terpantas mengenali jalan pintas dari luar daemon.
Ujian pembilang yang menentukan laluan mana yang berjalan
Lampirkan pembilang pada peraturan yang sepatutnya terpakai, jalankan pemindahan antara dua klien yang sepatutnya disekat oleh peraturan itu, dan kemudian baca pembilang.
sudo nft list ruleset
sudo nft add rule inet filter forward iifname "tun0" oifname "tun0" counter accept
sudo nft list chain inet filter forward
Jika pemindahan berjaya dan pembilang kekal pada sifar, kernel tidak pernah mengendalikan paket itu, dan tiada penyuntingan peraturan akan mengubahnya. Ulangi ujian yang sama terhadap perkhidmatan pada pelayan itu sendiri, kerana aliran itu memang melintasi timbunan hos dan pembilangnya bergerak. Perbandingan kedua-dua hasil itulah yang menghasilkan jawapannya.
Dua perincian menghalang bacaan palsu. Nama antara muka yang ditulis dalam label rantaian tidak menapis apa-apa dengan sendirinya, kerana pemadanan berlaku pada medan antara muka di dalam peraturan. Dan reka bentuk jambatan lapisan 2 berkelakuan lain pula: di situ klien berkongsi satu domain siaran, jadi penemuan rakan setara memang dijangka, bukan kerosakan penghalaan.
Suis bukan senarai akses
Inilah bahagian yang memakan satu petang. Penghantaran antara rakan setara ialah satu tetapan hidup atau mati, dan selagi ia hidup daemon ialah satu-satunya titik penghantaran. Tembok api hos tidak dapat menyatakan siapa boleh sampai kepada siapa, dan fail mengikut klien tidak menjadikan suis itu matriks dasar.
Jika anda memerlukan peraturan mengikut rakan setara, pilihannya ialah antara melepaskan jalan pintas dan melepaskan tembok api hos sebagai kawalan. Mematikannya memulihkan penghantaran kernel, yang memerlukan penghantaran IP pada pelayan dan peraturan jelas untuk aliran yang dikehendaki. Membiarkannya hidup bermakna dasar itu tinggal dalam konfigurasi daemon, yang pada praktiknya ialah semua rakan setara atau tiada langsung.
Proses pelayan berasingan dengan kolam alamat dan port sendiri ialah jalan tengah yang boleh dilaksanakan. Setiap proses membawa tepat satu keputusan akses, jadi dua kumpulan boleh mempunyai peraturan berbeza tanpa matriks dasar. Hos boleh menghalakan antara kolam apabila itu yang dimaksudkan, dan tembok api kemudian melihat aliran itu kerana ia melintasi hos. Kosnya ialah port tambahan, sijil tambahan dan profil bagi setiap kumpulan.
Memilih titik penghantaran
Pilih penghantaran kernel apabila tembok api ialah enjin dasar, apabila anda memerlukan pengelogan mengikut aliran, atau apabila perakaunan penting. Kosnya ialah daya pemprosesan melalui timbunan hos dan lebih banyak peraturan untuk dijaga. Manfaatnya ialah setiap alat sedia ada, dari pembilang hingga pengeksport aliran, menerangkan trafik semula. Pada pelayan kecil kos itu tidak kelihatan; pada geganti sibuk ia kelihatan.
Pilih penghantaran dalam proses apabila trafik antara rakan setara sama ada dibenarkan sepenuhnya atau dilarang sepenuhnya dan pelayan itu disaizkan untuknya. Kosnya ialah pembilang, disiplin baris gilir dan penjejakan sambungan tidak lagi menerangkan aliran dalaman; itu hanya boleh diterima jika tiada siapa bergantung padanya kemudian.
Apa pun yang anda pilih, tuliskan di sebelah peraturan tembok api. Set peraturan yang kelihatan membenarkan trafik antara rakan setara sedangkan daemon tetap memutuskan mengelirukan orang seterusnya yang menyahpepijat pemindahan yang gagal. Sesiapa yang hanya membaca peraturan akan menganggap kernel itulah pintu.
Apa yang perlu diperiksa sebelum menukar peraturan
Baca konfigurasi yang benar-benar dimuatkan oleh pelayan, bukan fail yang anda ingat telah disunting, dan sahkan sama ada pilihan rakan setara ada. Jika anda menukarnya, pastikan perkhidmatan dimuatkan semula dan bukan hanya menulis semula fail pada cakera.
Kemudian ulangi ujian dengan aliran dari klien ke pelayan untuk membuktikan peraturan itu sepadan langsung, dan periksa laluan yang ditolak, kerana laluan yang hilang kelihatan tepat seperti sekatan tembok api dari sisi klien. Tukar susunan peraturan hanya selepas anda tahu titik penghantaran mana yang memiliki keputusan itu.