Azure VPN Client på Linux: DNS-domänerna kunde inte ställas in
Tunneln kommer upp och sedan kan Linux-klienten inte ställa in DNS-domänerna. Kontrollera systemd-resolved, följ D-Bus-anropet och rätta polkit-åtgärden.
Tunneln kommer upp, certifikatet valideras och sedan säger en dialog att DNS-servern eller domänerna inte kunde ställas in. På Linux handlar den dialogen oftast inte om gatewayen: klienten lämnar över namnkonfigurationen till systemd-resolved via D-Bus, och en avvisad överlämning låter gränssnittet stå uppe med namnuppslagningen fortfarande pekande på den gamla anslutningen. Samma laptop löser namn fint innan profilen får ett suffix, och det är ledtråden som är värd att följa. Ingenting med tunneln ändrades i stunden då dialogen dök upp.
Utan suffix skjuter klienten bara namnservrar. Lägg till en sökdomän och ett andra anrop ansluter till det, SetLinkDomains, med sin egen behörighetskontroll, därför fungerar samma profil på Windows och misslyckas här. Gatewayen skjuter samma inställningar i båda fallen, och komponenten som avvisar dem är lokal.
Bekräfta att systemd-resolved är uppslagaren
Den här klienten talar med systemd-resolved och med ingen annan. Arch och flera andra distributioner levererar den avstängd, och /etc/resolv.conf kan tillhöra en helt annan uppslagare, så fastställ ägaren innan du tittar på behörigheter.
Tre kommandon avgör saken:
systemctl status systemd-resolved
ls -l /etc/resolv.conf
resolvectl status
Du letar efter en aktiv tjänst, en symbolisk länk som pekar på /run/systemd/resolve/stub-resolv.conf, och DNS per länk i resolvectl. När NetworkManager i stället har ägandet, flytta det till resolved i stället för att slåss med klienten; drop-in-filen nedan ställer in båda nycklarna:
[main]
dns=systemd-resolved
systemd-resolved=true
Starta om NetworkManager så snart filen finns. En inaktiv uppslagare tillsammans med en klient som fortsätter att anropa dess D-Bus-namn ger ett fel som inte namnger någon av dem.
Följ D-Bus-anropet som misslyckas
Det här steget förvandlar dialogen till ett konkret svar. Följ uppslagarens gränssnitt i en terminal och journalen i en annan, och återanslut sedan:
sudo dbus-monitor --system "interface='org.freedesktop.resolve1.Manager'"
journalctl -fu systemd-resolved
Tre anrop borde dyka upp: SetLinkDNS, SetLinkDomains och SetLinkDefaultRoute. Det som kommer tillbaka som felsvar är det som ska rättas. Det svaret anger oftast orsaken, till exempel org.freedesktop.DBus.Error.AccessDenied mot SetLinkDomains. Notera vilket anrop det var, för nästa avsnitt handlar om att släppa igenom just det anropet.
Ge klienten de polkit-åtgärder den behöver
Läs policyn innan du skriver en regel. En klient som körs som tjänst kan inte svara på en interaktiv fråga, så en implicit auth_admin_keep är en återvändsgränd.
pkaction --verbose --action-id org.freedesktop.resolve1.set-domains
pkaction --action-id org.freedesktop.resolve1.set-dns-servers --verbose
Om svaret är auth_admin_keep, behöver klienten en uttrycklig regel. Utdraget nedan tillåter de fyra resolve1-åtgärder som en VPN-klient använder under en anslutning och lämnar allt annat på 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;
});
Lägg den i /etc/polkit-1/rules.d/ som en fil du känner igen senare, till exempel 50-azurevpn.rules, och byt ut gruppnamnet i utdraget mot ditt eget innan du loggar ut och in igen. Håll den snäv, för att tillåta varje resolve1-åtgärd för varje konto är bredare än den här klienten behöver och mycket svårare att granska i efterhand.
Kontrollera profilens XML innan du redigerar polkit
En profil som redigerats för hand kan ignoreras utan ett ord. Microsoft dokumenterar en platt layout där dnsserver-poster ligger direkt inuti dnsservers och suffix inuti dnssuffixes. Ett extra omslagselement runt varje adress är inte den formen, och klienten faller tyst tillbaka på det gatewayen skjuter.
Gör borttagningstestet innan du rör polkit. Ta bort suffixblocket, återanslut och se om dialogen ändras. Om den gör det var det misslyckade anropet domänöverlämningen, och rättelsen är behörighet och inte ännu en XML-redigering.
Verifiera domänen på tunnelanslutningen
Återanslut och läs resolvectl status igen, och kontrollera att tunnelanslutningen bär namnservern och sökdomänen tillsammans. Lös ett kort privat namn i stället för ett offentligt. När namnet löses men tjänsten bakom inte svarar fungerade DNS-överlämningen, och det kvarvarande problemet är routning.
Skriv uppslagarens ägare, det misslyckade D-Bus-anropet, regelfilen och profilversionen i ärendet. De fyra raderna gör nästa Linux-laptop till en kort rättelse i stället för en upprepad utredning.