ispmanager 6: Функции

/
/
Скрипт смены IPv4-адреса на сервере с ispmanager 6

Скрипт смены 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 указан внешний адрес, скрипт не изменит его - подобные параметры необходимо изменить вручную.