কেন সম্পূর্ণ টানেল রুট যে সার্ভার বহন করে তাকে বিচ্ছিন্ন করে
টানেলের মধ্য দিয়ে ডিফল্ট রুট বাইরের প্যাকেটগুলোও ধরে ফেলে। হোস্ট রুট দিয়ে প্রান্তবিন্দু স্থির করুন এবং সার্ভারের উত্তর সেখান থেকে বাইরে রাখুন।
সম্পূর্ণ টানেল চালু করুন এবং এখন প্রতিটি গন্তব্য VPN ইন্টারফেসের অন্তর্গত, এমনকি যে মেশিনটি এটি সমাপ্ত করে সেটিও। টানেল বহনকারী বাইরের প্যাকেটগুলি ওই মেশিনের ঠিকানায় পাঠানো হয়, তাই রুটটি শেষ পর্যন্ত যে পরিবহনের উপর নির্ভর করে তা নিজেই খেয়ে ফেলে। একটি অতিরিক্ত নির্দিষ্ট রুট এটি সমাধান করে, এবং কারণটি বোঝার মতো। সেই কারণ ছাড়া পরবর্তী পুনর্নির্মাণ আবার ত্রুটিটি ফিরিয়ে আনে।
এমন রুট যা নিজের পরিবহনই খেয়ে ফেলে
এনক্যাপসুলেশন প্রতিটি প্যাকেটকে দ্বিতীয় হেডারে মুড়ে দেয়। বাইরের হেডারটি স্থানীয় ভৌত ঠিকানা থেকে সার্ভারের পাবলিক ঠিকানায় পাঠানো হয়, এবং কোনো টানেল থাকার আগেই এটিকে ভৌত লিঙ্ক পার হতে হয়।
এখন ওই পাবলিক ঠিকানার জন্য লুকআপকে টানেল বেছে নিতে দিন। প্যাকেট পাঠাতে মেশিনকে এটি এনক্যাপসুলেট করতে হয়, যার জন্য একই ঠিকানায় একটি রুট দরকার, যা আবার টানেল ফিরিয়ে দেয়। ক্লায়েন্টরা এটি দুই উপায়ের একটিতে সামলায়। সতর্ক একটি ডিফল্ট রুট ইনস্টল করতে অস্বীকার করে এবং ত্রুটি জানায়, আর কম সতর্ক একটি সফলতা জানিয়ে পরে কিছুই সরায় না। নীরব ব্যর্থতাই একটি দুপুর নষ্ট করে।
সবচেয়ে দীর্ঘ প্রিফিক্স মিল কোনো মেট্রিক দেখার আগেই লুকআপ নির্ধারণ করে, তাই একক-ঠিকানার রুট মেশিনের প্রতিটি ডিফল্ট রুটকে ছাড়িয়ে যায়। মেরামতের পেছনের পুরো প্রক্রিয়াটি এটাই।
ডিফল্টের আগেই ব্যতিক্রমটি ইনস্টল করুন
সার্ভারের জন্য একক-ঠিকানার একটি রুট তৈরি করুন, ভৌত গেটওয়েকে পরবর্তী হপ হিসেবে রেখে, ডিফল্ট রুট সরে যাওয়ার আগেই। ক্রম গুরুত্বপূর্ণ: পরে ইনস্টল করা মানে টাইপ করার সময় একটি ভাঙা টানেল নিয়ে বাঁচা।
বেশিরভাগ ক্লায়েন্ট এটি অনুরোধ ছাড়াই করে। OpenVPN রিমোট ঠিকানাটি খুঁজে বের করে ডিফল্ট গেটওয়ে পুনর্লিখনের আগে সেটি পিন করে, আর এর route-delay অপশনটি এমন প্ল্যাটফর্মের জন্য আছে যেখানে এই ক্রমটি প্রতিযোগিতা করে। wg-quick সম্পূর্ণ ভিন্ন পথ নেয়, প্যাকেট চিহ্নিত করে এবং নীতি নিয়মের সাথে পরামর্শ করে ব্যতিক্রম যোগ করার বদলে। ভিন্ন প্রক্রিয়া, একই প্রয়োজন: বাইরের প্যাকেটকে যে টানেল তৈরি করছে তা থেকে বেরোতেই হবে।
ip route add 203.0.113.10/32 via 192.168.1.1 dev eth0
ip route get 203.0.113.10
লুকআপের আউটপুটই গ্রহণযোগ্যতার পরীক্ষা। এতে ভৌত ডিভাইস এবং ভৌত পরবর্তী হপের নাম থাকতে হবে। সেই উত্তরে টানেল ডিভাইস থাকা মানে ব্যতিক্রমটি অনুপস্থিত, বা এমন কিছুর পরে বসানো হয়েছে যা এটিকে অগ্রাহ্য করে।
সার্ভারে আয়নার প্রতিচ্ছবি
একই ফাঁদ অপর পাশে উল্টোভাবে অপেক্ষা করে। সার্ভারকে অন্য টানেলের মাধ্যমে একটি ডিফল্ট রুট দিন, বা ক্লায়েন্টদের পাবলিক ঠিকানা ঢেকে রাখে এমন রুট তার দিকে ঠেলে দিন, তাহলে তার উত্তরগুলি ভুল দিকে যাওয়ার অভ্যাস রপ্ত করে।
এমন ক্লায়েন্টের কথা ভাবুন যে সংযোগ করে এবং একটি অনুরোধ পাঠায়। উত্তরটি ওই ক্লায়েন্টের পাবলিক ঠিকানায় পাঠানো হয়, যা এখন একটি টানেল রুটের সাথে মেলে, তাই এটি ভিন্ন ইন্টারফেস থেকে বেরোয় এবং এমন একটি উৎস বহন করে যা ক্লায়েন্ট কখনও ডায়াল করেনি। ক্লায়েন্ট সেই প্যাকেট পেয়েও এটি ফেলে দিতে পারে, কারণ এটির সাথে তার পাঠানো অনুরোধের কোনো সম্পর্ক নেই। ক্লায়েন্টের টাইমআউট থেকে নয়, সার্ভারের রাউটিং সিদ্ধান্ত থেকে শুরু করুন, কারণ দুটির মধ্যে কেবল একটি প্রকৃত পছন্দ দেখায়।
ip route get 198.51.100.44 from 10.90.0.1
ip rule show
sudo tcpdump -ni any host 198.51.100.44
তিনটি মেরামত আছে এবং তারা সমান নয়। পরিষেবাটিকে ভৌত ঠিকানায় পিন করা, বা উৎস অনুবাদ করা, দুটোই রাউটিং সিদ্ধান্ত সংশোধনের বদলে লুকিয়ে ফেলে। টানেল পুলের জন্য উত্তর ট্র্যাফিক একটি ডেডিকেটেড টেবিলের মাধ্যমে পাঠানো কারণটি ঠিক করে, আর বাকি দুটি কেবল তখনই গ্রহণযোগ্য যখন রাউটিং নকশা জমাট।
টানেল যে ব্যতিক্রমগুলি অনবরত চুরি করে
কয়েকটি কাজের খোলা ইন্টারনেট দরকার এমনকি যখন টানেল ডিফল্ট রুটের মালিক, এবং প্রত্যেকের নিজস্ব ব্যতিক্রম দরকার। ডাইনামিক DNS আপডেটার সাধারণত প্রথমে ভাঙে।
এটি প্রদানকারীকে রিজলভ করে, একটি সংযোগ খোলে, এবং দেখে তার নিজের প্যাকেটগুলি এমন টানেল দিয়ে যাচ্ছে যার ঠিকানা কয়েক সেকেন্ড আগে বদলে গেছে, তাই আপডেট ব্যর্থ হয় বা ভুল ঠিকানা প্রকাশ করে। তিনটি উপায়: ভৌত গেটওয়ের মাধ্যমে হোস্ট রুট দিয়ে প্রদানকারীকে পিন করুন, টানেল ওঠার আগেই আপডেট চালান, বা আপডেটারকে এমন নীতি টেবিল দিন যা টানেল কখনও স্পর্শ করে না। যে ডিভাইস রিজলভার ছাড়া বুট হয় সেখানে সময় সিঙ্ক্রোনাইজেশনের একই ঝুঁকি থাকে, এবং সার্টিফিকেট যাচাইয়ের এন্ডপয়েন্টগুলিও একই কারণে তালিকায় থাকে।
যে ব্যতিক্রম কেউ লিখে রাখেনি, সেটি এমন ব্যতিক্রম যা পরবর্তী পুনর্নির্মাণ নিঃশব্দে ফেলে দেবে।
পুনঃসংযোগের পরে প্রমাণ করুন, আগে নয়
তিনটি গন্তব্য পরীক্ষা করুন, একটি নয়: এন্ডপয়েন্ট, টানেলের পিছনে একটি প্রাইভেট ঠিকানা, এবং তার ওপারে একটি পাবলিক ঠিকানা। একটি সফল লুকআপ অন্য দুটি সম্পর্কে প্রায় কিছুই বলে না।
ip route get 203.0.113.10
traceroute -n 203.0.113.10
ip route get 10.90.0.5
ip route get 1.1.1.1
তারপর সংযোগটি পুনরায় চালু করুন, কারণ যে ক্লায়েন্ট পুনঃসংযোগে তার টেবিল পুনর্নির্মাণ করে সে আপনার হাতে টাইপ করা রুট ফেলে দেবে। kill switch চালু থাকলে যাচাই করুন যে এন্ডপয়েন্টটি অনুমোদিত, নইলে নেটওয়ার্ক পরিবর্তনের পরে টানেল ফিরতে পারবে না এবং লক্ষণটি বিভ্রাটের মতো দেখাবে। ব্যতিক্রমটি shell ইতিহাসে নয়, প্রোফাইল বা unit ফাইলে সংরক্ষণ করুন, যাতে পুনঃসংযোগ এটি মুছে ফেলার বদলে আবার তৈরি করে।