Dua exit VPN sihat, satu muat naik panjang sudah berjalan, dan keperluan bahawa sambungan seterusnya menggunakan terowong yang satu lagi. Ada dua cara untuk memenuhinya, dan hanya satu daripadanya selamat pada gateway yang hidup. Menukar laluan lalai memindahkan setiap paket, termasuk yang tergolong dalam muat naik. Drain terancang mengubah pilihan untuk sambungan baharu sambil membiarkan aliran yang dijejaki pada laluan tempat ia bermula.

Dua cara untuk menukar exit

Penukaran laluan ialah satu arahan dan boleh dikembalikan dalam beberapa detik, sebab itulah ia digunakan semasa insiden. Ia juga tidak memilih: paket daripada muat naik sedia ada tiba-tiba keluar melalui terowong lain, dengan alamat sumber awam yang lain dan keadaan terjemahan yang berasingan.

Jika hujung jauh menjejaki aliran mengikut alamat sumber, muat naik mungkin berhenti dikenali. Drain mengelakkannya dengan membuat keputusan sekali bagi setiap sambungan dan menyimpannya, jadi muat naik lama mengekalkan exitnya sehingga selesai. Itulah keseluruhan nilai latihan ini: hujung jauh tidak melihat sebarang perubahan yang perlu ditafsirkannya. Ia terus menerima paket yang sepadan dengan sambungan yang sudah dikenalnya.

Kosnya ialah kerumitan: dua jadual penghalaan, pengelas yang berjalan pada cangkuk yang betul, dan tanda yang mesti diselaraskan dengan segala-galanya pada mesin yang menggunakannya.

Berikan setiap exit jadualnya sendiri

Rizab satu jadual penghalaan bagi setiap exit dan nilai tanda atau bit berbeza untuk kedua-dua pilihan. Setiap jadual memerlukan laluan yang sesuai dengan peranannya, bukan sekadar nama, dan ia memerlukan hasil kegagalan yang disengajakan untuk kes yang tiada. Jadual kosong yang jatuh senyap ke jadual utama — begitulah trafik keluar melalui exit yang tidak dipilih sesiapa.

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 102

Tambahkan laluan blackhole di hujung setiap jadual supaya carian tanpa padanan gagal dengan kuat dan bukannya terlepas ke lalai yang anda tidak pilih.

Pilih sekali, pada paket pertama

Kelaskan selepas penjejakan sambungan wujud dan sebelum carian laluan yang penting. Untuk sambungan LAN baharu yang tidak terklasifikasi, pilih exit dan simpan dalam keadaan sambungan. Pada paket kemudian, pulihkan nilai tersimpan ke tanda paket yang dibaca oleh penghalaan dasar.

Bahagian halus ialah apa maksud baharu. Conntrack masih boleh melaporkan NEW untuk paket awal dan penghantaran semula sebelum balasan dilihat, jadi pengelas yang bergantung hanya pada keadaan itu boleh menimpa pilihan yang sudah dibuatnya. Semak bahawa tiada exit disimpan untuk sambungan itu sebelum memberikan satu.

nftables menyimpan tanda paket dan sambungan secara berasingan, dan panduan metainformasi mendokumenkan salinan eksplisit antara keduanya. Tanda sambungan tidak menjadi tanda paket yang dipadankan oleh peraturan anda dengan sendirinya, dan itulah sebab paling biasa pengelas yang ditulis dengan teliti tidak berkesan.

Hadkan pemulihan kepada arah dan trafik yang dimaksudkan. Menggunakan tanda exit internet pada paket yang kembali boleh menghantar balasan ke arah exit dan bukan LAN, dan gejalanya ialah sambungan sehala yang kelihatan seperti masalah firewall. Baca laluan balasan sebelum menyentuh peraturan firewall, kerana paket itu dihalakan, cuma tidak kembali kepada pengirim.

Empat fasa drain

  1. Sediakan B tanpa menyentuh A: penghalaan, penghantaran, kebenaran, NAT dan laluan kembali. Pasang jadual dan dasar pemilihannya melalui pemilik konfigurasi gateway yang sedia ada.

  2. Tukar pengelas supaya sambungan baharu yang tidak terklasifikasi memilih B, sambil mengekalkan pilihan tersimpan. Transaksi nftables atomik mengelakkan tetingkap di mana keadaan lama perlu dikosongkan.

  3. Biarkan A hidup sementara alirannya selesai. Antara muka, jadual, exit jauh dan pemetaan NATnya masih sebahagian daripada aliran itu, dan mengedit peraturan NAT tidak membina semula ikatan yang sudah wujud.

  4. Bersarakan A apabila syarat drain dipenuhi, dinilai daripada keadaan sambungan dan tingkah laku aplikasi dan bukannya satu selang senyap.

Apa yang drain tidak boleh janjikan

Permintaan pelayar bukan sambungan pengangkutan baharu; pengumpulan terus menghantar permintaan melalui yang lama. Sebaliknya, aliran UDP boleh menjadi tua keluar dari conntrack dan paket kemudian dikelaskan semula. Drain mengikut aliran yang dijejaki, bukan tanggapan aplikasi tentang sesi.

Jika A gagal sebelum alirannya selesai, tanda tersimpan tidak menyelamatkannya. Ia menyambung semula melalui B, atau tidak menyambung sama sekali. Drain terancang membeli kesinambungan selagi laluan asal sihat; ia bukan replikasi keadaan antara exit yang bebas.

Sahkan kedua-dua bahagian

Mulakan sambungan dibenarkan yang panjang umur sebelum perubahan dan satu yang benar-benar baharu selepasnya. Sahkan terowong mana yang digunakan setiap satu dan alamat sumber awam mana yang dilihat hujung jauh, kemudian semak bahawa trafik balasan kembali.

Jangan kosongkan jadual conntrack untuk memunculkan pilihan baharu. Itu memusnahkan tepat keadaan yang sepatutnya dipelihara oleh drain, dan menjadikan migrasi terkawal sebagai gangguan dengan ujian yang kelihatan bersih.

Artikel berkaitan