ipm

ipm (IP Manager) — простая утилита для управления IP-адресами и маршрутами, связанными с сетевыми интерфейсами, в операционной системе GNU/Linux.

English description

For English documentation on this software, please refer to the README file or project's GitHub page.

Принципы работы, особенности и ограничения

  • Утилита применяется для добавления / удаления IP-адресов и маршрутов. Поднимать и конфигурировать интерфейсы она не умеет. Фактически это специализированная надстройка над командами ip addr и ip route (пакет iproute2).
  • Основное назначение ipm — роутеры с большим количеством IP-адресов, которые долго из-за этого стартуют. Утилита является многопоточной и позволяет добавлять сотни IP-адресов за несколько секунд.
  • У программы есть существенное ограничение, связанное с использованием iproute2: при удалении основного адреса удаляются и вторичные (см. подробности в рассылке netdev). Поэтому, если из конфигурационного файла удаляется основной (primary) IP-адрес, то надо выполнять не команду update (тогда удаляются все вторичные адреса), а команду reload (подробнее о разнице этих команд см. ниже).

Общие сведения

  • Язык программирования: Python.
  • Другие используемые технологии: набор утилит iproute2, формат YAML для конфигурационного файла.
  • Лицензия: GNU GPLv2.
  • Автор оригинальной версии: Дмитрий Столяров.
  • Исходный код: GitHub.
  • Анонс проекта в новостях «Фланта»: flant.ru/news/28.

Инструкция по установке и использованию

Установка

Для дистрибутивов на основе Debian (в т.ч. Ubuntu Server) на apt.flant.ru доступен готовый пакет (ipm). Кроме того, файлы с программой можно получить из Git:

git clone git://github.com/flant/ipm.git ipm/

Программа представляет собой единственный исполняемый файл на Python, который можно установить в систему простым копированием в соответствующую директорию (например, /usr/local/sbin).

Обратите внимание, что ipm зависит от наличия в системе:

Настройка

Основной конфигурационный файл ipm хранится в формате YAML. В Git-репозитории проекта хранится пример конфига example.yaml. Его содержимое с пояснениями:

config:
  state_dir: /tmp/ipm_example # Каталог, в котором будут
                              # храниться «файлы состояния»
  # К этим файлам ipm обращается для получения информации
  #  о текущем статусе «обслуживаемых» интерфейсов
  concurrency: 4 # Количество потоков приложения

interfaces:
  eth0: # Название сетевого интерфейса
    addr: # IP-адреса этого интерфейса
      - 192.168.162.4/24
      - 192.168.162.6/24
      - 192.168.162.7/24
      - 192.168.162.9/24
    route: # Маршруты, связанные с интерфейсом (подсеть и шлюз)
      - 192.168.163.0/24 via 192.168.162.5

Конфигурационный файл может храниться в /etc/ipm или любом другом месте (тогда нужно явно указать полный путь при запуске утилиты — подробнее см. ниже).

Использование

Параметры запуска ipm:

Usage: ipm [-c CONFIG] ACTION [IF | --all]

ipm is a simple tool for managing network interfaces
in GNU/Linux.

Perform an action for one interface:
 ipm [-c CONFIG] ACTION IF
 ipm [-c CONFIG] IF ACTION
  
Perform an action for all interfaces:
 ipm [-c CONFIG] ACTION --all

Show status for one or all interfaces:
 ipm [-c CONFIG] IF
 ipm [-c CONFIG] --all

IF: NIC interface name (eth0, valn5, ...)

ACTIONs: up, down, reload, update, status, zap

CONFIG:
 full path to configuration file OR
 file in /etc/ipm (with or without extension)

Описание команд:

  • up — активировать интерфейс(ы);
  • down — деактивировать интерфейс(ы);
  • reload — перечитать конфигурацию интерфейса(ов) и применить её (интерфейс будет деактивирован и активирован с новыми настройками);
  • update — сделать «умное» обновление конфигурации интерфейса(ов), применив все изменения без перерыва в их работе;
  • status — получить информацию о текущем состоянии интерфейса(ов);
  • zap — удалить файл(ы) состояния ipm (может применяться при некорректном завершении работы системы).

Если в качестве конфигурационного файла указано название без пути, то файл по умолчанию ищется в каталоге /etc/ipm (с расширением .yaml и без него). Можно указать и полный путь до файла.