একটি নীতি-নিয়ম চিহ্নিত প্যাকেটগুলোকে একটি নির্দিষ্ট টেবিলে পাঠায়, আর স্বাভাবিক প্রত্যাশা হলো VPN রুট হারালে সেগুলো আটকে যাবে। প্রক্রিয়াটি অন্য কিছু করে। যখন টেবিলে মিলে যাওয়া কোনো রুট থাকে না, খোঁজা পরের নিয়মে চলতে থাকে থামার বদলে, আর main টেবিলে তখনও uplink-এর একটি সাধারণ ডিফল্ট রুট থাকে। ফল হলো এমন এক কনফিগারেশন যা fail-closed দেখায় কিন্তু fail-open আচরণ করে।

কিছুই ভাঙেনি; পলিসি রাউটিং ঠিক এভাবেই নির্ধারিত।

টেবিলে কিছু না থাকলে খোঁজা চলতে থাকে

100:   from all fwmark 0x36 lookup 42
110:   from all fwmark 0x36 lookup default
32766: from all lookup main

ওই নিয়মসেটটি নিন: চিহ্নিত খোঁজা 42 টেবিলে যায়, আর পরের নিয়ম একই চিহ্ন default নামের টেবিলে পাঠায়। যতক্ষণ 42 টেবিলে ব্যবহারযোগ্য ডিফল্ট রুট থাকে, প্রথম খোঁজাই পথ দেয়। যখন সেই রুট হারিয়ে যায় এবং 42 টেবিলে আর কিছু মেলে না, তখন খোঁজা বাতিলে পরিণত হয় না; প্রক্রিয়াকরণ পরের নিয়মে যায়, আর সেটিও কিছু না পেলে main টেবিলে পৌঁছায়। ওই ধারাবাহিকতায় কিছুই জানায় না কোন নিয়ম চূড়ান্ত উত্তর দিয়েছে, তাই কাজ করা সংযোগ কাজ করা নীতির মতো দেখায়।

253 টেবিল, যা প্রচলিতভাবে default নামে পরিচিত, একটি সাধারণ রাউটিং টেবিল এবং সাধারণত খালি থাকে। এর নাম প্যাকেট ফেলার নির্দেশ নয়, আর এটি টেবিলের ভেতরের ডিফল্ট গন্তব্য রুটের সমান কিছু নয়।

টার্মিনাল অ্যাকশন খোঁজা শেষ করে

100:   from all fwmark 0x36 lookup 42
110:   from all fwmark 0x36 prohibit
32766: from all lookup main

খালি টেবিলে খোঁজার বদলে VPN খোঁজার পরে একটি টার্মিনাল নিয়ম আসতে পারে। একই চিহ্ন দিয়ে, 42 টেবিলের নিয়মের পরে বসানো prohibit অ্যাকশন সেই টেবিল কিছু না দিলে খোঁজা শেষ করে এবং main টেবিলকে আরেকটি সুযোগ দেওয়ার বদলে প্রশাসনিক প্রত্যাখ্যান ফেরায়। Unreachable ও blackhole-ও টার্মিনাল, প্রেরকের জন্য ভিন্ন ত্রুটি আচরণ নিয়ে।

throw ধরনের রুট আলাদা: সেই টেবিলের ভেতরে এটি এমনভাবে আচরণ করে যেন কিছুই মেলেনি, তাই পরের নিয়মগুলো তাদের পালা পায়। এতে throw ইচ্ছাকৃত ফলব্যাকের জন্য উপযোগী হয় আর চূড়ান্ত ব্লক হিসেবে ভুল হয়।

প্রকৃত চিহ্ন ও ইন্টারফেস দিয়ে যাচাই করুন

ip -4 rule show
ip -4 route show table 42
ip -4 route get 198.51.100.20 from 10.44.0.2 iif lan0 mark 0x36

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

স্থানীয়ভাবে তৈরি অনুরোধের নিজস্ব প্রসঙ্গ দরকার, কারণ তাদের চিহ্নিতকরণের পথ প্রায়ই ফরোয়ার্ড করা ট্রাফিকের পথ থেকে আলাদা। অ্যাপটি সত্যিই যে আউটপুট ইন্টারফেস ব্যবহার করবে তা দিয়ে সেগুলো পরীক্ষা করুন।

দুই ব্যর্থ অবস্থা, এক নয়

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

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

নীতিটি IPv6-এ আলাদাভাবে প্রয়োগ করুন, আর অনুমোদিত এন্ডপয়েন্ট ব্যতিক্রমগুলো পরোক্ষ নয়, স্পষ্ট রাখুন।

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