Koneksi baru pada exit VPN baru, aliran lama dibiarkan apa adanya
Drain terencana hanya memindahkan aliran yang belum terklasifikasi. Bandingkan dengan penukaran rute, dan lihat tanda, tabel, serta status conntrack yang membuatnya bertahan.
Dua exit VPN yang sehat, satu unggahan panjang yang sudah berjalan, dan syarat bahwa koneksi berikutnya memakai terowongan lainnya. Ada dua cara memenuhinya, dan hanya satu yang aman pada gateway yang hidup. Menukar rute default memindahkan setiap paket, termasuk yang menjadi milik unggahan. Drain terencana mengubah pilihan untuk koneksi baru sambil membiarkan aliran yang terlacak pada jalur tempat mereka mulai.
Dua cara menukar exit
Penukaran rute adalah satu perintah dan bisa dibalik dalam hitungan detik, karena itulah dipakai saat insiden. Cara ini juga tidak membeda-bedakan: paket dari unggahan yang ada tiba-tiba keluar melalui terowongan lain, dengan alamat sumber publik berbeda dan status terjemahan terpisah.
Jika ujung jauh melacak aliran berdasarkan alamat sumber, unggahan bisa saja berhenti dikenali. Drain menghindarinya dengan mengambil keputusan sekali per koneksi dan menyimpannya, sehingga unggahan lama mempertahankan exit-nya sampai selesai. Itulah seluruh nilai latihan ini: ujung jauh tidak melihat perubahan yang harus ditafsirkannya. Ia tetap menerima paket yang cocok dengan koneksi yang sudah dikenalnya.
Biayanya adalah kompleksitas: dua tabel perutean, pengklasifikasi yang berjalan pada hook yang tepat, dan tanda yang harus dikoordinasikan dengan apa pun di mesin yang memakainya.
Beri setiap exit tabelnya sendiri
Sediakan satu tabel perutean per exit dan nilai tanda atau bit berbeda untuk kedua pilihan. Setiap tabel memerlukan rute yang sesuai perannya, bukan hanya nama, dan memerlukan hasil kegagalan yang disengaja untuk kasus yang hilang. Tabel kosong yang diam-diam jatuh ke tabel utama — begitulah lalu lintas keluar melalui exit yang tidak dipilih siapa pun.
ip rule add fwmark 0x10/0x10 table 101
ip rule add fwmark 0x20/0x20 table 102
ip route add default via 192.0.2.1 dev wg-a table 101
ip route add default via 198.51.100.1 dev wg-b table 102Tambahkan rute blackhole di akhir setiap tabel agar pencarian tanpa kecocokan gagal dengan keras alih-alih lolos ke default yang tidak Anda pilih.
Pilih sekali, pada paket pertama
Klasifikasikan setelah pelacakan koneksi ada dan sebelum pencarian rute yang penting. Untuk koneksi LAN baru yang belum terklasifikasi, pilih exit dan simpan ke status koneksi. Pada paket berikutnya, pulihkan nilai tersimpan ke tanda paket yang dibaca perutean kebijakan.
Bagian halusnya adalah apa arti baru. Conntrack masih bisa melaporkan NEW untuk paket awal dan pengiriman ulang sebelum balasan terlihat, jadi pengklasifikasi yang hanya berpatokan pada status itu bisa menimpa pilihan yang sudah dibuatnya. Periksa bahwa tidak ada exit tersimpan untuk koneksi sebelum menetapkan satu.
nftables menyimpan tanda paket dan koneksi secara terpisah, dan panduan metainformasi mendokumentasikan penyalinan eksplisit di antara keduanya. Tanda koneksi tidak dengan sendirinya menjadi tanda paket yang dicocokkan aturan Anda, dan itulah alasan paling umum pengklasifikasi yang ditulis hati-hati tidak berefek.
Batasi pemulihan pada arah dan lalu lintas yang dimaksud. Menerapkan tanda exit internet pada paket yang kembali dapat mengirim balasan menuju exit alih-alih LAN, dan gejalanya adalah koneksi satu arah yang tampak seperti masalah firewall. Baca jalur balasan sebelum menyentuh aturan firewall, karena paket sedang dirutekan, hanya saja tidak kembali ke pengirim.
Empat fase drain
Siapkan B tanpa menyentuh A: perutean, penerusan, otorisasi, NAT, dan jalur kembali. Pasang tabel dan kebijakan pemilihannya melalui pemilik konfigurasi gateway yang ada.
Ganti pengklasifikasi agar koneksi baru yang belum terklasifikasi memilih B, sambil mempertahankan pilihan tersimpan. Transaksi nftables atomik menghindari jendela di mana status lama harus dibersihkan.
Biarkan A tetap hidup selama alirannya selesai. Antarmuka, tabel, exit jarak jauh, dan pemetaan NAT-nya masih bagian dari aliran itu, dan menyunting aturan NAT tidak membangun ulang ikatan yang sudah ada.
Pensiunkan A ketika syarat drain terpenuhi, dinilai dari status koneksi dan perilaku aplikasi, bukan dari satu interval sunyi.
Apa yang tidak bisa dijanjikan drain
Permintaan peramban bukan koneksi transportasi baru; pengumpulan tetap mengirim permintaan melalui yang lama. Sebaliknya, aliran UDP bisa menua keluar dari conntrack dan paket berikutnya diklasifikasikan ulang. Drain mengikuti aliran yang terlacak, bukan gagasan aplikasi tentang sesi.
Jika A gagal sebelum alirannya selesai, tanda tersimpan tidak menyelamatkannya. Mereka menyambung ulang melalui B, atau tidak menyambung sama sekali. Drain terencana membeli kesinambungan selama jalur asli sehat; ini bukan replikasi status antara exit yang independen.
Verifikasi kedua belahannya
Mulai koneksi diizinkan berumur panjang sebelum perubahan dan yang benar-benar baru sesudahnya. Pastikan terowongan mana yang dipakai masing-masing dan alamat sumber publik mana yang dilihat ujung jauh, lalu periksa bahwa lalu lintas balasan kembali.
Jangan mengosongkan tabel conntrack agar pilihan baru muncul. Itu menghancurkan tepat status yang seharusnya dijaga drain, dan mengubah migrasi terkendali menjadi gangguan dengan uji yang tampak bersih.