Əvvəllər işə düşən profil indi seçim xətası ilə uğursuz olur və analizatorun sitat gətirdiyi sətir ekranda tamamilə məqbul görünür. Tələ budur: konfiqurasiya faylı fiziki sətirlərin siyahısıdır, hər birində bir seçim açar sözü və onun arqumentləri var və redaktorun keçidirdiyi uzun sətir baytlara baxana qədər iki sətirlə eyni görünür. Şəbəkə, sertifikat və ya tunel bu xəta sinfinə daxil deyil. Ekranda eyni görünən iki sətir bir baytla fərqlənə bilər.

Aşağıdakı yoxlamaları ardıcıllıqla edin və uğursuz olan birincidə dayanın. Hər biri növbətindən ucuzdur və hər biri fərqli bir izahı istisna edir.

Bir sətir, bir direktiv

Analizator bir sətri oxuyur, ilk sözü seçim kimi götürür və qalanını həmin seçimin arqumentləri kimi qəbul edir. Deməli, cert server.crt port 1194 kimi bir sətir ardıcıl iki təlimat deyil. Üç arqumentli tək bir cert seçimidir və üçüncüsü seçimin qəbul etdiyi fayl adı deyil. Xətanı çatışmayan sətir sonu kimi oxumaq düzgündür; çatışmayan direktiv kimi oxumaq deyil.

# malformed: one option, three arguments
cert server.crt port 1194

# intended: two options, one argument each
cert server.crt
port 1194

O düzəldilmiş iki sətir bir fraqmentdir, konfiqurasiya deyil. Onlar sərhədin hara aid olduğunu göstərmək üçün var. Profildəki hər adi direktiv eyni qaydaya əməl edir və onlardan ikisini birləşdirən sətir ya arqument xətası, ya da seçimin gözləmədiyi bir dəyər yaradır.

Sətir sonunun həqiqi olduğunu sübut edin

Redaktorlar göstərmək üçün keçidirir. Bəziləri yapışdırarkən sərt sətir sonları da əlavə edir, bəziləri etmir, ona görə də eyni vizual nəticə iki çox fərqli fayldan gələ bilər. Nəyisə dəyişməzdən əvvəl sətir sonlarını göstərin və sətirləri sayın. Ölçmək bir əmrə başa gəlir; təxmin etmək bir axşama.

cat -A /etc/openvpn/server/lab.conf | sed -n '10,20p'
awk 'NR>=10 && NR<=20 {printf "%d:%s\n", NR, $0}' /etc/openvpn/server/lab.conf

Birinci çıxışda hər həqiqi sətir sonu $ işarəsi kimi görünür, yəni keçidirilmiş amma bölünməmiş sətir ekranın keçidirdiyi yerdə heç bir işarə göstərmir. İkinci əmr nömrələnmiş sətirləri çap edir; bu, analizatorun bildirdiyi ilə faylın içindəkini müqayisə etməyin ən sürətli yoludur.

Əlavə boşluqlar da direktiv yaratmır. Girinti kosmetikdir və boşluqla başlayan sətir yenə həmin tək seçimdir. Xəta mesajı sətir nömrəsini göstərirsə, aid olduğu abzası deyil, məhz o sətri oxuyun.

Direktiv siyahısı deyil, yol sitat gətirin

Sitat işarələri boşluq olan arqumentlər üçündür, seçimləri qruplaşdırmaq üçün deyil. Boşluğu olan sertifikat yolu öz sitat işarələrinə ehtiyac duyur; bir cüt sitat işarəsini paylaşan iki direktiv hələ də bir zədəli sətirdir.

cert "/etc/openvpn/pki/lab certs/server.crt"
key "/etc/openvpn/pki/lab certs/server.key"

Seçim adlarını düzəlişlə eyni vaxtda yoxlayın, çünki birləşdirilmiş sətir heç vaxt mövcud olmamış inandırıcı görünən token yarada bilər. Port direktivi port-dir; eyni fikir üçün başqa bir şey istifadə edən profil sətir sərhədləri düzəldildikdən sonra da uğursuz olacaq. Bir ad tanış görünmürsə, onu forum nümunəsi ilə deyil, işlətdiyiniz versiyanın seçim siyahısı ilə müqayisə edin.

Sətiriçi blokları blok kimi saxlayın

Profillər sertifikatları və açarları sətiriçi daşıya bilər və bu bloklar konfiqurasiya deyil, məlumatdır. Blokun içindəki PEM sətirləri düzləşdiriləcək, yenidən girintilənəcək və ya birləşdiriləcək seçimlər deyil və blok işarələri öz sətirlərində qalmalıdır.

Sətiriçi bloka qeyri-şəffaf bölgə kimi yanaşın: ətrafındakı seçim sətirlərini düzəldin, məzmununu bayt-bayt toxunulmaz qoyun və onu heç vaxt açıq dəstək mövzusuna yapışdırmayın. Formatlaşdırma aləti bloku yenidən yazıbsa, onu əl ilə təmir etmək əvəzinə PKI-dən bərpa edin.

Şablonu deyil, ən kiçik bölməni düzəldin

Cəlbedici təmir bütün faylı „işləyən“ bir dərslikdən götürülmüş konfiqurasiya ilə əvəz etməkdir. Bu, bir zədəli sətri heç kimin nəzərdən keçirmədiyi bir sıra siyasət dəyişikliyi ilə əvəz edir: fərqli DH parametrləri, sıxılma ayarları, şifrə seçimləri, təkrarlanan dinləyicilər. İlkin problem kiçik və yerlidir, əvəzləmə isə heç biri deyil.

Profili qorunan iş faylına kopyalayın, həmin nüsxədə sətir sərhədlərini düzəldin və xidmətin adi sahibinin onu yükləməsinə icazə verin. Sonra nüsxəni işə salın və varsa ilk xətanı əvvəldən oxuyun.

openvpn --config /etc/openvpn/server/lab.conf --verb 3 --log /tmp/parse.log
grep -n 'Options error' /tmp/parse.log

Analiz mərhələsi keçdikdə, növbəti uğursuzluq söz ehtiyatı ilə deyil, fayl, sertifikat və ya şifrə ilə bağlı olacaq və bu, həqiqi irəliləyişdir. İş nüsxəsini və nəyin birləşdirildiyinə dair bir sətirlik qeydi saxlayın; eyni yapışdırma həmin komandadakı başqa birinin də başına yenidən gələcək.

Əlaqəli məqalələr