Как настроить сеть в Linux

Linux Logo network

Подключение компьютера Linux к сети - довольно простое дело, за исключением тех случаев, когда это не так. В этой статье я расскажу об основных файлах сетевой конфигурации для дистрибутивов Linux на базе Red Hat, а также рассмотрю две службы запуска сети: почтенную Network Startup и спорную NetworkManager.

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

Файлы конфигурации интерфейсов

Каждый сетевой интерфейс имеет свой собственный файл конфигурации в каталоге /etc/sysconfig/network-scripts. Каждый интерфейс имеет конфигурационный файл с именем ifcfg-<имя интерфейса>X, где X - номер интерфейса, начинающийся с нуля или 1 в зависимости от используемой конвенции именования; например, /etc/sysconfig/network-scripts/ifcfg-eth0 для первого интерфейса Ethernet.

Большинство других файлов в каталоге /etc/sysconfig/network-scripts - это скрипты, используемые для запуска, остановки и выполнения различных действий по настройке сети.

Каждый файл конфигурации интерфейса привязан к определенному физическому сетевому интерфейсу по его MAC-адресу.

Соглашения об именовании сетевых интерфейсов

Раньше соглашения об именовании сетевых интерфейсов были простыми, незамысловатыми и, как мне казалось, легкими. Использование ethX имело смысл для меня, и его было легко набирать. Это не требовало дополнительных действий, чтобы выяснить, какое длинное и непонятное имя принадлежит интерфейсу. К сожалению, добавление нового интерфейса часто приводило к переименованию сетевых интерфейсов, что нарушало работу скриптов и конфигураций. Теперь все изменилось, и не один раз.

После недолгого пребывания с длинными и непонятными именами сетевых интерфейсов у нас появился третий набор соглашений об именовании, который кажется лишь незначительно лучше. Такие имена, как ethX, по-прежнему используются в CentOS 6.x. Новейшие соглашения об именовании с такими именами, как eno1 и enp0s3, используются в RHEL 7, CentOS 7 и последних выпусках Fedora.

Примеры файлов конфигурации

Этот пример файла конфигурации сетевого интерфейса, ifcfg-eth0, определяет конфигурацию статического IP-адреса для установки сервера CentOS.

Этот файл запускает интерфейс при загрузке, назначает ему статический IP-адрес, определяет домен и сетевой шлюз, указывает два DNS-сервера и не позволяет пользователям, не являющимся пользователями root, запускать и останавливать интерфейс.

В следующем файле конфигурации интерфейса ifcfg-eno1 представлена конфигурация DHCP для настольной рабочей станции.

В этом втором примере файла конфигурации записи DHCP, IP-адрес, поисковый домен и вся остальная сетевая информация не задаются, поскольку они предоставляются сервером DHCP. Такие элементы конфигурации, как DNS-серверы, можно переопределить в файле конфигурации интерфейса, добавив строки DNS1 и DNS2, как в предыдущем примере статической конфигурации.

Обратите внимание, что этот второй пример содержит строку UUID. Насколько я могу судить, эта строка никак не влияет на функциональность конфигурационного файла. Я обычно комментирую ее или даже удаляю, и никогда не ощущал пагубного влияния на свою сеть.

В обоих файлах конфигурации интерфейса в строке HWADDR указывается MAC-адрес физического сетевого интерфейса. Это связывает физический интерфейс с файлом конфигурации интерфейса. При замене интерфейса необходимо изменить MAC-адрес в файле.

Есть несколько способов найти MAC-адрес сетевой карты. Я обычно использую команду ifconfig, которая показывает все установленные сетевые карты, их MAC-адреса и различную статистику. Многие новые сетевые карты имеют MAC-адрес, напечатанный на коробке или наклеенный на саму сетевую карту. Однако большинство файлов конфигурации интерфейса создаются автоматически во время установки или при первом обнаружении сетевой карты после установки, и MAC-адрес включается в новый файл конфигурации интерфейса.

Строка ONBOOT указывает, что интерфейс должен быть активирован при запуске. Если изменить значение этой строки на «нет», интерфейс придется активировать либо вручную, либо с помощью NetworkManager после входа пользователя в систему.

Строка USERCTL указывает, что непривилегированные пользователи не могут управлять интерфейсом, то есть включать и выключать его. Установка этого параметра в значение «yes» позволяет обычным пользователям активировать и деактивировать интерфейс.

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

Параметры конфигурации

Существует множество опций конфигурации для файлов конфигурации интерфейса. Вот некоторые из наиболее распространенных:

  • DEVICE: Логическое имя устройства, например eth0 или enp0s2.
  • HWADDR: MAC-адрес сетевой карты, связанной с файлом, например 00:16:76:02:BA:DB.
  • ONBOOT: Запускать сеть на этом устройстве при загрузке хоста. Варианты: да/нет. Обычно этот параметр имеет значение «нет», и сеть не запускается до тех пор, пока пользователь не войдет на рабочий стол. Если вам нужно, чтобы сеть запускалась, когда никто не вошел в систему, установите значение «да».
  • IPADDR: IP-адрес, назначенный этой сетевой карте, например 192.168.0.10.
  • BROADCAST: Широковещательный адрес для этой сети, например 192.168.0.255
  • NETMASK: Маска сети для этой подсети, например маска класса C 255.255.255.0
  • NETWORK: Идентификатор сети для этой подсети, например, идентификатор класса C 192.168.0.0
  • SEARCH : Доменное имя DNS для поиска при выполнении поиска по неквалифицированным именам хостов, например «example.com».
  • BOOTPROTO: Протокол загрузки для этого интерфейса. Варианты: статический, DHCP, bootp, none. Опция «none» по умолчанию принимает значение static.
  • GATEWAY: Сетевой маршрутизатор или шлюз по умолчанию для этой подсети, например 192.168.0.254.
  • ETHTOOL_OPTS: Эта опция используется для установки определенных параметров конфигурации сетевого интерфейса, таких как скорость, состояние дуплекса и состояние автосогласования. Поскольку эта опция имеет несколько независимых значений, значения должны быть заключены в одну кавычку, например: «autoneg off speed 100 duplex full».
  • DNS1: Основной DNS-сервер, например 192.168.0.254, который является сервером в локальной сети. Указанные здесь DNS-серверы добавляются в файл /etc/resolv.conf при использовании NetworkManager или если для директивы peerdns установлено значение yes, в противном случае DNS-серверы должны быть добавлены в /etc/resolv.conf вручную и здесь игнорируются.
  • DNS2: вторичный DNS-сервер, например 8.8.8.8, который является одним из бесплатных DNS-серверов Google. Обратите внимание, что третичный DNS-сервер не поддерживается в файлах конфигурации интерфейса, хотя третий может быть настроен в энергонезависимом файле resolv.conf.
  • TYPE: Тип сети, обычно Ethernet. Единственное значение, которое я встречал здесь, было Token Ring, но сейчас это уже неактуально.
  • PEERDNS: Опция «yes» указывает, что файл /etc/resolv.conf должен быть изменен путем вставки в него записей DNS-серверов, указанных опциями DNS1 и DNS2. «no» означает не изменять файл resolv.conf. «Да» используется по умолчанию, когда DHCP указан в строке BOOTPROTO.
  • USERCTL: Указывает, могут ли непривилегированные пользователи запускать и останавливать этот интерфейс. Варианты: yes/no.
  • IPV6INIT: Указывает, применяются ли протоколы IPV6 к этому интерфейсу. Параметры - yes/no.

Если указан параметр DHCP, большинство других параметров игнорируются. Единственными обязательными параметрами являются BOOTPROTO, ONBOOT и HWADDR. Другие опции, которые могут оказаться полезными и которые не игнорируются, - это опции DNS и PEERDNS, если вы хотите переопределить записи DNS, предоставляемые сервером DHCP.

Устаревший сетевой файл

Есть один старый и уже устаревший файл, с которым вы можете столкнуться. В текущих версиях Fedora, RHEL и CentOS файл network обычно содержит только одну строку комментариев. Он находится в файле /etc/sysconfig и раньше использовался для включения или отключения сети. Он также использовался для установки имени сетевого хоста, как показано в следующем примере:

Этот файл присутствует, но не используется в Fedora с выпуска 19. Он все еще используется в RHEL/CentOS 6.x, но больше не используется в RHEL/CentOS 7.x. Имя сетевого хоста теперь задается в файле /etc/hostname.

Другие файлы сети

Каталог /etc/sysconfig/network-files содержит множество других файлов, все из которых обычно являются исполняемыми BASH-скриптами, а не конфигурационными файлами. По крайней мере, для меня это одно из неприятных исключений из иерархического стандарта файловой системы Linux (FHS), который прямо указывает, что в дереве /etc должны находиться только файлы конфигурации, а не исполняемые файлы.

Еще один файл конфигурации сети, который вы можете найти в /etc/sysconfig/network-files, - это файл route-<interface>. Если вы хотите настроить статические маршруты в системе с несколькими хомами, создайте файл route для каждого интерфейса. Например, следующий файл называется route-eth0 и определяет маршруты для этого конкретного интерфейса как к сетям, так и к отдельным хостам.

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

Запуск сети

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

До 2004 года в дистрибутивах на базе Red Hat по умолчанию использовалась старая служба network для управления задачами запуска и остановки сети. Сценарий запуска SystemV использовал статические конфигурационные файлы для запуска проводной или беспроводной сети во время загрузки или с помощью простой команды типа service network start из командной строки. Эта служба по-прежнему доступна, хотя команды перенаправляются через systemd.

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

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

NetworkManager

Компания Red Hat представила NetworkManager в 2004 году для упрощения и автоматизации настройки сети и подключений, особенно беспроводных. Цель состоит в том, чтобы избавить пользователя от необходимости вручную настраивать каждую новую беспроводную сеть. Несмотря на то, что эта программа призвана облегчить управление сетью для нетехнических пользователей, она требует некоторой адаптации от администратора Linux, поскольку многие привычные функции настройки теперь выполняются новым уровнем конфигурационных файлов и скриптов. Это означает, что стандартные файлы конфигурации могут быть перезаписаны NetworkManager при каждом перезапуске сети, включая каждую перезагрузку.

Демон udev - это менеджер устройств ядра, который должен обеспечивать последовательное и постоянное именование устройств для всех устройств, включая сетевые устройства и съемные накопители. Он также используется для сопоставления имен сетевых устройств, например, eth0 или eno1, с MAC-адресом сетевого интерфейса.

Как это работает.

Менеджер устройств udev обнаруживает, когда в систему добавляется новое устройство, например новый сетевой интерфейс, и создает правило для его идентификации и присвоения ему имени, если такового еще не существует. В последних версиях Fedora, CentOS и RHEL детали этого процесса изменились. Текущая процедура именования устройств подробно описана в руководстве по сетевым технологиям RHEL 7, а также описание того, как определяются имена.

В настоящее время для создания правил используется содержимое файлов конфигурации интерфейсов. Однако, если файл конфигурации интерфейса не существует, подключение нового устройства или подключение к новой беспроводной сети заставляет udev уведомить NetworkManager о новом устройстве или беспроводном соединении. Затем NetworkManager создает новый файл конфигурации интерфейса.
Демон udev создает запись для каждого сетевого интерфейса в файле сетевых правил. NetworkManager использует эти записи, а также информацию в файлах конфигурации интерфейса в каталоге /etc/sysconfig/network-scripts/ для инициализации каждого интерфейса.

Выбор администратора

Можно использовать старую сетевую службу и отключить NetworkManager. Существует множество руководств, описывающих, как отключить NetworkManager и вернуться к использованию сетевой службы, включая это, поэтому я не буду вдаваться в эти подробности здесь.
Я лично не рекомендую возвращаться к старой сетевой службе, потому что, как только я понял, как NetworkManager и udev работают вместе, обеспечивая согласованную схему именования и автоматическую настройку как существующих, так и новых устройств, все стало понятно и упростило управление сетевыми интерфейсами. На мой взгляд, NetworkManager - это лучшее из двух миров.

Avatar for Gnostis
Gnostis
Добавить комментарий