Скрипт смены IPv4-адреса на сервере с ispmanager 6
Данный скрипт позволяет перевести панель ispmanager 6 и связанные с ней службы (веб-серверы, почтовые и FTP-серверы, серверы баз данных) на новый IP-адрес.
Важно:
- Скрипт работает только с адресами протокола IPv4!
- Новый IP-адрес уже должен быть указан на сетевом интерфейсе.
Установка скрипта
Подключитесь к серверу по SSH под пользователем root, скачайте архив с компонентами скрипта и разместите его в каталоге /root.
Распакуйте архив и перейдите в появившуюся директорию:
tar -xvzf ip_sync.tar.gz ip_sync/
cd ip_sync
Использование скрипта
Для первого запуска скрипта укажите параметр --dry-run - так скрипт покажет, что было бы сделано в реальной ситуации, но не внесет никаких изменений:
python3 main.py --dry-run
Сначала скрипт предложит выбрать язык меню (по умолчанию русский):
Language / Язык:
1) Russian
2) English
Select / Выбор [1]:
Затем будет запрошен старый/текущий IP-адрес:
[INFO] Будут затронуты только файлы служб, нужные для их запуска на сервере после смены IP-адреса. Файлы в домашних директориях сайтов и DNS-записи доменов этим скриптом не изменяются. Исключение — пункт 8 меню: панель сама обновит A-записи и SPF.
Старый IP: 10.0.0.1
После будет выведен список доступных на интерфейсе IP-адресов, исключая старый/текущий адрес, - выберите и введите номер нужного IP или сам адрес:
Новый IP — выберите из списка IP-адресов сервера или введите вручную:
1) 10.0.0.2
2) 10.0.0.9
Номер из списка или IP: 10.0.0.2
В конце, скрипт выведет собственное меню, где можно выбрать действия с указанными IP-адресами.
Можно использовать и другие параметры, для запуска скрипта по уже готовому сценарию и готовыми данными, например:
python3 main.py --old-ip 10.0.0.1 --new-ip 10.0.0.2
python3 main.py --lang ru
python3 main.py --skip-ip-check
Чтобы вызвать подсказку по скрипту, укажите параметр --help:
python3 main.py --help
Также можно запускать каждый из этапов отдельно, обращаясь к скрипту этапа напрямую, например:
python3 stagies/ip_sync_sites.py --help
Меню скрипта
Подробное описание структуры, работы и особенностей скрипта находится в файле README.md.
| Пункт меню | Наименование пункта | Действие |
|---|---|---|
| 1 | Выполнить всё без подтверждения | Обновить адрес везде (автоматически) |
| 2 | Выполнить всё по очереди (с подтверждением на каждом шаге) | Обновить адрес везде (с подтверждением на каждом шаге) |
| 3 | Панель (ihttpd.conf + ispmgr.conf + /etc/hosts) | Обновить адрес в панели (ihttpd, ispmgr.conf, служебные файлы nginx/apache) и в hosts |
| 4 | Сайты (nginx/apache) | Обновить адрес для сайтов (секции listen и VirtualHost в конфигурациях Nginx и Apache) |
| 5 | Почта (Exim/Dovecot) | Обновить адрес в конфигурациях почтовых серверов Dovecot и Exim |
| 6 | Базы данных (MySQL/MariaDB/PostgreSQL) | Обновить адрес для серверов баз данных (MySQL, MariaDB, PostgreSQL) |
| 7 | FTP (ProFTPd/PureFTPd) | Обновить адрес для FTP-серверов (ProFTPd, PureFTPd) |
| 8 | Применение ip-адреса в интерфейсе панели | Обновить адрес в интерфейсе панели (IP у сайтов, почтовых и временных доменов, A-записи и SPF в зонах панели) |
| 9 | Сменить IP / режим (dry-run/реальный) | Вернуться к выбору режима и IP-адресов |
| 10 | Проверка остатков старого IP (чтение; перезапуск служб по подтверждению) | Проверить наличие старого IP-адреса в конфигурационных файлах и службах |
| 11 | Откат последней команды (last command rollback): конфиги панели и /etc/hosts | Вернуть файлы, которые были изменены пунктом 3 |
| 0 | Выход | Выход из скрипта |
Структура скрипта
Скрипт состоит из нескольких файлов и каталогов:
- Файл
main.py- содержит меню и общая логика скрипта; - Каталог
stagies- содержит файлов скриптов с разными этапами (для работы с файлами панели, сайтов, почты, серверов баз данных, FTP-серверов); - Каталог
backup- содержит резервные копии, создаваемые скриптом (появляется при первом запуске); - Каталог
state- файлы прогресса для работы по пункту 8; - Каталог
logs- журналы запусков скрипта.
Дополнительная информация
Важно знать особенности работы скрипта:
- Домашние директории сайтов и их содержимое не изменяются скриптом;
- Если сайт слушает сразу два IP-адреса, секция
listenсо старым адресом удаляется, а пункт 8 приводит настройки панели в соответствие; - При нахождении старого IP-адреса в директивах
allowиdeny, комментариях и похожих местах, скрипт не заменит их, но выведет информацию о них при проверке остатков в пункте 10; - Старый IP-адрес из списка IP-адресов в панели должен быть удален вручную;
- Если используется NAT:
- Скрипт сопоставляет внешний IP-адрес с внутренним, указанным в настройках NAT в панели: если на один внешний адрес приходится несколько внутренних, IP-адреса сайтов не будут изменены, а скрипт сообщит об ошибке (
[FAIL]); - Если в директивах
MasqueradeAddressилиForcePassiveIPуказан внешний адрес, скрипт не изменит его - подобные параметры необходимо изменить вручную.
- Скрипт сопоставляет внешний IP-адрес с внутренним, указанным в настройках NAT в панели: если на один внешний адрес приходится несколько внутренних, IP-адреса сайтов не будут изменены, а скрипт сообщит об ошибке (