Buat ip rule bertahan setelah koneksi ulang dengan systemd-networkd
Aturan ip dari shell menghilang pada peristiwa tautan berikutnya. Deklarasikan aturan, tabel, dan rutenya di systemd-networkd agar kebijakan dibuat ulang.
Tambahkan aturan kebijakan dengan ip rule dan aturan itu bekerja sampai tautan hilang; pada titik itu ia benar-benar tidak ada. Tidak ada yang gagal dengan berisik: status kernel berubah, dan tidak ada pemilik konfigurasi yang tahu bahwa aturan itu seharusnya ada. Itulah seluruh perbedaan antara aturan yang bertahan dan yang tidak. Pada host dengan systemd-networkd, solusinya adalah memberi aturan itu seorang pemilik, bukan menjalankan ulang perintah setelah setiap koneksi ulang.
Aturan hanya ada jika seseorang memilikinya
Kebijakan perutean kernel adalah status, bukan konfigurasi. Ia hidup di sistem yang berjalan, dan apa pun yang merobohkan antarmuka yang menjadi sandarannya bisa membawanya pergi. Perintah shell mengubah status itu dan tidak meninggalkan catatan niat.
Pengelola jaringan bekerja sebaliknya: mereka membaca konfigurasi, menerapkannya, dan menerapkannya lagi ketika peristiwa tautan membatalkan status sebelumnya. Aturan yang dideklarasikan dalam konfigurasi mereka dibuat ulang, sedangkan aturan yang ditambahkan di sampingnya adalah objek asing tanpa pemilik.
Pembedaan itu punya nama di networkd, dan layak dibaca sebelum mengaktifkan apa pun. Aturan asing dihapus secara bawaan pada versi terbaru, yang mengejutkan orang yang mengira entri manual mereka akan bertahan.
Baca versinya sebelum memercayai sebuah pengaturan
Perilaku kepemilikan dikendalikan oleh pengaturan di networkd.conf, dan pengaturan itu tidak ada pada rilis systemd lama. Periksa versi yang terpasang sebelum merancang di sekitarnya, karena host lama berperilaku berbeda dari dokumentasi yang Anda baca.
Dua nilai penting. Satu menentukan apakah aturan yang tidak dideklarasikan dalam konfigurasi networkd dihapus, dan yang lain melakukan hal sama untuk rute. Keduanya soal kepemilikan, bukan isi kebijakan, dan keduanya secara bawaan memilih perilaku yang lebih ketat pada rilis terkini. Mematikannya secara global membuat setiap aturan asing tetap hidup, yang merupakan keputusan jauh lebih luas daripada mendeklarasikan satu kebijakan VPN yang dimaksud.
systemctl --version | head -1
networkctl --version | head -1
grep -R "ManageForeign" /etc/systemd/ /usr/lib/systemd/ 2>/dev/null
grep itu memberi tahu Anda apa yang diatur secara lokal dan apa bawaan vendor. Ketiadaan juga informasi, karena berarti bawaan hasil kompilasi yang berlaku. Tulis bawaan itu di catatan Anda agar orang berikutnya tidak perlu menemukannya lagi.
Deklarasikan aturan dan tabel yang ditujunya
Aturan dalam file .network menamai sebuah tabel, dan hanya itu yang dilakukan sebuah nama. Ia tidak membuat rute di dalam tabel itu dan tidak memeriksa apakah rute itu masuk akal. Mendeklarasikan aturan tanpa rutenya menghasilkan kebijakan yang mencocokkan lalu lintas lalu membuangnya.
Deklarasikan rute di file yang sama, dengan lompatan berikutnya yang dapat dijangkau dan tabel yang benar. Pertahankan prioritas pada aturan yang dideklarasikan agar ia mendarat di tempat yang Anda harapkan dalam daftar berurutan. Aturan yang mencapai tabel salah lebih awal dari yang dimaksud mengubah lebih banyak lalu lintas daripada layanan yang ingin Anda perbaiki. Baca fragmen di bawah sebagai bentuk, bukan sebagai file lengkap, karena kepemilikan antarmuka dan sisa koneksi tetap harus ada.
[RoutingPolicyRule]
Family=ipv4
IPProtocol=tcp
SourcePort=443
Table=100
Priority=1000
[Route]
Destination=10.80.0.0/24
Gateway=10.80.0.1
Table=100
Lalu muat ulang dan baca kembali status kernel, bukan file. Konfigurasi yang terurai bersih tetap bisa menghasilkan aturan yang tidak Anda maksud, dan kedua pandangan hanya sepakat bila deklarasinya lengkap.
Pilih satu pemilik untuk antarmuka
Dua pengelola pada satu terowongan menghasilkan pertengkaran yang tampak seperti bug pada keduanya. Mengimpor penyiapan wg-quick yang ada ke networkd adalah migrasi, bukan tambahan, dan menjalankan keduanya membuat antarmuka dan aturannya berada di bawah dua pemilik.
Lakukan migrasi dalam satu langkah: hentikan unit lama, nonaktifkan, deklarasikan antarmuka dan rutenya di networkd, lalu muat ulang. Periksa bahwa unit lama tidak bisa kembali saat boot. Unit sisa yang aktif lagi setelah reboot menimpa status yang baru saja Anda deklarasikan. Simpan file konfigurasi lama sampai yang baru bertahan melewati satu koneksi ulang, lalu pensiunkan.
Kepemilikan tanda juga menuntut perhatian yang sama: jika aturan cocok dengan tanda firewall, sesuatu harus menetapkan tanda itu. Aturan yang merujuk tanda yang tidak ditetapkan siapa pun adalah konfigurasi mati yang tampak disengaja.
Latih peristiwa siklus hidup
Konfigurasi hanya sebaik perilakunya di sepanjang peristiwa. Turunkan tautan, naikkan lagi, mulai ulang layanan, dan perbarui alamat. Setelah masing-masing, baca daftar aturan dan isi tabel.
sudo networkctl reload
ip rule show
ip route show table 100
sudo systemctl restart systemd-networkd
Hasil yang dimaksud adalah kebijakan sama dengan pemilik yang dibuat ulang dan status usang yang dipensiunkan, yang lebih tahan lama daripada menambahkan aturan shell lagi setelah setiap koneksi ulang. Simpan satu baris di catatan perubahan yang menyebut file pemilik aturan dan versi yang mendukungnya. Dengan begitu insinyur berikutnya bisa menemukan kebijakan itu tanpa menelusuri riwayat shell. Aturan yang tidak dimiliki siapa pun adalah aturan yang akan hilang lagi.