Tunel se podigne, certifikat se validira, a zatim dijalog kaže da DNS server ili domene nisu mogli biti postavljeni. Na Linuxu taj dijalog obično nije o gatewayu: klijent predaje konfiguraciju imena systemd-resolvedu preko D-Busa, a odbijeno predavanje ostavlja interfejs podignutim s razrješavanjem koje još pokazuje na staru vezu. Isti laptop ispravno razrješava imena prije nego profil dobije sufiks, i to je trag koji vrijedi slijediti. Ništa se na tunelu nije promijenilo u trenutku kada se dijalog pojavio.

Bez sufiksa klijent samo gura servere imena. Dodajte domenu pretrage i druga pozivnica joj se pridružuje, SetLinkDomains, s vlastitom provjerom autorizacije, zato identičan profil radi na Windowsu a ovdje ne uspijeva. Gateway u oba slučaja gura iste postavke, a komponenta koja ih odbija je lokalna.

Potvrdite da je systemd-resolved taj koji razrješava

Ovaj klijent razgovara sa systemd-resolvedom i ni sa kim drugim. Arch i nekoliko drugih distribucija ga isporučuju onemogućenog, a /etc/resolv.conf može pripadati posve drugom razrješavaču, zato utvrdite vlasnika prije nego što pogledate dozvole.

Tri komande to rješavaju:

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

Tražite aktivnu uslugu, simboličku vezu koja pokazuje na /run/systemd/resolve/stub-resolv.conf, i DNS po vezi u resolvectl. Kada vlasništvo umjesto toga drži NetworkManager, prebacite ga na resolved umjesto da se svađate s klijentom; drop-in ispod postavlja oba ključa:

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

Restartujte NetworkManager kada ta datoteka postoji. Neaktivan razrješavač u paru s klijentom koji stalno zove njegovo D-Bus ime proizvodi grešku koja ne imenuje ni jedno od njih.

Pratite D-Bus poziv koji ne uspijeva

Ovaj korak pretvara dijalog u konkretan odgovor. Pratite interfejs razrješavača u jednom terminalu a dnevnik u drugom, pa se ponovo povežite:

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

Trebalo bi da se pojave tri poziva: SetLinkDNS, SetLinkDomains i SetLinkDefaultRoute. Onaj koji se vrati kao odgovor s greškom treba popraviti. Taj odgovor obično navodi svoj razlog, na primjer org.freedesktop.DBus.Error.AccessDenied naspram SetLinkDomains. Zabilježite koji je poziv bio, jer sljedeći odjeljak govori upravo o propuštanju tog poziva.

Dodijelite polkit radnje koje klijent treba

Pročitajte politiku prije nego što napišete pravilo. Klijent koji radi kao usluga ne može odgovoriti na interaktivni upit, pa je implicitni auth_admin_keep slijepa ulica.

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

Ako je odgovor auth_admin_keep, klijentu treba izričito pravilo. Isječak ispod dopušta četiri resolve1 radnje koje VPN klijent koristi tokom veze i ostavlja sve ostalo na 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;
});

Stavite ga u /etc/polkit-1/rules.d/ kao datoteku koju ćete kasnije prepoznati, npr. 50-azurevpn.rules, i zamijenite ime grupe u isječku svojim prije nego što se odjavite i ponovo prijavite. Držite ga uskim, jer dopuštanje svake resolve1 radnje za svaki račun šire je nego što ovaj klijent treba i mnogo teže za kasniju reviziju.

Provjerite XML profila prije nego što dirate polkit

Ručno uređen profil može biti ignorisan bez riječi. Microsoft dokumentuje ravan raspored u kojem stavke dnsserver stoje direktno unutar dnsservers, a sufiksi unutar dnssuffixes. Dodatni element omotača oko svake adrese nije taj oblik, i klijent tiho pada natrag na ono što gateway gura.

Napravite test uklanjanja prije nego što dotaknete polkit. Uklonite blok sa sufiksom, povežite se ponovo i gledajte mijenja li se dijalog. Ako se mijenja, poziv koji je pao bio je predaja domene, a popravka je autorizacija, a ne još jedno uređivanje XML-a.

Provjerite domenu na tunelskoj vezi

Povežite se ponovo i ponovo pročitajte resolvectl status, provjeravajući da tunelska veza nosi server imena i domenu pretrage zajedno. Razriješite kratko privatno ime umjesto javnog. Kada se ime razriješi ali usluga iza njega ne odgovara, DNS predaja je uspjela i preostali problem je rutiranje.

Upišite u tiket vlasnika razrješavača, D-Bus poziv koji je pao, datoteku pravila i verziju profila. Ta četiri reda pretvaraju sljedeći Linux laptop u kratku popravku umjesto ponovne istrage.

Povezani članci