Linux üzərində Azure VPN Client: DNS domenləri təyin edilə bilmədi
Tunel qurulur və sonra Linux müştərisi DNS domenlərini qura bilmir. systemd-resolved-i yoxlayın, D-Bus çağırışını izləyin və polkit hərəkətini düzəldin.
Tunel qalxır, sertifikat təsdiqlənir, sonra isə dialoq DNS serverinin və ya domenlərin təyin edilə bilmədiyini bildirir. Linux-da bu dialoq adətən şlüzlə bağlı olmur: müştəri ad konfiqurasiyasını D-Bus üzərindən systemd-resolved-ə ötürür və imtina edilən ötürmə interfeysi açıq qalır, ad həlli hələ də köhnə keçidə yönəlmiş halda. Eyni noutbuk profilin sonluq əldə etməsindən əvvəl adları yaxşı həll edir və bu, izləməyə dəyər ipucudur. Dialoq görünən anda tuneldə heç nə dəyişməmişdi.
Sonluq olmadan müştəri yalnız ad serverlərini ötürür. Axtarış domeni əlavə edin və ona ikinci çağırış qoşulur, SetLinkDomains, öz səlahiyyət yoxlaması ilə, buna görə eyni profil Windows-da işləyir, burada isə uğursuz olur. Şlüz hər iki halda eyni ayarları ötürür və onları rədd edən komponent yerlidir.
systemd-resolved-in həlledici olduğunu təsdiqləyin
Bu müştəri yalnız systemd-resolved ilə danışır. Arch və bir neçə başqa distributiv onu deaktiv vəziyyətdə göndərir və /etc/resolv.conf tamamilə başqa bir həllediciyə aid ola bilər, ona görə icazələrə baxmazdan əvvəl sahibini müəyyənləşdirin.
Üç əmr bunu aydınlaşdırır:
systemctl status systemd-resolved
ls -l /etc/resolv.conf
resolvectl status
Siz aktiv xidmət, hədəfi /run/systemd/resolve/stub-resolv.conf olan simvolik keçid və resolvectl içində hər keçid üzrə DNS axtarırıq. Sahiblik əvəzində NetworkManager-dədirsə, müştəri ilə mübarizə aparmaq əvəzinə onu resolved-ə keçirin; aşağıdakı drop-in hər iki açarı təyin edir:
[main]
dns=systemd-resolved
systemd-resolved=true
Həmin fayl yarandıqdan sonra NetworkManager-i yenidən başladın. Qeyri-aktiv həlledici ilə onun D-Bus adını çağırmağa davam edən müştəri birlikdə heç birini adlandırmayan xəta yaradır.
Uğursuz olan D-Bus çağırışını izləyin
Bu addım dialoqu konkret cavaba çevirir. Bir terminalda həlledici interfeysini, digərində jurnalı izləyin və sonra yenidən qoşulun:
sudo dbus-monitor --system "interface='org.freedesktop.resolve1.Manager'"
journalctl -fu systemd-resolved
Üç çağırış görünməlidir: SetLinkDNS, SetLinkDomains və SetLinkDefaultRoute. Xəta cavabı kimi qayıdan çağırış düzəldilməli olandır. Həmin cavab adətən səbəbini göstərir, məsələn org.freedesktop.DBus.Error.AccessDenied qarşısında SetLinkDomains. Hansı çağırış olduğunu qeyd edin, çünki növbəti bölmə həmin çağırışın keçməsinə icazə verməkdən bəhs edir.
Müştərinin ehtiyac duyduğu polkit hərəkətlərini verin
Qayda yazmazdan əvvəl siyasəti oxuyun. Xidmət kimi işləyən müştəri interaktiv sorğuya cavab verə bilməz, ona görə gizli auth_admin_keep çıxılmaz yoldur.
pkaction --verbose --action-id org.freedesktop.resolve1.set-domains
pkaction --action-id org.freedesktop.resolve1.set-dns-servers --verbose
Cavab auth_admin_keep olarsa, müştəri açıq qaydaya ehtiyac duyur. Aşağıdakı fraqment VPN müştərisinin bağlantı zamanı istifadə etdiyi dörd resolve1 hərəkətinə icazə verir və qalan hər şeyi polkit.Result.NOT_HANDLED səviyyəsində saxlayır:
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;
});
Onu /etc/polkit-1/rules.d/ qovluğuna sonradan tanıyacağınız bir fayl kimi qoyun, məsələn 50-azurevpn.rules, və çıxış edib yenidən daxil olmazdan əvvəl fraqmentdəki qrup adını öz adınızla əvəz edin. Onu dar saxlayın, çünki hər hesab üçün hər resolve1 hərəkətinə icazə vermək bu müştərinin ehtiyacından daha genişdir və sonradan yoxlamağı çox çətinləşdirir.
polkit-i düzəltməzdən əvvəl profil XML-ini yoxlayın
Əl ilə düzəldilmiş profil bir söz demədən nəzərə alınmaya bilər. Microsoft düz bir yerləşməni sənədləşdirir burada dnsserver qeydləri birbaşa dnsservers içində yerləşir, sonluqlar isə dnssuffixes. Hər ünvanın ətrafında əlavə sarğı elementi bu forma deyil və müştəri səssizcə şlüzün ötürdüyü hər şeyə qayıdır.
polkit-ə toxunmazdan əvvəl silmə sınağını keçirin. Sonluq blokunu çıxarın, yenidən qoşulun və dialoqun dəyişib-dəyişmədiyini izləyin. Dəyişirsə, uğursuz çağırış domen ötürməsi idi və düzəliş başqa XML redaktəsi deyil, səlahiyyətdir.
Tunel keçidində domeni yoxlayın
Yenidən qoşulun və resolvectl status çıxışını yenidən oxuyun, tunel keçidinin ad serverini və axtarış domenini birlikdə daşıdığını yoxlayın. Açıq ad əvəzinə qısa şəxsi ad həll edin. Ad həll olunur, amma arxasındakı xidmət cavab vermirsə, DNS ötürməsi işləyib və qalan problem marşrutlaşdırmadır.
Bilete həlledici sahibini, uğursuz D-Bus çağırışını, qayda faylını və profil versiyasını yazın. O dörd sətir növbəti Linux noutbukunu təkrar araşdırma əvəzinə qısa düzəlişə çevirir.