Сетевые настройки — первое, что нужно сделать после создания сервера для его взаимодействия с внешним миром. В этой статье детально рассмотрим, как настраивать сеть в 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. Интерфейсу может быть присвоено другое. В нашем случае это 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-адресу. Примечание: этот 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
Выбирайте готовые или произвольные серверы с этим дистрибутивом или одной из восьми доступных ОС.
Перезапуск сетевого сервиса в CentOS 7
Перезапуск сети выполняется одной командой:
# systemctl restart network
После изменения сетевых настроек и для вступления их в силу необходимо выполнить эту команду.
Изменение имени сервера (hostname) в CentOS 7
После создания сервера через панель управления Selectel ему присваивается имя localhost.localdomain, при аренде выделенного сервера в Selectel имя ему присвоено автоматически:
# hostname
Euclid
Отредактируем /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 для решения поставленных задач.