Raspberry Pi VPN সার্ভারকে Ethernet-এ কীভাবে সরাবেন
এন্ডপয়েন্ট নাম, লিসেনার বাইন্ডিং, পোর্ট ফরওয়ার্ডিং বা এক-ধাপের ফিরে যাওয়ার পথ না বদলে Raspberry Pi VPN সার্ভারকে Wi-Fi থেকে Ethernet-এ সরান।
Pi-কে Wi-Fi থেকে কেবলে সরানো পাঁচ মিনিটের কাজ মনে হয়, এবং তা তখনই এমন থাকে যখন আপনি এই স্থানান্তরকে একটির বদলে চারটি আলাদা সেটিং হিসেবে দেখেন। আপনার ক্লায়েন্টরা যে এন্ডপয়েন্ট নামে ডায়াল করে তা হুবহু একই থাকতে পারে, অথচ তার নিচের ঠিকানা বদলে যায়। আসলে যা ভাঙে তা হলো পুরোনো ঠিকানায় পিন করা লিসেনার, এখনও ওয়্যারলেস লিজের দিকে তাক করা পোর্ট ফরওয়ার্ড, বা যে ইন্টারফেস দিয়ে বেরিয়ে যায় যা আপনি অবসরে পাঠিয়েছেন বলে ভেবেছিলেন। এই নির্দেশিকা প্রতিটি ধাপে পুনরুদ্ধারের পথ খোলা রাখে, তাই ব্যর্থ কাটওভারের খরচ কেবল একটি রিবুট।
কিছু খোলার আগে চার মালিক লিখে নিন
চারটি সেটিং ঠিক করে কাটওভার টিকবে কি না: Pi-র ঠিকানা, OpenVPN-এর বাইন্ডিং ঠিকানা, রাউটারের রিডাইরেক্ট লক্ষ্য এবং উত্তর যে পথে যায়। কেবল ধরার আগে চারটিই লিখে নিন, কারণ ওয়্যারলেস লিজ হারিয়ে গেলে আপনি মেশিন থেকে পুরোনো মান আর পড়তে পারবেন না। ওয়্যারড ইন্টারফেস ওয়্যারলেস প্রোফাইল উত্তরাধিকার পায় না, এবং Bookworm-এ ঠিকানা থাকে NetworkManager-এ, আর Bullseye তা রাখে dhcpcd.conf-এ। যে রিজার্ভেশন ওয়্যারলেস MAC ঠিকানা পিন করেছিল তা eth0 সম্পর্কে কিছুই বলে না। নতুন ঠিকানাকে নিজের প্রমাণ দরকার এমন নতুন বণ্টন হিসেবে দেখুন।
Old wireless lease: 10.42.7.24/24 on wlan0
New wired address: 10.42.7.31/24 on eth0
Client endpoint: vpn.lab.example:1194/udp
লিসেনার দ্বিতীয় মালিক। যদি সেবাটি নির্দিষ্ট বাইন্ডিং ঠিকানা দিয়ে চালু হয়, সকেট পুরোনো ইন্টারফেসের সঙ্গে মারা যায়; যদি এটি সব ঠিকানা বাঁধে, সকেট টিকে থাকে এবং রাউটারের নিয়মই ঠিক করার একমাত্র জিনিস হয়ে পড়ে।
রিডাইরেক্ট লক্ষ্য ও ফিরতি পথ সেই মালিক যাদের মানুষ এড়িয়ে যায়। যে ফরওয়ার্ড এখনও 10.42.7.24-এর দিকে দেখায় তা আসা হ্যান্ডশেককে এমন ঠিকানায় পাঠায় যা Pi-র আর নেই, তাই ক্লায়েন্টরা সার্ভার পাশে একটি লগ লাইনও ছাড়া সময় শেষে থেমে যায়। ফিরতি পথ তখন গুরুত্বপূর্ণ যখন দুটি লিঙ্কই অল্প সময় সক্রিয় থাকে, কারণ Pi রাউটিং টেবিল যে ইন্টারফেস পছন্দ করে সেখান থেকেই উত্তর দেয়, আর সেটি সবসময় প্যাকেট যে ইন্টারফেসে এসেছিল তা নয়। নিচের রুট অনুসন্ধান দেখায় কার্নেল কোন সোর্স বেছে নেয়।
নতুন ঠিকানায় ভরসা করার আগে আসল সকেট পড়ুন
কনফিগারেশনের ফাইল ইচ্ছা বর্ণনা করে আর সকেট বাস্তবতা। আপনার মনে থাকা কনফিগে ভরসা না করে চলমান সেবাটিকে জিজ্ঞেস করুন এটি কীসে বাঁধা। OpenVPN 2.6 ম্যানুয়াল --local কে একটি ঠিকানায় বাইন্ডিং হিসেবে সংজ্ঞায়িত করে এবং বলে এটি বাদ দিলে প্রতিটি ইন্টারফেস বাঁধা পড়ে।
sudo systemctl cat openvpn-server@server | grep -n -- '--local'
sudo ss -lunp '( sport = :1194 )'
স্টেট কলামের বদলে লোকাল ঠিকানা কলাম পড়ুন। যে লাইন 10.42.7.24:1194 দেখায় তার মানে সকেট সেই ঠিকানায় পিন করা যা আপনি এইমাত্র সরাতে চলেছেন, আর 0.0.0.0:1194 বা *:1194 মানে ডেমন নিজেই ইন্টারফেস পরিবর্তন অনুসরণ করবে। ঠিকানা পিন করা থাকলে লাইভ সকেট হাতে আবার না লিখে প্রোফাইল সম্পাদনা করুন ও ইউনিট রিস্টার্ট করুন, তারপর নিশ্চিত করুন সেবাটি এখনও তার সার্টিফিকেট ও কী ফাইলে পৌঁছায়।
পরিবর্তনটি এমন ক্রমে করুন যা আপনাকে পৌঁছনোযোগ্য রাখে
এখানে ক্রম গতির চেয়ে বেশি জরুরি। ওয়্যারলেস এখনও চলাকালীন ওয়্যারড লিঙ্ক তুলুন, নতুন ঠিকানা ও ফিরতি পথ নিশ্চিত করুন, তারপরেই ওয়্যারলেস প্রোফাইল অবসরে পাঠান। এই ক্রম একটি কাজ করা সেশন খোলা রাখে যতক্ষণ না বিকল্পটি প্রমাণিত হয়।
ip -br addr show eth0
ip route get 203.0.113.10
nmcli -g ipv4.method,ipv4.addresses con show "Wired connection 1"
প্রথম কমান্ড উত্তর দেয় eth0 আপনার ইচ্ছাকৃত ঠিকানা পেয়েছে কি না, আর দ্বিতীয়টি কার্নেল বাইরের গন্তব্যের জন্য যে সোর্স ঠিকানা ব্যবহার করবে তা ছাপে, তাই পরিবর্তনের আগে ও পরে চালান। যদি সেই সোর্স এখনও ওয়্যারলেস ঠিকানা হয়, ওয়্যারড লিঙ্ক এখনও পছন্দের পথ নয় এবং বাইরে থেকে পরীক্ষা OpenVPN-এর সঙ্গে কোনো সম্পর্ক নেই এমন কারণে ব্যর্থ হবে। ফরওয়ার্ড স্পর্শ করার আগে রাউটিং অগ্রাধিকার ঠিক করুন।
দুটি লিঙ্কই সক্রিয় থাকলে Pi ওয়্যারলেস ডিফল্ট রুট পছন্দ করতে পারে কারণ এটি আগে বসানো হয়েছিল বা কারণ ওয়্যারড লিঙ্কের মেট্রিক বেশি। Bookworm-এ সমর্থিত সেটিং সংযোগে ipv4.route-metric, আর Bullseye-তে সমতুল্য হলো ইন্টারফেস-নির্দিষ্ট metric লাইন dhcpcd.conf-এ। রোলব্যাক পথ এক কমান্ড দূরে রাখতে ওয়্যারলেস লিঙ্ক বন্ধ না করে তার অগ্রাধিকার কমান।
টানেল বাইরে থেকে প্রমাণ করুন, LAN থেকে নয়
সোফা থেকে চলা VPN সংযোগ দেখতে যতটা লাগে তার চেয়ে কম প্রমাণ করে। LAN-এর ভেতর থেকে পাবলিক ঠিকানার দিকে ট্রাফিক hairpin বা প্রতিফলন নিয়মের মধ্য দিয়ে যায় যা রাউটাররা অসংগতভাবে প্রয়োগ করে, তাই পাস করা LAN পরীক্ষা ভাঙা বাইরের পথের সঙ্গে একসাথে থাকতে পারে। গ্রহণযোগ্যতা পরীক্ষার জন্য সেলুলার ডেটার ফোন বা নেটওয়ার্কের বাইরের যেকোনো হোস্ট ব্যবহার করুন। LAN-এর চেষ্টাকে আলাদা ঐচ্ছিক রোগনির্ণয় হিসেবে রাখুন।
তারপর লগ পড়ুন যে ক্রমে প্যাকেট আসে। কিছুই না মানে হ্যান্ডশেক কখনও Pi-তে পৌঁছায়নি, তাই রিডাইরেক্ট লক্ষ্য বা হোস্ট ফায়ারওয়াল ভুল। শুরু হয়ে আটকে যাওয়া হ্যান্ডশেক কী, সার্টিফিকেট বা MTU-র দিকে ইঙ্গিত করে। সম্পূর্ণ হয়ে পড়ে যাওয়া সেশন সাধারণত ফিরতি পথ বা দ্বিতীয় ডিফল্ট রুট বোঝায়, আর ক্লায়েন্টের লগ লাইন Initialization Sequence Completed বলে যে টানেল নিজেই উঠেছে।
sudo journalctl -u openvpn-server@server -n 40 --no-pager
sudo tcpdump -ni any udp port 1194 -c 20
ক্লায়েন্ট আবার চেষ্টা করার সময় সার্ভার লগে কিছু না দেখা গেলে OpenVPN কনফিগ পড়া বন্ধ করুন এবং রিডাইরেক্ট লক্ষ্যে ফিরুন। ক্যাপচার পৌঁছানোর প্রশ্নের উত্তর সেকেন্ডে দেয়, আর উত্তরহীন আগত প্যাকেট সমস্যাটিকে রুটে সীমিত করে।
এক-ধাপের রোলব্যাক রাখুন এবং ওয়্যারলেস প্রোফাইল অবসরে পাঠান
ওয়্যারড ব্যবস্থা একটি রিবুট পার না হওয়া পর্যন্ত ওয়্যারলেস প্রোফাইল ইনস্টল থাকতে দিন। nmcli con show আপনার প্রয়োজনীয় প্রোফাইল নামের তালিকা দেয়, আর মুছে ফেলা প্রোফাইল সবচেয়ে খারাপ মুহূর্তে স্মৃতি থেকে আবার তৈরি করতে হয়। ইন্টারফেসের নাম, ঠিকানা পদ্ধতি ও মেট্রিক অন্য চারটি মানের পাশে লিখুন। নোট থেকে টাইপ করা যায় এমন রোলব্যাক আবার তৈরি করতে হওয়ার চেয়ে বেশি মূল্যবান।
ওয়্যারলেস নির্ভরতা অবসরে পাঠানো মানে মুছে ফেলা নয়, বৈশিষ্ট্য বদলানো। connection.autoconnect no সেট করলে ক্রেডেনশিয়াল ও ঠিকানার ইতিহাস অক্ষত থাকে আর Pi আপনি যে নেটওয়ার্ক ছেড়ে এসেছেন সেখানে আবার যুক্ত হওয়া থেকে বিরত থাকে।
nmcli con show
sudo nmcli con up "Wired connection 1"
sudo nmcli con mod "previously-used-wifi" connection.autoconnect no
কাজ শেষ ঘোষণা করার আগে চারটি বিষয় নিশ্চিত করুন: রিডাইরেক্ট লক্ষ্য ওয়্যারড ঠিকানার সঙ্গে মেলে, লিসেনার একটি রিস্টার্ট টিকে গেছে, বাইরের ক্লায়েন্ট হ্যান্ডশেক সম্পূর্ণ করে, আর রিবুটের পরেও Pi ওয়্যারড ঠিকানায় উত্তর দেয়। রিবুট হলো কেবল চলমান কার্নেলে থাকা বণ্টন ধরার সবচেয়ে সস্তা উপায়। চারটির যেকোনো একটি ব্যর্থ হলে sudo nmcli con up দিয়ে ওয়্যারলেস প্রোফাইল আবার তুলুন এবং লিখে রাখা মানের সঙ্গে চলমান মান তুলনা করুন।