WireGuard: dua setengah rute versus 0.0.0.0/0 di wg-quick
Dua rentang /1 mencakup alamat yang sama seperti /0, tetapi wg-quick merutekannya secara berbeda. Periksa aturan kebijakan, markah, dan jalur titik akhir sebelum menyunting.
Dua prefiks /1 mencakup tepat alamat IPv4 yang sama seperti satu /0, dan kesetaraan itu hanya berlaku di dalam daftar prefiks yang diizinkan milik peer. Kesetaraan itu berhenti berlaku begitu alat penyiapan memutuskan cara merutekan, karena Linux wg-quick memperlakukan prefiks default sebagai kasus khusus, bukan sebagai aritmetika. Cabang khusus memasang tabel khusus, dua aturan kebijakan, markah soket, dan pengaturan jalur balik yang tidak pernah diterima sepasang setengah rute. Jadi ketika proksi atau peramban berhenti bekerja setelah suntingan, prefiks adalah bagian perubahan yang paling tidak menarik.
Daftar prefiks bukan keseluruhan konfigurasi
AllowedIPs melakukan dua pekerjaan sekaligus, dan hanya satu yang menyangkut cakupan. Bagi WireGuard sendiri daftar itu adalah perutean kunci kripto: ia memutuskan tujuan mana yang dienkripsi ke arah peer dan alamat sumber mana yang boleh dipakai peer tersebut. Bagi wg-quick daftar yang sama juga berperan sebagai spesifikasi rute, dan rute yang dihasilkannya bergantung pada cabang mana yang kebetulan cocok dengan daftar. Cakupan identik pada dua bentuk daftar yang berbeda karena itu tidak mengatakan apa pun tentang keadaan host yang identik.
Konfigurasi bawaan mengambil keputusan itu dari tangan Anda, karena Table secara bawaan otomatis dan alat itu sendiri memilih ke mana rute mendarat. Manajer jaringan lain, pembungkus distribusi, atau nilai Table khusus mengubah hasilnya lagi, karena itulah saran yang ditulis untuk satu host bisa tampak keliru pada host berikutnya.
Apa yang ditambahkan cabang bawaan di luar sebuah rute
Entri /0 mengirim wg-quick ke jalur rute bawaannya: tabel perutean terpisah menerima rute bawaan, satu aturan kebijakan mengirim lalu lintas tanpa markah ke sana, aturan kedua menjaga rute tabel utama yang lebih spesifik tetap berwenang, dan antarmuka mendapat markah firewall pada soketnya sendiri. Markah itulah penjaga lingkar. Datagram terenkripsi yang membawa lalu lintas terowongan keluar dengan markah terpasang, sehingga aturan yang mengarahkan semua hal lain ke terowongan tidak menelan paket transport terowongan itu sendiri.
Sebaliknya, sepasang entri /1 menempuh jalur rute biasa. Dua rute mendarat di tabel yang dikonfigurasi, dan tidak satu pun mesin di sekitarnya muncul, bukan karena tidak perlu melainkan karena jalur kode itu tidak pernah dimasuki.
Di mana kedua tatanan menyimpang
Penyimpangan muncul pertama sebagai rekursi. Dengan setengah rute di tabel utama, alamat transport peer itu sendiri jatuh di dalam prefiks terowongan, sehingga paket yang seharusnya membawa terowongan cocok dengan rute yang menunjuk ke dalam terowongan. Sesuatu harus membebaskannya: rute host untuk titik akhir saat ini, markah yang dipasang dengan tangan, atau aturan khusus antarmuka. Rute host bekerja sampai alamat titik akhir berubah, yang terjadi pada titik akhir berbasis DNS, klien jelajah, dan konfigurasi banyak peer.
Kedua, apa pun yang bernalar tentang markah mengubah perilaku. Proksi transparan yang mengalihkan koneksi secara lokal membuat soket baru yang markah dan sumbernya berbeda dari aliran klien asli, dan aturan kebijakan yang dihasilkan cabang bawaan adalah bagian dari apa yang memilah aliran itu. Membaca koneksi keluar proksi sendiri adalah latihan berbeda dari menguji apakah tujuan asli dapat dicapai.
Baca aturan dan markah sebelum menyunting
Rekam keadaan saat ini selagi terowongan sehat, lalu lagi setelah perubahan, dan bandingkan kedua dump alih-alih bernalar dari berkas konfigurasi. Sertakan aturan kebijakan, setiap tabel, markah antarmuka, dan titik akhir yang tercatat.
ip rule show
ip -4 route show table all | grep -E 'default|wg1'
wg show wg1 fwmark
wg show wg1 endpoints
Jika baris pertama keluaran telah kehilangan aturan lalu lintas tanpa markah dan tabel khusus kosong, cabang bawaan tidak berjalan dan tidak ada aritmetika prefiks yang akan memulihkan efeknya. Markah nol pada antarmuka yang sebelumnya membawa markah adalah sinyal yang sama, terlihat dalam satu nilai.
Latih kehilangan terowongan sebelum merilis
Jika tataan setengah rute adalah pilihan yang disengaja, ia harus menyediakan bagian yang hilang secara eksplisit: jalur titik akhir yang bertahan terhadap perubahan alamat, perilaku yang dimaksudkan saat terowongan jatuh, dan perlakuan setara untuk IPv6. Tuliskan itu sebagai persyaratan alih-alih menemukannya saat gangguan. Lalu latih kegagalannya, karena terowongan penuh yang diam-diam kembali ke uplink fisik lebih buruk daripada yang berhenti bekerja.
sudo ip -4 route add 198.51.100.20/32 via 192.0.2.1 dev eth0
ip -4 route get 198.51.100.20
sudo wg-quick down wg1
Pencarian rute seharusnya menyelesaikan titik akhir dari antarmuka fisik tanpa melintasi terowongan, dan menurunkan antarmuka seharusnya meninggalkan host dalam keadaan yang dijanjikan rancangan. Proksi yang bekerja setelah penggantian membuktikan bahwa keadaan host yang dihasilkan memang penting; itu tidak membuktikan bahwa pencegahan lingkar dan perilaku dalam keadaan mati selamat dari suntingan.