პროფილი, რომელიც ადრე ირთვებოდა, ახლა ოპციის შეცდომით ფეილდება, ხოლო ხაზი, რომელსაც პარსერი ციტირებს, ეკრანზე სრულიად გონივრულად გამოიყურება. ეს არის ხაფანგი: კონფიგურაციის ფაილი ფიზიკური ხაზების სიაა, თითოეულში ერთი ოპციის საკვანძო სიტყვა და მისი არგუმენტებია, და რედაქტორის მიერ გადატანილი გრძელი ხაზი ორი ხაზის იდენტური ჩანს, სანამ ბაიტებს არ შეხედავ. ქსელი, სერტიფიკატი ან გვირაბი ამ შეცდომათა კლასში მონაწილეობას არ იღებს. ორი ხაზი, რომლებიც ეკრანზე იდენტურად გამოიყურება, შეიძლება ერთი ბაიტით განსხვავდებოდეს.

შეასრულეთ ქვემოთ მოცემული შემოწმებები თანმიმდევრობით და გაჩერდით პირველზე, რომელიც ვერ გაივლის. თითოეული შემდეგზე იაფია და თითოეული სხვა ახსნას გამორიცხავს.

ერთი ხაზი, ერთი დირექტივა

პარსერი კითხულობს ხაზს, პირველ სიტყვას ოპციად იღებს და დანარჩენს ამ ოპციის არგუმენტებად განიხილავს. ამიტომ cert server.crt port 1194-ის მსგავსი ხაზი ზედიზედ ორი ინსტრუქცია არ არის. ეს არის ერთი cert ოპცია სამი არგუმენტით, და მესამე არ არის ფაილის სახელი, რომელსაც ოპცია იღებს. შეცდომის წაკითხვა დაკარგული ხაზის წყვეტად სწორია; მისი წაკითხვა დაკარგულ დირექტივად არ არის სწორი.

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

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

ის ორი გასწორებული ხაზი ფრაგმენტია, არა კონფიგურაცია. ისინი არსებობენ იმის საჩვენებლად, სად უნდა იყოს საზღვარი. პროფილში ყოველი ჩვეულებრივი დირექტივა იმავე წესს ემორჩილება, და ხაზი, რომელიც მათგან ორს აერთიანებს, იძლევა ან არგუმენტის შეცდომას, ან მნიშვნელობას, რომელსაც ოპცია არ ელოდა.

დაამტკიცეთ, რომ ხაზის წყვეტი ნამდვილია

რედაქტორები გადააქვთ საჩვენებლად. ზოგიერთი ასევე ამატებს მყარ წყვეტებს ჩასმისას, ზოგიერთი კი არა, ამიტომ ერთი და იგივე ვიზუალური შედეგი შეიძლება ორი ძალიან განსხვავებული ფაილიდან მოვიდეს. აჩვენეთ ხაზების დასასრულები და დათვალეთ ხაზები, სანამ რამეს შეცვლით. გაზომვა ერთი ბრძანება ღირს; გამოცნობა — საღამო.

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

პირველ გამოსავალში ყოველი ნამდვილი ხაზის წყვეტი $ ნიშნად ჩანს, ამიტომ გადატანილი, მაგრამ გაუყოფილი ხაზი არ აჩვენებს ნიშანს იქ, სადაც თქვენი ეკრანი გადააქვს. მეორე ბრძანება ბეჭდავს დანომრილ ხაზებს, რაც ყველაზე სწრაფი გზაა იმის შესადარებლად, რასაც პარსერი აცხადებს და რასაც ფაილი შეიცავს.

ზედმეტი სივრცეებიც არ ქმნიან დირექტივას. აბზაცი კოსმეტიკურია, და სივრცით დაწყებული ხაზი კვლავ იგივე ერთადერთი ოპციაა. თუ შეცდომის შეტყობინება ხაზის ნომერზე მიუთითებს, წაიკითხეთ ზუსტად ის ხაზი და არა აბზაცი, რომელსაც ის მიეკუთვნება.

ციტირეთ გზა და არა დირექტივების სია

ბრჭყალები სივრცის შემცველი არგუმენტებისთვისაა და არა ოპციების დასაჯგუფებლად. სივრცის მქონე სერტიფიკატის გზას საკუთარი ბრჭყალები სჭირდება; ორი დირექტივა, რომლებიც ერთ წყვილ ბრჭყალს იზიარებენ, კვლავ ერთი დაზიანებული ხაზია.

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

შეამოწმეთ ოპციების სახელები განლაგებასთან ერთად, რადგან გაერთიანებულმა ხაზმა შეიძლება შექმნას დამაჯერებლად გამომხედავი ტოკენი, რომელიც არასდროს არსებობდა. პორტის დირექტივაა port; პროფილი, რომელიც იმავე იდეისთვის სხვა რამეს იყენებს, ვერ გაივლის ხაზების საზღვრების გასწორების შემდეგაც. როცა სახელი უცხოდ გამოიყურება, შეადარეთ ის თქვენ მიერ გაშვებული ვერსიის ოპციების სიას და არა ფორუმის მაგალითს.

შიდა ბლოკები შეინახეთ ბლოკებად

პროფილებს შეუძლიათ სერტიფიკატები და გასაღებები შიდად ატარონ, და ეს ბლოკები მონაცემებია და არა კონფიგურაცია. ბლოკის შიგნით PEM ხაზები არ არის ოპციები, რომლებიც უნდა გაბრტყელდეს, ხელახლა აბზაცირდეს ან გაერთიანდეს, და ბლოკის ნიშნები უნდა დარჩეს საკუთარ ხაზებზე.

შიდა ბლოკს მოექეცით როგორც გაუმჭვირვალე არეს: შეასწორეთ მის ირგვლივ ოპციების ხაზები, დატოვეთ მისი შიგთავსი ბაიტად ბაიტი ხელუხლებელი და არასდროს ჩასვათ ის საჯარო მხარდაჭერის თემაში. თუ ფორმატირების ხელსაწყომ ბლოკი გადაწერა, აღადგინეთ ის თქვენი PKI-დან და ხელით ნუ შეაკეთებთ.

შეასწორეთ ყველაზე მცირე მონაკვეთი და არა შაბლონი

მაცდური შეკეთება მთელი ფაილის „მომუშავე“ გაკვეთილის კონფიგურაციით ჩანაცვლებაა. ეს ერთ დაზიანებულ ხაზს ცვლის ისეთი პოლიტიკის ცვლილებების ერთობლიობით, რომელიც არავის გადაუმოწმებია: სხვა DH პარამეტრები, შეკუმშვის პარამეტრები, შიფრის არჩევანი, დუბლირებული მსმენელები. საწყისი პრობლემა პატარა და ლოკალურია, ხოლო ჩანაცვლება არც ერთია და არც მეორე.

დააკოპირეთ პროფილი დაცულ სამუშაო ფაილში, შეასწორეთ ხაზების საზღვრები ამ ასლში და მიეცით სერვისის ჩვეულებრივ მფლობელს მისი ჩატვირთვის უფლება. შემდეგ გაუშვით ინსტანცია და წაიკითხეთ პირველი შეცდომა, თუ არის, თავიდან.

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

როცა პარსინგის ეტაპი გაივლის, შემდეგი შეცდომა ფაილზე, სერტიფიკატზე ან შიფრზე იქნება და არა ლექსიკაზე, და ეს ნამდვილი პროგრესია. შეინახეთ სამუშაო ასლი და ერთსტრიქონიანი ჩანაწერი იმის შესახებ, თუ რა გაერთიანდა; იგივე ჩასმა კვლავ მოხდება იმავე გუნდის სხვა წევრთან.

დაკავშირებული სტატიები