W przypadku systemd-networkd wykonaj akcję po zmianie konfiguracji sieci

10

Jestem przełączania z Debianie ifupdownsię systemd-networkd, i to przeważnie działa dobrze. Brakującym elementem jest to, że przy każdej zmianie sieci chcę zadzwonić killall -ARLM tinc, aby moja sieć VPN szybko się rozrastała.

Czy systemdlub systemd-networkddostarczenie takiej funkcjonalności? Jak miałbym tego użyć?

Joachim Breitner
źródło

Odpowiedzi:

3

Używam networkd-dispatcherdo uruchamiania zdarzeń po zmianie statusu interfejsu:

Networkd-dispatcher to demon dyspozytora dla zmian statusu połączenia systemd-networkd. Ten demon jest podobny do programu NetworkManager-dispatcher, ale jest znacznie bardziej ograniczony w typach obsługiwanych zdarzeń z powodu ograniczonej natury systemd-networkd.

Link do Gitlaba

gfa
źródło
Jest to zawarte w Debian 10 (Buster).
John Eikenberry
2

Tinc powinien zostać zaktualizowany jako jednostka systemowa zamiast wysyłania bezpośrednich sygnałów. Aby osiągnąć ten trzeba skonfigurować swoje pliki jednostkowych być przykuty z odpowiednim Require=, Before=i After=linii w [Unit]sekcji. Upewnij się również, że ustawiłeś poprawny WantedBy=dla usług sieciowych. (tj. WantedBy={ network.target, network-online.target, network-pre.target} zamiast multi-user.target)

Dzięki temu można uruchomić systemctl restart systemd-networkd.serviceponownie sieć. W połączeniu z systemd-resolvd, udev/ dbus(plus w [email protected]przypadku WiFi) i własnej sieci po prostu działa.

Przeczytaj artykuły na temat przejścia na systemd-networkd i zależności jednostek . Jest to również sposób wysyłania sygnałów do systemd.servicejednostek za pomocą systemctl killpolecenia, zgodnie z dokumentacją w przewodniku systemd for administartors

Dwight Spencer
źródło
Tak naprawdę nie podążam. Więc jeśli tinc jest uruchamiany jako usługa systemowa, mogę użyć systemctl killdo dostarczenia sygnału. Ale nie widzę, jak wywołać to przy zmianie konfiguracji sieci.
Joachim Breitner
Nie użyłbyś sygnalizacji systemd tylko celów i zależności relacji. Zatem gdy Twój interfejs sieciowy ma tę sygnały (wewnętrznie Systemd) inne w zależności network.targetpotem network-online.targetskopać tej jednostki. więc po prostu mieć tinc.serviceto Requires=systemd-networkd.servicei WantedBy=network-online.targetwtedy, gdy Systemd-networkd kopnięć off, która będzie wychowywać interfejs NIC i tun, ustalenie adresu IP, a następnie sygnał do tinc do uruchomienia lub ponownego uruchomienia w razie potrzeby.
Dwight Spencer
Ja też nie mogłem znaleźć sposobu na uruchomienie restartu usługi, ponieważ network-online.target nie zatrzymuje się po rozłączeniu (powinien zgłosić raport o błędzie z tego powodu ...). Uciekłem się do skryptu /etc/NetworkManager/dispatcher.d/, który zawieracase "$2" in up|connectivity-change) if /usr/bin/nm-online -qx; then systemctl reload autossh.service fi;; esac
eMPee584,
1
Zabawne jest to, że umieściłeś link do artykułu napisanego przez osobę, na którą odpowiadasz. :) Oczywiście jest to pomocne dla późniejszych czytelników tej odpowiedzi, ale nadal jest zabawne.
Wildcard
1

Obecnie nie jest to możliwe. Jednak można użyć tylko systemd-networkd-wait-online.servicejako zależności od rozruchu, aby ponownie skonfigurować tinc. Z mojego doświadczenia wynika, że ​​tinc zareaguje szybko na zmiany w konfiguracji sieci. Przynajmniej na Linuksie mógłby użyć rtnetlink do nasłuchiwania zmian interfejsów.

Mic92
źródło