Tunnelen kommer opp, sertifikatet valideres, og så sier en dialog at DNS-serveren eller domenene ikke kunne settes. På Linux handler den dialogen vanligvis ikke om gatewayen: klienten overlater navnekonfigurasjonen til systemd-resolved over D-Bus, og en avvist overlevering lar grensesnittet stå oppe med navneoppslag som fortsatt peker på den gamle forbindelsen. Den samme laptopen løser navn fint før profilen får et suffiks, og det er sporet som er verdt å følge. Ingenting ved tunnelen endret seg i det øyeblikket dialogen dukket opp.

Uten suffiks skyver klienten bare navneservere. Legg til et søkedomene, og et andre kall slutter seg til det, SetLinkDomains, med sin egen autorisasjonssjekk, derfor virker den samme profilen på Windows og feiler her. Gatewayen skyver de samme innstillingene i begge tilfeller, og komponenten som avviser dem, er lokal.

Bekreft at systemd-resolved er oppslageren

Denne klienten snakker med systemd-resolved og med ingen andre. Arch og flere andre distribusjoner leverer den deaktivert, og /etc/resolv.conf kan tilhøre en helt annen oppslager, så fastslå eieren før du ser på tillatelser.

Tre kommandoer avgjør saken:

systemctl status systemd-resolved
ls -l /etc/resolv.conf
resolvectl status

Du ser etter en aktiv tjeneste, en symbolsk lenke som peker på /run/systemd/resolve/stub-resolv.conf, og DNS per lenke i resolvectl. Når NetworkManager i stedet har eierskapet, flytt det til resolved i stedet for å kjempe med klienten; drop-in-filen nedenfor setter begge nøklene:

[main]
dns=systemd-resolved
systemd-resolved=true

Start NetworkManager på nytt når den filen finnes. En inaktiv oppslager sammen med en klient som fortsetter å kalle på D-Bus-navnet, gir en feil som ikke navngir noen av dem.

Følg med på D-Bus-kallet som feiler

Dette trinnet gjør dialogen om til et konkret svar. Følg med på oppslagerens grensesnitt i ett terminalvindu og journalen i et annet, og koble deretter til på nytt:

sudo dbus-monitor --system "interface='org.freedesktop.resolve1.Manager'"
journalctl -fu systemd-resolved

Tre kall skal dukke opp: SetLinkDNS, SetLinkDomains og SetLinkDefaultRoute. Det som kommer tilbake som feilsvar, er det som skal rettes. Det svaret oppgir vanligvis årsaken, for eksempel org.freedesktop.DBus.Error.AccessDenied mot SetLinkDomains. Noter hvilket kall det var, for neste del handler om å slippe nettopp det kallet gjennom.

Gi klienten polkit-handlingene den trenger

Les policyen før du skriver en regel. En klient som kjører som tjeneste, kan ikke svare på en interaktiv forespørsel, så en implisitt auth_admin_keep er en blindvei.

pkaction --verbose --action-id org.freedesktop.resolve1.set-domains
pkaction --action-id org.freedesktop.resolve1.set-dns-servers --verbose

Hvis svaret er auth_admin_keep, trenger klienten en uttrykkelig regel. Utdraget nedenfor tillater de fire resolve1-handlingene som en VPN-klient bruker under en tilkobling, og lar alt annet stå 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;
});

Legg den i /etc/polkit-1/rules.d/ som en fil du kjenner igjen senere, for eksempel 50-azurevpn.rules, og bytt ut gruppenavnet i utdraget med ditt eget før du logger ut og inn igjen. Hold den smal, for å tillate hver resolve1-handling for hver konto er bredere enn denne klienten trenger og mye vanskeligere å revidere senere.

Sjekk profilens XML før du redigerer polkit

En profil som er redigert for hånd, kan bli ignorert uten et ord. Microsoft dokumenterer et flatt oppsett der dnsserver-oppføringer ligger direkte inne i dnsservers og suffikser inne i dnssuffixes. Et ekstra innpakningselement rundt hver adresse er ikke den formen, og klienten faller stille tilbake på det gatewayen skyver.

Kjør fjernetesten før du rører polkit. Fjern suffiksblokken, koble til på nytt og se om dialogen endres. Hvis den gjør det, var det feilende kallet domeneoverleveringen, og rettelsen er autorisasjon fremfor nok en XML-redigering.

Bekreft domenet på tunnelkoblingen

Koble til på nytt og les resolvectl status igjen, og kontroller at tunnelkoblingen bærer navneserveren og søkedomenet sammen. Løs et kort privat navn i stedet for et offentlig. Når navnet løses, men tjenesten bak ikke svarer, virket DNS-overleveringen, og det gjenværende problemet er ruting.

Skriv oppslagerens eier, det feilende D-Bus-kallet, regelfilen og profilversjonen i saken. De fire linjene gjør den neste Linux-laptopen til en kort rettelse i stedet for en gjentatt undersøkelse.

Relaterte artikler