تغییر primary IP سرور سی پنل؛ راهنمای کامل و گامبهگام
عوض کردن IP اصلی یک سرور cPanel از آن کارهایی است که یا کامل انجام میشود یا اصلاً نباید شروع شود. اگر یکی از مراحل جا بیفتد، معمولاً سرور روشن میماند ولی WHM با خطای لایسنس بالا میآید، سایتها روی IP قدیمی گیر میکنند یا ایمیلهای خروجی به اسپم میروند.
دلیلش این است که primary IP فقط یک عدد در تنظیمات کارت شبکه نیست؛ سیستمعامل، چند فایل داخلی سی پنل، لایسنس، رکوردهای DNS و نیمسرورها همگی به همان عدد گره خوردهاند. این راهنما کل مسیر را پوشش میدهد: هم روش کلاسیک CentOS/RHEL که در بیشتر آموزشهای فارسی میبینید، هم معادل امروزی آن روی AlmaLinux، Rocky، CloudLinux و Ubuntu.
پیشنیازها؛ قبل از اینکه دست به چیزی بزنید
- دسترسی root و یک راه ورود خارج از شبکه: KVM over IP، IPMI، کنسول VNC پنل سرور یا حالت Rescue. لحظهای که شبکه را ریاستارت میکنید ارتباط SSH شما قطع میشود؛ اگر IP یا gateway را اشتباه زده باشید، تنها راه بازگشت همان کنسول است.
- مشخصات کامل و کتبی IP جدید از سرویسدهنده: خود IP، subnet mask یا prefix و gateway. حدس زدن gateway شایعترین دلیل از دست رفتن سرور در این عملیات است.
- اطمینان از اینکه IP جدید واقعاً به همین سرور route شده، نه اینکه فقط در پنل به شما تخصیص داده شده باشد.
- بکاپ تازه؛ دستکم یک کپی از
/etc/wwwacct.conf،/etc/ips،/etc/hostsو کل پیکربندی شبکه. - کم کردن TTL رکوردهای DNS (مثلاً به ۳۰۰ ثانیه) دستکم ۲۴ تا ۴۸ ساعت پیش از تغییر.
- دسترسی به پنل لایسنس، برای انتقال لایسنس cPanel و هر لایسنس IP-محور دیگر.
- یک بازه زمانی کمترافیک؛ این کار روی تمام سایتهای سرور اثر میگذارد.
یک نکته که ریسک را بهشدت پایین میآورد: اگر امکانش هست، اول IP جدید را بهعنوان IP اضافه روی سرور بالا بیاورید، با SSH روی همان IP وارد شوید و مطمئن شوید کار میکند، بعد آن را به primary تبدیل کنید.
اگر کنسول ندارید، دستکم یک تور نجات زمانبندیشده بگذارید. پیش از هر تغییری از فایلهای پیکربندی شبکه کپی بردارید و با at یا cron کاری تعریف کنید که مثلاً ۱۰ دقیقه بعد نسخهٔ سالم را برگرداند و سرور را ریاستارت کند. اگر ارتباط برقرار ماند، خودتان آن job را لغو میکنید؛ اگر نماند، سرور خودش برمیگردد.
مرحله ۱: تغییر primary IP در WHM
وارد WHM شوید و به قسمت Basic cPanel & WHM Setup بروید (نام امروزی همین صفحه در WHM «Basic WebHost Manager Setup» است) و کادر primary IP را با IP جدیدی که در نظر دارید بهروزرسانی نمایید.
در نسخههای امروزی WHM این کادر زیر تنظیمات پایه همین صفحه است و با توضیحی شبیه «The IPv4 address (only one address) to use to set up shared IPv4 virtual hosts» معرفی میشود. هر مقداری که اینجا ثبت کنید، با کلید ADDR در این فایل ذخیره میشود:
/etc/wwwacct.conf
این همان IP اشتراکی است که اکانتهای جدید روی آن ساخته میشوند. توجه کنید که تغییر این مقدار بهتنهایی IP اکانتهای موجود را عوض نمیکند؛ آن کار جداگانه است و در مرحله ۶ میآید. اگر بعداً دیدید اکانت تازه باز هم روی IP قدیمی ساخته شد، اولین جایی که باید نگاه کنید همین فایل است.
مرحله ۲: تغییر IP در سطح سیستمعامل
حالا وارد SSH شوید. این تنها بخشی است که بسته به سیستمعامل تفاوت دارد. روش کلاسیک CentOS/RHEL هنوز روی نسخههای قدیمی درست است، اما معادل امروزیاش را هم در ادامه آوردهایم.
روش قدیمی: CentOS/RHEL نسخه ۶ و ۷
فایل کارت شبکه را با یک ویرایشگر باز کنید، سپس IPADDR و GATEWAY را به مشخصات IP جدید تغییر دهید:
/etc/sysconfig/network-scripts/ifcfg-eth0
نام کارت شبکه همیشه eth0 نیست؛ از RHEL 7 به بعد نامگذاری predictable است و ممکن است ens192 یا enp3s0 ببینید. نام واقعی را اینطور پیدا کنید:
ip -o link show
سپس فایل زیر را باز کرده و gateway را بهروزرسانی نمایید:
/etc/sysconfig/network
مقدار GATEWAY در این فایل، gateway پیشفرض سراسری است و میراث نسخههای قدیمی بهشمار میرود؛ اگر همان کلید داخل فایل ifcfg خودِ اینترفیس هم تعریف شده باشد، مقدار اینترفیس اولویت دارد. برای اینکه بعداً سردرگم نشوید، اگر هر دو را نوشتهاید هر دو باید یک مقدار داشته باشند.
توجه: اسکریپتهای قدیمی شبکه (بستهٔ network-scripts) در RHEL 8 منسوخ اعلام شده و دیگر بهصورت پیشفرض نصب نمیشوند، و در RHEL 9 این بسته کاملاً حذف شده است. خودِ فرمت فایل ifcfg هنوز توسط NetworkManager خوانده میشود، ولی محل پیشفرض ذخیرهٔ پروفایلهای جدید نیست. اگر سرور شما AlmaLinux، Rocky یا CloudLinux نسخه ۸ به بالاست، بخش بعدی را دنبال کنید.
روش امروزی: AlmaLinux / Rocky / CloudLinux ۸ و ۹ با nmcli
در این نسخهها مدیریت شبکه با NetworkManager است. اول نام کانکشن را پیدا کنید:
nmcli -t -f NAME,DEVICE connection show
دو هشدار مهم پیش از اجرای دستور بعدی:
- کلید
ipv4.addressesکل فهرست آدرسهای آن کانکشن را جایگزین میکند، نه اینکه به آن اضافه کند. اگر روی همان پروفایل IPهای دیگری هم دارید، با این دستور همهشان حذف میشوند. برای افزودن بدون پاک کردن بقیه از+ipv4.addressesاستفاده کنید. - با
ipv4.method manualدیگر خبری از DHCP نیست؛ اگرipv4.dnsرا هم ست نکنید ممکن است سرور بدون resolver بماند و ظاهراً «شبکه دارد ولی هیچ چیز کار نمیکند».
اعداد زیر فقط نمونهاند و باید با مشخصات واقعی سرویسدهنده جایگزین شوند:
nmcli connection modify "System eth0" ipv4.method manual ipv4.addresses 203.0.113.10/24 ipv4.gateway 203.0.113.1 ipv4.dns "203.0.113.53 198.51.100.53" # از لحظه اجرای خط زیر، نشست SSH فعلی شما قطع میشود nmcli connection up "System eth0"
در این نسخهها پیکربندی واقعی به شکل فایلهای .nmconnection در مسیر /etc/NetworkManager/system-connections/ نگهداری میشود. اگر ترجیح میدهید مستقیم فایل را ویرایش کنید، بعد از ویرایش حتماً nmcli connection reload بزنید.
Ubuntu با netplan
روی اوبونتو خبری از ifcfg نیست؛ پیکربندی در فایلهای YAML داخل /etc/netplan/ است (معمولاً چیزی شبیه 50-cloud-init.yaml). بعد از ویرایش، بهجای netplan apply از این دستور استفاده کنید:
netplan try
netplan try پیکربندی جدید را اعمال میکند و منتظر تأیید شما میماند؛ اگر ظرف ۱۲۰ ثانیه (مقدار پیشفرض، با --timeout قابل تغییر) کلید Enter را نزنید، خودکار به پیکربندی قبلی برمیگردد. این یک تور نجات واقعی در برابر IP یا gateway اشتباه است. دقت کنید که این دستور به یک ترمینال تعاملی نیاز دارد و داخل اسکریپت کار نمیکند.
اگر Enter را زدید، تنظیم جدید همانجا دائمی میشود و نیازی به دستور دیگری نیست. netplan apply فقط برای وقتی است که از ابتدا تصمیم گرفتهاید بدون تور نجات و مستقیم اعمال کنید:
netplan apply
ریاستارت سرویس شبکه
در آموزشهای قدیمی این دستور آمده است:
service network restart
این دستور روی CentOS 6 درست بود و روی CentOS 7 هم به systemd هدایت میشد، ولی معادل امروزیاش بسته به سیستمعامل اینهاست:
# CentOS / RHEL 7 systemctl restart network # AlmaLinux / Rocky / CloudLinux 8 - 9 nmcli connection up "System eth0" # or, if needed systemctl restart NetworkManager # Ubuntu netplan try
روی RHEL 8 و مشتقاتش network.service بهصورت پیشفرض اصلاً نصب نیست (هرچند بستهٔ منسوخ network-scripts هنوز قابل نصب است) و روی RHEL 9 کاملاً حذف شده. بنابراین اگر service network restart با خطای «Unit network.service not found» برگشت، یعنی روی سیستمعامل جدید هستید و باید از nmcli استفاده کنید.
به محض اجرای هرکدام از این دستورها ارتباط شما با سرور قطع میشود و لازم است با IP جدید به SSH لاگین شوید.
مرحله ۳: فایلهای داخلی سی پنل
فایل ips
فایل /etc/ips را باز کرده و IP جدید را اگر در این فایل موجود است، پاک نمایید. دلیلش این است که این فایل فهرست IPهای اضافه سرور است، نه IP اصلی؛ اگر primary جدید در آن بماند، همان IP همزمان بهعنوان آدرس اصلی و بهعنوان alias بالا میآید و تداخل درست میکند. در مقابل، اگر میخواهید IP قدیمی برای دوره گذار روی سرور بماند (که توصیه میشود)، آن را به همین فایل اضافه کنید. قالب هر خط IP:NETMASK:BROADCAST است.
/etc/ips
فایل mainip
حال نوبت mainip میباشد؛ آیپی قبل را به IP جدید تغییر دهید:
/var/cpanel/mainip
سی پنل اسکریپت خودش را هم برای بازسازی این مقدار از روی وضعیت واقعی شبکه دارد:
/scripts/mainipcheck
در نسخههای امروزی مسیر واقعی این اسکریپتها /usr/local/cpanel/scripts/ است و /scripts فقط یک لینک به آن؛ هر دو کار میکنند. (این نکته برای همهٔ اسکریپتهای /scripts/… در این مقاله صادق است، ولی نه برای ابزارهای داخل /usr/local/cpanel/bin/ که دایرکتوری جداگانهای است.)
فایل hosts
/etc/hosts
این مرحله هم همینطور: IP جدید میبایست جایگزین IP قدیم شود. hostname کامل سرور (FQDN) باید در این فایل به IP جدید اشاره کند، وگرنه بعضی سرویسها هنگام بالا آمدن سراغ آدرس قدیمی میروند. برای بررسی:
hostname -f getent hosts $(hostname -f)
سرویس ipaliases و IP pool
سرویس ipaliases را نیز ریاستارت نمایید تا IP اضافه و جدید هم bring up شود. یک تصحیح لازم اینجا: ipaliases فایروال نیست؛ سرویسی از خود سی پنل است که IPهای فهرستشده در /etc/ips را روی کارت شبکه بالا میآورد.
# روش قدیمی service ipaliases restart # روش درست روی سرور امروزی: از wrapper خود سی پنل استفاده کنید /usr/local/cpanel/scripts/restartsrv_ipaliases
ترجیح با restartsrv_ipaliases است، چون علاوه بر ریاستارت سرویس، وضعیت را به سرویسمانیتور سی پنل (chkservd) هم اطلاع میدهد و جلوی هشدار یا ریاستارت دوبارهٔ خودکار را میگیرد.
سپس IP pool سی پنل را بازسازی کنید تا فهرست IPهای قابل تخصیص با وضعیت واقعی سرور هماهنگ شود؛ از مسیر WHM » IP Functions » Rebuild the IP Address Pool یا با دستور:
/scripts/rebuildippool
مرحله ۴: بهروزرسانی لایسنس
حال میتوانید لایسنس cPanel را به IP جدید بهروزرسانی نمایید. لایسنس cPanel به IP اصلی سرور گره خورده است و تا وقتی روی IP جدید صادر نشود، WHM و cPanel با خطای لایسنس بالا میآیند. اول از پنل صادرکنندهٔ لایسنس یا از سرویسدهندهای که لایسنس را از او گرفتهاید انتقال را انجام دهید، بعد روی سرور اجرا کنید:
/usr/local/cpanel/cpkeyclt
اگر روی سرور لایسنسهای دیگری هم دارید — مثلاً CloudLinux، LiteSpeed، Softaculous، Imunify، JetBackup یا WHMCS — هرکدام لایسنس مستقل و اغلب IP-محور دارند و باید جداگانه منتقل شوند. این همان موردی است که بیشتر از همه فراموش میشود.
مرحله ۵: DNS، نیمسرورها و rDNS
چنانچه برای dnsها نیز از IP قدیم استفاده مینمودید، لازم است IP نیمسرورها نیز بهروزرسانی شوند. این کار سه جای مجزا دارد و هر سه لازم است:
- رکورد A نیمسرورها (ns1 و ns2) در زونهای روی خود سرور.
- رکوردهای glue در پنل ثبتکنندهٔ دامنهای که نیمسرورها زیر آن ثبت شدهاند. اگر glue را عوض نکنید، دنیای بیرون همچنان IP قدیمی را میبیند، هرچند زون شما درست باشد.
- رکورد A مربوط به hostname خود سرور.
rDNS یا همان رکورد PTR را هم فراموش نکنید. PTR فقط از سمت صاحب IP یعنی سرویسدهنده قابل تنظیم است. اگر سرور ایمیل ارسال میکند، تا وقتی PTR جدید ست نشده و با hostname همخوان نباشد، ایمیلهای خروجی به اسپم میروند یا اصلاً رد میشوند. رکوردهای SPF که IP قدیمی را با ip4: در خود دارند هم باید اصلاح شوند. اگر ایمیل خروجی را به IP خاصی بسته بودید، این دو فایل را هم بررسی کنید:
/etc/mailips /etc/mailhelo
مرحله ۶: سایتهایی که هنوز روی IP قدیمی هستند
تغییر primary IP بهتنهایی IP اکانتهای موجود را عوض نمیکند. اکانتهایی که IP اختصاصی داشتند سر جای خود میمانند و اکانتهایی که روی IP اشتراکی قدیمی بودند هم باید منتقل شوند.
برای انتقال گروهی، سی پنل ابزار اختصاصی دارد: WHM » IP Functions » IP Migration Wizard. این ابزار نگاشت IP قدیمی به جدید را روی اکانتها و زونهای DNS اعمال میکند. دقت کنید که خودش IP جدید را به سرور اضافه نمیکند؛ IP باید از قبل روی سرور بالا آمده باشد.
برای یک سایت مشخص، سادهترین راه ابزار WHM » IP Functions » Change a Site’s IP Address است؛ چون همزمان vhost و رکورد DNS دامنه را بهروز میکند. معادل خط فرمانش این است (توجه کنید مسیر این ابزار /usr/local/cpanel/bin/ است نه /scripts/، و خود IP آرگومان بدون سوییچ است):
/usr/local/cpanel/bin/setsiteip -u username 203.0.113.10
اگر بعد از این کار هنوز IP قدیمی در پیکربندی Apache دیده میشود:
/scripts/updateuserdomains /scripts/rebuildhttpdconf /scripts/restartsrv_httpd
چطور مطمئن شویم درست انجام شده است
در آموزشهای قدیمی گفته میشود دستور ifconfig را اجرا نمایید تا مطمئن شوید IPهای بهکاررفته صحیح هستند. این دستور از بستهٔ net-tools است و روی توزیعهای امروزی معمولاً اصلاً نصب نیست؛ معادل درستش این است:
ip -4 addr show ip route show default
بعد سراغ لایه سی پنل بروید:
grep '^ADDR ' /etc/wwwacct.conf cat /var/cpanel/mainip curl -4 https://api.ipify.org
در دستور اول عمداً ^ADDR با فاصله آمده تا کلید ADDR6 (که مخصوص IPv6 است) با آن قاطی نشود. دستور آخر نشان میدهد ترافیک خروجی سرور واقعاً از کدام IP بیرون میرود؛ همان چیزی که برای ایمیل و سرویسهای بیرونی اهمیت دارد. در نهایت از بیرون سرور بررسی کنید:
dig +short yourdomain.tld dig +short -x 203.0.113.10
و یک بار SSH و یک بار ورود به WHM روی IP جدید را تست کنید. تا وقتی همه اینها درست نشده، IP قدیمی را از سرور برندارید.
مشکلات رایج و علتشان
- سرور بعد از ریاستارت شبکه بالا نمیآید: تقریباً همیشه gateway اشتباه یا subnet mask نادرست است. از کنسول وارد شوید، مقادیر را با آنچه سرویسدهنده داده مقایسه کنید.
- WHM خطای لایسنس میدهد: انتقال لایسنس به IP جدید انجام نشده یا
cpkeycltاجرا نشده است. - سایتها باز میشوند ولی ایمیل نمیرود: PTR جدید ست نشده، SPF هنوز IP قدیمی را دارد، یا
/etc/mailipsبه IP قدیمی اشاره میکند. - سرور پشت NAT است: اگر IP عمومی روی خود کارت شبکه نیست و NAT میشود، سی پنل نگاشت را در
/var/cpanel/cpnatنگه میدارد و بعد از تغییر IP باید با/scripts/build_cpnatبازسازی شود. - پشت فایروال جا میمانید: اگر در CSF یا هر فایروال دیگری IP قدیمی سرور یا IP مدیریتی خودتان را allow کرده بودید، فهرستها را پیش از تغییر بهروز کنید.
- سرویسهای بیرونی شما را نمیشناسند: دیتابیس ریموت با
GRANT ... 'user'@'oldip'، فهرست Remote MySQL، درگاه پرداخت، مقصد بکاپ و هر سرویسی که IP سرور را allow کرده بود باید جداگانه بهروز شود. - AutoSSL خطا میدهد: طبیعی است؛ تا وقتی DNS دامنه به IP جدید نرسیده، اعتبارسنجی HTTP شکست میخورد. بعد از پروپاگیت شدن، دوباره اجرا کنید.
- IPv6: پیکربندی IPv6 کاملاً مستقل است و با تغییر IPv4 عوض نمیشود؛ اگر روی سرور فعال است، جداگانه بررسیاش کنید.
چه زمانی نباید primary IP را عوض کنید
- وقتی فقط به یک IP بیشتر نیاز دارید. در این حالت از WHM » IP Functions » Add a New IP Address استفاده کنید؛ تغییر primary کار درستی نیست.
- وقتی هیچ دسترسی کنسول یا Rescue ندارید. بدون آن، یک اشتباه تایپی در gateway یعنی سرور از دسترس خارج شده.
- وقتی هدف فرار از یک IP بلکلیستشده است، اما rDNS، SPF و اعتبار IP جدید را بررسی نکردهاید؛ ممکن است IP جدید هم سابقه بدی داشته باشد.
- وقتی TTL دامنهها هنوز بالاست. اول TTL را کم کنید، بعد اقدام کنید.
- وسط ساعات پرترافیک یا بدون بکاپ تازه.
جمعبندی
تغییر primary IP یک کار تکمرحلهای نیست، یک زنجیره است: WHM، شبکه سیستمعامل، فایلهای /etc/ips و /var/cpanel/mainip و /etc/hosts، سرویس ipaliases، لایسنس، DNS و glue، rDNS و در آخر IP خود سایتها. اگر بعد از هر مرحله بررسی کنید و IP قدیمی را تا اطمینان کامل روی سرور نگه دارید، این کار بدون قطعی محسوس انجام میشود.