একটি OpenVPN হাব, তিনটি LAN: ঠিকানা পরিকল্পনা ও iroute ফাইল
চারটি আলাদা প্রিফিক্স, প্রতিটি শাখার জন্য একটি কার্নেল রুট, প্রতিটি মালিকের জন্য একটি iroute। তিন সাইটের হাবের জন্য একটি কার্যকর ক্রম, যা নাম ভুল হলে চুপচাপ ব্যর্থ হয়।
তিনটি ব্যক্তিগত LAN একটি হাবে মিলিত হতে পারে, অথচ কোনো সাইট অন্যটির অভ্যন্তরীণ বিষয় জানতে পারে না, আর পুরো নকশাটি দাঁড়িয়ে আছে চারটি সংক্ষিপ্ত কনফিগারেশন সিদ্ধান্তের উপর। এটি কাজ করে না কোনো বিদেশি প্রোটোকল বৈশিষ্ট্যের কারণে, বরং একটি ঠিকানা পরিকল্পনার কারণে যা কাউকে অনুমান করতে হয় না, সঙ্গে প্রতিটি ক্লায়েন্টের জন্য রুট যা হাবকে বলে কোন শাখা কোন প্রিফিক্সের মালিক। এগুলোর যেকোনোটি ভুল করলে টানেল তবুও উঠে আসে, আর ঠিক এটিই ব্যর্থতাটিকে বিভ্রান্তিকর করে তোলে।
ধাপগুলো ক্রম অনুসারে শেষ করুন। প্রতিটি ধাপ আগের ধাপের পরিকল্পনার উপর নির্ভর করে, এবং কোনোটির জন্য নতুন সার্টিফিকেট কর্তৃপক্ষ লাগে না।
এমন পরিকল্পনা দিয়ে শুরু করুন যা কাউকে অনুমান করতে হয় না
কনফিগারেশন ফাইল স্পর্শ করার আগে চারটি অ-ওভারল্যাপিং প্রিফিক্স লিখে রাখুন: হাবের নিজস্ব LAN, প্রতিটি শাখার LAN, এবং ভ্রাম্যমাণ ক্লায়েন্টদের দেওয়া পুল। অ-ওভারল্যাপিং হওয়াই বাকি সবকিছু সহজ রাখে, কারণ ওভারল্যাপিং রেঞ্জ রাউটিংকে দীর্ঘতম মিলের ধাঁধায় পরিণত করে যা প্রতিটি ক্লায়েন্টের জন্য কোনো কনফিগারেশনেও সারানো যায় না। তারপর নিশ্চিত করুন কোন মেশিন প্রতিটি LAN-এর ডিফল্ট গেটওয়ে, কারণ যে শাখা রাউটার তার LAN-এর গেটওয়ে নয় তাকে দূরবর্তী রুট সম্পূর্ণ অন্য জায়গায় বসাতে হয়। সবশেষে, প্রতিটি শাখাকে চিহ্নিত করে এমন প্রমাণিত নাম নির্ধারণ করুন, কারণ ওই নামগুলোই সেই চাবি যা দিয়ে প্রতি-ক্লায়েন্ট ফাইল খোঁজা হয়।
একটি উদাহরণমূলক পরিকল্পনা পুলটিকে তিনটি LAN থেকে যথেষ্ট দূরে রাখে। আপনারটি ভিন্ন হবে, আর একমাত্র কঠোর নিয়ম হলো কোনো দুটি রেঞ্জ যেন ওভারল্যাপ না করে।
Hub LAN 172.20.0.0/24
Branch A LAN 172.21.0.0/24
Branch B LAN 172.22.0.0/24
VPN pool 10.77.0.0/24
identity branch-a owns 172.21.0.0/24
identity branch-b owns 172.22.0.0/24হাবের কার্নেলকে বলুন শাখাগুলো কোথায়
হাবের প্রতিটি শাখার জন্য দুটি তথ্য দরকার: একটি কার্নেল রুট যা প্রিফিক্সটি টানেল ডিভাইসে পাঠায়, এবং একটি iroute এন্ট্রি যা OpenVPN প্রসেসকে বলে কোন ক্লায়েন্ট এর মালিক। একা কার্নেল রুট প্যাকেটগুলোকে টানেলে পৌঁছায় এবং সেখানেই থামে, কারণ ডেমনকে এখনও সিদ্ধান্ত নিতে হয় কোন পিয়ার সেগুলো পাবে। একা iroute এন্ট্রি ওই প্যাকেটগুলোকে কার্নেলে রুট ছাড়াই রেখে দেয়। দুটি লাইনই সেই কনফিগারেশনে থাকা উচিত যা ডেমন সত্যিই লোড করে, এবং অন্য কিছু ডিবাগ করার আগে এটি যাচাই করা উচিত।
dev tun
topology subnet
server 10.77.0.0 255.255.255.0
disable-dco
route 172.21.0.0 255.255.255.0
push "route 172.20.0.0 255.255.255.0"
client-config-dir /etc/openvpn/ccd
route 172.22.0.0 255.255.255.0কার্নেলকে বলপ্রয়োগের বিন্দু হতে হলে ক্লায়েন্ট-থেকে-ক্লায়েন্ট বন্ধ রাখুন। এই অপশনটি ডেমনোর ভেতরে পিয়ার ট্রাফিক রিলে করে, যা সুবিধাজনক এবং এর মানে হলো আপনার ফরোয়ার্ডিং নিয়ম প্রবাহটি কখনই দেখে না। নিচের সবকিছু ধরে নেয় যে কার্নেল প্রতিটি শাখা-থেকে-শাখা প্যাকেট দেখে।
প্রতিটি শাখাকে প্রয়োজনীয় রুট দিন
প্রতিটি শাখার অন্য শাখাগুলো এবং হাবের LAN-এর জন্য রুট দরকার, আর নিজের সংযুক্ত LAN-এর জন্য রুট দরকার নেই। প্রতিটি রাউটারে আটকানোর বদলে হাব থেকে দূরবর্তী প্রিফিক্সগুলো পাঠান, যাতে পরে চতুর্থ সাইট মানে চারটি সম্পাদনার বদলে একটি নতুন প্রতি-ক্লায়েন্ট ফাইল। প্রতি-ক্লায়েন্ট ফাইলটিতে iroute লাইনটিও থাকে, যা মালিকানা ও ঘোষণা একই জায়গায় রাখে। ডিরেক্টরি ও তার ফাইলগুলো সার্ভারের বিশেষাধিকার মডেলের অধীনে পাঠযোগ্য করুন, নইলে খোঁজাটি কোনো বার্তা ছাড়াই ব্যর্থ হয়।
# /etc/openvpn/ccd/branch-a
iroute 172.21.0.0 255.255.255.0
push "route 172.22.0.0 255.255.255.0"চতুর্থ সাইট একই প্যাটার্ন অনুসরণ করে: একটি আলাদা প্রমাণিত নাম, একটি মালিকানাধীন প্রিফিক্স, একটি হাব কার্নেল রুট, একটি iroute এন্ট্রি, এবং কেবল সেই সাইটগুলোর কাছে ঘোষণা যাদের সেখানে পৌঁছানোর অনুমতি আছে।
শেষ বলার আগে দুই দিকেই পরীক্ষা করুন
তিনটি রাউটারেই IPv4 ফরওয়ার্ডিং চালু করুন, তারপর নিশ্চিত করুন ফায়ারওয়াল দুই দিকেই অভীষ্ট প্রবাহগুলোর অনুমতি দেয়, কারণ একমুখী পরীক্ষা ভাঙা ফেরত পথেও সবাই যতটা আশা করে তার চেয়ে বেশি বার পাস করে। সাইটগুলোর মধ্যে উৎস অনুবাদের দরকার নেই, আর মূল উৎস সংরক্ষণ করাই প্রতিটি শাখাকে অনুরোধে নিজের নীতি প্রয়োগ করতে দেয়।
এক শাখার LAN-এর একটি হোস্ট থেকে অন্য শাখার একটি সার্ভিসে পরীক্ষা করুন, তারপর দিকটি উল্টে দিন, তারপর শাখা থেকে হাবের LAN-এ পরীক্ষা করুন। এই তিনটি ফলাফল ভিন্ন প্রমাণ, এবং কোনোটিই অন্যগুলোকে বোঝায় না। শাখা রাউটার যদি তার LAN-এর ডিফল্ট গেটওয়ে না হয়, তবে দূরবর্তী প্রিফিক্সগুলো আসল গেটওয়েতে বসান এবং পুলটিও যোগ করুন যখন টানেল ক্লায়েন্টদের ওই LAN-এ সংযোগ শুরু করতে হয়।
পরিকল্পনা, প্রতি-ক্লায়েন্ট ফাইল এবং ফায়ারওয়াল নিয়মগুলো এক নথি হিসেবে লিখে রাখুন, কারণ পরবর্তী সাইট সংযোজন এর বিপরীতে বিচার করা হবে।
নকশাটি একসাথে টিকে থাকে কারণ প্রতিটি স্তরের একটি কাজ: পরিকল্পনা প্রিফিক্সগুলো অনন্য রাখে, কার্নেল রুট প্যাকেট চালায়, iroute মালিকের নাম বলে, আর ফায়ারওয়াল ঠিক করে কী অনুমোদিত। কিছু ভাঙলে সেই তালিকাই তা যাচাইয়ের ক্রম।