Полное руководство по выделенным серверам

Настройка сети в CentOS

Содержание

Основной IP-адрес

IPv4

Выделенные root-серверы

На выделенном root-сервере основной IP-адрес обычно выделяется из подсети /26 или /27. Чтобы исключить случайный «захват» чужого IP-адреса, трафик ограничен так, что проходить он может только через шлюз.

Поэтому стандартная установка использует схему «точка-точка», которая направляет все пакеты на шлюз, — именно это позволяет серверу обмениваться данными с другими машинами того же сетевого сегмента.

# /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=<MAC Address>
ONBOOT=yes
BOOTPROTO=static
IPADDR=<IP Address>
NETMASK=255.255.255.255
SCOPE="peer <Gateway IP>"
# potential additional IPv6 entries

Добавьте маршрут по умолчанию:

##/ etc/sysconfig/network-scripts/route-eth0
ADDRESS0=0.0.0.0
NETMASK0=0.0.0.0
GATEWAY0=<Gateway IP>

Частые проблемы

Если после применения указанных выше настроек сервер остаётся недоступным, проверьте файл /etc/sysconfig/network и убедитесь, что переменная GATEWAYDEV не задана. Оставшееся значение здесь — одна из типичных причин «выпадения» сервера из сети, и обычно её выдаёт сообщение RTNETLINK answers: file exists, появляющееся при перезагрузке сетевой конфигурации.

IPv6

Выделенные root-серверы

Каждому серверу выделяется собственная подсеть IPv6 /64. В отличие от IPv4, схема «точка-точка» здесь не требуется.

Пример:

Address block: 2a01:4f8:61:20e1::1 to 2a01:4f8:61:20e1:ffff:ffff:ffff:ffff
Of which we use the first IP: 2a01:4f8:61:20e1::2
Gateway: fe80::1

Чтобы включить IPv6, допишите эти строки в /etc/sysconfig/network-scripts/ifcfg-eth0:

IPV6INIT=yes
IPV6ADDR=<IPv6 Address>/<Prefix>
IPV6_DEFAULTGW=fe80::1
IPV6_DEFAULTDEV=eth0

Опционально: если нужно привязать к интерфейсу дополнительные адреса IPv6, добавьте в /etc/sysconfig/network-scripts/ifcfg-eth0 следующую строку:

IPV6ADDR_SECONDARIES=<IPv6 Address>/<Prefix>

Количество перечисленных здесь адресов IPv6 не ограничено — просто не забудьте разделять их пробелом.

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

Добавление отдельных адресов IPv4

Поднять IP-адрес на временной основе можно двумя быстрыми способами:

ifconfig eth0:1 192.0.2.10 netmask 255.255.255.255

или

ip addr add 192.0.2.10/32 dev eth0

CentOS

По умолчанию сделать конфигурацию постоянной можно только через алиас-интерфейсы (eth0:1, eth0:2 и т. д.). Для каждого IP-адреса создаётся свой файл:

/etc/sysconfig/network-scripts/ifcfg-eth0:1
/etc/sysconfig/network-scripts/ifcfg-eth0:2

Заполните каждый файл приведёнными ниже данными:

DEVICE=eth0:1
BOOTPROTO=none
ONBOOT=yes
IPADDR=<IP Address>
NETMASK=255.255.255.255

По завершении перезапустите сетевую службу или перезагрузите машину, чтобы изменения вступили в силу.

Обратите внимание: для передачи этих IP-адресов виртуальным машинам требуется другая конфигурация.

Fedora

Для постоянной настройки перечислите IP-адреса в соответствующем файле конфигурации:

# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
...
IPADDR=192.0.2.1
NETMASK=255.255.255.240
IPADDR0=192.0.2.10 # Additional IP
PREFIX0=28
IPADDR1=192.0.2.11
PREFIX1=28
IPADDR2=...

Добавление дополнительных подсетей IPv4

Подсеть маршрутизируется на основной IP сервера. Как правило, первый адрес (адрес сети) и последний (широковещательный адрес) использовать нельзя, поэтому в подсети /29 остаётся шесть пригодных адресов.

Вот как разбивается подсеть /29 из 8 адресов:

aaa.aaa.aaa.aaa (Network IP)
bbb.bbb.bbb.bbb
ccc.ccc.ccc.ccc
ddd.ddd.ddd.ddd
eee.eee.eee.eee
fff.fff.fff.fff
ggg.ggg.ggg.ggg
hhh.hhh.hhh.hhh (Broadcast IP)

Адреса с b по g можно настроить как отдельные IP. Либо создайте один файл:

/etc/sysconfig/network-scripts/ifcfg-eth0-range0

IPADDR_START=<Your Network Address + 1>
IPADDR_END=<Your Network Address + 6>
BROADCAST=<Your Network Address + 7>
CLONENUM_START=0
NETMASK=255.255.255.248

Затем перезапустите сетевую службу командой service network restart.

Добавление дополнительной подсети IPv4 для виртуализации

Чтобы использовать эти IP-адреса внутри виртуальных машин, нужна другая конфигурация. Подходов много; один из самых простых — создать мост (bridge), который использует один из IP подсети в качестве шлюза по умолчанию для всех машин, подключённых к подсети.

Сначала в качестве предварительного шага установите bridge-utils:

yum install bridge-utils
/etc/sysconfig/network-scripts/ifcfg-br0

DEVICE=br0
ONBOOT=yes
TYPE=Bridge
BOOTPROTO=none
IPADDR=bbb.bbb.bbb.bbb
NETMASK=255.255.255.248 # adjust this accordingly. This is for a /29 subnet
STP=off
DELAY=0

Дополнительные IP-адреса (виртуализация)

При виртуализации дополнительные IP-адреса находятся на гостевой системе. Чтобы они были доступны из интернета, хост нужно настроить на пересылку трафика. Для одиночных дополнительных IP это можно сделать двумя способами: через маршрутизируемую (routed) или мостовую (bridged) схему.

Маршрутизируемая (brouter)

В маршрутизируемой схеме трафик маршрутизируется. Рядом с eth0 создаётся мост, конфигурация которого почти идентична eth0, но без шлюза.

Хост:

# /etc/sysconfig/network-scripts/ifcfg-eth0 (Standard Installation)
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=none
IPADDR=<Main IP>
IPV6INIT=yes
IPV6ADDR=2a01:4f8:XXX:YYYY::2/128
IPV6_DEFAULTGW=fe80::1
IPV6_DEFAULTDEV=eth0
NETMASK=255.255.255.255
SCOPE="peer <Default Gateway>"
# /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
ONBOOT=yes
TYPE="Bridge"
BOOTPROTO=static
IPADDR=<Main IP>
NETMASK=255.255.255.255
IPV6INIT=yes
IPV6ADDR=2a01:4f8:XXX:YYYY::2/64
STP=off
DELAY=0

Если это стандартная установка, выполненная через installimage/Robot, то часть eth0, относящаяся к IPv4, не меняется (шлюз по умолчанию укажите в файле route-eth0 — см. «Выделенные серверы»). Для IPv6 сократите префикс с /64 до /128. Маршруты хоста для дополнительных адресов IPv4 задайте в отдельном файле конфигурации:

# /etc/sysconfig/network-scripts/route-br0
ADDRESS0=<Additional IP>
NETMASK0=255.255.255.255

Дополнительные маршруты задаются по тому же принципу с помощью ADDRESS1, NETMASK1, ADDRESS2, NETMASK2 и так далее. Для IPv6 дополнительная настройка не нужна.

Гость:

# /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=none
IPADDR=<Addon IP>
NETMASK=255.255.255.255
SCOPE="peer <Main IP>"
IPV6INIT=yes
IPV6ADDR=2a01:4f8:XXX:YYYY::4/64
IPV6_DEFAULTGW=2a01:4f8:XXX:YYYY::2

Мостовая (bridged)

В мостовой схеме пакеты проходят напрямую, а гость ведёт себя так, будто это отдельная машина. Из-за этого MAC-адреса гостя становятся видны снаружи, поэтому для каждого отдельного IP нужно запросить виртуальный MAC-адрес (создайте запрос в поддержку через Robot). Затем назначьте этот виртуальный MAC сетевой карте (NIC) гостя.

# /etc/sysconfig/network-scripts/ifcfg-eth0
# device: eth0
DEVICE=eth0
BOOTPROTO=static
HWADDR=<MAC of the physical NIC>
ONBOOT=yes
BRIDGE=br0
# /etc/sysconfig/network-scripts/ifcfg-br0 (pointopoint, Standard)
DEVICE=br0
TYPE="Bridge"
BOOTPROTO=static
IPADDR=<Main IP>
NETMASK=255.255.255.255
SCOPE="peer <Gateway of the main IP>"
ONBOOT=yes
DELAY=0

Маршрут по умолчанию настройте через дополнительный файл route-eth0 — просто переименуйте его в route-br0.

Обратите внимание: в этой конфигурации поддержка IPv6 ограничена. Через Robot подсеть IPv6 можно маршрутизировать либо на основной IP-адрес, либо на ОДИН из дополнительных IP (точнее, на link-local адрес IPv6, формируемый из MAC-адреса).

Замечания по полному шифрованию диска

Эти замечания относятся к установкам CentOS, в которых initramfs собирается с помощью dracut.

Здесь сеть для initramfs настраивается прямо из параметров загрузки ядра. При статической сети сеть нужно запросить явно.

Пример параметров ядра в загрузчике:

rd.neednet=1 ip=10.0.0.168::10.0.0.129:255.255.255.255::enp7s0:none:185.12.64.1:185.12.64.2:213.239.239.164

Полный синтаксис параметра ip описан здесь: https://www.kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt

Для удалённой разблокировки зашифрованной корневой файловой системы в CentOS обычно используется dracut-модуль вроде dracut-crypt-ssh. Конфигурации в стиле dropbear, как в Debian или Ubuntu, здесь нет.

После любого изменения конфигурации dracut или параметров ядра пересоберите initramfs:

dracut --force

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