WireGuard PersistentKeepalive: NAT ম্যাপিং জীবিত রাখুন
উল্টো সংযোগ কেবল পিয়ার ট্রাফিক পাঠানোর পরেই কাজ করলে ম্যাপিংটির মেয়াদ শেষ হচ্ছে। রাউটারের পিছনে keepalive সেট করুন, তারপর প্রকৃত টাইমআউট পড়ুন।
হোম বক্সটি টানেল খোলে এবং কোনো সমস্যা ছাড়াই ক্লাউড সার্ভারে পৌঁছায়। হোম বক্সটি শেষবার কিছু পাঠানোর পর ক্লাউড সার্ভার এক-দুই মিনিটের জন্য হোম অ্যাপ্লিকেশনটি পর্যন্ত পৌঁছাতে পারে, তারপর থেমে যায়। WireGuard লগে কিছুই দেখা যায় না, কোনো হ্যান্ডশেক ত্রুটি জানানো হয় না, আর টানেল পুনরায় চালু করলে এটি অল্প সময়ের জন্য ঠিক হয়। এই ধরনটি একটি ম্যাপিং যা মেয়াদ শেষ হয়, ভাঙা টানেল নয়, এবং নিচের রানবুকটি কিছু বদলানোর আগেই তা নিশ্চিত করে।
ধরনটি নিষ্ক্রিয় অবস্থায় মেয়াদ শেষ হওয়া কিনা নিশ্চিত করুন
আলাদা করে চেনার বিষয়টি হলো সময়। যদি উল্টো সংযোগটি হোম পিয়ার ট্রাফিক পাঠানোর সঙ্গে সঙ্গেই কাজ করে এবং নীরব বিরতির পরে ব্যর্থ হয়, তবে পথ ঠিক আছে কিন্তু মাঝের অবস্থাটি নয়। যদি এটি কখনোই কাজ না করে, ট্রাফিকের ঠিক পরেও, তবে এটি ভুল নির্ণয়।
sudo wg show wg0 latest-handshakes
sudo wg show wg0 endpoints
sudo wg show wg0 transfer
হোম পিয়ার কিছু পাঠানোর সঙ্গে সঙ্গে প্রথম দুটি চালান, পাঁচ মিনিট অপেক্ষা করুন, তারপর আবার চালান। নির্ধারিত সময়ে নবায়ন হওয়া একটি হ্যান্ডশেক টাইমস্ট্যাম্প, যেখানে কোনো নতুন এন্ডপয়েন্ট নেই, আপনাকে বলে টানেলটি জীবিত। যা বদলেছে তা হলো বাইরে থেকে অনুরোধহীন প্যাকেট আসার ক্ষমতা, যা টানেলের নয়, পথের বৈশিষ্ট্য।
তারপর একটি উল্টো চেষ্টা করুন এবং ট্রান্সফার কাউন্টারগুলো দেখুন। যদি ক্লাউড দিক বাইট পাঠায় আর হোম দিক কিছুই না পায়, তবে প্যাকেটটি ক্লাউড ছেড়ে পথে অবস্থা-ধরে রাখা কোনো ডিভাইসে মারা গেছে। এটিই আপনার খোঁজা স্বাক্ষর। যদি দুই কাউন্টারই নড়ে, তবে টানেল প্যাকেটটি পৌঁছে দিয়েছে এবং সন্দেহভাজন হলো অ্যাপ্লিকেশনটি।
রাউটারের পিছনের পিয়ারে keepalive রাখুন
স্থায়ী keepalive নির্দিষ্ট সময়সূচিতে একটি ছোট প্রমাণিত প্যাকেট পাঠিয়ে NAT ম্যাপিং এবং যেকোনো ফায়ারওয়াল অবস্থা জীবিত রাখে। সেটিংটি রাউটারের পিছনের মেশিনে, দূরবর্তী পিয়ারের জন্য তার এন্ট্রিতে থাকা উচিত, কারণ ওই দিকের বহির্গামী প্যাকেটই অবস্থাটি তৈরি করে।
[Peer]
PublicKey = <cloud peer public key>
AllowedIPs = 10.71.0.1/32
PersistentKeepalive = 25
এটি বিদ্যমান পিয়ার বিভাগে মিলিয়ে দিন। একই পাবলিক কী দিয়ে দ্বিতীয় ব্লক যোগ করা অপশন যোগ করার বৈধ উপায় নয়, আর wg-quick আপনার হয়ে সেগুলো মিলিয়ে দেবে না। নথিভুক্ত 25 সেকেন্ড হলো সাধারণ UDP টাইমআউটের নিচে থাকার জন্য বেছে নেওয়া একটি উদাহরণ, বিশেষ অর্থযুক্ত কোনো মান নয়।
একই নির্দেশ ক্লাউড দিকে রাখলে এই সমস্যায় সাহায্য হয় না। ওই পিয়ারের প্যাকেট ইতিমধ্যেই একটি পাবলিক ঠিকানা থেকে আসছে, তাই গুরুত্বপূর্ণ দিকে রক্ষা করার কোনো ম্যাপিং নেই। এটি ট্রাফিক যোগ করে এবং কিছুই বদলায় না।
ইন্টারভাল অনুমান না করে টাইমার পড়ুন
keepalive কাজ করে কারণ সেগুলো অবস্থা মেয়াদ শেষ হওয়ার চেয়ে বেশি ঘন ঘন আসে। এতে টাইমআউটই সেই সংখ্যা যা আপনার আসলে দরকার, এবং Linux-এ এটি অনুবাদ করা ডিভাইসেই পড়া যায়:
sysctl net.netfilter.nf_conntrack_udp_timeout
sysctl net.netfilter.nf_conntrack_udp_timeout_stream
sudo conntrack -L -p udp --dport 51820
প্রথম মানটি একমুখীভাবে দেখা UDP প্রবাহের জন্য টাইমআউট, আর দ্বিতীয়টি প্রযোজ্য হয় যখন উত্তরগুলো লক্ষ্য করা হয়। দুটোই সাধারণত ছোট, আর নীরব হয়ে যাওয়া ম্যাপিং আপনার প্রবাহে যেটি প্রযোজ্য সেটিই অনুসরণ করবে।
ওই সংখ্যাটিকে আপনার ইন্টারভালের সঙ্গে তুলনা করুন। 30 সেকেন্ডের টাইমআউটের নিচে 25 সেকেন্ডের keepalive কাজ করে; 15 সেকেন্ডের টাইমআউটের নিচে একই keepalive কাজ করে না। কতবার পুনরায় চেষ্টা করলেও সেই হিসাব বদলায় না। কিছু কনজিউমার রাউটার ও মোবাইল অপারেটর Linux-এর ডিফল্টের চেয়ে অনেক ছোট মান ব্যবহার করে, তাই যে কনফিগ এক নেটওয়ার্কে কাজ করে অন্য নেটওয়ার্কে ব্যর্থ হয়।
| Observation | What it means | Reasonable response |
|---|---|---|
| Works after traffic, dies when idle | Mapping or firewall state expiring | Lower the keepalive interval |
| Never works, even immediately | No return route, listener or firewall | Stop tuning keepalive |
| Works for hours, then dies once | Carrier-side translation or address change | Check the endpoint and logs together |
শ্রোতা ও ফায়ারওয়াল আলাদাভাবে পরীক্ষা করুন
সক্রিয় ম্যাপিং প্রয়োজনীয়, যথেষ্ট নয়। হোম বক্সের অ্যাপ্লিকেশনটিকে সঠিক ঠিকানায় শুনতে হবে, আর হোস্ট ফায়ারওয়ালকে ডিক্রিপ্ট হওয়ার পরে প্যাকেটটির অনুমতি দিতে হবে।
sudo ss -lntup | grep 8080
sudo wg show wg0 allowed-ips
curl -sS -m 5 http://10.71.0.2:8080/health
যদি সকেটটি কেবল ভৌত ইন্টারফেসের ঠিকানায় বাঁধা থাকে, টানেলের ঠিকানায় নয়, তবে টানেলে আসা প্যাকেটগুলো ফায়ারওয়াল দেখার আগেই বাদ পড়ে। এই ব্যর্থতা ক্লাউড দিক থেকে ম্যাপিং সমস্যার মতোই দেখায়, এবং প্রতিটি keepalive সমন্বয়ের পরেও টেকে।
অনুমোদিত তালিকার পরীক্ষা অন্য দিকেও সমান গুরুত্বপূর্ণ। ক্লাউড পিয়ারকে উত্তর দিতে হলে হোম টানেল ঠিকানাটিকে উৎস হিসেবে অনুমতি দিতে হবে, আর হোম পিয়ারকে ক্লাউড ঠিকানাটিকে গন্তব্য হিসেবে অনুমতি দিতে হবে। keepalive প্যাকেট প্রমাণিত ট্রাফিক এবং একই নিয়ম প্রয়োগ করে, তাই কাজ করছে দেখানো একটি keepalive এমন অ্যাপ্লিকেশনের সঙ্গে একসঙ্গে থাকতে পারে যা কাজ করে না।
পরিবর্তনটি ছড়িয়ে দিন এবং এর সীমা জানুন
সেটিং প্রয়োগ করুন, আপনার আপডেট পদ্ধতি যদি তাই হয় তবে ইন্টারফেসটি পুনরায় চালু করুন, তারপর তাৎক্ষণিক পরীক্ষার বদলে নিষ্ক্রিয় পরীক্ষাটি আবার করুন। আগে পড়া টাইমআউটের চেয়ে বেশি সময় অপেক্ষা করুন, একটি উল্টো অনুরোধ করুন, এবং দুই প্রান্তেই কাউন্টার নড়েছে কি না নিশ্চিত করুন।
ইন্টারভাল এবং মাপা টাইমআউট তার পাশে লিখে রাখুন। ভবিষ্যতে রাউটারের ফার্মওয়্যার বদলালে, বা মোবাইল সংযোগে গেলে, টাইমআউট বদলাতে পারে। নোটটিই কাউকে মানটি কপি না করে আবার বের করতে দেয়। এক লাইনে দুটি সংখ্যা পরে একটি পুরো তদন্ত বাঁচায়।
স্থায়ী keepalive অবস্থা রক্ষা করে। তারা পোর্ট খোলে না, অনুমোদিত তালিকায় এন্ট্রি যোগ করে না, এবং কোনো শ্রোতা তৈরি করে না। যখন উল্টো সংযোগ একেবারেই কাজ করে না, তখন দোষটি ওই তিনটির একটি, এবং WireGuard দ্রুত শুরু একই সংকীর্ণ শর্তে keepalive সেটিং বর্ণনা করে।