Диапазон адресов IP на сетевом интерфейсе в Debian

В ОС Linux CentOS есть встроенный функционал, позволяющий легко назначить сетевому интерфейсу диапазон подряд идущих адресов IP: http://wiki.centos.org/VladislavRastrusny/OneNICManyIPs А вот в Debian, к сожалению, подобного нет. Пришлось устранить этот недостаток самостоятельно.
Пускай для наглядности будет необходимо прописать в системе адреса из сети 46.185.232.0/24 с 46.185.232.3 по 46.185.232.254 включительно. Для этих целей создаем скрипт следующего содержания:

#!/bin/sh

ALIASIFACE="eth0"
ALIASNET="46.185.232"
ALIASMASK="24"
ALIASTART="3"
ALIASEND="254"
ALIASMODE="add"

if [ "${IFACE}" = "${ALIASIFACE}" ]; then
if [ "${MODE}" = "stop" ]; then
ALIASMODE="del"
fi

for IP in $(/usr/bin/seq ${ALIASTART} 1 ${ALIASEND}); do
/sbin/ip addr ${ALIASMODE} ${ALIASNET}.${IP}/${ALIASMASK} dev ${ALIASIFACE}
done
fi

exit 0

Сохраняем его в двух файлах: "/etc/network/if-up.d/eth0-alias" и "/etc/network/if-down.d/eth0-alias". Первый автоматически назначает дополнительные адреса, при конфигурировании интерфейса eth0, а у второго обратная задача. Протестировать работоспособность скрипта, не прибегая к утилитам ifup/ifdown можно с помощью следующих команд:

export IFACE=eth0; export MODE=start; /etc/network/if-up.d/eth0-alias
export IFACE=eth0; export MODE=stop; /etc/network/if-down.d/eth0-alias

А убедиться в результате в выводе "ip addr show".
К сожалению, у команды "ip addr" вскрылся один существенный недостаток. Она прописывает дополнительные адреса IP, как вторичные, на основном сетевом интерфейсе, без создания алиасов. Такой подход нарушает функционирование механизма виртуальных хостов в серверах HTTP Apache и nginx. Поэтому скрипт был переписан с использованием команды "ifconfig":

#!/bin/sh

ALIASIFACE="eth0"
ALIASNET="46.185.232"
ALIASMASK="255.255.255.0"
ALIASTART="3"
ALIASEND="254"
ALIASMODE="up"

if [ "${IFACE}" = "${ALIASIFACE}" ]; then
if [ "${MODE}" = "stop" ]; then
ALIASMODE="down"
fi

for IP in $(/usr/bin/seq ${ALIASTART} 1 ${ALIASEND}); do
/sbin/ifconfig ${ALIASIFACE}:${IP} ${ALIASNET}.${IP} netmask ${ALIASMASK} ${ALIASMODE}
done
fi

exit 0

Поделиться ссылкой:

Оставить комментарий


Примечание - Вы можете использовать эти HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>