Azure VPN Client a Linux: no s'han pogut definir els dominis DNS
El túnel s'aixeca i llavors el client de Linux no pot definir els dominis DNS. Comprova systemd-resolved, observa la crida D-Bus i arregla l'acció de polkit.
El túnel s'aixeca, el certificat es valida i llavors un diàleg diu que no s'ha pogut definir el servidor DNS ni els dominis. A Linux aquest diàleg normalment no té a veure amb la passarel·la: el client lliura la configuració de noms a systemd-resolved per D-Bus, i un lliurament refusat deixa la interfície aixecada amb la resolució encara apuntant a l'enllaç antic. El mateix portàtil resol noms correctament abans que el perfil guanyi un sufix, i aquesta és la pista que val la pena seguir. Res del túnel no va canviar en el moment que va aparèixer el diàleg.
Sense sufix, el client només envia servidors de noms. Afegeix un domini de cerca i una segona crida s'hi uneix, SetLinkDomains, amb la seva pròpia comprovació d'autorització, i per això el mateix perfil funciona a Windows i falla aquí. La passarel·la envia els mateixos paràmetres en tots dos casos, i el component que els refusa és local.
Confirma que systemd-resolved és el resolutor
Aquest client parla amb systemd-resolved i amb ningú més. Arch i diverses altres distribucions el serveixen desactivat, i /etc/resolv.conf pot pertànyer a un resolutor completament diferent, així que estableix el propietari abans de mirar els permisos.
Tres ordres ho aclareixen:
systemctl status systemd-resolved
ls -l /etc/resolv.conf
resolvectl status
Busques un servei actiu, un enllaç simbòlic dirigit a /run/systemd/resolve/stub-resolv.conf, i DNS per enllaç a resolvectl. Quan és NetworkManager qui en té la propietat, passa-la a resolved en lloc de barallar-te amb el client; el fitxer drop-in de sota defineix les dues claus:
[main]
dns=systemd-resolved
systemd-resolved=true
Reinicia NetworkManager un cop existeixi aquest fitxer. Un resolutor inactiu aparellat amb un client que no para de cridar el seu nom D-Bus produeix un error que no nomena cap dels dos.
Observa la crida D-Bus que falla
Aquest pas converteix el diàleg en una resposta concreta. Observa la interfície del resolutor en un terminal i el registre en un altre, i després reconnecta:
sudo dbus-monitor --system "interface='org.freedesktop.resolve1.Manager'"
journalctl -fu systemd-resolved
Hi haurien d'aparèixer tres crides: SetLinkDNS, SetLinkDomains i SetLinkDefaultRoute. La que torna com a resposta d'error és la que cal arreglar. Aquella resposta normalment diu el motiu, per exemple org.freedesktop.DBus.Error.AccessDenied contra SetLinkDomains. Anota quina crida era, perquè la secció següent tracta de deixar-la passar.
Concedeix les accions de polkit que el client necessita
Llegeix la política abans d'escriure una regla. Un client que s'executa com a servei no pot respondre un missatge interactiu, així que un auth_admin_keep implícit és un carreró sense sortida.
pkaction --verbose --action-id org.freedesktop.resolve1.set-domains
pkaction --action-id org.freedesktop.resolve1.set-dns-servers --verbose
Si la resposta és auth_admin_keep, el client necessita una regla explícita. El fragment de sota permet les quatre accions resolve1 que un client VPN fa servir durant una connexió i deixa la resta a polkit.Result.NOT_HANDLED:
polkit.addRule(function(action, subject) {
var allowed = [
"org.freedesktop.resolve1.set-dns-servers",
"org.freedesktop.resolve1.set-domains",
"org.freedesktop.resolve1.set-default-route",
"org.freedesktop.resolve1.revert"
];
if (allowed.indexOf(action.id) !== -1 &&
subject.isInGroup("wheel")) {
return polkit.Result.YES;
}
return polkit.Result.NOT_HANDLED;
});
Posa'l a /etc/polkit-1/rules.d/ com un fitxer que reconeixeràs més endavant, per exemple 50-azurevpn.rules, i substitueix el nom del grup del fragment pel teu abans de tancar la sessió i tornar-hi. Mantén-lo estret, perquè permetre cada acció resolve1 per a cada compte és més ampli del que aquest client necessita i molt més difícil d'auditar després.
Comprova l'XML del perfil abans d'editar polkit
Un perfil editat a mà es pot ignorar sense una paraula. Microsoft documenta una disposició plana en què les entrades dnsserver seuen directament dins de dnsservers, i els sufixos dins de dnssuffixes. Un element embolcall extra al voltant de cada adreça no és aquesta forma, i el client cau en silenci al que enviï la passarel·la.
Fes la prova d'eliminació abans de tocar polkit. Treu el bloc del sufix, reconnecta i mira si el diàleg canvia. Si canvia, la crida que fallava era el lliurament del domini, i la solució és autorització i no una altra edició d'XML.
Verifica el domini a l'enllaç del túnel
Reconnecta i torna a llegir resolvectl status, comprovant que l'enllaç del túnel porta el servidor de noms i el domini de cerca junts. Resol un nom privat curt en lloc d'un de públic. Quan el nom es resol però el servei que hi ha darrere no respon, el lliurament DNS ha funcionat i el problema restant és l'encaminament.
Escriu al tiquet el propietari del resolutor, la crida D-Bus que va fallar, el fitxer de regla i la versió del perfil. Aquestes quatre línies converteixen el següent portàtil Linux en una correcció curta en lloc d'una investigació repetida.