В операционной системе CentOS предусмотрено два варианта именования VLAN — как subinterface (например, ens32.5) или vlanXX (vlan5). В зависимости от данного варианта, предусмотрен свой метод настройки. Каким способом пользоваться — дело каждого. В данной инструкции рассматриваются оба варианта.
Для примера, настраиваем VLAN с тегом 5 для ethernet-адаптера ens32.
Содержание
- Способ 1. VLAN как сабинтерфейс
- Способ 2. VlanXX
- Использование vconfig
- 1. Немного теории
- 2. Практика
- 3. Заключение
- Цели статьи
- Сетевые настройки на сервере CentOS
- Как получить сетевые настройки по DHCP
- Как настроить DNS в CentOS
- Как отключить ipv6
- Как изменить hostname в CentOS
- Установить шлюз по-умолчанию в CentOS
- Network Manager в CentOS
- System config network tui
- Как добавить статический маршрут в CentOS
- Как настроить 2 IP адреса на одном интерфейсе
- Как сделать перезапуск сети в CentOS
- Как узнать IP адрес в CentOS
- Что делать, если CentOS не видит сетевую карту?
- Что делать, если сеть недоступна в CentOS?
- Использование сетевых утилит traceroute, dig в CentOS
- Настройка 802.1Q VLAN в CentOS
- Заключение
Способ 1. VLAN как сабинтерфейс
Создаем следующий конфигурационный файл:
И приводим его к следующему виду:
ONBOOT=yes
TYPE=Ethernet
VLAN=yes
DEVICE=ens32.5
BOOTPROTO=static
IPADDR=192.168.0.15
NETMASK=255.255.255.0
* в данном примере будет создан виртуальный интерфейс ens32.5 (5 vlan), который будет ассоциирован с физическим адаптером ens32.
Чтобы настройки вступили в силу, перезапускаем сетевую службу:
systemctl restart network
Способ 2. VlanXX
Создаем файл со следующим содержимым:
ONBOOT=yes
TYPE=Ethernet
VLAN=yes
VLAN_NAME_TYPE=VLAN_PLUS_VID_NO_PAD
DEVICE=vlan5
PHYSDEV=ens32
VLAN_ > BOOTPROTO=static
IPADDR=192.168.0.15
NETMASK=255.255.255.0
* обратите внимание, что в данном варианте мы явно указываем, с каким физическим адаптером (ens32) будет связан виртуальный (vlan5).
Также перезапускаем сетевую службу:
systemctl restart network
vlan_name_type
Параметр vlan_name_type, который мы прописали в данном способе задает тип именования VLAN-интерфейса. Он может принимать следующие значения:
- VLAN_PLUS_VID — vlan00005
- VLAN_PLUS_VID_NO_PAD — vlan5
- DEV_PLUS_VID — ens32.00005
- DEV_PLUS_VID_NO_PAD — ens32.5
Использование vconfig
Утилита vconfig не сохраняет настройки для сетевых интерфейсов и после перезагрузки, все возвращается в предыдущее состояние. Она прекрасно подойдет для проведения тестов.
Сначала устанавливаем epel-репозиторий и утилиту следующей командой:
yum install epel-release
yum install vconfig
Загружаем модуль ядра 8021q:
Для настройки vlan из нашего примера, выполняем следующую команду:
vconfig add ens32 5
Теперь задаем виртуальному адаптеру IP-адрес и включаем его:
ifconfig ens32.5 192.168.0.15 netmask 255.255.255.0 up
В этой статье я расскажу про настройку VLAN в CentOS. VLAN – это Virtual Logical Area Network или виртуальная компьютерная сеть, используется когда есть необходимость разделить сеть на канальном уровне на несколько логических частей, которые не должны между собой взаимодействовать.
В статье используется сервер CentOS 6.4 x64 с сетевым интерфейсом eth0, который через 802.1q транк подключен двум различным сетям 192.168.18.0/24 в VLAN 8 и 192.168.24.0/24 в VLAN14.
1. Немного теории
Для начала давайте рассмотрим небольшой пример, у нас есть два соединенных между собой коммутатора и четыре подключенных к ним компьютера. Компьютеры PC1 и PC2 находящиеся в VLAN 8 свободно между собой взаимодействуют и компьютеры PC3 и PC4 находящиеся в VLAN 14 тоже взаимодействуют между собой, но ни первые ни вторые могут подключиться к компьютерам в соседнем VLAN-е.
Если представить что коммутатор у нас один, то все взаимодействие организуется достаточно просто – порты ge4 и ge5 на уровне коммутатора объединяются в одну логическую группу, а порты ge2 и ge6 в другую. И в общем то все работает. Но в нашем случае коммутаторы разные и им нужно передавать по одному физическому каналу сразу несколько логических сетей, поэтому весь трафик проходящий между коммутаторами маркируется (или теггирируется).
Здесь появляются понятия теггирированный (маркированный, tagged) и не теггирированный (не маркированный, untagged) трафик, порт коммутатора через который проходят теггрированные фреймы называтесят транком (VLAN транк, 802.1Q транк).
Самый распространенный стандарт маркировки трафика IEEE 802.1Q, в кадр Ethernet или IEEE 802.3 инкапсулируется дополнительное двух байтовое поле содержащие TPID (идентификатор протокола 802.1Q) равный 0×8100, приоритет и номер VLAN к которому относится данный кадр.
Тег 802.1Q расположен сразу после MAC-адреса отравителя и TPID по сути заменяет поле типа или размера, поэтому L2-коммутаторы не поддерживающие 802.1Q могут доставить маркированные кадры до места назначения.
Если в VLAN транк попадает не маркированный трафик то он автоматически относится к специальному VLAN, который называется native VLAN и обычно это VLAN 1.
Теперь подойдем ближе к практической ситуации, перед нами те же самые коммутаторы, те же самые компьютеры в двух разных VLAN-ах, только к коммутатору SW-1 через порт ge10 подключен сервер SRV1. При этом сервер должен быть доступен из обоих виртуальных сетей.
В данном случае еще один транк 802.1Q организуется между сервером SRV1 и коммутатором SW-1, для каждого VLAN-а на сервере создается виртуальный интерфейс с соответствующим IP-адресом.
2. Практика
Просматриваем конфигурационный файл интерфейса eth0:
Создаем конфигурационный файл для интерфейса в VLAN 8. На практике используется несколько вариантов именования интерфейсов привязанных к VLAN-ам, я для себя остановился на базовом варианте когда через точку после имени интерфейса пишется номер VLAN. Открываем для редактирования файл /etc/sysconfig/network-scripts/ifcfg-eth0.8 и приводим его к следующему виду:
Аналогично создаем файл /etc/sysconfig/network-scripts/ifcfg-eth0.14 для интерфейса смотрящего в VLAN 14:
Проверяем что интерфейсы поднялись и имеют соответствующие адреса
Текущие привязки интерфейсов и VLAN можно посмотреть в /proc/net/vlan/config
При отладке очень полезной может оказаться статистическая информация о интерфейсах, которая хранится в /proc/net/vlan/ .
Если количество принятых кадров (frames received) равно 0, то скорее всего интерфейс eth0 не получает маркированный трафик для VLAN 8.
3. Заключение
На этом я закончу свой рассказ. Если у вас есть вопросы или дополнения – пишите. Обязательно отвечу.
В данном материале я затрону актуальную тему, с которой начинается практически любая первоначальная работа с сервером. Настройка основных параметров сети в CentOS 7 и 8 — ip адрес, dhcp, ipv6, dns, hostname, статические маршруты, сетевые карты и другие network параметры. Двигаться по теме будем шаг за шагом от простого к сложному, разбирая все нюансы по порядку и отвечая на наиболее популярные вопросы.
Цели статьи
- Рассказать, как выполнить базовые сетевые настройки на сервере centos версий 7 и 8.
- Показать дополнительные возможности по настройки сети.
- На нескольких примерах рассказать, как решать типовые проблемы с сетью.
- Показать некоторые полезные сетевые утилиты.
Данная статья является частью единого цикла статьей про сервер Centos.
Сетевые настройки на сервере CentOS
Первый раз с сетевыми настройками сервера CentOS 7 или 8 мы сталкиваемся, когда производим установку. На экране первоначальной настройки есть отдельный пункт, касающийся настройки сетевых интерфейсов:
Зайдя в него мы видим список подключенных сетевых карт. Каждую из них можно включить соответствующим ползунком (пункт 1 на картинке). При активировании интерфейса он автоматически получает настройки по dhcp. Результат работы dhcp можно посмотреть тут же. Если вас не устраивают эти настройки, их можно отредактировать, нажав configure (пункт 3 на картинке). Здесь же можно задать hostname (пункт 2 на картинке):
Открыв окно дополнительный настроек Ehernet, вы сможете изменить имя сетевого интерфейса, указать настройки IP (пункт 1 на картинке), выбрать ручные настройки (пункт 2 на картинке), назначить ip адрес (пункт 3 на картинке), установить dns сервер (пункт 4 на картинке) и сохранить сетевые настройки (пункт 5 на картинке):
После выполнения остальных настроек начнется установка. После установки у вас будет сервер с указанными вами сетевыми настройками.
Теперь рассмотрим другую ситуацию. Сервер, а соответственно и конфигурацию сети, производили не вы, а теперь вам надо ее посмотреть либо изменить. В вашем распоряжении консоль сервера, в ней и будем работать. Если у вас установка производилась с дистрибутива minimal, то при попытке посмотреть сетевые настройки с помощью команды ifconfig в консоли вы увидите следующее:
или в русской версии:
Для работы с ifconfig и прочими сетевыми утилитами необходимо установить пакет net-tools. Сделаем это:
Теперь можно увидеть настройки сети:
Если у вас нет желания устанавливать дополнительный пакет, то можно воспользоваться более простой командой ip с параметрами:
Мы увидели конфигурацию сети, теперь давайте ее отредактируем. Допустим, нам нужно сменить ip адрес. Для этого идем в директорию /etc/sysconfig/network-scripts и открываем на редактирование файл ifcfg-eth0 или ifcfg-ens18. Название файла будет зависеть от имени сетевого интерфейса. В Centos 8 по-умолчанию убрали поддержку настройки сети через конфигурационные скрипты, поэтому установите отдельно пакет network-scripts.
Файл ifcfg-eth0 имеет примерно следующее содержание:
По настройкам из этого файла мы получаем ip адрес по dhcp. Чтобы вручную прописать статический ip, приводим файл к следующему содержанию:
Мы изменили параметры:
BOOTPROTO | с dhcp на none |
DNS1 | указали dns сервер |
IPADDR0 | настроили статический ip адрес |
PREFIX0 | указали маску подсети |
GATEWAY0 | настроили шлюз по-умолчанию |
Чтобы изменения вступили в силу, необходимо перечитать сетевые настройки:
Проверяем, применилась ли новая конфигурация сети:
Все в порядке, новые настройки сетевого интерфейса установлены.
Как получить сетевые настройки по DHCP
Теперь рассмотрим обратную ситуацию. Допустим, у вас сетевая карта имеет какие-то настройки, установленные вручную. Но вы хотите, чтобы ваш компьютер получал настройки сети по dhcp в качестве клиента. Для этого вам нужно произвести операцию, обратную той, что мы делали раньше. То есть открываем файл /etc/sysconfig/network-scripts/ifcfg-ens18 и удаляем там строки с параметрами DNS, IPADDR, PREFIX, GATEWAY а в параметре BOOTPROTO указываем значение «dhcp».
Сохраняем файл и перезапускаем сеть:
Затем проверяем, получил ли наш client по dhcp настройки.
Как настроить DNS в CentOS
Текущие настройки dns сервера в CentOS можно посмотреть в двух местах:
- В файле с настройками сетевой карты ifcfg-eth0, которым мы ранее неоднократно редактировали.
- В файле /etc/resolv.conf
Зачем они сейчас в двух местах, я не знаю, но раньше настройки dns сервера в каких-то дистрибутивах, не помню уже точно каких, указывались только в resolv.conf, но в какой-то момент это изменилось. И все сетевые настройки стали храниться в одном файле вместе с адресом, шлюзом, маской и прочим. Если сейчас отредактировать файл resolv.conf и внести туда какие-то dns сервера, то после перезагрузки они будут заменены на значения из файла ifcfg-eth0.
Так что для того, чтобы установить параметры dns сервера, нужно отредактировать файл сетевых настроек ifcfg-eth0, добавив туда столько серверов, сколько требуется. Например так:
Для применения настроек сохраняем файл и перезапускаем сеть, все как обычно. После перезагрузки сервера настройки dns будут записаны в файл resolv.conf
Как отключить ipv6
В настоящее время активного использования протокола ipv6 в России нет и в обычной работе он чаще всего не нужен. Хотя нас уже много лет пугают, что свободных ip адресов уже практически не осталось, но на деле пока еще всем хватает. Так что с точки зрения практических соображений ipv6 в настоящее время на сервере не нужен и его можно отключить.
Перед отключением ipv6 в centos необходимо на всякий случай проверить, какие программы его используют в своей работе. Это нужно для того, чтобы избежать ошибок в их работе, предварительно отключив ipv6 в конфигурациях. Для того, чтобы увидеть, какие программы висят на ipv6 интерфейсе воспользуемся командой netstat:
Все строки с . это ipv6 протокол. В моем случае это sshd, postfix и chronyd. Отключим им ipv6 и оставим только ipv4.
Начнем с sshd. Открываем файл настроек /etc/ssh/sshd_config и находим строки:
Раскомментируем их и изменим. Должно получиться вот так:
Теперь открываем файл настроек постфикс /etc/postfix/main.cf. Ищем там строку:
Отключаем ipv6 в chronyd. Для этого создаем файл /etc/sysconfig/chronyd и добавляем строку:
Теперь отключаем ipv6 в CentOS. Открываем файл /etc/sysctl.conf и добавляем туда строки:
Редактируем файл /etc/sysconfig/network, добавляя туда:
Добавляем запрет на работу ipv6 в конфигурацию grub. Открываем конфиг /etc/default/grub и добавляем к параметру GRUB_CMDLINE_LINUX еще одно значение ipv6.disable=1. Должно получиться примерно так:
После этого обновляем конфиг загрузчика.
Перезагружаемся и проверяем результат:
Нигде нет упоминания про inet6 и адреса формата ipv6. Значит все в порядке, мы отключили ipv6 в CentOS. Теперь проверим список открытых портов:
Все порты ipv4. Все в порядке, наша задача выполнена.
Как изменить hostname в CentOS
По-умолчанию, во время установки CentOS ставит имя хоста localhost.localdomain. Если вы его не поменяли, то можно это сделать позже. Для начала давайте проверим, какое имя хоста у вас установлено. Делается это с помощью команды в консоли hostname, либо с помощью uname:
Для того, чтобы изменить имя хоста в CentOS, необходимо отредактировать файл /etc/hostname. Проверим его содержимое:
Отредактируем этот файл, чтобы изменить hostname:
Сохраняем файл и проверяем:
Есть готовая команда, которая сразу устанавливает необходимое имя сервера:
Все в порядке, мы изменили имя хоста на centos.localhost
Установить шлюз по-умолчанию в CentOS
Если по каким-то причинам при настройке сетевых параметров у вас не установился шлюз по-умолчанию, то сделать это можно вручную. Для начала проверим, какой шлюз по-умолчанию установлен в системе в данный момент:
Строка с Destination 0.0.0.0 определяет адрес шлюза. Если у вас ее нет, либо в поле Gateway установлен неверный шлюз, то можно это изменить. Устанавливаем шлюз по-умолчанию:
Или то же самое с помощью команды ip.
Network Manager в CentOS
В CentOS по-умолчанию имеется служба, которая управляет всеми сетевыми подключениями — NetworkManager. Она постоянно контролирует сетевые настройки и с помощью демона по управлению конфигурациями вносит соответствующие изменения в активные сетевые устройства. Она поддерживает стандартные файлы конфигураций ifcfg.
Список сетевых утилит и приложений:
Приложение | Описание |
---|---|
NetworkManager | Стандартный networking daemon |
nmtui | Простой текстовый интерфейс (TUI) для NetworkManager |
nmcli | Утилита, работающая в командной строке, которая позволяет пользователям и скриптам взаимодействовать с NetworkManager |
control-center | Утилита с графическим интерфейсом оболочки GNONE |
nm-connection-editor | GTK+ 3 приложения, необходимые для некоторых задач, не поддерживаемых control-center |
Пользователи не взаимодействуют с NetworkManager в CentOS напрямую, для этого используются графические и утилиты командной строки. Одной из таких утилит является system config network tui. В Centos 8 по-умолчанию NetworkManager является рекомендованным способом по настройке сети. Все остальные способы объявлены deprecated.
System config network tui
Для управления сетевыми настройками в CentOS можно воспользоваться графической утилитой nmtui. Проверить ее наличие в системе очень просто. Достаточно запустить ее в консоли:
Если она у вас не установлена, то исправить это очень просто. Устанавливаем в CentOS system config network tui:
С помощью tui можно указать любые сетевые настройки, которые мы делали раньше через командную строку и редактирование конфигурационных файлов network-scripts. Давайте сделаем это. Вызываем программу:
Выбираем первый пункт Edit a connection, затем выбираем сетевой интерфейс и жмем «Edit»:
Здесь мы можем изменить имя сетевой карты, mac адрес, указать тип сетевых настроек — ручной или dhcp, указать вручную ip адрес, адрес шлюза, днс сервера, добавить маршруты и некоторые другие настройки:
После завершения редактирования сохраняем настройки, нажимая ОК.
Если в первом экране утилиты выбрать пункт Set System Hostname, то можно быстро указать имя хоста. Результат будет такой же, как мы делали раньше в консоли.
Как добавить статический маршрут в CentOS
Для управления маршрутизацией в CentOS может понадобиться добавить статический маршрут. Сделать это достаточно просто с помощью консольной команды. Для начала проверим существующие маршруты, используя netstat:
В данном случае у нас один маршрут для адреса 0.0.0.0/0.0.0.0 шлюз используется 192.168.159.2, он же шлюз по-умолчанию. То есть по сути, статических маршрутов никаких нет. Добавим один из них.
Допустим, у нас есть подсеть 192.168.8.0 маска 255.255.255.0, трафик в эту подсеть маршрутизирует шлюз 192.168.159.5 Добавляем маршрут:
Проверяем, появился ли добавленный маршрут в таблицу маршрутизации:
Все в порядке, маршрут добавлен. Делаем то же самое с помощью утилиты ip.
Но после перезагрузки этот статический маршрут будет удален. Чтобы этого не произошло и добавленные маршруты сохранялись, необходимо их записать в специальный файл. В папке /etc/sysconfig/network-scripts создаем файл с именем route-eth0 следующего содержания:
Перезагружаемся и проверяем, на месте ли маршрут:
Все в порядке, статический маршрут добавлен.
Как настроить 2 IP адреса на одном интерфейсе
Если у вас появилась необходимость настроить 2 IP адреса на одном интерфейса в CentOS, то сделать это достаточно просто. Воспользуемся командой ifconfig. Для начала проверим список сетевых интерфейсов:
Добавим к интерфейсу eno16777728 еще один ip адрес 192.168.159.120:
Проверим, что получилось:
То же самое, с помощью ip.
Все в порядке, мы добавили второй ip адрес на один и тот же интерфейс. Но после перезагрузки дополнительный адрес не сохранится. Чтобы его сохранить, необходимо создать файл настроек интерфейса в папке /etc/sysconfig/network-scripts
Сохраняем файл, перезагружаемся и проверяем, что получилось. Второй ip адрес должен быть на месте.
Как сделать перезапуск сети в CentOS
Ранее я уже касался этого вопроса, но на всякий случай повторим отдельно. Допустим, вы внесли некоторые изменения в конфигурацию сети. Как применить эти настройки, не перезагружая сервер? Очень просто. Для перезапуска сети в CentOS достаточно воспользоваться командой systemd:
Если увидите ошибку:
Значит у вас не установлен пакет network-scripts, а управление сетью выполняется с помощью NetworkManager, который сам перезапускает сеть после изменения настроек.
Если у вас старая версия Centos без systemd, а это 6-я версия и младше, то сеть перезапускается вот так.
Сетевая служба перечитает все сетевые настройки и применит изменения.
Как узнать IP адрес в CentOS
Для того, чтобы быстро узнать текущий IP адрес в CentOS необходимо воспользоваться следующими командами:
Либо второй вариант определения локального ip адреса:
Обе команды позволяют быстро узнать свой ip адрес.
Что делать, если CentOS не видит сетевую карту?
Вы установили сервер, загрузились и обнаружили, что в системе нет ни одной сетевой карты. Что в таком случае делать? Первым делом посмотрите вывод команды dmesg и поищите там поминание о своей карте. Возможно, она в системе есть, просто не активирована. Активировать ее можно с помощью nmtui, а котором я рассказывал выше.
Там есть пункт меню Activate connection, нужно в него зайти и активировать вашу сетевую карту. После этого ее можно будет настраивать.
Если же вашей сетевой карты нет в системе, то нужно поискать в интернете по модели информацию об этой сетевой карте. Возможно в репозиториях будут драйвера для нее. Это достаточно распространенная ситуация. Чаще всего драйвера найдутся и их необходимо будет правильно установить.
Есть еще вероятность, что вы не увидите своей карточки при выводе команды ifconfig, если в эту карту не воткнут сетевой провод. Чтобы наверняка посмотреть все интерфейсы, необходимо использовать ключ -a:
Есть еще один способ поискать сетевую карту в системе. Установите пакет pciutils:
И посмотрите вывод команды:
Если сетевая карта видится системой, то должно быть что-то в этом роде:
Если в выводе пусто, значит сетевая карта не определена.
Что делать, если сеть недоступна в CentOS?
Допустим, вы пытаетесь пинговать какой-то адрес, например 8.8.8.8 и получаете ответ, что сеть не доступна:
А в ответ получаете:
Такая ситуация может возникнуть, если у вас не установлен шлюз по-умолчанию. Добавить его можно с помощью команды:
Если дело не в шлюзе, то нужно проверить настройки сетевых адаптеров. Если нет ни одного активного адаптера, то вы так же будете получать сообщение о том, что сеть не работает. Необходимо, чтобы в системе был правильно настроен хотя бы один сетевой адаптер. Как это сделать, написано выше.
Использование сетевых утилит traceroute, dig в CentOS
Для диагностики сетевых подключений в CentOS полезно использовать специальные утилиты. Но если вы использовали установку minimal, то их скорее всего в системе не будет. К примеру, популярная утилита traceroute при попытке ее запуска выдаст сообщение:
Ее нужно установить отдельно из репозитория:
То же самое с популярной программой dig для работы с dns серверами и записями:
Чтобы эта сетевая утилита заработала, необходимо установить пакет bind-utils:
Настройка 802.1Q VLAN в CentOS
Для поднятия тегированного интерфейса на CentOS нужно в первую очередь проверить поддержку ядром 8021q:
Если сообщений об ошибке нет, значит все в порядке, модуль загрузился. Если же модуль не найден, необходимо пересобрать модули ядра, включив поддержку необходимого модуля. Проверим на всякий случай, загрузился ли модуль:
Все в порядке, модуль 8021q загружен, добавим его в автозагрузку:
Теперь создаем файл конфигурации для vlan в /etc/sysconfig/network-scripts:
Обращаю внимание на выделенное жирным. Во всех инструкциях в интернете, что мне попались, этот параметр был указан как TYPE=Ethernet, но с такой настройкой интерфейс с vlan не поднимался, появлялась ошибка:
Только после того, как я исправил, все заработало как надо. Так что сохраняем и активируем интерфейс:
Проверяем наш vlan:
Все в порядке, тегированный интерфейс поднят. По аналогии можно создать еще несколько подобных интерфейсов, не забывая изменять им имена и адреса.
Заключение
На этом мой объемный материал на тему настройки сети в CentOS закончен. Буду очень рад комментариям, замечаниям, поправкам. Они наверняка будут. Создавая подобные материалы я в первую очередь учусь сам и подтягиваю свои знания в предметной области. Тут могут быть где-то ошибки и описки, хотя я и проверяю все на живых системах во время написания руководств, но все равно возможны неточности и опечатки.
Напоминаю, что данная статья является частью единого цикла статьей про сервер Centos.