Настройка сети в CentOS 7
T-Rex
Тираннозавр Рекс

Сетевые настройки — первое, что нужно сделать после создания сервера для его взаимодействия с внешним миром. В этой статье детально рассмотрим как настраивать сеть в CentOS 7.

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

Для примера используем выделенный сервер. Выделенные серверы заказываются в представлении «Серверы и оборудование».

После нажатия на кнопку «Заказать сервер» появится представление с характеристиками заказываемого сервера. Можно настроить свои параметры или выбрать готовую конфигурацию. Для демонстрации выберем готовую конфигурацию.

После выбора готового сервера останется выбрать устанавливаемую операционную систему. Настройку сети будем выполнять в CentOS 7.

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

Теперь можно подключиться к серверу по SSH и просмотреть сетевые интерфейсы, созданные по умолчанию. В выводе команды ip address получим нумерованный список интерфейсов.

# ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether ac:1f:6b:f6:3b:7e brd ff:ff:ff:ff:ff:ff
    inet 82.148.21.49/24 brd 82.148.21.255 scope global noprefixroute eno1
       valid_lft forever preferred_lft forever
    inet6 fe80::ae1f:6bff:fef6:3b7e/64 scope link 
       valid_lft forever preferred_lft forever
3: eno2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether ac:1f:6b:f6:3b:7f brd ff:ff:ff:ff:ff:ff

Внешний сетевой интерфейс, через который было выполнено текущее SSH-подключение, имеет порядковый номер 2 и называется eno1. Интерфейсу для примера был присвоен статический ip-адрес 82.148.21.49.

Далее мы расскажем об изменении конфигурации сети в CentOS 7.

Статический IP-адрес в CentOS 7

Конфигурация сетевого интерфейса хранится в /etc/sysconfig/network-scripts в соответствующем файле с префиксом ifcfg (там же конфигурационные файлы других интерфейсов). Посмотрим на него.

# cat /etc/sysconfig/network-scripts/ifcfg-eno1 
NAME="eno1"
ONBOOT=yes
BOOTPROTO=static
HWADDR="ac:1f:6b:f6:3b:7e"
IPADDR="82.148.21.49"
NETMASK="255.255.255.0"
GATEWAY="82.148.21.1"
TYPE=Ethernet

Что можно понять из этих характеристик? Ниже расскажем о каждом параметре.

  • NAME — имя сетевого адаптера, оно такое же, как и имя в операционной системе.
  • ONBOOT — указание на тип запуска сетевого интерфейса. При текущих настройках сетевой интерфейс запускается автоматически. В случае со значением no интерфейс нужно будет запускать вручную.
  • BOOTPROTO — указание на тип назначения IP-адреса. В текущих настройках static, но возможны опции dhcp, none или пустое значение.
  • HWADDR — переменная, хранящая MAC-адрес.
  • IPADDR — установленный на интерфейсе IP-адрес.
  • NETMASK — установленная на интерфейсе маска подсети.
  • GATEWAY — указание на шлюз.
  • TYPE — тип интерфейса. В нашем случае — Ethernet.

Отредактируем значение поля IPADDR:

# vi /etc/sysconfig/network-scripts/ifcfg-eno1 
NAME="eno1"
ONBOOT=yes
BOOTPROTO=static
HWADDR="ac:1f:6b:f6:3b:7e"
IPADDR="82.148.21.50"
NETMASK="255.255.255.0"
GATEWAY="82.148.21.1"
TYPE=Ethernet

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

# systemctl restart network

После выполнения этой команды сетевое подключение отключится. Снова выполняем подключение по SSH по новому IP-адресу и проверяем новые настройки:

# ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether ac:1f:6b:f6:3b:7e brd ff:ff:ff:ff:ff:ff
    inet 82.148.21.50/24 brd 82.148.21.255 scope global noprefixroute eno1
       valid_lft forever preferred_lft forever
    inet6 fe80::ae1f:6bff:fef6:3b7e/64 scope link 
       valid_lft forever preferred_lft forever
3: eno2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether ac:1f:6b:f6:3b:7f brd ff:ff:ff:ff:ff:ff

Статический IP-адрес настроен, сервер доступен по новому адресу.

Настройки DHCP в CentOS 7

Чтобы настроить получение анонсов по DHCP, в /etc/sysconfig/network-scripts/ifcfg-eno1 необходимо удалить переменные IPADDR, NETMASK, GATEWAY, а в BOOTPROTO указать значение «dhcp».

# vi /etc/sysconfig/network-scripts/ifcfg-eno1 
NAME="eno1"
ONBOOT=yes
BOOTPROTO=dhcp
HWADDR="ac:1f:6b:f6:3b:7e"
TYPE=Ethernet

Перезагружаем сетевой сервис:

# systemctl restart network

Сетевое соединение по SSH отключится. Чтобы посмотреть новый IP-адрес сервера, подключимся к нему через веб-консоль KVM Selectel. Нажимаем на иконку консоли.

В новой вкладке браузера вводим учетные данные сервера и выполняем уже знакомую команду ip address. В выводе команды напротив интерфейса eno1 будет его динамический IP-адрес.

Теперь можно подключаться по SSH по новому IP-адресу.

Настройки DNS в CentOS 7

Чтобы настроить DNS, изменим /etc/sysconfig/network-scripts/ifcfg-eno1 и пропишем туда переменную DNS1 (если нужно добавить дополнительные DNS-серверы, допускается добавление переменных DNS2, DNS3 и т.д.)

# vi /etc/sysconfig/network-scripts/ifcfg-eno1 
NAME="eno1"
ONBOOT=yes
BOOTPROTO=static
HWADDR="ac:1f:6b:f6:3b:7e"
IPADDR="82.148.21.50"
NETMASK="255.255.255.0"
GATEWAY="82.148.21.1"
TYPE=Ethernet
DNS1="82.148.21.1"

Следом перезагрузим сеть:

# systemctl restart network

По итогам перезагрузки адрес DNS-сервера должен автоматически оказаться в /etc/resolv.conf:

# grep "nameserver" /etc/resolv.conf
nameserver ”82.148.21.1”

Наличие в файле заданного DNS-сервера говорит о корректности его настройки.

Перезапуск сетевого сервиса в CentOS 7

Перезапуск сети выполняется одной командой:

# systemctl restart network

После изменения сетевых настроек и для вступления их в силу необходимо выполнить эту команду.

Изменение имени сервера (hostname) в CentOS 7

После создания сервера через панель управления Selectel ему присваивается имя localhost.localdomain, при аренде выделенного сервера в Selectel имя ему присвоено автоматически:

# hostname
Einstein

Отредактируем /etc/hostname:

# vi /etc/hostname
Curie

Сверим примененные настройки:

# hostname
Curie

Имя хоста изменено.

Настройки шлюза в CentOS 7

За соответствующие настройки отвечает переменная GATEWAY в /etc/sysconfig/network-scripts/ifcfg-eno1. Чтобы изменить адрес шлюза, достаточно изменить значение этой переменной и перезагрузить сетевую службу:

# vi /etc/sysconfig/network-scripts/ifcfg-eno1 
NAME="eno1"
ONBOOT=yes
BOOTPROTO=static
HWADDR="ac:1f:6b:f6:3b:7e"
IPADDR="82.148.21.49"
NETMASK="255.255.255.0"
GATEWAY="82.148.21.1"
TYPE=Ethernet
# systemctl restart network

Вызов команды netstat -nr вернет актуальный адрес используемого шлюза:

# netstat -nr
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         82.148.21.1     0.0.0.0         UG        0 0          0 eno1
82.148.21.0     0.0.0.0         255.255.255.0   U         0 0          0 eno1
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eno1

Таким образом, мы задали адрес сетевого шлюза.

Настройки сети из консоли

Кроме модификации файлов с конфигурацией, настройки сети могут быть изменены командами в консоли. Консольные настройки выполняются для проведения тестов и будут работать только до перезагрузки системы. Для выполнения всех консольных сетевых настроек используется уже известная команда ip address (или ее сокращенная версия ip a).

Применим к eno2 новый IP-адрес и проверим:

# ip a add 10.128.106.173 dev eno2
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether ac:1f:6b:f6:3b:7e brd ff:ff:ff:ff:ff:ff
    inet 82.148.21.49/24 brd 82.148.21.255 scope global eno1
       valid_lft forever preferred_lft forever
    inet6 fe80::ae1f:6bff:fef6:3b7e/64 scope link 
       valid_lft forever preferred_lft forever
3: eno2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether ac:1f:6b:f6:3b:7f brd ff:ff:ff:ff:ff:ff
    inet 10.128.106.173/32 scope global eno2
       valid_lft forever preferred_lft forever

Изменим маску подсети и снова проверим:

# ip a change 10.128.106.173/24 dev eno2
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether ac:1f:6b:f6:3b:7e brd ff:ff:ff:ff:ff:ff
    inet 82.148.21.49/24 brd 82.148.21.255 scope global eno1
       valid_lft forever preferred_lft forever
    inet6 fe80::ae1f:6bff:fef6:3b7e/64 scope link 
       valid_lft forever preferred_lft forever
3: eno2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether ac:1f:6b:f6:3b:7f brd ff:ff:ff:ff:ff:ff
    inet 10.128.106.173/32 scope global eno2
       valid_lft forever preferred_lft forever
    inet 10.128.106.173/24 scope global eno2
       valid_lft forever preferred_lft forever

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

# ip r add default via 10.128.106.1

Удалим маршрут по умолчанию:

# ip r del default via 10.128.106.1

Удалим привязанный ранее IP-адрес и проверим:

# ip a del 10.128.106.173/32 dev eno2
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether ac:1f:6b:f6:3b:7e brd ff:ff:ff:ff:ff:ff
    inet 82.148.21.49/24 brd 82.148.21.255 scope global eno1
       valid_lft forever preferred_lft forever
    inet6 fe80::ae1f:6bff:fef6:3b7e/64 scope link 
       valid_lft forever preferred_lft forever
3: eno2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether ac:1f:6b:f6:3b:7f brd ff:ff:ff:ff:ff:ff

Еще раз обращаем внимание, что все приведенные в этом разделе настройки действуют до перезагрузки сервера.

Исключение IPv6 в CentOS 7

IPv6-адресация на текущий момент используется редко, хотя и было много разговоров об исчерпании емкостей адресов IPv4. Отключение IPv6 помогает экономить ресурсы и избежать путаницы. В этом разделе расскажем, как отключить на сервере поддержку этого протокола.

Начнем настройку с изменений в файле /etc/sysctl.conf. Внесем в него две дополнительных строки:

# vi /etc/sysctl.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

Следующий шаг — применение конфигурационных изменений:

# sysctl -p
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

В /etc/sysconfig/network прибавим 2 строки:

# vi /etc/sysconfig/network
NETWORKING_IPV6=no
IPV6INIT=no

В конфигурационный файл /etc/default/grub к концу строки GRUB_CMDLINE_LINUX нужно добавить ipv6.disable=1

# vi /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto spectre_v2=retpoline rd.md.uuid=f93e0283:1b54bb6c:881c4df1:a3b5cf93 rd.lvm.lv=vg0/vol-root rd.md.uuid=b3ba35a4:4f4150fb:0d1464e1:d5ab4bff rd.lvm.lv=vg0/swap nodmraid nomodeset rhgb quiet ipv6.disable=1"
GRUB_DISABLE_RECOVERY="true"

После выполнения изменений нужно сохранить файл и обновить GRUB:

# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-1127.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-1127.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-8586236d5c0348d98a7b4f186d904d62
Found initrd image: /boot/initramfs-0-rescue-8586236d5c0348d98a7b4f186d904d62.img
done

Далее — перезагрузка сервера:

# reboot

После перезагрузки проверим конфигурацию, значения с префиксом inet6 должны пропасть:

# ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether ac:1f:6b:f6:3b:7e brd ff:ff:ff:ff:ff:ff
    inet 82.148.21.49/24 brd 82.148.21.255 scope global eno1
       valid_lft forever preferred_lft forever
    inet 10.128.106.173/24 brd 10.128.106.255 scope global noprefixroute dynamic eno1
       valid_lft 3419sec preferred_lft 3419sec
3: eno2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether ac:1f:6b:f6:3b:7f brd ff:ff:ff:ff:ff:ff

Протокол IPv6 успешно отключен.

Несколько IP адресов на одном интерфейсе в CentOS 7

Для настройки нескольких IP-адресов на одном интерфейсе внесем изменения в /etc/sysconfig/network-scripts/ifcfg-eno1, добавив переменные IPADDR1 и IPADDR2 и удалив IPADDR:

# vi /etc/sysconfig/network-scripts/ifcfg-eno1 
NAME="eno1"
ONBOOT=yes
BOOTPROTO=static
HWADDR="ac:1f:6b:f6:3b:7e"
IPADDR1="82.148.21.49"
IPADDR2="82.148.21.50"
NETMASK="255.255.255.0"
GATEWAY="82.148.21.1"
TYPE=Ethernet

После перезагрузки сетевого сервиса изменения вступят в силу:

# systemctl restart network

Еще один IP-адрес может понадобиться для поддержки нескольких сервисов в рамках одного сервера.

Настройки нескольких сетевых интерфейсов в CentOS 7

Команда ip a вернет состояние всех имеющихся сетевых интерфейсов:

# ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether ac:1f:6b:f6:3b:7e brd ff:ff:ff:ff:ff:ff
    inet 82.148.21.49/24 brd 82.148.21.255 scope global eno1
       valid_lft forever preferred_lft forever
    inet 10.128.106.173/24 brd 10.128.106.255 scope global noprefixroute dynamic eno1
       valid_lft 3419sec preferred_lft 3419sec
3: eno2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether ac:1f:6b:f6:3b:7f brd ff:ff:ff:ff:ff:ff

В этом выводе можно видеть три интерфейса: служебный lo, а также интерфейсы eno1 и eno2.

В /etc/sysconfig/network-scripts в соответствующих файлах хранится конфигурация каждого интерфейса:

# ls /etc/sysconfig/network-scripts | grep 'ifcfg-eno\|ifcfg-lo'
ifcfg-eno1
ifcfg-eno2
ifcfg-lo

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

# cat /etc/sysconfig/network-scripts/ifcfg-eno2 
NAME="eno2"
ONBOOT=yes
BOOTPROTO=static
HWADDR="ac:1f:6b:f6:3b:7e"
IPADDR1="82.148.21.51"
IPADDR2="82.148.21.52"
NETMASK="255.255.255.0"
GATEWAY="82.148.21.1"
TYPE=Ethernet

Чтобы добавить новый интерфейс, достаточно создать в этой же директории соответствующий конфигурационный файл, внести в него настройки и выполнить перезапуск сетевой службы:

# cp /etc/sysconfig/network-scripts/ifcfg-eno2 /etc/sysconfig/network-scripts/ifcfg-eno3
# vi /etc/sysconfig/network-scripts/ifcfg-eno3
# systemctl restart network

Таким образом, мы создали дополнительный интерфейс.

Настройки интерфейсов в CentOS 7 через Network Manager (утилиты nmtui и nmcli)

Еще одним способом настроить сеть в CentOS 7 является настройка через утилиту Network Manager. Она может выполняться в GUI и через CLI. Для вызова графического интерфейса необходимо выполнить команду nmtui. Откроется псевдо-GUI интерфейс, в котором можно выполнять те же настройки, что и в командной строке:

Network Manager через CLI управляется при помощи утилиты nmcli. Ниже приведены команды для изменения IP-адреса, шлюза и DNS-сервера для сетевого интерфейса eno1:

# nmcli con mod eno1 ipv4.addresses 82.148.21.49/24
# nmcli con mod eno1 ipv4.gateway 82.148.21.1
# nmcli con mod eno1 ipv4.dns "8.8.8.8

Утилита Network Manager имеет широкий функционал и может использоваться как полная замена штатным инструментам для настройки сети в CentOS 7.

Заключение

Мы рассказали о различных подходах к настройке сети в CentOS 7. Этого достаточно для базовой настройки коммуникации сервера с внешними устройствами.

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

Что еще почитать по теме

Эллада Нуралиева 22 июня 2021

Next-Generation Firewall от FortiGate: обзор функций и подключение сервиса

Для защиты инфраструктуры от угроз часто используют межсетевые экраны. Они могут быть как программными, так и аппаратными. Типичный межсетевой экран представляет собой фильтр сетевого трафика, который…
Эллада Нуралиева 22 июня 2021
Николай Рубанов 29 мая 2020

Инкрементальный бэкап в Proxmox VE с помощью VBR

В одной из предыдущих статей цикла про гипервизор Proxmox VE мы уже рассказывали, как выполнять бэкап штатными средствами. Сегодня покажем, как для этих же целей использовать отличный инструмент Veeam…
Николай Рубанов 29 мая 2020

Новое в блоге

Ульяна Малышева 22 июля 2021

DCIM-платформа Racks: почему мы отказались от энтерпрайз-решения в пользу самописного приложения

Как вести учет и контроль оборудования, если у тебя более десятка серверных в трех географически разделенных дата-центрах? Как и многие крупные провайдеры, в России и за рубежом, Selectel начал реализ…
Ульяна Малышева 22 июля 2021
Ульяна Малышева 7 июля 2021

Продуктовый дайджест: новые процессоры AMD EPYC™ и управление базами данных через Terraform

Пополнение линейки процессоров AMD EPYC™, управление кластерами «Облачных баз данных» через Terraform-провайдер Selectel и подбор идеальной инфраструктуры под «Битрикс24» и «1С-Битрикс». Подробнее — о…
Ульяна Малышева 7 июля 2021
Эллада Нуралиева 22 июня 2021

Next-Generation Firewall от FortiGate: обзор функций и подключение сервиса

Для защиты инфраструктуры от угроз часто используют межсетевые экраны. Они могут быть как программными, так и аппаратными. Типичный межсетевой экран представляет собой фильтр сетевого трафика, который…
Эллада Нуралиева 22 июня 2021
Ульяна Малышева 18 июня 2021

Selectel развернул 100 виртуальных машин для олимпиады «Я — профессионал»

Завершился четвертый сезон олимпиады «Я — профессионал», на который зарегистрировались 576 012 студентов из 348 вузов России. Selectel стал одним из партнеров трека олимпиады «Робототехника», который …
Ульяна Малышева 18 июня 2021