Estou tentando adicionar DNS dividido a um túnel Wireguard (não é bem uma pergunta sobre Wireguard).
Tenho um comando PostUp: resolvectl dns %i 10.160.20.15
Que se traduz em: resolvectl dns wg0 10.160.20.15
e não funciona.
Quando eu apenas executo esse comando como root, nada parece mudar. Não há servidor DNS adicionado ao resolvectl status. Se eu habilitar o nível DEBUG de registro, recebo MUITAS mensagens, journalctl
mas não consigo ver nenhuma explicação para a falha.
É muito longo para postar aqui; mas o único error-message
campo em todos os logs que não é preenchido com n/a
é Link lan0 is managed
e tem outro campo error-name
com o valororg.freedesktop.resolve1.LinkBusy
lan0
é o nome da minha Ethernet primária (renomeada em netplan
) e, até onde sei, não deveria estar envolvida com esse comando?
Se eu for ingênuo e lan0
estiver envolvido de alguma forma, como faço para deixá-lo desocupado (sem gerenciamento) para poder definir o DNS em uma interface diferente?
EDIT: Encontrei o seguinte em org.freedesktop.resolve1 :
org.freedesktop.resolve1.LinkBusy
A alteração de configuração solicitada não pôde ser feita porque systemd-networkd(8) já tomou posse da interface e forneceu dados de configuração para ela.
Então acho que preciso saber o que significa quando networkd
toma posse? E como tomar posse de volta?
Depois de muita insistência, descobri que adicionar DNS personalizado a (pelo menos) uma interface Wireguard depende da ordem.
ou seja: você precisa especificar o domínio de pesquisa antes de poder especificar um servidor.
Não sei o porquê, e suspeito que seja um bug efêmero; mas se você especificar:
(e/ou simplesmente executar esses comandos quando o wg0 estiver ativo). Nada acontece de fato. Não há mensagens de erro, mas não há nenhuma mudança na saída de
resolvectl
.Entretanto, se você inverter a ordem e especificar o domínio antes do servidor DNS, funcionará perfeitamente.
Então o trecho correto para o arquivo de configuração do wireguard deve ser:
Observe também (fora do escopo desta questão) que a técnica integrada do wireguard:
também falha porque tenta usar o antigo,
resolvconf
que realmente não funciona com o systemd (sim, há um modo de emulação).Informações sobre versões: