VPN রুটে পরবর্তী হপ: গেটওয়ে কেন লোকালভাবে পৌঁছানোর মতো হতে হবে
একটি রুটের via ঠিকানা যে লিঙ্ক থেকে আপনি পাঠান সেখানে পৌঁছানোর মতো হতে হবে। হ্যান্ডঅফটি অনুসরণ করুন, লুকআপ যাচাই করুন এবং যে হোস্ট ট্রাফিকের মালিক সেখান থেকে পরীক্ষা করুন।
VPN নেটওয়ার্কে যাওয়া একটি রুটে দুটি ঠিকানা থাকে যা সহজেই গুলিয়ে যায়: প্যাকেট যে গন্তব্য প্রিফিক্সে পৌঁছাতে চায়, এবং যে পরবর্তী হপ এটিকে এক ধাপ কাছে নেবে। একটি LAN হোস্টে সেই পরবর্তী হপকে অবশ্যই এমন রাউটার হতে হবে যেখানে আপনি সত্যিই একই লিঙ্কে পৌঁছাতে পারেন। দূরবর্তী VPN ঠিকানাটি পরবর্তী হপ নয়, আপনার মনে থাকা গন্তব্যের সঙ্গে যতই নিখুঁতভাবে মিলুক না কেন।
এই রানবুকটি সাধারণ ক্ষেত্রটি কভার করে: 192.168.20.0/24-এ একটি ল্যাপটপ, LAN ঠিকানা 192.168.20.5 সহ একটি VPN গেটওয়ে, এবং সেই গেটওয়ের পিছনে 10.70.0.0/24 দূরবর্তী নেটওয়ার্ক। নিচের প্রতিটি কমান্ড ধরে নেয় যে আপনি ল্যাপটপে আছেন, যদি না অন্যভাবে বলা হয়।
দুটি ঠিকানা, একটি রুট
উদ্দিষ্ট এন্ট্রি হলো 10.70.0.0/24 via 192.168.20.5। প্রিফিক্স বলে প্যাকেট কোথায় যাচ্ছে; via ঠিকানা বলে কে এটি সেখানে বহন করছে। কার্নেল এমন একটি রুট ইনস্টল করতে অস্বীকার করে যার গেটওয়েতে আপনি নাম দেওয়া ইন্টারফেস দিয়ে পৌঁছাতে পারে না, এবং সেই অস্বীকরণই মূল কথা: যে পরবর্তী হপের পৌঁছানোর জন্য টানেল দরকার, সে টানেল তৈরি করা পরবর্তী হপ হতে পারে না।
তাই প্রথম পরীক্ষা «গেটওয়ে চালু আছে কি না» নয়, বরং «গেটওয়ে এই লিঙ্কে আছে কি না»। ল্যাপটপের নিজের সাবনেট, তার ARP বা প্রতিবেশী এন্ট্রি, এবং রুটে থাকা ইন্টারফেস—সবকিছুকে একমত হতে হবে। যে ঠিকানা কেবল 10.70.0.0/24-এর ভিতরে বিদ্যমান, সেটি দ্বিতীয় রুটের গন্তব্য হতে পারে, কিন্তু প্রথম রুটের via কখনও হতে পারে না।
পরবর্তী হপ গেটওয়েকে যা করতে বাধ্য করে
ল্যাপটপে রুট ইনস্টল করা কেবল প্রথম হ্যান্ডঅফ নির্ধারণ করে। এরপর গেটওয়ের নিজের পথ দরকার: ফরওয়ার্ডিং সক্রিয়, 10.70.0.0/24-এর জন্য একটি টানেল রুট, এবং কে এটি ব্যবহার করতে পারবে তা নিয়ন্ত্রণকারী যেকোনো অ্যাক্সেস পলিসি। Linux-এ সেটি হলো net.ipv4.ip_forward=1 এবং একটি টানেল রুট; সামনের ফায়ারওয়ালের জন্য এমন নিয়ম দরকার যা ফরওয়ার্ড হওয়া প্রবাহকে অনুমতি দেয়।
ফেরার দিকটাই মানুষ ভুলে যায়। দূরবর্তী পক্ষের 192.168.20.0/24-এ ফেরার রুট থাকতে হবে, অথবা ডিজাইনকে ল্যাপটপের সোর্সকে এমন কিছুতে রূপান্তর করতে হবে যা দূরবর্তী পক্ষ চেনে। গেটওয়ে থেকে সফল ping প্রমাণ করে গেটওয়ে দূরবর্তী নেটওয়ার্কে পৌঁছাতে পারে; ল্যাপটপের প্যাকেট ফেরার পথে টিকে থাকবে কি না সে সম্পর্কে এটি কিছুই বলে না।
যে হোস্ট পাঠায় সেখান থেকেই লুকআপ যাচাই করুন
কার্নেলকে জিজ্ঞাসা করুন সে কোন পরবর্তী হপ বেছে নেবে, এবং উত্তরে থাকা ইন্টারফেসটি পড়ুন:
ip route get 10.70.0.10
ip route show 10.70.0.0/24
ip neigh show 192.168.20.5
যদি লুকআপ গেটওয়ে এবং LAN ইন্টারফেস রিপোর্ট করে, তবে প্রথম অংশটি উদ্দেশ্য অনুযায়ী কনফিগার করা আছে। যদি এটি টানেল ডিভাইস রিপোর্ট করে, টেবিলে আগের কিছু একটি আরও নির্দিষ্ট এবং জিতছে। যদি রুটটি একেবারেই ইনস্টল না হয়, কার্নেল আপনাকে বলছে গেটওয়েতে পৌঁছানো যায় না, এবং সেই বার্তাটি যেকোনো প্যাকেট ক্যাপচারের চেয়ে বেশি কাজে লাগে।
তারপর সঠিক জায়গা থেকে পরীক্ষাটি পুনরাবৃত্তি করুন। গেটওয়েতে তৈরি একটি অনুরোধ গেটওয়ের নিজের সোর্স ঠিকানা ব্যবহার করে, যা অনুপস্থিত ফেরার রুট বা কেবল নির্দিষ্ট সোর্সকে অনুমতি দেওয়া পলিসি লুকাতে পারে। ip-route ম্যানুয়াল গন্তব্য, গেটওয়ে এবং onlink ওভাররাইডকে আলাদা করে, এবং ওভাররাইডটি ব্যবহারের আগে বোঝা মূল্যবান।
পৌঁছানোর সামর্থ্য ভান করতে onlink ব্যবহার করবেন না
onlink কার্নেলকে বলে গেটওয়ের পৌঁছানোর সামর্থ্য পরীক্ষা এড়িয়ে যেতে এবং তবুও সেখানে পাঠাতে। এটি কোনো পথ তৈরি করে না, যে ঠিকানা নেই তার জন্য ARP সমাধান করে না, এবং আপনার Ethernet সেগমেন্টে দূরবর্তী রাউটারকে উত্তর দিতে বাধ্য করে না। যে গেটওয়ে উত্তর দেয় কিন্তু সংযুক্ত সাবনেটে থাকে না তাদের জন্য এটি বৈধ, এবং আপনি ব্যাখ্যা করেননি এমন ত্রুটি চুপ করাতে ব্যবহার করলে এটি ফাঁদ।
যদি রুটটি কেবল onlink দিয়েই ইনস্টল হয়, পরের প্রশ্ন হলো গেটওয়ে কেন আপনি যেখানে ভাবছেন সেখানে নেই। ভুল VLAN, ভুল ইন্টারফেসে দ্বিতীয় ঠিকানা, বা শেষ অক্টেটে টাইপো—সবই এটি ঘটায়, এবং এগুলোর প্রত্যেকটি ট্রাফিক চলতে শুরু করলে ফেরার পথও ভেঙে দেয়।
পয়েন্ট-টু-পয়েন্ট টানেল Ethernet নয়
একটি টানেল ডিভাইস ARP করে না এবং প্রায়ই প্রতিবেশীদের অর্থবহ সাবনেট থাকে না। এর রুটগুলো প্রায়ই 10.70.0.0/24 dev tun0-এর মতো দেখায়, কোনো via ছাড়াই, কারণ পিয়ারই একমাত্র অন্য প্রান্তবিন্দু। সেই টেবিলে LAN-ধাঁচের via কপি করলে এমন রুট তৈরি হয় যা কার্নেল প্রত্যাখ্যান করতে পারে বা আরও খারাপ, এমন ঠিকানার দিকে দেখায় যেখানে পিয়ার কখনও উত্তর দেয় না।
রানবুকে দুটি মডেল আলাদা রাখুন: LAN রুটের একটি পৌঁছানোর মতো গেটওয়ে আছে, টানেল রুটের একটি ইন্টারফেস ও একটি পিয়ার আছে। WireGuard, OpenVPN এবং IPsec সবই কিছুটা ভিন্ন আকার দেখায়, তাই একটি হোস্ট থেকে সাধারণীকরণ না করে আপনি যে আকারটি সত্যিই ব্যবহার করেছেন সেটি লিখে রাখুন।
যোগ করুন, নিশ্চিত করুন, ফিরিয়ে নিন
পুরো পরিবর্তনটি তিনটি কমান্ড এবং একটি যাচাই, এবং এটি ঠিক এই ক্রমে লিখে রাখা উচিত:
sudo ip route add 10.70.0.0/24 via 192.168.20.5
ip route get 10.70.0.10
ping -c 3 10.70.0.10
sudo ip route del 10.70.0.0/24 via 192.168.20.5
পথটি নিশ্চিত করুন, একটি গন্তব্য নিশ্চিত করুন, তারপর মুছে ফেলার লাইনটি প্রস্তুত রাখুন যদি পরিবর্তনটি হোস্টকে এমনভাবে অপ্রাপ্য করে তোলে যা আপনি পূর্বাভাস দেননি। যদি রুটটি রিবুটের পরেও থাকতে হয়, তবে এটি shell প্রোফাইলে নয়, হোস্টের নেটওয়ার্ক কনফিগারেশনে রাখুন, এবং এর উপর নির্ভর করার আগে রিবুট পরীক্ষা করুন। যে রুট কেবল সেই shell-এ বিদ্যমান যা এটি যোগ করেছে, সেটি এমন রুট যা আপনি দুবার ডিবাগ করবেন।