Tunel naskočí, certifikát sa overí a potom dialóg oznámi, že DNS server alebo domény sa nepodarilo nastaviť. V Linuxe ten dialóg zvyčajne nie je o bráne: klient odovzdáva konfiguráciu mien systemd-resolvedu cez D-Bus a odmietnuté odovzdanie nechá rozhranie hore s prekladom, ktorý stále ukazuje na staré spojenie. Ten istý notebook prekladá mená správne, kým profil nezíska príponu, a to je stopa, ktorú sa oplatí sledovať. Na tuneli sa v okamihu, keď sa dialóg objavil, nič nezmenilo.

Bez prípony klient posiela len servery mien. Pridajte vyhľadávaciu doménu a pridá sa k nej druhé volanie, SetLinkDomains, s vlastnou kontrolou autorizácie, preto ten istý profil funguje vo Windows a tu zlyháva. Brána posiela v oboch prípadoch rovnaké nastavenia a komponent, ktorý ich odmieta, je miestny.

Overte, že prekladačom je systemd-resolved

Tento klient hovorí so systemd-resolved a s nikým iným. Arch a niekoľko ďalších distribúcií ho dodáva vypnutý a /etc/resolv.conf môže patriť úplne inému prekladaču, preto najprv zistite vlastníka a až potom sa pozerajte na oprávnenia.

Rozhodnú to tri príkazy:

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

Hľadáte aktívnu službu, symbolický odkaz smerujúci na /run/systemd/resolve/stub-resolv.conf, a DNS pre každé spojenie v resolvectl. Ak vlastníctvo drží NetworkManager, preveďte ho na resolved namiesto toho, aby ste sa s klientom naťahovali; drop-in nižšie nastaví oba kľúče:

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

Hneď ako ten súbor existuje, reštartujte NetworkManager. Neaktívny prekladač spolu s klientom, ktorý naďalej volá jeho meno v D-Bus, dáva chybu, ktorá neimenuje ani jedného z nich.

Sledujte volanie D-Bus, ktoré zlyháva

Tento krok premení dialóg na konkrétnu odpoveď. Sledujte rozhranie prekladača v jednom termináli a journal v druhom, potom sa znova pripojte:

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

Mali by sa objaviť tri volania: SetLinkDNS, SetLinkDomains a SetLinkDefaultRoute. To, ktoré sa vráti ako chybová odpoveď, je to, ktoré treba opraviť. Tá odpoveď zvyčajne uvádza dôvod, napríklad org.freedesktop.DBus.Error.AccessDenied proti SetLinkDomains. Poznamenajte si, ktoré volanie to bolo, pretože ďalšia časť je práve o tom, ako ho pustiť ďalej.

Dajte klientovi potrebné akcie polkit

Prečítajte si politiku, kým napíšete pravidlo. Klient bežiaci ako služba nemôže odpovedať na interaktívnu výzvu, takže implicitné auth_admin_keep je slepá ulička.

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

Ak je odpoveď auth_admin_keep, klient potrebuje výslovné pravidlo. Úryvok nižšie povoľuje štyri akcie resolve1, ktoré VPN klient počas pripojenia používa, a všetko ostatné necháva 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;
});

Vložte ho do /etc/polkit-1/rules.d/ ako súbor, ktorý neskôr spoznáte, napríklad 50-azurevpn.rules, a pred odhlásením a opätovným prihlásením nahraďte názov skupiny v úryvku svojím. Držte ho úzky, pretože povoliť každú akciu resolve1 každému účtu je širšie, než tento klient potrebuje, a oveľa ťažšie na neskorší audit.

Skontrolujte XML profilu, kým začnete upravovať polkit

Ručne upravený profil môže byť bez slova ignorovaný. Microsoft dokumentuje ploché usporiadanie, v ktorom položky dnsserver stoja priamo v dnsservers, a prípony v dnssuffixes. Ďalší obaľovací prvok okolo každej adresy nie je ten tvar a klient sa potichu vráti k tomu, čo pošle brána.

Pred dotykom polkit urobte test odstránenia. Vyberte blok s príponou, znova sa pripojte a sledujte, či sa dialóg zmení. Ak áno, zlyhávajúce volanie bolo odovzdanie domény a opravou je autorizácia, nie ďalšia úprava XML.

Overte doménu na tunelovom spojení

Znova sa pripojte a prečítajte resolvectl status ešte raz a skontrolujte, že tunelové spojenie nesie server mien aj vyhľadávaciu doménu spolu. Preložte krátke súkromné meno namiesto verejného. Keď sa meno preloží, ale služba za ním neodpovedá, odovzdanie DNS fungovalo a zostávajúcim problémom je smerovanie.

Do tiketu napíšte vlastníka prekladača, zlyhávajúce volanie D-Bus, súbor pravidla a verziu profilu. Tie štyri riadky premenia ďalší linuxový notebook na krátku opravu namiesto opakovaného vyšetrovania.

Súvisiace články