Com systemd-networkd, execute uma ação ao alterar a configuração da rede

10

Estou mudando do Debian ifupdownpara systemd-networkd, e geralmente funciona bem. Um ponto que falta é que, a cada mudança de rede, desejo ligar killall -ARLM tinc, para que minha VPN suba em tempo hábil.

Será systemdou systemd-networkdfornecer tal funcionalidade? Como eu o usaria?

Joachim Breitner
fonte

Respostas:

3

Estou usando networkd-dispatcherpara executar eventos após alterações no status da interface:

O Networkd-dispatcher é um daemon do dispatcher para alterações no status da conexão systemd-networkd. Esse daemon é semelhante ao NetworkManager-dispatcher, mas é muito mais limitado nos tipos de eventos que ele suporta devido à natureza limitada do systemd-networkd.

Link para Gitlab

gfa
fonte
Isso está incluído no Debian 10 (Buster).
John Eikenberry
2

O Tinc deve ser atualizado como uma unidade systemd em vez de enviar sinais diretos. Para alcançar este precisa para configurar seus arquivos de unidade para ser acorrentado com o apropriadas Require=, Before=e After=linhas na [Unit]seção. Verifique também se você definiu o correto WantedBy=para os serviços de rede. (isto é. WantedBy={ network.target, network-online.target, network-pre.target} em vez de multi-user.target)

Isso permite executar systemctl restart systemd-networkd.servicepara reiniciar sua rede. Combinado isso com systemd-resolvd, udev/ dbus(mais [email protected]quando estiver em wifi) e a rede de alguém simplesmente funciona.

Leia os artigos sobre como mudar para dependências systemd-networkd e unit . Essa também é uma maneira de enviar sinais para suas systemd.serviceunidades através do systemctl killcomando conforme documentado no manual do systemd for administartors

Dwight Spencer
fonte
Eu realmente não sigo. Portanto, se o tinc é executado como um serviço systemd, posso usar systemctl killpara entregar o sinal. Mas não vejo como disparar isso em uma alteração na configuração da rede.
Joachim Breitner
Você não usaria o systemd sinalizando apenas os destinos e dependências de relacionamento. Assim, uma vez que sua interface de rede está ativada, isso sinaliza (internamente para systemd) as outras dependências no network.targetmomento network-online.targetpara iniciar essa unidade. basta tinc.serviceincluir Requires=systemd-networkd.servicee WantedBy=network-online.target, em seguida, quando o systemd-networkd iniciar, abrirá a interface nic e tun, estabelecerá um endereço IP e depois sinalizará para o tinc iniciar ou reiniciar conforme necessário.
Dwight Spencer
Eu também não consegui encontrar uma maneira de acionar uma reinicialização do serviço, porque o network-online.target não para ao desconectar (deve apresentar um relatório de bug para isso, na verdade ...). I recorreu a um /etc/NetworkManager/dispatcher.d/ script que contémcase "$2" in up|connectivity-change) if /usr/bin/nm-online -qx; then systemctl reload autossh.service fi;; esac
eMPee584
1
Acho divertido que você tenha vinculado a um artigo escrito pela pessoa cuja pergunta você está respondendo. :) É claro que é útil para os leitores posteriores desta resposta, mas ainda é engraçado.
Curinga
1

No momento, isso não é possível. No entanto, você só pode usar systemd-networkd-wait-online.servicecomo dependência na inicialização para reconfigurar o tinc. Na minha experiência, o tinc reagirá rapidamente às alterações na configuração da rede. Pelo menos no linux, ele poderia usar o rtnetlink para ouvir as alterações nas interfaces.

Mic92
fonte