কেন wg-quick ইন্টারফেস বন্ধ করলে wg0.conf আবার লেখে
SaveConfig হলো বন্ধ করার সময়ের সেভ, ব্যাকগ্রাউন্ড সিঙ্ক নয়। টানেল চালু থাকার সময় ফাইলটি সম্পাদনা করুন, পুনরায় চালু করা পুরোনো অবস্থা তার উপরে লিখে দিতে পারে।
/etc/wireguard/wg0.conf-এ একটি পিয়ার যোগ করেন, systemctl restart wg-quick@wg0 চালান, আর আবার তাকালে পিয়ার ফাইল থেকে উধাও। কোনো কিছুই কোনো কিছু নষ্ট করেনি। পুনরায় চালু করা হলো থামার পর শুরু, আর থামার ধাপটি আপনি এইমাত্র সম্পাদনা করা ফাইলের উপরে চলমান অবস্থা লিখে দিতে পারে। দায়ী সেটিংটি আপনি যে ফাইলটি সম্পাদনা করছিলেন সেই একই ফাইলে থাকে, আর প্রথমবার এটি ঠেকলে এই চক্রটিকে এত বিভ্রান্তিকর করে তোলে ঠিক সেই কারণেই।
দুটি অবস্থা, একটি ফাইল, আর বন্ধ করার সময় সেভ
WireGuard-এর চলমান অবস্থা আর wg-quick কনফিগারেশন ফাইল সম্পর্কিত কিন্তু আলাদা। ফাইলটি ইনপুট: wg-quick এটি পড়ে, ইন্টারফেস তৈরি করে, ঠিকানা ও রুট নির্ধারণ করে এবং পিয়ার কনফিগার করে। কার্নেল ডিভাইসটি জীবন্ত বস্তু, আর wg দিয়ে করা নিম্ন-স্তরের পরিবর্তন কখনো নিজে থেকে ফাইলে ফিরে লেখা হয় না।
একটি দিক ছাড়া। ইন্টারফেস অংশে SaveConfig = true থাকলে wg-quick ইন্টারফেস নামানোর অংশ হিসেবে চলমান কনফিগারেশন ফাইলে সেভ করে। wg-quick ম্যানুয়াল ঠিক এই বিষয়ে সতর্ক করে: ইন্টারফেস চালু থাকার সময় ফাইলে করা পরিবর্তন এটি সরানোর সময় উপরে লেখা হয়ে যেতে পারে। এটি বন্ধ করার সময়ের সেভ, ব্যাকগ্রাউন্ড টাইমার নয়, তাই কোনো কিছু ইন্টারফেস থামালে তবেই এটি চলে।
| Action | What it writes | When it surprises you |
|---|---|---|
wg set on a live interface | Kernel state only | After reboot, when the file was never updated |
wg-quick down with SaveConfig | Live state into the file | Right after you edited the file |
wg syncconf | Kernel state only | Never; it does not touch the file |
wg-quick up | Kernel state from the file | If the file is stale, you get the old tunnel |
টেবিলটিকে ক্রম সম্পর্কে সতর্কতা হিসেবে পড়ুন। এই ক্ষেত্রে প্রতিটি আকস্মিক ক্ষতি আসে সেভের পরে নয়, সেভের আগে ঘটে যাওয়া সম্পাদনা থেকে।
আগে থামান, পরে সম্পাদনা করুন, শেষে চালু করুন
ফাইলটি যদি আপনার সত্যের উৎস হয়, তবে আশার বদলে গঠন দিয়েই ফাইলটিকে কর্তৃত্বপূর্ণ করুন। ইন্টারফেস নামান, এটি চলে গেছে নিশ্চিত করুন, তারপর সম্পাদনা করুন, তারপর আবার চালু করুন। নিয়মটি সহজ: সেভ এখনো চলতে পারে এমন সময়ে কোনো সম্পাদনা থাকবে না।
sudo cp -a /etc/wireguard/wg0.conf /root/wg0.conf.$(date +%F-%H%M)
sudo wg-quick down wg0
ls /sys/class/net/wg0 2>/dev/null || echo "interface is gone"
sudoedit /etc/wireguard/wg0.conf
sudo wg-quick up wg0
ব্যাকআপ লাইনটি নিছক আনুষ্ঠানিকতা নয়। এই মেশিনে পৌঁছানোর পথ যদি টানেল হয়, তবে নামানোর ধাপটি আপনার সেশন শেষ করে দিতে পারে, আর ডিস্কে একটি কপি প্লাস কনসোল বা আউট-অব-ব্যান্ড পথই একমাত্র কার্যকর রোলব্যাক। দ্বিতীয় লাইনটি বিশ্বাস করার আগে যাচাই করুন: নিঃশব্দে ব্যর্থ হওয়া স্ক্রিপ্টে পুরোনো ইন্টারফেসের নামই হলো এমনভাবে মানুষ জীবন্ত ফাইল সম্পাদনা করার কারণ।
সাধারণভাবে নামানোর আগে SaveConfig = false সেট করা হলো অন্য গ্রহণযোগ্য পথ, আর এটি wg-quick আসলে যে ফাইল পড়ে সেখানেই করতে হবে। এটি সেই একটি স্বয়ংক্রিয় সেভ আটকায়। এটি আলাদা NetworkManager প্রোফাইল, রাউটার এক্সপোর্ট বা কনটেইনার এন্ট্রিপয়েন্টকে আপনার সম্পাদনা পুনরায় লোড করায় না, কারণ সেই ম্যানেজাররা এই ফাইলটি আদৌ পড়ে না।
ইন্টারফেস ছিঁড়ে না ফেলেই পিয়ার পরিবর্তন প্রয়োগ করুন
প্রতিটি সম্পাদনার জন্য আউটেজ লাগে না। ফাইলটিকে কনফিগারেশনে রূপান্তর করে সিঙ্ক করে চলমান ইন্টারফেসে পিয়ার-স্তরের পরিবর্তন প্রয়োগ করা যায়, যা নামানোর ধাপ পুরোপুরি এড়ায় এবং তাই সেভও এড়ায়:
sudo wg syncconf wg0 <(sudo wg-quick strip wg0)
sudo wg show wg0 peers
sudo wg show wg0 latest-handshakes
strip ধাপটি গুরুত্বপূর্ণ। এটি শুধু wg-quick-এর কীগুলো সরিয়ে ফাইলটি ছাপে, যাতে ঠিকানা, DNS ও রাউটিং নির্দেশনা এমন টুলে না যায় যা সেগুলো বোঝে না। এরপর সিঙ্কটি ইন্টারফেস নতুন করে না বানিয়েই পিয়ার ও কীগুলো জীবন্ত ডিভাইসে প্রয়োগ করে, তাই চলমান সেশন ও রুট টিকে থাকে।
সীমাগুলো নিয়ে স্পষ্ট থাকুন। পিয়ার সিঙ্ক করা ইন্টারফেসের ঠিকানা, wg-quick যোগ করা রুট বা রিজলভার কনফিগারেশন বদলায় না, কারণ এর কোনোটিই WireGuard ডিভাইসের নয়। AllowedIPs-এ একটি সাবনেট যোগ করে কার্নেল এটি রুট করবে আশা করা হলো চিরাচরিত ভুল পড়া; রুটটি wg-quick চালু হওয়ার সময় বা আপনাকেই যোগ করতে হবে।
কিছু সম্পাদনা করার আগে ইন্টারফেসের মালিক কে তা যাচাই করুন
কনফিগারেশন সিস্টেম দ্বারা পরিচালিত ডেস্কটপ বা সার্ভারে ফাইলটি ইনপুটের বদলে আউটপুট হতে পারে। একটি NetworkManager সংযোগ, রাউটারের তৈরি প্রোফাইল বা কনটেইনার স্টার্টআপ স্ক্রিপ্ট সবাই একই ইন্টারফেস নামের মালিক হতে পারে, আর সেক্ষেত্রে নিখুঁত wg-quick ক্রমও ভুল জিনিসটিই সম্পাদনা করে।
systemctl status wg-quick@wg0 --no-pager
nmcli connection show | grep -i wireguard
sudo wg showconf wg0 | head -n 5
তৃতীয় কমান্ডটি ফাইলের মতো একই ফরম্যাটে চলমান কনফিগারেশন ছাপে, প্রাইভেট কী সহ, যা তুলনার জন্য উপকারী আর টিকিটে বিপজ্জনক। পেস্ট করার আগে এটি লুকান; সাপোর্ট থ্রেডে প্রাইভেট কী হলো স্থায়ী আপস, টাইপো নয়।
সার্ভিস ইউনিট নিষ্ক্রিয় কিন্তু ইন্টারফেস বিদ্যমান থাকলে, অন্য কিছু এটি তৈরি করেছে এবং ফাইলটি কর্তৃত্বপূর্ণ নয়। সেই একটি পর্যবেক্ষণই এমন একটি ফাইল সম্পাদনায় এক ঘণ্টা বাঁচায় যা কেউ পড়ে না।
পরবর্তী পুনরায় চালু যাচাই করুন, তারপর রোলব্যাক রাখুন
যে পরীক্ষা সত্যিই সমাধান প্রমাণ করে তা হলো দ্বিতীয় পুনরায় চালু, কারণ প্রথমবার যে ক্রমটি ব্যর্থ হয়েছিল সেটিই তা। পিয়ারটি এটি টিকে আছে এবং চলমান কনফিগারেশন এখনো ডিস্কে যা আছে তার সঙ্গে মেলে তা নিশ্চিত করুন:
sudo systemctl restart wg-quick@wg0
sudo wg show wg0 latest-handshakes
sudo grep -c '^\[Peer\]' /etc/wireguard/wg0.conf
পুনরায় চালু দুবার চালান। একবার পরিষ্কারভাবে পার হওয়া ভাগ্য হতে পারে: প্রথম পুনরায় চালু এমন একটি চলমান পরিবর্তন খরচ করতে পারে যা এখনো সেভ হয়নি, তাই দ্বিতীয়টিই আপনাকে বলে যে প্রথমটির শেষে ফাইল ও চলমান অবস্থা একমত ছিল।
প্রক্রিয়ার শুরু থেকে ব্যাকআপটি ধরে রাখুন যতক্ষণ না দ্বিগুণ পুনরায় চালু শেষ করেন, তারপর এটি মুছুন বা কনফিগারেশন ডিরেক্টরি থেকে সরান। আসল ফাইলের পাশে পড়ে থাকা wg0.conf.bak wg-quick-এর জন্য ক্ষতিকর নয় আর পরের ব্যক্তির জন্য বিভ্রান্তিকর, যে শেষে ভুলটি সম্পাদনা করবে।