Tambahkan peraturan dasar dengan ip rule dan ia berfungsi sehingga pautan hilang; pada saat itu ia benar-benar tiada. Tiada apa-apa gagal dengan kuat: keadaan kernel berubah, dan tiada pemilik konfigurasi tahu peraturan itu sepatutnya wujud. Itulah keseluruhan perbezaan antara peraturan yang bertahan dan yang tidak. Pada hos dengan systemd-networkd, penyelesaiannya ialah memberi peraturan itu pemilik, bukan menjalankan semula arahan selepas setiap sambung semula.

Peraturan hanya wujud jika seseorang memilikinya

Dasar penghalaan kernel ialah keadaan, bukan konfigurasi. Ia hidup dalam sistem yang berjalan, dan apa-apa yang meruntuhkan antara muka yang bergantung padanya boleh membawanya bersama. Arahan shell mengubah keadaan itu dan tidak meninggalkan sebarang rekod niat.

Pengurus rangkaian bekerja sebaliknya: mereka membaca konfigurasi, menerapkannya dan menerapkannya semula apabila peristiwa pautan membatalkan keadaan sebelumnya. Peraturan yang diisytiharkan dalam konfigurasi mereka dicipta semula, manakala peraturan yang ditambah di sebelah mereka ialah objek asing tanpa pemilik.

Perbezaan itu mempunyai nama dalam networkd, dan ia wajar dibaca sebelum mengaktifkan apa-apa. Peraturan asing dibuang secara lalai dalam versi terkini, yang mengejutkan mereka yang menyangka entri manual mereka akan kekal.

Baca versi sebelum mempercayai sesuatu tetapan

Tingkah laku pemilikan dikawal oleh tetapan dalam networkd.conf, dan tetapan itu tidak wujud dalam keluaran systemd yang lebih lama. Semak versi yang dipasang sebelum mereka bentuk di sekelilingnya, kerana hos lama berkelakuan berbeza daripada dokumentasi yang anda baca.

Dua nilai penting. Satu menentukan sama ada peraturan yang tidak diisytiharkan dalam konfigurasi networkd dibuang, dan satu lagi melakukan perkara sama untuk laluan. Kedua-duanya tentang pemilikan bukan tentang kandungan dasar, dan kedua-duanya secara lalai memilih tingkah laku yang lebih ketat dalam keluaran semasa. Mematikannya secara global mengekalkan setiap peraturan asing hidup, yang merupakan keputusan jauh lebih luas daripada mengisytiharkan satu dasar VPN yang dimaksudkan.

systemctl --version | head -1
networkctl --version | head -1
grep -R "ManageForeign" /etc/systemd/ /usr/lib/systemd/ 2>/dev/null

grep itu memberitahu anda apa yang ditetapkan secara tempatan dan apa lalai vendor. Ketiadaan juga maklumat, kerana ia bermakna lalai yang dikompil berlaku. Tulis lalai itu dalam nota anda supaya orang seterusnya tidak perlu menemuinya semula.

Isytiharkan peraturan dan jadual yang ditujunya

Peraturan dalam fail .network menamakan jadual, dan itu sahaja yang dilakukan nama. Ia tidak mencipta laluan di dalam jadual itu dan tidak menyemak sama ada ia masuk akal. Mengisytiharkan peraturan tanpa laluan menghasilkan dasar yang memadankan trafik dan kemudian menggugurkannya.

Isytiharkan laluan dalam fail yang sama, dengan lompatan seterusnya yang boleh dicapai dan jadual yang betul. Kekalkan keutamaan dalam peraturan yang diisytiharkan supaya ia mendarat di tempat yang anda jangkakan dalam senarai tersusun. Peraturan yang sampai ke jadual salah lebih awal daripada yang dimaksudkan mengubah lebih banyak trafik daripada perkhidmatan yang ingin anda baiki. Baca serpihan di bawah sebagai bentuk dan bukan sebagai fail lengkap, kerana pemilikan antara muka dan seluruh sambungan masih perlu hadir.

[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

Kemudian muat semula dan baca keadaan kernel dan bukan fail. Konfigurasi yang dihurai bersih masih boleh menghasilkan peraturan yang tidak anda maksudkan, dan kedua-dua pandangan hanya bersetuju apabila pengisytiharan itu lengkap.

Pilih satu pemilik untuk antara muka

Dua pengurus pada satu terowong menghasilkan pergaduhan yang kelihatan seperti pepijat pada kedua-duanya. Mengimport persediaan wg-quick sedia ada ke networkd ialah penghijrahan dan bukan penambahan, dan menjalankan kedua-duanya membiarkan antara muka dan peraturannya di bawah dua pemilik.

Lakukan penghijrahan dalam satu langkah: hentikan unit lama, nyahdayakannya, isytiharkan antara muka dan laluannya dalam networkd, kemudian muat semula. Semak bahawa unit lama tidak boleh kembali semasa but. Unit sisa yang aktif semula selepas but semula menimpa keadaan yang baru anda isytiharkan. Simpan fail konfigurasi lama sehingga yang baharu bertahan melalui satu sambung semula, kemudian persarakan ia.

Pemilikan tanda juga memerlukan penjagaan yang sama: jika peraturan sepadan dengan tanda firewall, sesuatu mesti menetapkan tanda itu. Peraturan yang merujuk tanda yang tiada siapa tetapkan ialah konfigurasi mati yang kelihatan disengajakan.

Latih peristiwa kitaran hayat

Konfigurasi hanya sebaik tingkah lakunya merentas peristiwa. Turunkan pautan, naikkan semula, mulakan semula perkhidmatan dan perbaharui alamat. Selepas setiap satu, baca senarai peraturan dan kandungan jadual.

sudo networkctl reload
ip rule show
ip route show table 100
sudo systemctl restart systemd-networkd

Hasil yang dimaksudkan ialah dasar yang sama dengan pemilik dicipta semula dan keadaan usang dipersarakan, yang lebih tahan lama daripada menambah peraturan shell semula selepas setiap sambung semula. Simpan satu baris dalam rekod perubahan yang menamakan fail pemilik peraturan dan versi yang menyokongnya. Kemudian jurutera seterusnya boleh menemui dasar itu tanpa meneliti sejarah shell. Peraturan yang tiada pemilik ialah peraturan yang akan hilang lagi.

Artikel berkaitan