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

تنظیمات شبکه اوبونتو بعد از ریبوت برمی‌گردد؛ نقش cloud-init و Netplan چیست؟

راهنمای بررسی cloud-init و فایل‌های Netplan، تشخیص بازنویسی تنظیمات شبکه و اعمال تغییر ماندگار با امکان بازگشت در VPS اوبونتو.

انتشار:
توسط تیم فنی نت‌آرام
۹ دقیقه زمان مطالعه
۰ دیدگاه
محتوای تخصصی، ساده و کاربردی
هماهنگ با هویت حرفه‌ای نت‌آرام
بازگشت به لیست مقالات
تصویر شاخص مقاله تنظیمات شبکه اوبونتو بعد از ریبوت برمی‌گردد؛ نقش cloud-init و Netplan چیست؟ در وبلاگ نت‌آرام
محتوای آموزشی وبلاگ نت‌آرام
آدرس IP یا DNS سرور اوبونتو را تنظیم می‌کنید، همه‌چیز کار می‌کند، اما بعد از ریبوت تغییرات ناپدید می‌شود. یکی از علت‌های ممکن این است که شبکه از اطلاعات پلتفرم یا چند فایل تنظیم ساخته می‌شود و شما فایل یا محلی را تغییر داده‌اید که مرجع نهایی نیست. البته هر بازگشت تنظیماتی تقصیر cloud-init نیست؛ DHCP، ابزار ارائه‌دهنده یا ادغام فایل‌های Netplan هم می‌تواند دخیل باشد.
این راهنما برای سرورهای Ubuntu دارای Netplan و در صورت وجود cloud-init نوشته شده است. مثال‌ها را با اطلاعات واقعی سرور خودتان تطبیق دهید. چون تغییر اشتباه شبکه ممکن است SSH را قطع کند، قبل از شروع باید کنسول سرور در پنل ارائه‌دهنده یا مسیر دسترسی مستقل دیگری داشته باشید و از تنظیمات فعلی نسخه پشتیبان بگیرید.

۱. اول مشخص کنید چه چیزی برگشته است

قبل از هر تغییر، آدرس‌ها و مسیرهای فعلی را در ترمینال خود سرور ببینید:
کد / دستورip -br address
خروجی، نام کارت شبکه و آدرس‌های فعلی آن را نشان می‌دهد؛ برای مثال نام رابط ممکن است ens160 باشد، ولی نام سرور شما می‌تواند متفاوت باشد. این نام را یادداشت کنید. سپس مسیرهای پیش‌فرض را ببینید:
کد / دستورip route show default
وجود default via ... dev ... معمولاً نشان می‌دهد کدام دروازه و رابط برای مسیر پیش‌فرض IPv4 استفاده می‌شود. آدرس‌ها و دروازه را از این خروجی و اطلاعات ارائه‌دهنده یادداشت کنید، نه از نمونه‌های سایت‌های دیگر.
اگر فقط نام دامنه‌ها حل نمی‌شوند ولی IP سرور عوض نشده است، وضعیت DNS را نیز ببینید:
کد / دستورresolvectl status
این دستور روی سیستم‌هایی که systemd-resolved دارند اطلاعات DNS رابط‌ها را نشان می‌دهد. اگر دستور موجود نیست، ابتدا روش مدیریت DNS همان سیستم را مشخص کنید. برای راهنمای اختصاصی حل‌نشدن نام‌ها می‌توانید عیب‌یابی DNS سرور را بخوانید.

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

کد / دستورfor dir in /lib/netplan /etc/netplan /run/netplan; do [ ! -d "$dir" ] || ls -l "$dir"; done
Netplan می‌تواند تنظیمات را از هر سه مسیر بخواند. نامی مانند 50-cloud-init.yaml سرنخی از تولید فایل توسط cloud-init است، اما ثابت نمی‌کند فایل در هر ریبوت بازنویسی شده است. فایل‌هایی با نام‌های متفاوت طبق ترتیب نام با هم ترکیب می‌شوند؛ برای بعضی مقدارهای فهرستی، مقادیر جدید به قبلی اضافه می‌شوند. بنابراین صرف ساختن یک فایل جدید با شماره بالاتر همیشه همه آدرس‌ها یا DNSهای قبلی را پاک نمی‌کند.
برای دیدن تنظیم نهایی که Netplan از فایل‌ها می‌سازد، در نسخه‌هایی که این فرمان را دارند:
کد / دستورsudo netplan get
خروجی ممکن است جزئیات محرمانه شبکه داشته باشد. نام رابط، dhcp4، addresses، routes و nameservers را با تنظیم مورد انتظار مقایسه کنید. اگر آنچه در خروجی می‌بینید با یک فایل منفرد فرق دارد، فایل‌های دیگر را هم بخوانید. برای مشاهده فایل نمونه:
کد / دستورsudo cat /etc/netplan/50-cloud-init.yaml
اگر نام فایل شما فرق دارد، نام موجود در فهرست را جایگزین کنید. درباره ترتیب و ترکیب فایل‌ها به مستندات رسمی Netplan مراجعه کنید.

۳. بررسی کنید cloud-init یا پلتفرم در تنظیم شبکه نقش دارد

کد / دستورcloud-init status --long
اگر cloud-init نصب است، وضعیت اجرا و معمولاً اطلاعاتی درباره منبع داده را می‌بینید. done به معنی کامل شدن فرایند است، نه اثبات اینکه همان ابزار بعد از ریبوت فایل شما را تغییر داده است. اگر دستور موجود نیست، علت را در ابزار مدیریت شبکه یا پیکربندی پلتفرم سرور دنبال کنید.
برای جست‌وجوی رخدادهای مرتبط با شبکه در گزارش cloud-init:
کد / دستورsudo grep -i -E 'network|netplan|datasource' /var/log/cloud-init.log | tail -n 80
زمان خطوط و نام فایل‌های مطرح‌شده را با زمان تغییر مقایسه کنید. وجود یک خط درباره شبکه لزوماً به معنی بازنویسی فایل نیست. گزارش می‌تواند اطلاعات خصوصی داشته باشد. همچنین در برخی محیط‌ها تغییر شناسه ماشین یا داده‌های پلتفرم باعث اجرای دوباره بخش‌هایی از تنظیم اولیه می‌شود؛ ریبوت ساده در همه پلتفرم‌ها چنین اثری ندارد.
اگر آدرس موردنظر را پلتفرم با DHCP یا تنظیمات خودکار تحویل می‌دهد، نخست از ارائه‌دهنده بپرسید تغییر باید در پنل انجام شود یا داخل سیستم‌عامل. اگر منبع اصلی اطلاعات پنل است، اصلاح آن منبع معمولاً از ویرایش مکرر فایل تولیدشده ماندگارتر است.

۴. قبل از تغییر، نسخه بازگشت آماده کنید

یک ترمینال SSH را باز نگه دارید و کنسول پنل را جداگانه امتحان کنید. اگر نمونه شما فایل 50-cloud-init.yaml دارد، با دستور زیر یک کپی با نام مشخص می‌سازید:
کد / دستورsudo cp -an /etc/netplan/50-cloud-init.yaml /root/50-cloud-init.yaml.before-network-change
اگر نام فایل شما متفاوت است، آن را جایگزین کنید. گزینه -n فایل هم‌نام موجود را بازنویسی نمی‌کند؛ پس اگر قبلاً بکاپی با این نام ساخته‌اید، نام تازه‌ای انتخاب و وجود نسخه جدید را بررسی کنید. از سایر فایل‌های مؤثر Netplan و تنظیمات cloud-init هم با نام‌های مشخص بکاپ بگیرید. این کپی روی همان سرور است؛ برای بازیابی پس از خرابی دیسک، نسخه‌ای خارج از سرور نیز لازم است.

۵. راه‌حل اول: تنظیم را در منبعی که ارائه‌دهنده پشتیبانی می‌کند اصلاح کنید

اگر پنل یا سامانه پیکربندی سرور شما اجازه ثبت IP، دروازه یا DNS را می‌دهد، همان مقادیر اختصاص‌داده‌شده به این سرور را در آنجا اصلاح کنید و مطابق راهنمای ارائه‌دهنده اعمال کنید. هر IP یا Gateway پیشنهادی اینترنتی برای سرور شما معتبر نیست. در یک سرور دارای DHCP نیز ممکن است تنظیم IP ثابت داخل مهمان، با روش واگذاری شبکه پلتفرم ناسازگار شود.
پس از اعمال، ip -br address، ip route show default و در صورت استفاده resolvectl status را تکرار کنید. با یک اتصال جداگانه SSH و یک مقصد واقعی، ارتباط را بررسی کنید. اگر تغییر پس از ریبوت دوباره برگشت، زمان تغییر و گزارش مرحله ۳ را برای شناسایی ابزار بازنویس‌کننده نگه دارید.

۶. راه‌حل دوم: مدیریت دستی شبکه، فقط در صورت پشتیبانی ارائه‌دهنده

اگر پلتفرم صراحتاً اجازه می‌دهد شبکه را خودتان مدیریت کنید، می‌توان تولید تنظیم شبکه توسط cloud-init را غیرفعال کرد و یک پیکربندی معتبر Netplan نگه داشت. این تصمیم را بدون تأیید سازگاری زیرساخت نگیرید: برخی پلتفرم‌ها برای تنظیم آدرس‌ها یا بازیابی ماشین به پیکربندی خودکار وابسته‌اند.
ابتدا ببینید فایلی با نام نمونه زیر وجود ندارد؛ اگر وجود داشت، محتوا و کاربردش را بررسی کنید و آن را کورکورانه جایگزین نکنید:
کد / دستورsudo ls -l /etc/cloud/cloud.cfg.d/99-netaram-network.cfg
در صورت نبود فایل و بعد از تأیید روش دستی، آن را باز کنید:
کد / دستورsudo nano /etc/cloud/cloud.cfg.d/99-netaram-network.cfg
این دو خط را با فاصله‌های نشان‌داده‌شده بنویسید:
کد / دستورnetwork: config: disabled
با Ctrl+O و Enter ذخیره و با Ctrl+X خارج شوید. این گزینه فقط تولید تنظیم شبکه توسط cloud-init را غیرفعال می‌کند؛ فایل Netplan فعلی را پاک نمی‌کند و به‌تنهایی IP یا Gateway جدید نمی‌سازد. پس باید پیش از ریبوت، تنظیم معتبر شبکه در Netplan وجود داشته باشد. تعریف این گزینه در مستندات cloud-init آمده است.

نمونه برای رابطی که واقعاً DHCP دارد

اگر ارائه‌دهنده تأیید کرده این رابط باید از DHCP استفاده کند، یک مثال ساده تک‌رابطی چنین است:
کد / دستورnetwork: version: 2 ethernets: ens160: dhcp4: true
ens160 را با نام واقعی رابط عوض کنید. این قطعه نمونه است، نه نسخه آماده برای جایگزینی تمام فایل‌های شما: اگر سرور چند رابط، آدرس ثابت، VLAN، bridge یا مسیر خاص دارد، آن جزئیات باید حفظ شوند. برای یک آدرس ثابت، مقدار دقیق IP همراه پیشوند، Gateway و DNS را از ارائه‌دهنده بگیرید و مطابق مستندات و شبکه واقعی وارد کنید؛ مقدار فرضی می‌تواند ارتباط را قطع کند.
فایل مؤثر را با ویرایشگر باز کنید، بخش موردنظر را اصلاح کنید و بقیه تنظیمات لازم را حفظ کنید. به‌عنوان نمونه، اگر فایل مؤثر شما همان فایل زیر است:
کد / دستورsudo nano /etc/netplan/50-cloud-init.yaml
فاصله‌گذاری YAML را با Space انجام دهید و از Tab استفاده نکنید. قبل از تست، دوباره sudo netplan get را بخوانید تا ببینید فایل‌های دیگر چه چیزی به تنظیم اضافه کرده‌اند.

۷. تغییر را با مسیر بازگشت آزمایش کنید

در حالی که کنسول مستقل سرور آماده است، این دستور را اجرا کنید:
کد / دستورsudo netplan try
Netplan تنظیم را آزمایشی اعمال می‌کند و معمولاً برای تأیید زمان محدودی می‌دهد. از یک اتصال جداگانه، SSH، IP، مسیر پیش‌فرض و در صورت نیاز DNS را آزمایش کنید. فقط وقتی همه موارد موردنیاز درست هستند در همان پنجره دستور، تغییر را تأیید کنید. اگر تأیید نکنید، ابزار تلاش می‌کند تنظیم قبلی را بازگرداند؛ طبق مستندات، در بعضی پیکربندی‌ها از جمله برخی دستگاه‌های مجازی، بازگشت ممکن است کامل نباشد. به همین دلیل کنسول و بکاپ ضروری‌اند.
اگر ارتباط قطع شد، از کنسول وارد شوید، فایل تغییرکرده را با نسخه پشتیبان خود برگردانید و دوباره تنظیمات را آزمایش کنید. برای برگرداندن تصمیم مربوط به cloud-init، فایل 99-netaram-network.cfg را باز و دو خطی را که خودتان افزوده‌اید غیرفعال کنید؛ سپس روش شبکه پشتیبانی‌شده توسط ارائه‌دهنده را بازگردانید. حذف کلی cloud-init یا اجرای cloud-init clean راه‌حل تشخیص این مشکل نیست و می‌تواند تنظیمات اولیه دیگری را تحت تأثیر قرار دهد.

۸. بعد از ریبوت چه چیزی را بررسی کنیم؟

در زمان مناسب و پس از داشتن بکاپ، سرور را به روش معمول ریبوت کنید. از کنسول و سپس از یک اتصال جدید SSH وارد شوید و همان دستورهای ابتدای مقاله را تکرار کنید. آدرس‌ها، مسیر و DNS را با مقادیر مورد انتظار مقایسه کنید و یک سرویس واقعی را امتحان کنید. اگر تغییر فقط در فایل دیده می‌شود اما روی رابط اعمال نشده است، وضعیت renderer شبکه و گزارش خطا را هم بررسی کنید؛ وجود فایل صحیح به‌تنهایی اثبات اتصال نیست.
برای انتخاب محیط مناسب و اطلاع از روش واگذاری آدرس، صفحه سرور مجازی ایران نت‌آرام را ببینید و درباره پشتیبانی شبکه پلن موردنظر سؤال کنید.
اشتراک‌گذاری:
لینکدینتلگرامایکس
مقاله قبلی
مقاله قبلی وجود ندارد.

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

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