OpenVPN client-connect qarmağı: ünvanınız əslində hara gedir
client-connect skripti ünvanı çap etməklə qaytara bilməz. Qarmağın müvəqqəti faylının, çıxış statusunun və topologiyanın müştərinin IP-sini necə təyin etdiyini görün.
client-connect skriptindən ünvan qaytarmaq müştərinin IP-sini təyin etməli kimi görünür. Amma etmir: qarmağın serverə yeganə kanalı müvəqqəti fayldır, onun yolu skriptin son arqumenti kimi gəlir və ünvan orada ifconfig-push sintaksisində yazılmalıdır. Ünvanı çap edən və ya heç nə yazmadan sıfırla çıxan skript ünvanı hovuzdan götürülmüş qoşulmuş müştəri yaradır və server jurnalı tamamilə sağlam görünür.
Qarışıqlıq ağlabatandır, çünki bir çox başqa qarmaq çıxış kodları və ya mühit dəyişənləri vasitəsilə cavab verir. Bunun öz müqaviləsi var və müqavilə fayl adı ilə başlayır.
Qarmaq fayl yazır, qaytarma dəyəri deyil
Bəyannamə iki sətirdir: çağırışa icazə vermək üçün script-security 2, sonra client-connect /etc/openvpn/server/assign-address.sh. Müştəri autentifikasiya etdikdə server həmin skripti yaradılmış fayl yolunu son arqument kimi əlavə edərək işlədir; bu yol yalnız bəyannamə öz əlavə arqumentləri ötürmədikdə $1 olur. Həmin müştəriyə tətbiq edilən hər şey o fayla adi direktivlər kimi, hər sətirdə bir dənə, konfiqurasiyada göründüyü kimi yazılır. Öz parametrlərini əlavə edən sarğı mövqeyi sürüşdürür və klassik əlamət skriptin --verbose kimi görünən bir yola yazmasıdır.
Çıxış statusu müqavilənin digər yarısıdır. Sıfır qəbul et və faylı oxu deməkdir; başqa hər şey bağlantını rədd edir, xəritələnməmiş kimliyin səssizcə hovuza düşmək əvəzinə belə rədd edilməsi budur. Uğur qaytarmazdan əvvəl tam direktivi yazın ki, yarımçıq yazılmış fayl heç vaxt müştərinin konfiqurasiyasına çevrilməsin.
İki direktiv diqqətə layiqdir, çünki hər şeylə qarşılıqlı təsirdə olurlar. ifconfig-push ünvanı təyin edir, göndərilən route isə müştəriyə tunel vasitəsilə nəyə çatmağın mümkün olduğunu bildirir; birincini qaytarıb ikincini unutsanız, ünvanı olan, amma gedəcək yeri olmayan müştəri alırsınız. Fayl daxilində sıra vacib deyil, amma tamlıq vacibdir. Heç bir həmyaşıdın çata bilmədiyi prefiks üçün marşrut göndərən qarmaq digər tərəfdən görünən eyni səhvdir.
Girişlər mühit dəyişənləri ilə gəlir: common_name, trusted_ip, ifconfig_pool_remote_ip və qalanları. Hamısına serverdən kənar sətirlər kimi yanaşın, heç vaxt shell parçaları kimi yox.
Ünvan xəritələməsi siyasətdir, hesab deyil
Cəlbedici qısa yol sertifikat adını təhlil edib onun rəqəmlərini son oktet kimi istifadə etməkdir. Bu bölüşdürücü deyil və adi yollarla uğursuz olur: eyni sonluğa malik iki ad toqquşur, 300 ilə bitən ad ünvan deyil, administratorun adını dəyişdiyi sertifikat isə cihazı səssizcə köçürür. Hər çağırışda alt şəbəkə üzvlüyünü, istifadə oluna bilən host diapazonunu, qorunmuş ünvanları və unikallığı yoxlayın və xəritələməni insanın oxuya biləcəyi cədvəldə saxlayın.
Adı kim idarə edirsə ünvanı da o idarə edir, ona görə bu quraşdırmada common_name-in həqiqətən nəyi təmsil etdiyini qərarlaşdırın. username-as-common-name aktiv olduqda kimlik sertifikat subyekti deyil, giriş adıdır. O dəyəri heç vaxt shell qiymətləndirməsinə ötürməyin və müştərinin fayl yoluna təsir etməsinə heç vaxt icazə verməyin.
Reyestrlə dəstəklənən bölüşdürücü paralelliyə tab gətirməlidir. Ünvanı atomik qoruyun, uğursuz yazmanı yarımkonfiqurasiya olunmuş müştərini qəbul etmədən idarə edin və hər ayırmanı ona sahib olan bağlantı ilə işarələyin ki, köhnə sessiyadan gecikmiş ayrılma yeni sessiyanın artıq saxladığı ünvanı azad edə bilməsin. Bir hovuzu paylaşan bir neçə server nüsxəsi bu tələbi seçim deyil, daha kəskin edir.
Topologiya ifconfig-push-un mənasını müəyyən edir
10.77.0.0/24 üzərində topology subnet ilə ifconfig-push 10.77.0.20 255.255.255.0 ünvan və onun netmaskıdır. topology net30 altında ikinci arqument heç də netmask deyil, həmyaşıd ünvanıdır, ona görə subnet formasını net30 serverinə köçürmək sizə qoşulan, lakin trafiki keçirə bilməyən müştəri verir. Topologiyanı qəsdən dəyişin, heç vaxt nümunə ahəngdar görünsün deyə yox. Artıq net30 ilə işləyən serverin köhnə ünvanlamada canlı müştəriləri var, ona görə keçid bir sətirlik düzəliş deyil, texniki xidmət pəncərəsi olan miqrasiyadır.
Statik ünvanlar dinamik hovuzdan kənarda və hər digər statik təyinatdan kənarda olmalıdır, o cümlədən adi client-config-dir faylları ilə verilənlər. Əgər iki mexanizm müxtəlif müştərilər üçün eyni ünvanı yarada bilirsə, biri sonda mütləq yaradacaq.
Etibar etməzdən əvvəl dörd halı yoxlayın
Eyni yoxlamaları xəritələnmiş kimliyə, xəritələnməmiş kimliyə, yenidən qoşulmaya və simulyasiya edilmiş reyestr nasazlığına qarşı işlədin. openvpn --config client.ovpn --verb 4 təyin edilmiş ünvanı push cavabında göstərir, serverdə isə grep -A2 PUSH_REPLY /var/log/openvpn/openvpn.log həqiqətən nəyin göndərildiyini təsdiqləyir. Xəritələnməmiş kimlik üçün gözlənilən nəticə hovuz ünvanı deyil, rədd edilmiş bağlantıdır.
Sonra daemonun həmin müvəqqəti faylları yazdığı qovluğu yoxlayın. Skript aşağı salınmış xidmət kontekstində işləyir, ona görə root üçün yazıla bilən, lakin daemon üçün yazıla bilməyən yol hər bağlantını jurnalda bir neçə sətir aşağıda basdırılmış icazə xətası ilə rəddə çevirir.
Ayırma avtorizasiya deyil: sabitlənmiş ünvan hələ də serverin arxasındakı hər təyinat nöqtəsinə giriş vermir. Marşrutlaşdırma və firewall siyasətini öz qatında saxlayın və onu indicə düzəltdiyiniz ünvana qarşı yoxlayın.