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