Работа с IP-адресами

 

В состав модуля COREmanager ipdb входит модуль ipbind, предназначенный для управления IP-адресами. В задачи этого модуля входит работа с сетевыми интерфейсами сервера — добавление и удаление реальных IP-адресов, привязанных к сетевому интерфейсу. Данная статья описывает логику работы данного модуля в разных операционных системах.

Добавление IP-адресов

Добавление IP-адресов происходит по-разному в зависимости от семейства, к которому принадлежит добавляемый адрес — IPv4, IPv6. А также в зависимости от того, настроен ли интерфейс на использование IP-адресов данного семейства, то есть имеются ли на сетевом интерфейсе IP-адреса того же семейства, что и добавляемый адрес. При добавлении первого IP-адреса семейства на сетевой интерфейс необходимо также настроить шлюз по умолчанию. Эти параметры предоставляет модуль ipdb.

При добавлении IP-адреса производится проверка, что он действительно закрепился на интерфейсе и имеется возможность начать прослушивание какого-либо сетевого порта на этом адресе.

Используемые обозначения для параметров:

  • iface — имя интерфейса;
  • if_alias — алиас для интерфейса. Для серверов на базе Linux, например eth0:0, eth0:1 и т.д.
  • ip —  IP-адрес;
  • mask — маска подсети (длина префикса для IPv6). Модуль ipbind получает этот параметр от модуля ipdb;
  • gateway — маска подсети (длина префикса для IPv6). Модуль ipbind получает этот параметр от модуля ipdb.

Для добавления первых IP-адресов конкретного семейства используются следующие команды:

СемействоLinuxFreeBSD
IPv4ifconfig [iface] [ip] netmask [mask] route add default gw [gateway]ifconfig [iface] inet [ip] netmask [mask] route add default [gateway]
IPv6ifconfig [iface] add [ip]/[mask] route add --inet6 default gw [gateway]ifconfig [iface] inet6 [ip] prefixlen [mask] route add -inet6 default [gateway]

Для добавления IP-адресов в общем случае используются следующие команды:

СемействоLinuxFreeBSD
IPv4ifconfig [if_alias] [ip] netmask 255.255.255.255ifconfig [iface] alias [ip]/32
IPv6ifconfig [iface] add [ip]/128ifconfig [iface] inet6 alias [ip]/128

После добавления IP-адреса на физический интерфейс необходимо также записать информацию о нем в конфигурационные файлы системы.

При добавлении первого IP-адреса семейства:

СемействоDebian-подобные системыRedHat-подобные системыFreeBSD
Имя файла/etc/network/interfaces/etc/sysconfig/network-scripts/ifcfg-[iface]/etc/rc.conf
IPv4auto [iface] iface [iface] inet static
address [ip] netmask [mask] gateway [gateway]
DEVICE=[iface] IPADDR=[ip] NETMASK=[mask] GATEWAY=[gateway] ONBOOT=yesifconfig_[iface]="inet [ip] netmask [mask]"
defaultrouter="[gateway]"
IPv6auto [iface] iface [iface] inet6 static
address [ip] netmask [mask] gateway [gateway]
DEVICE=[iface] IPV6ADDR=[ip]/[mask] IPV6_DEFAULTGW=[gateway] IPV6INIT=yesifconfig_[iface]_ipv6="inet6 [ip] prefixlen [mask]"
ipv6_defaultrouter="[gateway]"

При добавлении последующих IP-адресов:

СемействоDebian-подобные системыRedHat-подобные системыFreeBSD
Имя файла/etc/network/interfaces
/etc/rc.conf
IPv4auto [if_alias] iface [if_alias] inet static
address [ip] netmask 255.255.255.255
/etc/sysconfig/network-scripts/ifcfg-[if_alias] DEVICE=[if_alias] IPADDR=[ip] NETMASK=255.255.255.255
BOOTPROTO=static
ONBOOT=yes
ifconfig_[iface]_alias[N]="alias [ip] netmask 255.255.255.255"
IPv6внутри секции iface [iface] inet6 static
up /sbin/ifconfig [iface] inet6 add [ip]/[mask]";
/etc/sysconfig/network-scripts/ifcfg-[iface] IPV6ADDR_SECONDARIES="[ip]/[mask]"ifconfig_[iface]_alias[N]="inet6 alias [ip] prefixlen 128"

Дополнительные IP-адреса

Когда сервер использует серый адрес, настроенный на публичный, можно добавить внешний IP-адрес, записав его в файле iplist.conf. Сам файл следует разместить в /usr/local/mgr5/etc/. Адреса, записанные в файле iplist.conf через перенос строки, появятся в списке IP-адресов.

Удаление IP-адресов

При удалении IP-адресов учитывается семейство удаляемого адреса. IP-адрес интерфейса не будет удалён, если этот адрес является основным адресом своего семейства на данном интерфейсе.

Для удаления IP-адреса с интерфейса выполняется системная команда:

СемействоLinuxFreeBSD
IPv4ifconfig [if_alias] downifconfig [iface] delete [ip[
IPv6ifconfig [iface] del [ip]/128ifconfig [iface] inet6 [ip] delete

После выполнения системной команды выполняется удаление информации об адресе из файлов конфигурации сервера.