Con systemd-networkd, realice una acción al cambiar la configuración de la red

10

Estoy cambiando de Debian ifupdowna systemd-networkd, y en su mayoría funciona bien. Un bit que falta es que con cada cambio de red, quiero llamar killall -ARLM tinc, para que mi VPN se active de manera oportuna.

¿Tiene systemdo systemd-networkdproporciona dicha funcionalidad? ¿Cómo lo usaría?

Joachim Breitner
fuente

Respuestas:

3

Estoy usando networkd-dispatcherpara ejecutar eventos después de los cambios de estado de la interfaz:

Networkd-dispatcher es un demonio de despachador para cambios de estado de conexión systemd-networkd. Este demonio es similar a NetworkManager-dispatcher, pero es mucho más limitado en los tipos de eventos que admite debido a la naturaleza limitada de systemd-networkd.

Enlace a Gitlab

gfa
fuente
Esto está incluido en Debian 10 (Buster).
John Eikenberry
2

Tinc debe actualizarse como una unidad systemd en lugar de enviar señales directas. Para lograr esto se necesita para configurar sus archivos unitarios que se han encadenado con el apropiadas Require=, Before=y After=líneas en la [Unit]sección. También asegúrese de establecer lo correcto WantedBy=para los servicios de red. (es decir. WantedBy={ network.target, network-online.target, network-pre.target} en lugar de multi-user.target)

Esto le permite a uno ejecutar systemctl restart systemd-networkd.servicepara reiniciar su red. Combinado esto con systemd-resolvd, udev/ dbus(más [email protected]cuando está en wifi) y la red de uno simplemente funciona.

Asegúrese de leer los artículos sobre cómo cambiar a systemd-networkd y dependencias de la unidad . Esta es también una forma de enviar señales a sus systemd.serviceunidades a través del systemctl killcomando como se documenta en la guía del sistema para administradores

Dwight Spencer
fuente
Realmente no te sigo. Entonces, si tinc se ejecuta como un servicio systemd, puedo usarlo systemctl killpara entregar la señal. Pero no veo cómo activar eso en un cambio de configuración de red.
Joachim Breitner
No utilizaría la señalización de systemd solo los objetivos y las dependencias de relación. Por lo tanto, una vez que su interfaz de red esté activada, esto indica (internamente a systemd) las otras dependencias en ese network.targetmomento network-online.targetpara iniciar esa unidad. así que solo tinc.serviceincluya Requires=systemd-networkd.servicey WantedBy=network-online.targetluego, cuando se inicie systemd-networkd, aparecerá la interfaz nic y tun, establecerá una dirección IP y luego le indicará a tinc que inicie o reinicie según sea necesario.
Dwight Spencer
Yo tampoco pude encontrar una manera de activar un reinicio del servicio, porque network-online.target no se detiene al desconectarse (en realidad debería presentar un informe de error para esto ...). Recurrí a un script /etc/NetworkManager/dispatcher.d/ que contienecase "$2" in up|connectivity-change) if /usr/bin/nm-online -qx; then systemctl reload autossh.service fi;; esac
eMPee584
1
Me parece divertido que haya vinculado a un artículo escrito por la persona cuya pregunta está respondiendo. :) Por supuesto, es útil para los lectores posteriores de esta respuesta, pero sigue siendo divertido.
Comodín el
1

Esto actualmente no es posible. Sin embargo, solo puede usarlo systemd-networkd-wait-online.servicecomo una dependencia en el arranque para reconfigurar tinc. En mi experiencia, tinc reaccionará rápidamente ante los cambios en la configuración de la red. Al menos en Linux podría usar rtnetlink para escuchar los cambios en las interfaces.

Mic92
fuente