প্রতি লাইনে একটি OpenVPN নির্দেশনা, এবং কেন লাইন মোড়ানো মিথ্যা বলে
নরমভাবে মোড়ানো স্ক্রিন ফাইলে নতুন লাইন নয়। একটি ত্রুটিপূর্ণ অংশকে অপরিচিতের টেমপ্লেট দিয়ে প্রতিস্থাপনের আগে আসল লাইন ব্রেক যাচাই করুন।
একটি প্রোফাইল যা আগে চালু হতো এখন অপশন ত্রুটিতে ব্যর্থ হয়, এবং পার্সার যে লাইনটি উদ্ধৃত করে তা স্ক্রিনে সম্পূর্ণ যুক্তিসঙ্গত দেখায়। এটাই ফাঁদ: একটি কনফিগারেশন ফাইল হলো ভৌত লাইনের তালিকা, প্রতিটিতে একটি অপশন কীওয়ার্ড ও তার আর্গুমেন্ট থাকে, এবং এডিটরের মোড়ানো একটি দীর্ঘ লাইন বাইট না দেখা পর্যন্ত দুটি লাইনের মতোই দেখায়। নেটওয়ার্ক, সার্টিফিকেট বা টানেল এই ধরনের ব্যর্থতায় জড়িত নয়। স্ক্রিনে একই রকম দেখানো দুটি লাইন এক বাইটে ভিন্ন হতে পারে।
নিচের পরীক্ষাগুলো ক্রমানুসারে করুন এবং প্রথম ব্যর্থটিতে থামুন। প্রতিটি পরেরটির চেয়ে সস্তা, এবং প্রতিটি ভিন্ন ব্যাখ্যা বাদ দেয়।
এক লাইন, এক নির্দেশনা
পার্সার একটি লাইন পড়ে, প্রথম শব্দটিকে অপশন হিসেবে নেয় এবং বাকিটিকে সেই অপশনের আর্গুমেন্ট হিসেবে ধরে। তাই 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
পার্সিং পর্যায় পার হলে পরের ব্যর্থতা শব্দভাণ্ডার নয়, ফাইল, সার্টিফিকেট বা সাইফার নিয়ে হবে, এবং এটি প্রকৃত অগ্রগতি। ওয়ার্কিং কপি ও কী জোড়া দেওয়া হয়েছিল তা নিয়ে এক লাইনের নোট রাখুন; একই পেস্ট একই দলের অন্য কারও সাথে আবার ঘটবে।