وبلاگ نت‌آرامآموزش، تجربه و راهکارهای زیرساخت

رفع خطای Conflicting default route در Netplan اوبونتو

آموزش تشخیص مسیرهای پیش‌فرض تکراری، اصلاح gateway در Netplan و آزمایش امن شبکه سرور اوبونتو.

انتشار:
توسط تیم فنی نت‌آرام
۷ دقیقه زمان مطالعه
۰ دیدگاه
محتوای تخصصی، ساده و کاربردی
هماهنگ با هویت حرفه‌ای نت‌آرام
بازگشت به لیست مقالات
تصویر شاخص مقاله رفع خطای Conflicting default route در Netplan اوبونتو در وبلاگ نت‌آرام
محتوای آموزشی وبلاگ نت‌آرام
بعد از اضافه‌کردن کارت شبکه دوم یا تغییر تنظیمات سرور مجازی ایران، ممکن است Netplan پیام Conflicting default route declarations for IPv4 بدهد. گاهی تنظیم تولید می‌شود اما هشدار باقی می‌ماند و بسته‌ها از مسیر اشتباه بیرون می‌روند. این پیام می‌گوید برای یک خانواده نشانی، جدول و اولویت یکسان، بیش از یک مسیر پیش‌فرض تعریف شده است. نتیجه می‌تواند قطع اینترنت، پاسخ‌ندادن SSH روی یکی از IPها یا رفت‌وآمد نامنظم باشد.
مسیر پیش‌فرض مانند خروجی اصلی یک ساختمان است: وقتی مقصد در شبکه‌های محلی مشخص نیست، بسته از آن راه خارج می‌شود. صرف داشتن دو کارت شبکه به این معنی نیست که هر دو باید خروجی پیش‌فرض داشته باشند. در این راهنما ابتدا می‌فهمیم هر کارت چه نقشی دارد؛ سپس فقط تنظیم متناسب با همان نقش را تغییر می‌دهیم. این توضیح برای سیستم‌هایی است که شبکه‌شان با Netplan مدیریت می‌شود، نه همه نسخه‌ها و تنظیم‌های ممکن لینوکس.

۱. قبل از دست‌زدن به شبکه، راه بازگشت داشته باشید

از کنسول پنل یا کنسول مجازی‌سازی به سرور وصل شوید و مطمئن شوید حتی پس از قطع SSH به آن دسترسی دارید. از ارائه‌دهنده یا مدیر شبکه بپرسید کدام رابط عمومی، کدام خصوصی و gateway هرکدام چیست. IP، پیشوند شبکه و DNS را نیز یادداشت کنید. اگر دو مسیر عمومی باید هم‌زمان به درخواست‌های ورودی خودشان پاسخ دهند، صرف تنظیم اولویت کافی نیست؛ ممکن است به مسیرگذاری بر اساس مبدأ و تنظیمات ارائه‌دهنده نیاز باشد.
برای نگه‌داشتن نسخه فایل‌ها، این دستورها را پشت‌سرهم در یک نشست ترمینال اجرا کنید. هر بار یک پوشه خصوصی جدید خارج از مسیر Netplan ساخته می‌شود:
کد / دستورbackup_dir=$(sudo mktemp -d /root/netplan-before-route-fix.XXXXXXXX) sudo cp -a /etc/netplan/. "$backup_dir/" printf '%s\n' "$backup_dir" sudo ls -la "$backup_dir"
خروجی آخر باید فایل‌های نسخه قبلی را نشان دهد. مسیر چاپ‌شده پوشه جدید را یادداشت کنید؛ حروف پایانی آن در هر اجرا فرق می‌کند. نسخه پشتیبان فقط وقتی مفید است که بتوانید در کنسول فایل درست را برگردانید؛ در ادامه روش بازگشت را گفته‌ایم.

۲. مسیر فعال و فایل‌های مؤثر را پیدا کنید

در ترمینال سرور اجرا کنید:
کد / دستورip -br address ip -4 route show table main ip -4 route get 1.1.1.1
دستور اول نام کارت و IP آن را نشان می‌دهد. در خروجی دوم، خطوط شروع‌شده با default مسیرهای پیش‌فرض فعلی هستند. دستور سوم نشان می‌دهد در همین لحظه برای مقصد نمونه چه رابط و چه نشانی مبدأ انتخاب می‌شود. مقصد نمونه فقط برای پرسیدن از جدول مسیریابی است و لزوماً اتصال اینترنت را آزمایش نمی‌کند. اگر شبکه شما خروجی اینترنت ندارد، از IP یک مقصد مجاز همان شبکه استفاده کنید.
حالا فایل‌ها و تنظیم ادغام‌شده را ببینید:
کد / دستورls -l /etc/netplan sudo netplan get sudo netplan generate
اگر نسخه شما netplan get ندارد، فایل‌های YAML را جداگانه بخوانید. خروجی generate را کامل بخوانید: در بعضی نسخه‌ها این پیام به صورت هشدار چاپ می‌شود و بازگشت موفق دستور به معنی درست بودن مسیر نیست. نام دو رابطی که در پیام آمده‌اند و مقدار table و metric را یادداشت کنید. امکان دارد یک gateway4 قدیمی و یک routes جدید هر دو تعریف شده باشند یا تنظیمات از چند فایل ادغام شوند. بعضی فایل‌ها را cloud-init یا ابزار زیرساخت می‌سازد؛ مالک تنظیم را پیدا کنید تا تغییرتان بعداً بازنویسی نشود. برای این حالت راهنمای بازگشت تنظیم شبکه پس از راه‌اندازی مجدد را بخوانید.

۳. اگر فقط یک خروجی لازم دارید، مسیر تکراری را حذف کنید

فرض کنید ens160 به شبکه عمومی و ens192 به شبکه خصوصی وصل است و مدیر شبکه تأیید کرده خروجی پیش‌فرض فقط از رابط اول باشد. نمونه زیر تنها برای نشان‌دادن ساختار است؛ نام‌ها، IP و gateway را از تنظیم واقعی خودتان جایگزین کنید و بخش‌های لازم DNS یا تنظیم‌های دیگر را نگه دارید:
کد / دستورnetwork: version: 2 ethernets: ens160: dhcp4: false addresses: [192.0.2.10/24] routes: - to: default via: 192.0.2.1 ens192: dhcp4: false addresses: [10.20.0.10/24]
در این مثال، شبکه خصوصی همچنان نشانی خودش را دارد ولی دروازه پیش‌فرض دوم ندارد. مسیر شبکه مستقیم معمولاً با تنظیم IP و prefix ایجاد می‌شود؛ اگر برای دسترسی به زیرشبکه‌های دیگر مسیر اختصاصی لازم است، آن را طبق اطلاعات شبکه جداگانه اضافه کنید. IPهای نمونه را در سرور واقعی استفاده نکنید. در فایل واقعی، تنها تعریف تکراری همان رابط را ویرایش کنید، نه اینکه همه فایل را با مثال جایگزین کنید. در نسخه‌های جدید gateway4 قدیمی شده و روش توصیه‌شده تعریف مسیر در بخش routes است؛ بسته به نسخه، نمایش هشدار ممکن است متفاوت باشد.
اگر کارت خصوصی از DHCP آدرس می‌گیرد و فقط نمی‌خواهید مسیرهای ارسالی DHCP آن نصب شوند، زیر همان رابط می‌توانید از ساختار زیر استفاده کنید:
کد / دستورdhcp4: true dhcp4-overrides: use-routes: false
این گزینه مسیرهای دریافتی از DHCP را نادیده می‌گیرد، نه مسیرهای ثابت نوشته‌شده در YAML را؛ ممکن است مسیرهای دیگری غیر از پیش‌فرض نیز از دست بروند. پیش از استفاده، مسیرهای مورد نیاز شبکه خصوصی را با مدیر شبکه مشخص کنید. اگر هر دو رابط DHCP هستند و هر دو خروجی معتبر دارند، route-metric متفاوت برای مسیرهای DHCP می‌تواند رابط ترجیحی را مشخص کند؛ مقدار کمتر معمولاً ترجیح بیشتری دارد. سازگاری تنظیم را با نسخه Netplan و backend سرور کنترل کنید.

۴. اگر واقعاً دو مسیر خروجی لازم است

برای دو مسیر ثابت که فقط یکی باید ترجیح داشته باشد، Netplan در نسخه‌های پشتیبان می‌تواند برای مسیرها metric متفاوت داشته باشد؛ مثلاً metric: 100 برای مسیر اصلی و metric: 200 برای مسیر دیگر. gateway هر مسیر باید واقعاً از همان رابط قابل دسترسی باشد. اولویت پایین‌تر به‌تنهایی قطع فیزیکی یا قطع اینترنت پشت gateway را همیشه تشخیص نمی‌دهد، پس آن را جایگزین سامانه پایش و failover واقعی ندانید.
اگر سرویس باید از هر IP عمومی پاسخ متقارن بدهد، دو metric در جدول اصلی الزاماً پاسخ را از رابط ورودی برنمی‌گرداند. برای چنین شبکه‌ای باید جدول‌های جدا، قواعد مبدأ، gateway و مسیرهای متناسب با توپولوژی واقعی طراحی و از کنسول آزمایش شوند. نمونه‌های رسمی Netplan ساختار metric و source routing را نشان می‌دهند، اما آدرس‌های آن‌ها نسخه آماده شبکه شما نیستند. بدون اطلاعات شبکه، کپی یک مثال می‌تواند دسترسی را قطع کند.

۵. تغییر را امتحان کنید و در صورت لزوم برگردانید

پس از ذخیره فایل با فاصله‌گذاری صحیح YAML، ابتدا تولید تنظیم را امتحان کنید:
کد / دستورsudo netplan generate sudo netplan try --timeout 120
اولی پیکربندی backend را تولید و خطاها را نمایش می‌دهد و دومی تنظیم را موقتاً اعمال می‌کند. در مدت شمارش معکوس از یک اتصال جدا، SSH و سرویس واقعی را امتحان کنید؛ سپس فقط اگر درست بود در پنجره try تأیید کنید. اگر تنظیم بد بود آن را تأیید نکنید و بازگشت را از کنسول بررسی کنید. طبق راهنمای رسمی netplan try بازگشت خودکار در بعضی شرایط محدودیت دارد؛ بعد از لغو یا پایان زمان، هم شبکه و هم فایل روی دیسک را کنترل کنید.
در صورت نیاز به بازگشت، از کنسول و با نام فایل واقعی، نسخه ذخیره‌شده همان فایل را برگردانید و سپس تولید و اعمال را بررسی کنید:
کد / دستورsudo cp -a /root/netplan-before-route-fix.XXXXXXXX/50-cloud-init.yaml /etc/netplan/50-cloud-init.yaml sudo netplan generate sudo netplan try --timeout 120
مسیر پوشه پشتیبان و نام 50-cloud-init.yaml مثال‌اند؛ مسیر چاپ‌شده در مرحله اول و فایل صحیح را جایگزین کنید. اگر فایل دیگری ایجاد یا تغییر داده‌اید، بازگشت همان تغییرها نیز لازم است. از حذف بی‌هدف فایل‌های دیگر خودداری کنید و پس از بازگشت مالک تنظیم را بررسی کنید.

۶. موفقیت را با مسیر و سرویس واقعی بسنجید

دوباره ip -4 route show table main و ip -4 route get 1.1.1.1 را اجرا کنید و ببینید مسیر انتخابی با شبکه مورد انتظار هماهنگ است. از بیرون به هر IP مورد نیاز وصل شوید و پاسخ سرویس را آزمایش کنید؛ اتصال خروجی به‌تنهایی پاسخ ورودی را ثابت نمی‌کند. اگر هشدار رفته ولی ارتباط هنوز نامنظم است، مسیرهای دریافتی DHCP، فایروال، جدول‌های دیگر با ip rule show و شبکه ارائه‌دهنده را بررسی کنید. اگر رابط اصلاً نام متفاوتی دارد، راهنمای تغییر نام کارت شبکه بعد از انتقال VPS مسئله دیگری را توضیح می‌دهد.
اشتراک‌گذاری:
لینکدینتلگرامایکس

دیدگاه‌ها (۰)

دیدگاه‌های تاییدشده و پاسخ‌های تیم نت‌آرام