Azure VPN Client на Linux-у: DNS домени нису могли бити постављени
Тунел се подиже и тада Linux клијент не може да постави DNS домене. Проверите systemd-resolved, пратите D-Bus позив и поправите polkit радњу.
Тунел се подиже, сертификат се валидира, а затим дијалог каже да 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 лаптоп у кратку поправку уместо поновне истраге.