রুট-ভিত্তিক IPsec কীভাবে XFRM ইন্টারফেসের সাথে কাজ করে
XFRM ইন্টারফেস রুট-ভিত্তিক IPsec-কে রাউটিং করার জন্য একটি ডিভাইস দেয়। if_id, তার পিছনের সিকিউরিটি অ্যাসোসিয়েশন এবং বাইরের রুট—সবই মিলতে হবে।
রুট-ভিত্তিক IPsec রাউটিং টেবিলকে এমন একটি সিদ্ধান্ত দেয় যা আগে পলিসি সিলেক্টররা নিত। লিনাক্সে এটি সম্ভব করে তোলা অংশটি হল XFRM ইন্টারফেস: একটি ভার্চুয়াল ডিভাইস, যার ট্রাফিক সিলেক্টরের বদলে একটি ইন্টারফেস আইডেন্টিফায়ার দিয়ে IPsec স্টেটের সাথে মেলানো হয়। একটি তৈরি করতে একটিমাত্র কমান্ড লাগে এবং তা টানেল আছে কি না তা প্রমাণ করে না। ডিভাইসটি রাউটিং ও সিকিউরিটি পলিসির মধ্যে একটি হুক, এবং কিছু সুরক্ষিত হওয়ার আগে সেই হুকের দুই পাশই কনফিগার করতে হয়।
ডিভাইসটি কী এবং কী নয়
XFRM ইন্টারফেস একটি রাউটিং হ্যান্ডল। এর ভিতরে রাউট করা প্যাকেটগুলি এমন XFRM পলিসির সাথে মেলানো হয় যা একই ইন্টারফেস আইডেন্টিফায়ার উল্লেখ করে, আর যদি একটি পলিসি ও একটি স্টেট থাকে, তবে সেগুলি এনক্যাপসুলেট হয়। সেগুলি ছাড়া ইন্টারফেস থেকে যায়, কাউন্টার স্থির থাকে, এবং ট্রাফিক কোনো কাজে যায় না।
এটাই প্রথম ডায়াগনস্টিক বিভাজন। ডিভাইসে যাওয়ার রুট একটি রাউটিং তথ্য, ইনস্টল করা স্টেট একটি সিকিউরিটি তথ্য, আর ডিভাইসে বাড়তে থাকা কাউন্টার কোনোটিই নয়। মানুষ যখন বলে ইন্টারফেস UP দেখাচ্ছে তাই টানেল উঠেছে, তখন তারা এমন একটি ভার্চুয়াল ডিভাইসের লিঙ্ক ফ্ল্যাগের বর্ণনা দিচ্ছে যার নিজের কোনো পিয়ার নেই। ফ্ল্যাগটির অর্থ ডিভাইসটি তৈরি ও সক্রিয় হয়েছে, এর বেশি কিছু নয়।
আরেকটি সীমা: ইন্টারফেস আইডেন্টিফায়ার কোনো নাম নয়। একই রকম নাম ও ভিন্ন আইডেন্টিফায়ারযুক্ত দুটি ডিভাইস স্টেট ভাগ করে না, আর ভুল আইডেন্টিফায়ার দিয়ে কনফিগার করা সংযোগ এমন স্টেট ইনস্টল করে যা কোনো রুট কখনও ব্যবহার করবে না।
সঠিক ক্রমে একটি তৈরি করুন
বাইরের ডিভাইস এবং এমন একটি সংখ্যা দিয়ে শুরু করুন যা আপনি ডেমন কনফিগারেশনেও দেবেন। উদাহরণটি বাইরের ইন্টারফেস হিসেবে eth0 এবং আইডেন্টিফায়ার হিসেবে 42 ব্যবহার করে—এগুলি এমন ঠিকানা যা আপনার নিজের দিয়ে বদলানো উচিত।
ডিভাইসটি তুলুন, তারপর VPN কনফিগারেশন স্পর্শ করার আগে কার্নেল যে আইডেন্টিফায়ার লিখেছে তা নিশ্চিত করুন:
sudo ip link add xfrm0 type xfrm dev eth0 if_id 42
sudo ip link set xfrm0 up
ip -d link show xfrm0 | grep -o 'if_id [0-9]*'এখন strongSwan-এ একই আইডেন্টিফায়ার দিয়ে সংযোগটি কনফিগার করুন, কারণ ডেমনকে এমন পলিসি ও স্টেট ইনস্টল করতে হবে যা এটিকে উল্লেখ করে। স্থানীয় ও দূরবর্তী ট্রাফিক সিলেক্টরগুলি আপনি যে রেঞ্জ রাউট করতে চান সেটিতে সেট করুন, তারপর সেই রেঞ্জটি ডিভাইসে রাউট করুন। ডেমন কনফিগারেশন ও রাউটিং টেবিলকে আইডেন্টিফায়ার এবং গন্তব্য—দুটোতেই একমত হতে হবে, আর কোনোটিই অন্যটি যোগায় না।
IKE ও ESP-কে টানেল রুটের বাইরে রাখুন
XFRM ডিভাইসে নির্দেশিত একটি ডিফল্ট রুট এনক্যাপসুলেটেড প্যাকেট এবং সেগুলি যে ট্রাফিক বহন করে তা—দুটোই ধরে ফেলে। ফলাফল একটি লুপ: গেটওয়ে তার নিজের ESP পাঠাতে চায় সেই টানেল দিয়ে যা ESP-র তৈরি করার কথা।
সমাধান হল পিয়ারের বাইরের ঠিকানার জন্য আরও নির্দিষ্ট একটি রুট ফিজিক্যাল ইন্টারফেস দিয়ে, যা ডিফল্টকে হারিয়ে দেয় কারণ এটি বেশি বিট মেলায়। একাধিক টানেল একটি টেবিল ভাগ করলে মার্ক-ভিত্তিক রাউটিং একই কাজ করে, এবং strongSwan রুট-ভিত্তিক ডিপ্লয়মেন্টের জন্য দুই পদ্ধতিই নথিভুক্ত করে।
যা-ই বেছে নিন, যাচাই করুন যে বাইরের প্যাকেট এনক্যাপসুলেট না হয়েই বেরোয়। দ্রুত পরীক্ষা হল টানেল ওঠার পর পিয়ারের বাইরের ঠিকানায় পিং করা; ইন্টারফেস ওপরে থাকা অবস্থায় এটি ব্যর্থ হলে পৌঁছানো নয়, ধরা পড়া সন্দেহ করুন। একই যুক্তি IKE পোর্টের ক্ষেত্রেও প্রযোজ্য, কারণ ডেমন নিজে যে ডিভাইস প্রতিষ্ঠা করতে চাইছে সেখানে তার নিজের UDP ট্রাফিক রাউট হওয়া উচিত নয়।
এনক্রিপশনকে দোষ দেওয়ার আগে দুই জায়গায় কাউন্টার দেখুন
ইন্টারফেস কাউন্টার ও স্টেট কাউন্টার ভিন্ন পর্যায় মাপে। ডিভাইসে রাউট করা প্যাকেট কোনো স্টেট না মিললেও ডিভাইসের কাউন্টার বাড়ায়, আর স্টেট কাউন্টার কেবল সেই ট্রাফিকের জন্য নড়ে যা সত্যিই এনক্যাপসুলেট হয়েছে।
দুটোই পড়ুন, তারপর চাইল্ড অ্যাসোসিয়েশন সম্পর্কে ডেমনের দৃষ্টিভঙ্গি পড়ুন:
ip -s link show xfrm0
sudo ip xfrm state list | grep -E 'src|proto|mode'
sudo swanctl --list-sasস্টেট আউটপুট খালি থাকা অবস্থায় ডিভাইস কাউন্টার বাড়ার অর্থ রাউটিং কাজ করছে কিন্তু পলিসি মিলছে না—সাধারণত আইডেন্টিফায়ার বা সিলেক্টরের ভুল। দূরবর্তী পক্ষ কিছু না জানালেও স্টেট কাউন্টার বাড়ার অর্থ প্যাকেট বেরোচ্ছে কিন্তু পৌঁছাচ্ছে না বা প্রমাণীকরণে ব্যর্থ হচ্ছে, যা পথ বা পিয়ার কনফিগারেশনের দিকে ইঙ্গিত করে। তালিকাভুক্ত চাইল্ডে শূন্য ট্রাফিক মানে এক প্রান্তে সিলেক্টরের সমস্যা, ভাঙা সাইফার নয়।
কে রুট ইনস্টল করবে তা ঠিক করুন
একটি রাউটিং টেবিলের দুই মালিকই সাধারণত ফ্ল্যাপিংয়ের উৎস। ডেমন স্বয়ংক্রিয়ভাবে রুট ইনস্টল করলে আপনার নেটওয়ার্ক ম্যানেজারও একই ডিভাইস দিয়ে ডিফল্ট রুট ইনস্টল করা উচিত নয়, আর স্টার্টআপ স্ক্রিপ্টের যোগ করা ম্যানুয়াল রুট ডেমন পরেরবার পুনঃকনফিগার করার সময় সরিয়ে ফেলা হবে।
একজন মালিক বেছে নিন এবং তা লিখে রাখুন। রুটের মালিক ডেমন হলে স্টার্টআপ স্ক্রিপ্ট টেবিলের বাইরে রাখুন এবং সংযোগের সংজ্ঞাকে ট্রাফিক সিলেক্টর বর্ণনা করতে দিন। নেটওয়ার্ক ম্যানেজার মালিক হলে স্বয়ংক্রিয় ইনস্টলেশন বন্ধ করুন এবং মেনে নিন যে পুনঃসংযোগে ডেমন অনুপস্থিত রুট মেরামত করবে না।
ফরওয়ার্ডিং ও ফায়ারওয়াল নিয়ম এর উপরে আরেকটি আলাদা সিদ্ধান্ত, কারণ অন্য হোস্টের ট্রাফিক পার করা গেটওয়ের দুটোই দরকার। রুট-ভিত্তিক IPsec সাধারণ রাউটিং টুলে সেই ট্রাফিক প্রকাশ করা সহজ করে; এটি পলিসি স্তরকে ঐচ্ছিক করে না।