Profil yang dahulunya bermula kini gagal dengan ralat pilihan, dan baris yang dipetik penghurai kelihatan sempurna munasabah di skrin. Itulah perangkapnya: fail konfigurasi ialah senarai baris fizikal, setiap satu mengandungi satu kata kunci pilihan dan argumennya, dan baris panjang yang dibalut oleh editor kelihatan sama dengan dua baris sehingga anda melihat baitnya. Tiada apa-apa tentang rangkaian, sijil atau terowong terlibat dalam kelas kegagalan ini. Dua baris yang kelihatan sama di skrin boleh berbeza dengan satu bait.

Lakukan pemeriksaan di bawah mengikut urutan dan berhenti pada yang pertama gagal. Setiap satu lebih murah daripada yang berikutnya, dan setiap satu menyingkirkan penjelasan yang berbeza.

Satu baris, satu arahan

Penghurai membaca satu baris, mengambil perkataan pertama sebagai pilihan dan menganggap selebihnya sebagai argumen pilihan itu. Baris seperti cert server.crt port 1194 oleh itu bukan dua arahan berturutan. Ia satu pilihan cert dengan tiga argumen, dan yang ketiga bukan nama fail yang diterima pilihan itu. Membaca ralat sebagai pemisah baris yang hilang adalah betul; membacanya sebagai arahan yang hilang tidak.

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

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

Dua baris yang dibetulkan itu ialah serpihan, bukan konfigurasi. Kedua-duanya wujud untuk menunjukkan di mana sempadannya terletak. Setiap arahan biasa dalam profil mengikut peraturan yang sama, dan baris yang menggabungkan dua daripadanya menghasilkan sama ada ralat argumen atau nilai yang tidak dijangka oleh pilihan itu.

Buktikan bahawa pemisah baris itu nyata

Editor membalut untuk paparan. Sesetengahnya juga memasukkan pemisah keras apabila anda menampal, dan sesetengahnya tidak, jadi hasil visual yang sama boleh datang daripada dua fail yang sangat berbeza. Tunjukkan hujung baris dan kira baris sebelum anda mengubah apa-apa. Mengukur memerlukan satu arahan; meneka memerlukan satu malam.

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

Dalam output pertama setiap pemisah baris nyata muncul sebagai penanda $, jadi baris yang dibalut tetapi tidak dipisahkan tidak menunjukkan penanda di tempat skrin anda membalut. Arahan kedua mencetak baris bernombor, iaitu cara terpantas untuk membandingkan apa yang dilaporkan penghurai dengan apa yang terkandung dalam fail.

Ruang tambahan juga tidak mencipta arahan. Inden bersifat kosmetik, dan baris yang bermula dengan ruang masih merupakan pilihan tunggal yang sama. Jika mesej ralat menunjuk nombor baris, baca baris tepat itu dan bukannya perenggan tempatnya berada.

Petik laluan, bukan senarai arahan

Tanda petik wujud untuk argumen yang mengandungi ruang, bukan untuk mengumpulkan pilihan. Laluan sijil dengan ruang memerlukan tanda petiknya sendiri; dua arahan yang berkongsi sepasang tanda petik masih satu baris cacat.

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

Semak nama pilihan serentak dengan susun atur, kerana baris yang digabungkan boleh menghasilkan token yang kelihatan munasabah yang tidak pernah wujud. Arahan port ialah port; profil yang menggunakan sesuatu yang lain untuk idea yang sama akan gagal walaupun selepas sempadan baris dibetulkan. Apabila nama kelihatan asing, bandingkannya dengan senarai pilihan untuk versi yang anda jalankan dan bukannya contoh forum.

Kekalkan blok sebaris sebagai blok

Profil boleh membawa sijil dan kunci secara sebaris, dan blok itu ialah data, bukan konfigurasi. Baris PEM di dalam blok bukan pilihan untuk diratakan, diinden semula atau digabungkan, dan penanda blok mesti kekal pada barisnya sendiri.

Layan blok sebaris sebagai kawasan legap: betulkan baris pilihan di sekelilingnya, biarkan isinya tidak disentuh bait demi bait, dan jangan sekali-kali menampalnya ke dalam benang sokongan awam. Jika alat pemformatan menulis semula blok itu, pulihkannya daripada PKI anda dan bukannya membaikinya dengan tangan.

Betulkan bahagian terkecil, bukan templat

Pembaikan yang menggoda ialah menggantikan seluruh fail dengan konfigurasi daripada tutorial yang „berfungsi”. Itu menukar satu baris cacat dengan satu set perubahan dasar yang tidak disemak oleh sesiapa: parameter DH berbeza, tetapan pemampatan, pilihan sifer, pendengar pendua. Masalah asalnya kecil dan setempat, dan penggantinya bukan kedua-duanya.

Salin profil ke fail kerja yang dilindungi, betulkan sempadan baris dalam salinan itu, dan biarkan pemilik biasa perkhidmatan memuatkannya. Kemudian mulakan instans dan baca ralat pertama, jika ada, dari awal.

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

Apabila peringkat penghuraian lulus, kegagalan seterusnya akan berkaitan fail, sijil atau sifer dan bukannya perbendaharaan kata, dan itu kemajuan sebenar. Simpan salinan kerja dan nota satu baris tentang apa yang digabungkan; penampalan yang sama akan berlaku lagi kepada orang lain dalam pasukan yang sama.

Artikel berkaitan