VPN যখন OpenWrt-এর সঙ্গে মেলে, তখন তিনটি পরিবর্তন একসঙ্গে গুলিয়ে যায়: একটি পোর্ট খোলা, ফরওয়ার্ডিং অনুমোদন করা এবং মাস্কারেডিং চালু করা। এগুলো ভিন্ন প্রশ্নের উত্তর দেয়, এবং সাধারণত এদের মধ্যে কেবল একটি-ই প্রকৃত প্রয়োজন। যে ট্র্যাফিক ভূমিকা একটি নিয়ন্ত্রণ পরিচালনা করে, সেই অনুসারে প্রতিটি নিয়ন্ত্রণ পড়লে অনুমান সিদ্ধান্তে পরিণত হয়, আর পরিবর্তনটি ভুল হলে কোন উপসর্গ আশা করবেন তাও বলে দেয়। যে ভূমিকা ব্যর্থ হয়েছে তার নাম দিন, আপনি যে চেকবক্স মনে রেখেছেন তার নয়।

কোনো নিয়ন্ত্রণ স্পর্শ করার আগে ট্র্যাফিক ভূমিকার নাম দিন

জোন ইনপুট ঠিক করে রাউটার নিজে পর্যন্ত কী পৌঁছাতে পারে। জোন আউটপুট রাউটার নিজে যে ট্র্যাফিক তৈরি করে তা ঢাকে, জোন ফরওয়ার্ডিং হলো একটি জোনের মধ্য দিয়ে যাওয়া ট্র্যাফিকের ডিফল্ট, আর মাস্কারেডিং ঠিক করে বেরোনোর পথে উৎসের ঠিকানা পুনর্লিখিত হবে কি না। এগুলো চারটি ভিন্ন প্রশ্ন, এবং একটি জোন নীতি একই মান দিয়ে একসঙ্গে চারটিরই উত্তর দেয়, তাই জোন-ব্যাপী পরিবর্তন একটি ভারী হাতিয়ার। একটি নামকরণ করা নিয়ম বাকিগুলো না ছুঁয়ে এদের একটির উত্তর দিতে পারে।

কাজের মানচিত্রটি ট্র্যাফিক ভূমিকা অনুসারে, কারণ কিছু ব্যর্থ হলে আপনি ঠিক সেটাই পর্যবেক্ষণ করতে পারেন। নিচের প্রতিটি ভূমিকার একটি নিয়ন্ত্রণ আছে যা তা নির্ধারণ করে এবং একটি উপসর্গ আছে যা তার দিকে ইশারা করে:

Traffic roleControl that decides itWhere it lives in the configSymptom when it is wrong
A client reaching a listener on the routerInput policy of the zone that carries the connection, or a rule for the portoption input in the zone stanza, or a named ruleThe handshake never completes and the tunnel log says nothing
A tunnel client reaching the router itselfInput policy of the tunnel zoneoption input in the VPN zoneA ping to the gateway fails
A tunnel client reaching another LAN hostForwarding from the tunnel zone to the LAN zoneconfig forwarding plus the zone assignmentThe gateway answers and the file share times out
The router's own traffic leaving the WANOutput policy, and translation if the far side needs itoption output and option masqThe tunnel never establishes, or replies vanish

রাউটারে থাকা শ্রোতার জন্য একটি সংকীর্ণ ইনপুট নিয়মই যথেষ্ট

রাউটারে থাকা একটি OpenVPN সার্ভার রাউটারকে ঠিকানা দেওয়া ট্র্যাফিক পায়, তাই তার বাইরের সংযোগ নির্ভর করে যে জোন সেটি বহন করে তার ইনপুট নীতির ওপর। কনফিগার করা ট্রান্সপোর্ট ও পোর্ট অনুমোদন করুন এবং সেই জোনের বাকি সবকিছু প্রত্যাখ্যাত রাখুন। একটি একক পোর্ট নিয়ম জোন-ব্যাপী অনুমোদনের চেয়ে অনেক ছোট পরিবর্তন, আর এক বছরের পরেও আপনি ঠিক এটিরই ব্যাখ্যা দিতে পারবেন।

দুটি বিষয় এই নিয়মটি রাখা নিরাপদ করে: এটি সেই পোর্টের নাম বলে যা সার্ভিস সত্যিই ব্যবহার করে, এবং এটি জোন সংজ্ঞার পাশে থাকে যাতে পরের মানুষটি দেখতে পারে কেন এটি আছে। নিচের লাইনগুলো কেবল আকৃতি, যেখানে পোর্টটি সার্ভারে যা কনফিগার করা আছে তার প্রতিনিধি। সার্ভিস সরে গেলে দুই জায়গাতেই পোর্টটি বদলান, কারণ পুরোনো পোর্টে রয়ে যাওয়া নিয়ম নিরীক্ষার আগ পর্যন্ত অদৃশ্য থাকে।

config zone
    option name 'wan'
    option input 'REJECT'
    option forward 'REJECT'
    option output 'ACCEPT'
    option masq '1'

config rule
    option name 'allow-openvpn'
    option src 'wan'
    option proto 'udp'
    option dest_port '1194'
    option target 'ACCEPT'

পুনরায় লোড করার আগে যাচাই করুন, কারণ ফায়ারওয়াল ফাইলে একটি সিনট্যাক্স ত্রুটি রাউটারকে কাজ করা নিয়মসমষ্টি ছাড়া রেখে যেতে পারে। fw4 ব্যবহার করা রিলিজে যাচাই আলাদা কমান্ড, এবং এটি ভাঙা অংশ নীরবে গ্রহণ না করে জোরে ব্যর্থ হয়। যাচাই পাস হওয়ার পরেই কেবল পুনরায় লোড করুন, এবং আগের ফাইলটি যেখানে রেখে ফিরিয়ে আনতে পারবেন সেখানে রাখুন।

fw4 check
service firewall reload

ক্লায়েন্টের অনুরোধ ইনপুট নয়, ফরওয়ার্ডিং পার হয়

প্রমাণীকরণের পর, LAN সার্ভিস চাওয়া একটি টানেল ক্লায়েন্ট ফরওয়ার্ড করা প্রবাহ তৈরি করে, তাই এটি নির্ধারণকারী নিয়ন্ত্রণ হলো টানেল জোন ও LAN জোনের মধ্যে ফরওয়ার্ডিং সম্পর্ক। টানেল ইন্টারফেসটিকে ইচ্ছিত জোনে বরাদ্দ করুন, তারপর দিক, উৎস ও সার্ভিস ঘোষণা করুন। জোন বরাদ্দই ফরওয়ার্ডিং নিয়মকে অর্থ দেয়, এবং দুটো একসঙ্গে পড়লেই বোঝা যায়। যে ফরওয়ার্ডিং সম্পর্ক টানেল জোনকে উৎস ও LAN জোনকে গন্তব্য বলে, সেটি একটি সচেতন সিদ্ধান্ত হিসেবে পড়া হয়, অথচ দুই জোন-ব্যাপী অনুমোদন দুর্ঘটনা হিসেবে পড়া হয়।

রাউটার নিজে পর্যন্ত পৌঁছানো এখনও ইনপুট পথ ব্যবহার করে, তাই গেটওয়েতে ping তার পেছনের ফাইল শেয়ার সম্পর্কে কিছুই বলে না। এই দুই ব্যর্থতা ভিন্ন অংশে থাকে এবং ভিন্ন সম্পাদনায় সারানো হয়। যেকোনো একটি বদলানোর আগে দুটি পথই আলাদা করে লিখে রাখুন।

মাস্কারেডিং একটি রাউটিং সিদ্ধান্ত, কোনো অনুমতি নয়

মাস্কারেডিং নির্বাচিত বহির্গামী ট্র্যাফিকের উৎসের ঠিকানা পুনর্লিখন করে। এটি এমন একটি নির্গমন নকশা বাঁচাতে পারে যেখানে দূর প্রান্তের ফেরার পথ নেই, আর এটি ঠিকানা লগ করা বা ঠিকানা দিয়ে অনুমোদন করা যেকোনো সার্ভিস থেকে আলাদা ক্লায়েন্টের ঠিকানাও লুকায়। এটি বন্ধ করা ফেরার পথ নিয়ে একটি রাউটিং পছন্দ, ভেতরের ফুটো বন্ধ করা কোনো নিরাপত্তা সুইচ নয়। যে টানেল অনুবাদ চালু থাকলে কাজ করে আর বন্ধ করার মুহূর্তেই ব্যর্থ হয়, তার সাধারণত ফেরার রুট অনুপস্থিত থাকে, ফায়ারওয়াল নিয়ম নয়।

রাউট করা বিকল্পে অনুবাদের বদলে দূর প্রান্তে একটি ফেরার রুট দরকার। কোনোটিই ফায়ারওয়াল অনুমতি বা অ্যাপ্লিকেশন অ্যাকাউন্ট দেয় না, তাই মাস্কারেডিং বন্ধ করা প্রায় কখনোই এমন টানেল ক্লায়েন্ট সারায় না যা কিছুই পৌঁছাতে পারে না। IPv4 ও IPv6 নীতিকে আলাদাভাবে দেখুন, কারণ একটি অনুবাদ সেটিং দুই পরিবারকেই বর্ণনা করে না।

একটি অনুমোদিত ও একটি প্রত্যাখ্যাত অনুরোধ দিয়ে সিদ্ধান্ত প্রমাণ করুন

একটি অনুরোধ পাঠান যা অনুমোদিত হওয়া উচিত এবং একটি যা প্রত্যাখ্যাত হওয়া উচিত, তারপর প্রতিটি সিদ্ধান্ত যে নিয়ন্ত্রণ নিয়েছে তা চিহ্নিত করুন। যে পৃষ্ঠাটি ঘটনাক্রমে লোড হয় তা প্রমাণ নয়; প্রমাণ হলো যে নিয়মটি মিলেছে, যে শৃঙ্খলে মিলেছে সেখানেই। প্রত্যাখ্যান সফলতার মতোই গুরুত্বপূর্ণ, কারণ এটি দেখায় নীতি কিছু করছে, সবকিছু অনুমোদিত হওয়া নয়।

বর্তমান রিলিজে দুটি কমান্ড আপনাকে সেই প্রমাণ দেয়। অনুরোধ গ্রহণ করা হলে মিলে যাওয়া নিয়মের কাউন্টারটি নড়ে, আর নিয়মটির জন্য লগিং চালু করলে লগ বাদ পড়াটি দেখায়:

nft list chain inet fw4 forward_wan
logread -f | grep -i -E 'DROP|REJECT'

কোনো ফায়ারওয়াল নীতি বদলানোর আগে এমন একটি প্রশাসন পথ রাখুন যা এখনও ব্যবহার করতে পারেন, এবং কনফিগারেশনের মালিকের যাচাই ও রোলব্যাক প্রক্রিয়া অনুসরণ করুন। যে পরিবর্তন আপনাকে রাউটারের বাইরে আটকে দেয় তা পরীক্ষার ফল নয়, দ্বিতীয় ঘটনা। প্রতিটি পর্যবেক্ষণের পাশে জোন ও ট্র্যাফিক ভূমিকা লিখে রাখুন, যাতে ফলাফলের জোড়াটি ভাগ্যবান পৃষ্ঠা লোড বর্ণনা না করে নীতিটি ব্যাখ্যা করে।

সম্পর্কিত নিবন্ধ