Mengapa Laluan OpenVPN Kalah kepada Dasar XFRM strongSwan
Laluan OpenVPN tertentu tidak mengatasi dasar XFRM: baca laluan dan pemilih dasar, kemudian sempitkan, kecualikan atau berpindah ke antara muka XFRM.
Paket boleh mengikut laluan OpenVPN dan masih ditangkap oleh dasar IPsec, dan gabungan itu kelihatan seperti pepijat penghalaan dari setiap sudut kecuali sudut yang betul. Linux menyelesaikan laluan dan kemudian merujuk pangkalan data dasar keselamatan yang berasingan, jadi laluan destinasi yang lebih khusus tidak menolak dasar XFRM yang sepadan. Gejala yang kelihatan ialah trafik yang meninggalkan hos dan tidak pernah tiba, sedangkan kedua-dua terowong melaporkan diri sihat. Tiga pilihan menyelesaikannya, dan yang mana anda pilih bergantung pada laluan mana antara dua laluan itu yang sepatutnya membawa awalan tersebut.
Dua keputusan, bukan satu
Pemilihan laluan menjawab soalan sempit: hop seterusnya dan alamat sumber mana yang harus membawa paket ini. Pangkalan data dasar keselamatan menjawab soalan lain: adakah paket ini memerlukan perlindungan IPsec, dan di bawah pemilih mana. Kedua-duanya berjalan untuk paket yang sama, dan memenuhi yang pertama tidak berkata apa-apa tentang yang kedua. Itulah sebabnya menukar metrik atau menambah laluan statik boleh membiarkan gejalanya tidak berubah.
Pemilih IPsec yang luas ialah punca biasa. Dasar yang melindungi 172.16.0.0/12 juga meliputi 172.20.8.0/24, yang mungkin ingin dicapai oleh pentadbir melalui terowong OpenVPN. Niat itu hanya wujud dalam jadual penghalaan, dan pangkalan data dasar tidak pernah mengetahuinya.
Anggap itu sebagai konflik antara dua laluan perlindungan yang dikonfigurasikan, bukan pertandingan antara dua metrik. Pembetulan itu milik komponen yang dikonfigurasikan dengan skop yang salah.
Baca laluan yang sebenarnya dipilih oleh kernel
Mulakan dengan carian yang dilakukan oleh kernel, termasuk alamat sumber dan sebarang peraturan dasar yang boleh mengalihkannya ke jadual lain. Laluan dalam jadual utama mungkin tidak pernah dirujuk jika peraturan terdahulu memilih jadual lain, dan padanan awalan terpanjang hanya terpakai dalam jadual yang dipilih oleh peraturan.
ip rule show
ip route show table all
ip route get 172.20.8.20 from 10.44.7.15
Perintah terakhir ialah yang penting, kerana ia mencetak laluan yang dipilih bersama alamat sumber yang akan digunakan oleh kernel. Bandingkan output itu dengan pemilih yang sepadan dengan dasar IPsec. Apabila laluan menunjuk ke antara muka OpenVPN dan dasar itu masih sepadan dengan pasangan yang sama, anda telah menghasilkan semula konflik itu tanpa meneka.
Pastikan dump bebas daripada alamat yang tidak berkaitan sebelum ia sampai ke tiket. Jadual penghalaan daripada hos pengeluaran membawa topologi dalaman, dan hanya baris yang menjawab soalan itu yang wajar ditampal.
Baca dasar yang juga terpakai
Senarai dasar menunjukkan arah, pemilih dan templat yang menentukan apa yang berlaku kepada paket yang sepadan. Baca arah keluar dahulu, kemudian sisi masuk untuk trafik balasan, kerana pengecualian sehala menghasilkan sambungan yang bermula dan tidak pernah selesai.
ip -s xfrm policy
swanctl --list-sas
Bandingkan pemilih dalam senarai dengan awalan yang dirundingkan oleh sambungan. Mematikan pemasangan laluan strongSwan tidak menghapuskan dasar itu, dan menukar metrik tidak mengubah pasangan sumber dan destinasi yang dilindungi oleh sesuatu dasar. Dua pembetulan palsu itu wajar diketepikan awal kerana itulah yang orang cuba dahulu.
Jika senarai tidak mengandungi dasar untuk awalan yang anda jangkakan, masalahnya di tempat lain dan jadual penghalaan mungkin bercakap benar. Jika ia mengandungi dasar yang lebih luas yang meliputi awalan itu, anda telah menemui penangkapan itu.
Tiga pilihan apabila kedua-dua laluan sah
Menyempitkan pemilih IPsec ialah pilihan paling bersih apabila awalan luas itu kemudahan dan bukan keperluan. Mengurangkan pemilih trafik jauh kepada subnet yang benar-benar berada di belakang IPsec menghapuskan konflik untuk setiap hos sekali gus, dan kosnya ialah rundingan semula kunci, bukan komponen baharu.
Pengecualian passthrough ialah pilihan pembedahan apabila pemilih luas mesti kekal. strongSwan menyokong sambungan berasingan yang child-nya menggunakan mod pass, yang memberitahu kernel bahawa trafik yang sepadan tidak boleh diproses oleh IPsec. Alamat jauh loopback menghalang sambungan itu daripada dipilih untuk rakan sebaya yang masuk, dan pemilih mesti menerangkan pasangan yang dibenarkan sebenar dan bukan segala-galanya.
connections {
openvpn-exception {
remote_addrs = 127.0.0.1
children {
openvpn-exception {
local_ts = 10.44.7.0/24
remote_ts = 172.20.8.0/24
mode = pass
start_action = trap
}
}
}
}
Contoh konfigurasi strongSwan mendokumentasikan jenis dasar ini dan konvensyen rakan sebaya loopback. Pilihan ketiga ialah reka bentuk berasaskan laluan dengan antara muka XFRM, yang mengikat dasar kepada trafik yang dihalakan melalui antara muka bernama dan bukannya kepada pemilih global. Ia penghijrahan, bukan pelarasan, dan trafik itu masih mesti memenuhi pemilih yang dirundingkan.
| Option | Use it when | Cost |
|---|---|---|
| Narrow the selector | The broad prefix was convenience | A rekey and a policy review |
| Passthrough child | The broad selector must stay | One exception per intended pair |
| XFRM interface | Policy should follow routing | A design migration |
Buktikan pengecualian itu tanpa melemahkan yang lain
Selepas memuatkan perubahan, uji pengecualian dan destinasi biasa yang mesti kekal dilindungi. Periksa kedua-dua arah, kemudian jatuhkan terowong OpenVPN dan sahkan apa yang berlaku kepada trafik yang dikecualikan. Pengecualian yang menghantar awalan itu secara terbuka tanpa didengari apabila terowong mati ialah keputusan dasar yang patut anda ambil dengan sengaja, bukan temui semasa insiden.
Catat awalan mana menggunakan laluan mana dan mengapa. Jika tidak, jurutera seterusnya yang melihat pemilih luas akan membuka semula siasatan yang sama, dan jawapannya akan duduk dalam mesej commit yang tiada siapa baca.