Dengan systemd-networkd, melakukan tindakan pada perubahan konfigurasi jaringan

10

Saya beralih dari Debian ifupdownke systemd-networkd, dan sebagian besar berfungsi dengan baik. Satu bit yang hilang adalah bahwa pada setiap perubahan jaringan, saya ingin menelepon killall -ARLM tinc, sehingga VPN saya naik tepat waktu.

Apakah systemdatau systemd-networkdmenyediakan fungsi seperti itu? Bagaimana saya menggunakannya?

Joachim Breitner
sumber

Jawaban:

3

Saya menggunakan networkd-dispatcheruntuk menjalankan acara setelah perubahan status antarmuka:

Networkd-dispatcher adalah daemon dispatcher untuk perubahan status koneksi systemd-networkd. Daemon ini mirip dengan NetworkManager-dispatcher, tetapi jauh lebih terbatas dalam jenis peristiwa yang didukungnya karena sifat terbatas systemd-networkd.

Tautan ke Gitlab

gfa
sumber
Ini termasuk dalam Debian 10 (Buster).
John Eikenberry
2

Tinc harus diperbarui sebagai unit systemd bukannya mengirim sinyal langsung. Untuk mencapai hal ini salah satu kebutuhan untuk mengkonfigurasi file unit mereka harus dirantai dengan tepat yang Require=, Before=dan After=garis-garis di [Unit]bagian. Pastikan juga Anda mengatur yang benar WantedBy=untuk layanan jaringan. (mis. WantedBy={ network.target, network-online.target, network-pre.target} bukan multi-user.target)

Ini memungkinkan seseorang untuk mengeksekusi systemctl restart systemd-networkd.serviceuntuk me-restart jaringan Anda. Menggabungkan ini dengan systemd-resolvd, udev/ dbus(plus [email protected]ketika di wifi) dan jaringan seseorang hanya berfungsi.

Pastikan untuk membaca artikel tentang beralih ke systemd-networkd dan ketergantungan unit . Ini juga merupakan cara untuk mengirim sinyal ke systemd.serviceunit Anda melalui systemctl killperintah seperti yang didokumentasikan dalam systemd untuk panduan administrator

Dwight Spencer
sumber
Saya tidak benar-benar mengikuti. Jadi jika tinc dijalankan sebagai layanan systemd, saya dapat menggunakan systemctl killuntuk mengirimkan sinyal. Tapi saya tidak melihat bagaimana cara memicu perubahan konfigurasi jaringan.
Joachim Breitner
Anda tidak akan menggunakan pensinyalan systemd hanya target dan dependensi hubungan. Jadi begitu antarmuka jaringan Anda naik sinyal ini (secara internal ke systemd) dependensi lain di network.targetkemudian network-online.targetuntuk memulai unit itu. jadi cukup tinc.servicesertakan Requires=systemd-networkd.servicedan WantedBy=network-online.targetkemudian ketika systemd-networkd memulai yang akan memunculkan antarmuka nic dan tun, membuat alamat IP, dan kemudian memberi sinyal untuk memulai atau memulai kembali sesuai kebutuhan.
Dwight Spencer
Saya juga tidak dapat menemukan cara untuk memicu restart layanan, karena network-online.target tidak berhenti pada putuskan (seharusnya mengajukan laporan bug untuk ini sebenarnya ...). Saya menggunakan skrip /etc/NetworkManager/dispatcher.d/ yang berisicase "$2" in up|connectivity-change) if /usr/bin/nm-online -qx; then systemctl reload autossh.service fi;; esac
eMPee584
1
Saya merasa lucu bahwa Anda terhubung ke artikel yang ditulis oleh orang yang pertanyaannya Anda jawab. :) Tentu saja ini berguna untuk pembaca nanti dari jawaban ini, tetapi masih lucu.
Wildcard
1

Ini saat ini tidak memungkinkan. Namun Anda hanya dapat menggunakan systemd-networkd-wait-online.servicedependensi saat boot untuk mengkonfigurasi ulang tinc. Dalam pengalaman saya tinc akan bereaksi cepat terhadap perubahan dalam konfigurasi jaringan. Setidaknya di linux bisa menggunakan rtnetlink untuk mendengarkan perubahan antarmuka.

Mic92
sumber