متریک مسیر OpenVPN: چرا مسیر انتخابشده باز هم میبازد
متریک هر مسیر و route-metric چیزهای متفاوتی تعیین میکنند. خط پروفایل را مرور کنید، ببینید کلاینت چه نصب کرده است و بفهمید چرا عدد کوچکتر باز هم میبازد.
به یک مسیر در پروفایل متریک اضافه کردید، دوباره متصل شدید و ترافیک هنوز از رابط اشتباه خارج میشود. عدد بهندرت مشکل است. متریک فقط نامزدهایی را مرتب میکند که سیستمعامل از قبل آنها را مقایسه میکند، و یک پیشوند مشخصتر یا جدول سیاست قدیمیتر پیش از خواندن هر متریکی تصمیم میگیرد.
ابتدا پروفایل، سپس جدول نصبشده و سپس قواعد انتخاب را مرور کنید. این ترتیب با روشی که کلاینت مسیر را میسازد همخوانی دارد و مانع تنظیم مقداری میشود که هرگز وارد مقایسه نمیشود.
خط مسیر را به ترتیب فیلدها بخوانید
کلاینت جامعه OpenVPN 2.6 چهار فیلد را در خط route برای IPv4 میپذیرد: شبکه، ماسک شبکه، دروازه و متریک اختیاری. جایگاه دروازه همانجایی است که کلیدواژه ویژه vpn_gateway میرود. این یعنی گام بعدی از سمت VPN برای این اتصال، نه شماره جدول مسیریابی و نه روتر فیزیکی شما. اگر آن را از دست بدهید، بقیه خط با تصور اشتباه از کاری که میکند خوانده میشود. مرجع گزینههای شبکه هر چهار فیلد را مستند میکند.
برای یک مقصد خصوصی، خط میتواند اینگونه باشد:
route-metric 50
route 172.20.0.0 255.255.0.0 vpn_gateway 30
عدد 30 صریح به همان مسیر مربوط است و 50 پیشفرض همه مسیرهای دیگر پروفایل میماند که عدد را حذف میکنند. خواندن خط از چپ به راست کافی است تا بدانید کدام مقدار کجا اعمال میشود.
route-metric یک پیشفرض است، نه یک رتبه
route-metric مقدار پشتیبان را برای مسیرهایی تعیین میکند که عدد خودشان را حمل نمیکنند. این مسیری را بالاتر از چیز دیگری نمیبرد و مسیرهای نصبشده با متریک صریح را دوباره مرتب نمیکند.
این تفاوت زمانی مهم است که پروفایل هر دو شکل را مخلوط کند. یک خط route-metric نزدیک بالای فایل معتبر به نظر میرسد و بهراحتی سرزنش میشود، در حالی که مسیری که واقعا ترافیک را حمل میکند ممکن است متریک خودش را سه خط پایینتر داشته باشد.
اگر میخواهید یک مسیر مسیری را ترجیح دهد، عدد را روی همان مسیر بگذارید. اگر پیشفرضی یکدست در سراسر پروفایل تولیدشده میخواهید، از route-metric استفاده کنید و خطوط فردی را رها کنید. مخلوط کردن این دو بدون دلیل همان راهی است که پروفایل با مسیری تمام میشود که هیچکس نمیتواند توضیحش دهد.
بررسی کنید کلاینت چه نصب کرده است
پس از کامل شدن اتصال دوباره، از هسته بپرسید نه از پروفایل.
ip route show مسیرهایی را که کلاینت اضافه کرده فهرست میکند و ip route get 172.20.5.10 به پرسش مفیدتری پاسخ میدهد: این مقصد واقعا از کدام مسیر استفاده میکند و با کدام آدرس مبدا. اگر مقصد در جدول نباشد، کلاینت آن را نصب نکرده است.
یک دستور محلی، ارسال از سرور یا مدیر شبکه دیگر میتوانند همان پیشوند را اضافه یا حذف کنند و آخرین نویسنده برنده است. مسیر نقطه پایانی را هنگام کار در دید داشته باشید، چون اتصال به مسیری به سرور راه دور نیاز دارد که از تونلی که میسازد عبور نکند.
چرا متریک کوچکتر باز هم میبازد
متریکها مسیرها را به مقصد یکسان مقایسه میکنند. آنها یک پیشوند گسترده را مشخصتر نمیکنند. وقتی redirect-gateway def1 در کار است، کلاینت 0.0.0.0/1 و 128.0.0.0/1 را نصب میکند و این دو پیشوند کل فضای IPv4 را مشخصتر از 0.0.0.0/0 پوشش میدهند. متریک 1 روی مسیر پیشفرض از آنها پیشی نمیگیرد.
همین منطق برای هر جفت همپوشان صدق میکند. یک /24 برای آدرسی درون آن بر /16 پیروز میشود، صرفنظر از اعداد ضمیمه، چون جستجو ابتدا مشخصترین تطابق را انتخاب میکند و تنها پس از آن متریکها را میان برابرها مقایسه میکند.
این همان بخشی است که شبیه باگ متریک به نظر میرسد و نیست. پیش از تغییر هر عددی، طول پیشوند را روی هر دو نامزد بررسی کنید.
قواعد سیاست پیش از جدول اجرا میشوند
در Linux، ip rule تعیین میکند کدام جدول مسیریابی بررسی شود. قواعد به ترتیب اولویت ارزیابی میشوند، بنابراین یک جدول قدیمیتر میتواند پیش از خواندن جدول اصلی مسیری را برگرداند. متریک داخل main نمیتواند بر تطابق در جدولی که اول بررسی شده پیروز شود.
از ip rule show استفاده کنید و سپس جدول مشخص را بپرسید، مثلا ip route show table 100، تا ببینید آن قاعده چه برمیگرداند. اگر یک کلاینت VPN یا محیط اجرای کانتینر قاعدهای اضافه کرده باشد، پاسخ ممکن است آنجا باشد نه در جدولی که خواندهاید. آدرس مبدا هم مهم است، چون یک قاعده میتواند با مبدا تطابق یابد و همان مقصد را برای ترافیک تونل و ترافیک LAN متفاوت حل کند.
مقصد را بررسی کنید، نه رتبهبندی را
آزمایشی که بحث را پایان میدهد یک پرسوجوی واحد به میزبان داخل زیرشبکه مورد نظر است، بههمراه بررسی آدرس مبدایی که هسته انتخاب کرده است. اگر این جفت با طراحی بخواند، متریک کارش را میکند حتی وقتی فهرست شبیه یک رتبهبندی تمیز نیست.
IPv6 و DNS را از این بررسی بیرون بگذارید. آنها با دستورهای متفاوت پیکربندی و با سازوکارهای متفاوت حل میشوند و یک مسیر IPv4 فعال درباره هیچکدام چیزی نمیگوید. هر بار یک لایه را تغییر دهید و پرسوجو را دوباره اجرا کنید.