Siapa yang memiliki alamat, rute, DNS, dan firewall pada VPN Linux?
VPN Linux membutuhkan satu otoritas per objek: perangkat, alamat, rute, DNS, firewall. Tuliskan peta itu, lalu tentukan apa yang dipulihkan oleh boot, sambung ulang, dan pembongkaran.
Dua skrip yang berebut rute yang sama adalah bentuk biasa dari masalah VPN Linux yang dicatat sebagai bug perutean. Satu komponen membuat perangkat tunnel, yang lain menambahkan rute default, yang ketiga menulis ulang konfigurasi resolver, dan yang keempat memuat ulang aturan firewall. Salah satunya bisa membatalkan kerja yang lain, dan pemenangnya hanyalah siapa yang berjalan paling akhir. Pertanyaan yang layak dijawab bukanlah paket mana yang harus dipasang, melainkan komponen mana yang berwenang atas setiap bagian keadaan.
Tuliskan peta itu sekali, dan sebagian besar kegagalan sambung ulang berhenti menjadi misterius. Empat objek penting: perangkat dan alamatnya, rute dan aturan kebijakan, konfigurasi DNS, dan firewall.
Perangkat dan alamatnya
Perangkat tunnel dibuat entah oleh pengelola yang mengenal profil atau oleh daemon yang dijalankan seseorang secara manual. Kedua pengaturan bekerja sendiri-sendiri; mencampurnya tidak. Jika NetworkManager memiliki profil, biarkan ia juga memiliki perangkat, dan jangan menjalankan OpenVPN tanpa pengelolaan terhadap nama tunnel yang sama.
Catat siapa yang menghapus perangkat saat sesi berakhir. Perangkat yang hidup lebih lama dari sesinya adalah sumber paling umum alamat basi dan kebingungan yang menyusul.
Rute dan aturan kebijakan
Di rute itulah konflik kepemilikan menimbulkan kerusakan yang terlihat. Pengelola koneksi memasang rute default untuk tunnel plus rute yang lebih spesifik untuk jaringan jauh; skrip yang ditulis tangan kemudian menambahkan rute default-nya sendiri dengan metrik berbeda dan diam-diam menang atau kalah tergantung waktu. Putuskan entri mana yang terikat koneksi, mana yang kebijakan permanen, dan komponen mana yang menyegarkannya setelah sambung ulang. Lalu jaga komponen lain tetap di luar tabel itu.
Aturan kebijakan layak mendapat kejelasan yang sama, karena aturan yang menunjuk ke tabel yang tidak diisi siapa pun menghasilkan lubang hitam yang tampak persis seperti tunnel mati. Jika sebuah aturan ada untuk memaksa lalu lintas ke suatu tempat, tabel yang dipilihnya harus dipelihara oleh pemilik yang sama.
DNS selalu menjadi pemilik terpisah
Daemon resolver berjalan sebagai prosesnya sendiri di bawah identitasnya sendiri, jadi ia tidak mewarisi keputusan perutean tunnel secara kebetulan. Ketika VPN mendorong server DNS, sesuatu harus menerjemahkannya menjadi konfigurasi per tautan yang dihormati resolver, dan sesuatu harus mencabutnya sesudahnya.
Mitos di sini adalah bahwa menulis nameserver ke dalam profil mengubah ke mana kueri pergi. Itu mengubah apa yang diberitahukan kepada resolver, bukan soket mana yang dipakai resolver ke hulu. Uji dengan kueri plus pencarian rute alih-alih memercayai berkasnya.
Keadaan firewall, dan siapa yang memulihkannya
Aturan firewall adalah objek yang paling sering ditimpa pada host VPN. Pengelola dapat menambahkan aturan NAT atau penerusan per koneksi, sementara layanan firewall saat boot memuat ulang kumpulan aturan tersimpan dan menghapusnya. Pilih satu otoritas untuk kebijakan dan jadikan yang lain konsumennya, atau terima bahwa reboot diam-diam mengubah perilaku. Pengecualian yang terikat koneksi seharusnya berada di berkas yang dimuat pemilik yang sama, bukan di perintah iptables yang diketik saat pemecahan masalah.
Jika aturan harus bertahan melewati sambung ulang, katakan itu secara eksplisit. Jika tidak, katakan juga, karena insinyur berikutnya akan mengasumsikan jawaban yang lebih nyaman.
Siklus hidup: boot, sambung ulang, pembongkaran
Beri pemilik untuk masing-masing dari tiga momen itu. Saat boot, putuskan apa yang menyiapkan prasyarat dan dalam urutan apa. Pada restart lunak, ingat bahwa perangkat mungkin bertahan sementara keadaan sesi tidak, jadi validator harus berjalan alih-alih pembuat. Saat pembongkaran, hapus hanya apa yang dibuat koneksi ini, karena mengatur ulang setiap rute atau mengosongkan seluruh firewall tidak sama dengan menghentikan satu tunnel.
Untuk pengamatan, ip monitor link address route menunjukkan perubahan kernel saat terjadi, tetapi ia melaporkan peristiwa alih-alih niat: rute yang dihapus tidak mengatakan apa pun tentang proses mana yang menghapusnya. Pasangkan dengan peta kepemilikan, dan penutupan yang membingungkan menjadi daftar kandidat yang pendek.
Pengecualian juga punya biaya. Menandai seluruh kelas perangkat sebagai tidak terkelola untuk lolos dari konflik menyerahkan keadaan itu kepada siapa pun, yang merupakan keputusan, bukan perbaikan.