Тунелот се крева, сертификатот се валидира и потоа дијалог вели дека DNS серверот или домените не можеа да се постават. На Linux тој дијалог обично не е за портата: клиентот ја предава конфигурацијата на имиња на systemd-resolved преку D-Bus, а одбиеното предавање го остава интерфејсот кренат со резолуција која сè уште покажува на старата врска. Истиот лаптоп ги резолвира имињата добро пред профилот да добие суфикс, и тоа е трагата што вреди да се следи. Ништо на тунелот не се смени во моментот кога се појави дијалогот.

Без суфикс клиентот турка само сервери за имиња. Додајте домен за пребарување и втор повик му се придружува, SetLinkDomains, со сопствена проверка на авторизација, затоа истиот профил работи на Windows а овде не успева. Портата во двата случаи ги турка истите поставки, а компонентата што ги одбива е локална.

Потврдете дека резолверот е systemd-resolved

Овој клиент зборува само со systemd-resolved и со никој друг. Arch и неколку други дистрибуции го доставуваат исклучен, а /etc/resolv.conf може да припаѓа на сосема друг резолвер, затоа утврдете го сопственикот пред да гледате дозволи.

Три команди го разјаснуваат тоа:

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

Барате активна услуга, симболична врска насочена кон /run/systemd/resolve/stub-resolv.conf, и DNS по врска во resolvectl. Кога сопственоста ја држи NetworkManager, префрлете ја на resolved наместо да се борите со клиентот; drop-in-от подолу ги поставува двата клуча:

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

Рестартирајте го NetworkManager штом постои таа датотека. Неактивен резолвер заедно со клиент што продолжува да го вика неговото D-Bus име создава грешка што не именува ниту еден од двата.

Набљудувајте го D-Bus повикот што не успева

Овој чекор го претвора дијалогот во конкретен одговор. Набљудувајте го интерфејсот на резолверот во еден терминал и журналот во друг, потоа поврзете се повторно:

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

Треба да се појават три повици: SetLinkDNS, SetLinkDomains и SetLinkDefaultRoute. Оној што се враќа како одговор со грешка е тој што треба да се поправи. Тој одговор обично го наведува своето име, на пример org.freedesktop.DBus.Error.AccessDenied наспроти SetLinkDomains. Забележете кој повик беше, бидејќи следниот дел е токму за пропуштање на тој повик.

Дајте му ги на клиентот потребните polkit акции

Прочитајте ја политиката пред да напишете правило. Клиент што работи како услуга не може да одговори на интерактивно барање, затоа имплицитното auth_admin_keep е ќорсокак.

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

Ако одговорот е auth_admin_keep, на клиентот му треба експлицитно правило. Фрагментот подолу ги дозволува четирите resolve1 акции што VPN клиентот ги користи за време на врска и сè друго го остава на 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;
});

Ставете го во /etc/polkit-1/rules.d/ како датотека што ќе ја препознаете подоцна, на пример 50-azurevpn.rules, и заменете го името на групата во фрагментот со вашето пред да се одјавите и повторно да се најавите. Држете го тесен, бидејќи дозволувањето секоја resolve1 акција за секоја сметка е пошироко отколку што му треба на овој клиент и многу потешко за подоцнежна проверка.

Проверете го XML на профилот пред да го менувате polkit

Рачно уреден профил може да биде игнориран без збор. Microsoft документира рамно распоредување во кое записите dnsserver стојат директно во dnsservers, а суфиксите во dnssuffixes. Дополнителен елемент за обвиткување околу секоја адреса не е таа форма, и клиентот тивко се враќа на она што го турка портата.

Направете го тестот за отстранување пред да го допрете polkit. Извадете го блокот со суфиксот, поврзете се повторно и видете дали дијалогот се менува. Ако се менува, повикот што не успеа беше предавањето на доменот, а поправката е авторизација, не уште едно XML уредување.

Проверете го доменот на тунелската врска

Поврзете се повторно и прочитајте resolvectl status уште еднаш, проверувајќи дека тунелската врска го носи серверот за имиња и доменот за пребарување заедно. Резолвирајте кратко приватно име наместо јавно. Кога името се резолвира, но услугата зад него не одговара, DNS предавањето работеше и преостанатиот проблем е рутирање.

Запишете во тикетот сопственикот на резолверот, D-Bus повикот што не успеа, датотеката со правилото и верзијата на профилот. Тие четири реда го прават следниот Linux лаптоп кратка поправка наместо повторно истражување.

Поврзани статии