Перейти к содержанию

15.2 Настройка параметров сетевой адресации (Configuring Network Addressing Parameters)

Наиболее распространённый сетевой интерфейс, с которым вам придётся работать в системе Linux, — это интерфейс Ethernet. Обратите внимание, что в Linux под «сетевым интерфейсом» (network interface) понимается:

  • физическое оборудование сетевой платы (NIC), установленной в системе;
  • модули ядра (драйверы), загружаемые для поддержки физической сетевой платы;
  • параметры конфигурации IP-сети, назначенные этому интерфейсу.

Чтобы установить сетевой интерфейс Ethernet в систему, необходимо выполнить следующие задачи:

  • установить плату Ethernet;
  • настроить параметры IPv4;
  • настроить параметры маршрутизации;
  • настроить параметры распознавания имён;
  • настроить IPv6.

Начнём с обсуждения того, как установить плату Ethernet в систему.

Установка платы Ethernet (Installing the Ethernet Board)

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

  1. Выключите систему.
  2. Установите плату Ethernet в свободный слот расширения.
  3. Подключите плату Ethernet к сетевому коммутатору или концентратору с помощью соответствующего кабеля.
  4. Включите систему. Если вы установили современную плату Ethernet, операционная система Linux, скорее всего, обнаружит её при загрузке и автоматически загрузит необходимые модули ядра. В противном случае вам, возможно, придётся загрузить соответствующий модуль с сайта производителя платы и загрузить его вручную.

После загрузки системы следует проверить файл конфигурации модулей и убедиться, что нужный модуль ядра загружен и для новой платы создан псевдоним. Файл для проверки зависит от вашего дистрибутива. Одни дистрибутивы используют файл /etc/modprobe.conf или /etc/modules.conf, другие — конфигурационный файл в каталоге /etc/modprobe.d. Например, в системе openSUSE (установленной в виртуальной машине VMware) используется файл /etc/modprobe.d/50-vmnics.conf, показанный на рис. 15-9.

Рис. 15-9. Файл конфигурации модуля ядра для платы Ethernet.

Рис. 15-9. Файл конфигурации модуля ядра для платы Ethernet.

Псевдоним, используемый для вашего сетевого интерфейса, зависит от дистрибутива. В более старых дистрибутивах, использующих init, адаптерам Ethernet присваиваются следующие псевдонимы:

  • eth0 — первый адаптер Ethernet в системе;
  • eth1 — второй адаптер Ethernet в системе;
  • eth2 — третий адаптер Ethernet и так далее.

В более новых дистрибутивах, использующих systemd, эти псевдонимы больше не применяются. Они хорошо работали, пока в системе не было нескольких сетевых адаптеров. Иногда возникали ситуации, когда псевдонимы интерфейсов менялись между адаптерами. Например, данный интерфейс мог быть eth0 при одной загрузке, а при следующей — получить псевдоним eth1. Как можно себе представить, это могло серьёзно нарушить работу сетевых служб, таблиц маршрутизации и правил брандмауэра.

Для решения этой проблемы systemd использует предсказуемые имена сетевых интерфейсов (predictable network interface names). Одним из ключевых преимуществ этого подхода является то, что конкретные псевдонимы можно постоянно закреплять за конкретными сетевыми интерфейсами. Предсказуемые имена сетевых интерфейсов назначаются на основе одного из следующих параметров (в порядке предпочтения):

  • Для встроенного сетевого адаптера (onboard network adapter) для построения псевдонима используется порядковый номер, предоставляемый системной прошивкой (или BIOS). Распространённый псевдоним, созданный по этому параметру, — eno1. Элементы этого имени:
    • en — интерфейс Ethernet;
    • o1 — порядковый номер встроенного устройства (в данном случае — устройство номер 1).
  • Если сетевой адаптер подключён к слоту горячей замены PCI-E, а не встроен в материнскую плату, systemd использует порядковый номер самого слота, предоставляемый прошивкой (или BIOS). Распространённый псевдоним — ens1. Элементы:
    • en — интерфейс Ethernet;
    • s1 — порядковый номер слота горячей замены (в данном случае — слот номер 1).
  • Если предыдущие варианты неприменимы, systemd попытается построить псевдоним, используя имя физического разъёма, к которому подключён интерфейс, например USB-разъёма. Распространённый псевдоним — enp2s0. Элементы:
    • en — интерфейс Ethernet;
    • p2 — номер шины (в данном случае — USB-шина номер 2);
    • s0 — номер слота на шине (в данном случае — слот номер 0).
  • Если ничто другое не подходит, systemd попытается использовать MAC-адрес интерфейса для построения псевдонима. Формат: enx, за которым следует MAC-адрес.

Обратите внимание, что в приведённом списке каждый пример имени интерфейса начинается с en. Это связано с тем, что предполагается работа со стандартными интерфейсами Ethernet. Другие типы интерфейсов используют иные соглашения об именовании:

  • en — для адаптеров Ethernet;
  • sl — для интерфейсов serial line IP;
  • wl — для интерфейсов WLAN.

На данном этапе сетевой интерфейс загружен и активен. Однако перед использованием его необходимо настроить с использованием протокола IP. Рассмотрим, как это делается.

Настройка параметров IPv4 (Configuring IPv4 Parameters)

Напомним, что для участия системы в компьютерной сети на основе протокола IP необходимо настроить сетевой интерфейс с четырьмя параметрами:

  • IP-адрес;
  • маска подсети;
  • адрес шлюза по умолчанию;
  • адрес DNS-сервера.

Это можно сделать двумя способами, описанными в таблице 15-2.

Вариант Описание Преимущества Недостатки
Статическое назначение адреса В этой конфигурации вы вручную настраиваете сетевой узел с параметрами IP-адреса. Адрес, используемый конкретным узлом, никогда не меняется. Этот вариант, как правило, используется для серверов в сети. Узел потребляет адрес независимо от того, включена система или нет. Этот подход также требует значительных усилий от системного администратора: необходимо посетить каждый компьютер в сети и вручную задать параметры IP.
Динамическое назначение адреса В этой конфигурации сетевой узел при загрузке обращается к серверу DHCP (Dynamic Host Configuration Protocol). Сервер DHCP динамически назначает IP-адрес узлу на определённый период времени, называемый арендой (lease). Этот вариант делает настройку параметров IP для большого числа сетевых узлов очень простой: просто включите систему, и она получит сведения об IP-адресе. Кроме того, он экономит использование IP-адресов: адреса, используемые выключенными системами, могут быть переназначены другим сетевым узлам. Необходим установленный и настроенный DHCP-сервер. Кроме того, адрес, назначенный конкретному узлу, может часто меняться, что делает этот вариант непригодным для узлов сетевой инфраструктуры, таких как серверы. По этой причине данный вариант, как правило, используется для рабочих станций.

Таблица 15-2. Варианты назначения IP-адресов.

Для статического назначения параметров IP-адреса системе Linux можно использовать команду ifconfig. Если ifconfig вводится без параметров, она отображает текущее состояние всех сетевых интерфейсов системы, как показано на рис. 15-10.

Рис. 15-10. Использование ifconfig для просмотра информации о сетевом интерфейсе.

Рис. 15-10. Использование ifconfig для просмотра информации о сетевом интерфейсе.

Примечание

При запуске ifconfig вы заметите, что в системе, скорее всего, перечислено два и более интерфейса, а не один. Дополнительный интерфейс с меткой lo — это петлевой интерфейс (loopback interface), которому обычно назначается специальный IP-адрес 127.0.0.1. Это виртуальный интерфейс, а не реальный аппаратный. Он используется для внутренних коммуникаций, диагностики и тому подобного.

На рис. 15-10 отображаются два сетевых интерфейса: ens32 и lo. Интерфейс ens32 — это сетевой интерфейс Ethernet, установленный в системе. Интерфейс lo — виртуальный петлевой сетевой интерфейс. Интерфейс lo необходим для правильной работы многих служб Linux, поэтому не изменяйте его настройки. Обратите внимание, что ifconfig также отображает подробную информацию о каждом сетевом интерфейсе. Некоторые наиболее важные параметры перечислены в таблице 15-3.

Параметр ifconfig Описание
HWaddr MAC-адрес сетевой платы
inet addr IP-адрес, назначенный интерфейсу
Bcast Широковещательный адрес сегмента сети
Mask Маска подсети, назначенная интерфейсу
RX packets Статистика принятых пакетов
TX packets Статистика переданных пакетов
Collisions Количество обнаруженных коллизий Ethernet
RX bytes Количество байт данных, принятых интерфейсом с момента его включения
TX bytes Количество байт данных, переданных интерфейсом с момента его включения

Таблица 15-3. Вывод ifconfig.

Помимо отображения информации о сетевом интерфейсе, ifconfig также может настраивать интерфейс с параметрами IP-адреса. Синтаксис команды: ifconfig интерфейс ip_адрес netmask маска_подсети broadcast широковещательный_адрес. Например, чтобы назначить интерфейсу ens32 IP-адрес 192.168.1.1, маску подсети 255.255.255.0 и широковещательный адрес 192.168.1.255, введите в командной строке:

ifconfig ens32 192.168.1.1 netmask 255.255.255.0 broadcast 192.168.1.255

Важно помнить, что данное назначение IP-адреса непостоянно: при перезагрузке системы оно будет утеряно. Чтобы сделать его постоянным, необходимо настроить специальный файл в каталоге /etc/sysconfig/network. Например, файл, используемый для настройки интерфейса Ethernet в системе openSUSE, называется ifcfg-ens32.

Примечание

В некоторых дистрибутивах этот файл называется с использованием MAC-адреса сетевой платы. Например, ifcfg-eth-id-00:0c:29:d1:52:d4 будет файлом конфигурации для интерфейса Ethernet с MAC-адресом 00:0C:29:D1:52:D4 (если в системе установлена только одна сетевая плата). В других дистрибутивах файл называется по псевдониму, назначенному интерфейсу, например eth0, ens1 и так далее.

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

openSUSE:~ # cat /etc/sysconfig/network/ifcfg-ens32
BOOTPROTO='dhcp'
BROADCAST=''
ETHTOOL_OPTIONS=''
IPADDR=''
MTU=''
NAME='82545EM Gigabit Ethernet Controller (Copper)'
NETMASK=''
NETWORK=''
REMOTE_IPADDR=''
STARTMODE='auto'
USERCONTROL='no'

Некоторые параметры конфигурации, которые можно использовать в этом файле, перечислены в таблице 15-4.

Параметр Описание Другие возможные значения
BOOTPROTO="static" Указывает на использование статического IP-адреса. Задайте dhcp для динамического назначения адреса.
STARTMODE="auto" Указывает, что интерфейс должен быть активирован при загрузке системы. Задайте manual для ручного запуска интерфейса. В некоторых дистрибутивах вместо auto используется onboot.
IPADDR="192.168.1.81/24" Назначает IP-адрес 192.168.1.10 интерфейсу с маской подсети 255.255.255.0.
NETMASK="маска_подсети" Если префикс не задан в нотации CIDR в параметре IPADDR, можно использовать NETMASK= для назначения маски подсети.
NETWORK="192.168.1.0" Задаёт сетевой адрес сегмента, к которому подключён интерфейс.
BROADCAST="192.168.1.255" Задаёт широковещательный адрес сегмента, к которому подключён интерфейс.
REMOTE_IPADDR= Задаёт IP-адрес удалённого узла в соединении типа «точка-точка».
MTU= Задаёт размер максимального блока передачи (Maximum Transmission Unit), который по умолчанию составляет 1500 в сети Ethernet. Если сеть использует кадры Jumbo Frame, этот параметр можно установить в 9000.
ETHTOOL_OPTIONS= Задаёт аргументы команды для утилиты ethtool.
LABEL_0='0', IPADDR_0='2607:f0d0:1002:0011:0000:0000:0000:0003', PREFIXLEN_0='64' Эти параметры используются для назначения IPv6-адреса интерфейсу eth0.

Таблица 15-4. Настройка постоянных параметров для сетевого интерфейса.

Строки для IPADDR, NETMASK, NETWORK и BROADCAST не требуются, если параметр BOOTPROTO установлен в значение dhcp. Файл /etc/hostname задаёт имя хоста вашей системы Linux.

После внесения изменений в эти файлы необходимо перезапустить сетевой интерфейс для применения изменений. Для этого введите ifdown интерфейс, а затем ifup интерфейс, где интерфейс — псевдоним интерфейса, например ens32.

Это хорошо при необходимости статического назначения адреса, но что если нужно получить адрес динамически от DHCP-сервера? Для этого используется команда dhclient в командной строке. Синтаксис: dhclient интерфейс. Например, введите dhclient ens32, чтобы интерфейс получил информацию об IP-адресе динамически от DHCP-сервера. Это показано на рис. 15-11.

Рис. 15-11. Использование dhclient для получения аренды IP-адреса.

Рис. 15-11. Использование dhclient для получения аренды IP-адреса.

Обратите внимание, что утилита dhclient широковещательно отправила пакет DHCPREQUEST на интерфейс ens32. В ответ DHCP-сервер с IP-адресом 10.0.0.1 отправил пакет DHCPACK с IP-адресом 10.10.0.83, назначенным интерфейсу ens32.

Ещё одна утилита для управления IP-адресацией в системе Linux — команда ip. Например, для просмотра текущей конфигурации введите ip addr show в командной строке:

openSUSE:/ # ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 brd 127.255.255.255 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast
state UP qlen 1000
    link/ether 00:0c:29:b0:9f:b5 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.83/24 brd 10.0.0.255 scope global ens32
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:feb0:9fb5/64 scope link
       valid_lft forever preferred_lft forever

Для настройки параметров IP-адресации с помощью команды ip введите ip addr add ip_адрес dev интерфейс. Например, чтобы назначить интерфейсу ens32 IP-адрес 10.0.0.84, введите ip addr add 10.0.0.84 dev ens32. Чтобы удалить IP-адрес с интерфейса, введите ip addr del ip_адрес dev интерфейс.

Также команда ip позволяет отключать и включать сетевые интерфейсы. Для отключения интерфейса введите ip link set интерфейс down. Для повторного включения отключённого интерфейса введите ip link set интерфейс up.

Помимо описанных утилит командной строки, большинство дистрибутивов Linux предоставляют графический интерфейс для настройки сетевых интерфейсов. Например, в SUSE Linux можно использовать модуль YaST «Параметры сети» (Network Settings) для настройки как сетевой платы, так и назначенных ей параметров IP-адреса. Этот модуль показан на рис. 15-12.

Рис. 15-12. Использование модуля YaST «Параметры сети».

Рис. 15-12. Использование модуля YaST «Параметры сети».

Рассмотрим работу с командой ifconfig на следующем практическом упражнении.

Упражнение 15-1. Работа с сетевыми интерфейсами

В этом упражнении вы будете практиковаться в использовании команды ifconfig для управления сетевым интерфейсом. Упражнение можно выполнить на виртуальной машине, прилагаемой к книге. Загрузите снимок 15-1 для корректно настроенной среды.

VIDEO Посмотрите видео «Упражнение 15-1» для ознакомления с порядком выполнения этой задачи.

Выполните следующее:

  1. Загрузите систему Linux и войдите под учётной записью пользователя student с паролем student.
  2. Откройте сеанс терминала.
  3. Перейдите в учётную запись суперпользователя root, введя su – с паролем student.
  4. Введите в командной строке ifconfig. Запишите следующую информацию о вашем интерфейсе Ethernet:
    • MAC-адрес
    • IP-адрес
    • Широковещательный адрес
    • Маска подсети
  5. Введите в командной строке cd /etc/sysconfig/network для перехода в соответствующий каталог.
  6. Используйте команду ls для определения файла конфигурации вашей сетевой платы.
  7. Используйте команду cat для просмотра содержимого файла конфигурации вашей платы Ethernet.
  8. Отключите интерфейс, введя ifdown имя_интерфейса в командной строке.
  9. Снова включите интерфейс, введя ifup имя_интерфейса в командной строке.
  10. Измените IP-адрес вашего интерфейса Ethernet на 192.168.1.100, введя в командной строке: ifconfig имя_интерфейса 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255
  11. Введите ifconfig ещё раз и убедитесь, что изменение применено.
  12. Используйте команду ifconfig для возврата исходных параметров IP-конфигурации.
  13. Если в вашем сетевом сегменте есть DHCP-сервер, измените конфигурацию сетевого интерфейса для использования DHCP и динамически назначьте IP-адрес плате Ethernet, введя dhclient имя_интерфейса в командной строке.

Настройка параметров маршрутизации (Configuring Routing Parameters)

Возможно, вы заметили, что в предыдущих разделах этой главы мы не настраивали два важных параметра IP: адрес шлюза по умолчанию и адрес DNS-сервера.

Используя протокол IP, маршрутизаторы (routers) делают именно то, что следует из их названия: они маршрутизируют данные по нескольким сетям для доставки информации узлу назначения. Маршрутизаторы работают на сетевом уровне (Network layer) и используются для соединения различных сетей между собой.

Маршрутизаторы обычно реализуются совместно со шлюзом (gateway). Аппаратная часть маршрутизатора может быть столь же простой, как компьютерная система с двумя установленными сетевыми платами, или специализированным аппаратным устройством для маршрутизации.

Одна из ключевых задач маршрутизаторов — определить наилучший способ доставки информации нужному узлу назначения. Для этого маршрутизатор поддерживает таблицу маршрутизации (routing table) с доступными маршрутами. Маршрутизаторы используют алгоритм, оценивающий расстояние, стоимость и состояние сети для определения наилучшего маршрута. Каждая система Linux поддерживает таблицу маршрутизации в оперативной памяти для определения направления отправки данных в сети, даже если она не настроена как маршрутизатор.

При настройке параметров сети в системе Linux одной из ключевых задач является настройка адреса шлюза по умолчанию (default router address). Шлюз по умолчанию — это место назначения пакетов, если они адресованы узлу, не находящемуся в локальном сегменте сети. Адрес шлюза по умолчанию хранится в файле /etc/sysconfig/network/routes:

openSUSE:/ # cat /etc/sysconfig/network/routes
default 10.0.0.1 - ens32

Синтаксис указания маршрута по умолчанию в этом файле: default адрес_IP_маршрутизатора. В приведённом примере адрес шлюза по умолчанию установлен на 10.0.0.1.

Совет

Если в системе установлено несколько сетевых плат и для каждого интерфейса требуется собственная конфигурация маршрутизации (например, если каждая плата подключена к разной сети), можно определить дополнительный файл конфигурации маршрутизации в /etc/sysconfig/network/ с именем ifroute-имя_интерфейса.

Синтаксис добавления маршрута в файл routes:

НАЗНАЧЕНИЕ    ШЛЮЗ    МАСКА_СЕТИ    ИНТЕРФЕЙС    [ТИП]

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

Примечание

Рекомендуется использовать IP-адреса, а не DNS-имена в этом файле. Если DNS-сервер выйдет из строя или станет недоступным, маршрутизация перестанет работать!

Второй столбец содержит IP-адрес маршрутизатора, через который можно достичь указанного узла или сети. В этом столбце укажите IP-адрес маршрутизатора, который может направить информацию к удалённой сети или узлу.

Третий столбец содержит маску подсети для сети или узла за маршрутизатором. Четвёртый столбец применяет маршрут к конкретному интерфейсу. Если ничего не указано, маршрут применяется ко всем интерфейсам.

Примечание

Если нужно оставить столбец в этом файле пустым, обязательно введите дефис (-).

Пятый столбец является необязательным. Он используется для указания типа маршрута. Допустимые значения:

  • unicast — маршрут указывает реальный путь к маршруту назначения;
  • local — назначение является локальным узлом; пакеты, отправленные по этому маршруту, возвращаются в петлю и доставляются локальному компьютеру;
  • broadcast — назначение является широковещательным адресом; пакеты отправляются как широковещательные на канальном уровне;
  • multicast — используется для многоадресной маршрутизации; этот тип маршрута обычно не применяется в большинстве таблиц маршрутизации;
  • unreachable — настраивает назначение маршрута как недостижимое; пакеты, отправленные по этому маршруту, молча отбрасываются.

Пример записи в файле routes:

207.68.156.51    207.68.145.45    255.255.255.0    ens32

После внесения изменений в файл routes необходимо перезапустить сетевой интерфейс, введя ifdown интерфейс, а затем ifup интерфейс.

Для подготовки к экзамену LPIC-1/CompTIA Linux+ также необходимо знать, как управлять маршрутами с помощью команды route в командной строке. Команда route используется для отображения или изменения таблицы маршрутизации на узле Linux. Если ввести route без параметров, она просто отображает текущую таблицу маршрутизации:

openSUSE:/ # route
Kernel IP routing table
Destination    Gateway      Genmask         Flags Metric Ref  Use Iface
default        10.0.0.1     0.0.0.0         UG    0      0      0 ens32
10.0.0.0       *            255.255.255.0   U     0      0      0 ens32
loopback       *            255.0.0.0       U     0      0      0 lo

Маршруты можно добавить в таблицу маршрутизации узла, введя route add –net сетевой_адрес netmask маска_подсети gw адрес_маршрутизатора. Например, чтобы добавить маршрут к сети 192.168.2.0/24 через маршрутизатор с IP-адресом 10.0.0.254:

route add –net 192.168.2.0 netmask 255.255.255.0 gw 10.0.0.254

Также можно удалять существующие маршруты из таблицы маршрутизации: route del –net сетевой_адрес netmask маска_подсети gw адрес_маршрутизатора. Например, для удаления только что добавленного маршрута:

route del –net 192.168.2.0 netmask 255.255.255.0 gw 10.0.0.254

Командой route также можно задать маршрут по умолчанию: route add default gw адрес_маршрутизатора. Например, для добавления 10.0.0.254 в качестве шлюза по умолчанию:

route add default gw 10.0.0.254

Совет

Изменения, сделанные командой route, непостоянны! Если нужно, чтобы изменения маршрутизации сохранялись после перезагрузки, их необходимо добавить в файл /etc/sysconfig/network/routes.

Для управления маршрутизацией также можно использовать команду ip. Например, для просмотра таблицы маршрутизации введите ip route show:

openSUSE:/ # ip route show
default via 10.0.0.1 dev ens32
10.0.0.0/24 dev ens32 proto kernel  scope link  src 10.0.0.83
127.0.0.0/8 dev lo scope link

Для добавления статического маршрута в таблицу с помощью ip: ip route add сеть/префикс via ip_адрес_маршрутизатора dev интерфейс. В следующем примере добавляется маршрут к сети 192.168.5.0/24 через маршрутизатор с IP-адресом 10.0.0.254:

openSUSE:/ # ip route add 192.168.5.0/24 via 10.0.0.254 dev ens32
openSUSE:/ # ip route show
default via 10.0.0.1 dev ens32
10.0.0.0/24 dev ens32 proto kernel scope link src 10.0.0.83
127.0.0.0/8 dev lo scope link
192.168.5.0/24 via 10.0.0.254 dev ens32

Для удаления маршрута из таблицы: ip route del сеть/префикс. Например, для удаления только что добавленного маршрута 192.168.5.0/24:

ip route del 192.168.5.0/24

Настройка параметров распознавания имён (Configuring Name Resolver Settings)

При настройке параметров IP для сетевого интерфейса также необходимо указать имя хоста системы и IP-адрес DNS-сервера. Как опытный пользователь Интернета, вы знаете, что для перехода к определённым узлам в Сети можно использовать доменные имена. Однако система Linux (как и любая другая операционная система) не может работать непосредственно с буквенно-цифровыми доменными именами.

Например, когда вы открываете браузер и вводите http://www.google.com в адресной строке, браузер, стек протоколов IP и операционная система не знают, куда именно обращаться. Для работы с такими именами локальная система должна сначала преобразовать (resolve) доменные имена в IP-адреса.

В прошлом базовое преобразование имён хостов в IP-адреса выполнялось файлом /etc/hosts, содержащим соответствия IP-адресов и имён хостов.

Примечание

Файл /etc/hosts по-прежнему существует в системах Linux. Фактически он является первым распознавателем имён, используемым по умолчанию. Только если запись для запрашиваемого доменного имени не найдена в файле hosts, операционная система попытается разрешить имя хоста с помощью DNS. По этой причине необходимо тщательно управлять файлом hosts. Многие сетевые взломы эксплуатируют эту функцию операционной системы: вредоносный сайт или программа могут попытаться переписать файл hosts с соответствиями имён, указывающими на поддельные сайты в Интернете, которые выглядят как ваши любимые аукционные или банковские сайты, но на самом деле являются фишинговыми сайтами, предназначенными для кражи личных данных.

Файл hosts содержит по одной строке на запись хоста. Синтаксис:

IP_адрес имя_хоста псевдоним

Например:

192.168.1.1 mylinux.mydom.com mylinux

Эта запись преобразует как полностью квалифицированное DNS-имя mylinux.mydom.com, так и псевдоним (CNAME) mylinux в IP-адрес 192.168.1.1. Обычно в этом файле хранятся только IP-адрес и имя хоста локальной системы, но можно добавить и другие записи.

Использование файла hosts для разрешения имён хостов вполне работоспособно, однако его нецелесообразно использовать как единственное средство разрешения имён. Для разрешения всех доменных имен в Интернете файл должен был бы быть огромным. Кроме того, при изменении доменного имени в Интернете вам пришлось бы вручную добавлять, удалять и изменять соответствия имён хостов. Можно себе представить, насколько сложно было бы управлять таким файлом hosts для целой сети пользователей!

Лучший вариант — отправить доменное имя на DNS-сервер. Когда DNS-сервер (Domain Name System server) получает запрос на разрешение имени, он сопоставляет переданное доменное имя с IP-адресом и возвращает его запрашивающей системе. После этого система может обратиться к указанному узлу по его IP-адресу. Процесс работает следующим образом:

  1. Система, которой нужно разрешить имя хоста, отправляет запрос на DNS-сервер на порт 53 по IP. Если DNS-сервер является авторитативным (authoritative) для зоны, в которой находится запрашиваемое имя хоста, он отвечает соответствующим IP-адресом. В противном случае процесс переходит к шагу 2.

    Примечание

    DNS-сервер считается авторитативным, если в его базе данных соответствий имён есть запись для запрашиваемого доменного имени.

  2. DNS-сервер отправляет запрос корневому DNS-серверу. В Интернете существует 13 корневых DNS-серверов. Каждый DNS-сервер автоматически настраивается с IP-адресами этих серверов. Корневые DNS-серверы настроены с записями, разрешающими адреса авторитативных DNS-серверов для каждого домена верхнего уровня (.com, .gov, .edu, .au, .de, .uk, .ca и так далее).

  3. Корневой DNS-сервер отвечает вашему DNS-серверу IP-адресом DNS-сервера, авторитативного для домена верхнего уровня разрешаемого доменного имени.
  4. Ваш DNS-сервер отправляет запрос на разрешение имени к DNS-серверу, авторитативному для домена верхнего уровня имени хоста (например, .com).
  5. DNS-сервер домена верхнего уровня отвечает вашему DNS-серверу IP-адресом DNS-сервера, авторитативного для DNS-зоны разрешаемого имени хоста.
  6. Ваш DNS-сервер отправляет запрос на разрешение имени к DNS-серверу, авторитативному для зоны, в которой находится разрешаемое имя хоста.
  7. Авторитативный DNS-сервер отвечает вашему DNS-серверу IP-адресом для данного имени хоста.
  8. Ваш DNS-сервер отвечает вашей системе IP-адресом, соответствующим имени хоста, после чего устанавливается связь с указанным узлом по этому IP-адресу.

Примечание

После того как этот процесс выполнен для конкретного соответствия имени, большинство DNS-серверов кэшируют это соответствие на определённое время. Таким образом, если запрос на разрешение того же имени хоста поступит снова, DNS-сервер может ответить клиенту напрямую, не проходя весь этот процесс заново.

Таким образом, для работы этой системы необходимо указать системе IP-адрес DNS-сервера. Это настраивается в файле /etc/resolv.conf, определяющем поисковый суффикс и используемые серверы имён. Пример содержимого файла resolv.conf в системе openSUSE:

search mydom.com
nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 192.168.2.1

Как видно из примера, файл содержит два типа записей:

  • search — задаёт доменное имя, которое должно использоваться для дополнения неполных имён хостов. Например, при попытке разрешить имя хоста WS1 оно будет автоматически преобразовано в полностью квалифицированное доменное имя WS1.mydom.com. Синтаксис: search домен.
  • nameserver — задаёт IP-адрес DNS-сервера для разрешения имён. Можно настроить до трёх DNS-серверов. Если первый сервер недоступен или не отвечает, используется следующий. Синтаксис: nameserver IP_адрес_DNS_сервера.

Для определения порядка, в котором будут использоваться службы для разрешения имён, используется файл /etc/nsswitch.conf (name service switch). Вот две строки, которые необходимо знать:

hosts:     files dns
networks:  files dns

Эти две записи указывают, что сначала для разрешения имён используется файл /etc/hosts (files). Если подходящей записи не найдено, запрос отправляется на DNS-сервер (dns), указанный в файле resolv.conf.

Совет

Для отображения или задания имени хоста системы можно использовать команду hostname в командной строке. Также можно использовать команду dnsdomainname для отображения DNS-доменного имени системы.

Настройка IPv6 (Configuring IPv6)

Прежде чем двигаться дальше, необходимо уделить время настройке адресации IPv6. Существует несколько вариантов настройки адресов IPv6. Первый — статическое назначение. Как и для IPv4, статическое назначение IPv6-адресов требует вручную назначить полный 128-битный IPv6-адрес и префикс узлу. Это можно сделать из командной строки с помощью утилит ifconfig или ip. Либо можно вручную ввести адрес и префикс в соответствующий файл конфигурации интерфейса в /etc/sysconfig/network.

Другой вариант — статическое частичное назначение (static partial assignment): префикс назначается статически, а часть идентификатора интерфейса генерируется автоматически на основе MAC-адреса хоста.

Ещё один вариант — автоконфигурация без сохранения состояния (Stateless Address Autoconfiguration, SLAAC). При использовании SLAAC узлы IPv6 автоматически генерируют собственный идентификатор интерфейса, но для получения корректного префикса и адреса шлюза по умолчанию они должны обратиться к сетевому маршрутизатору (как правило, шлюзу по умолчанию) с использованием протокола обнаружения соседей (Neighbor Discovery Protocol, NDP). NDP использует следующие сообщения для автоконфигурации:

  • Сообщения запроса маршрутизатора (Router Solicitation, RS) отправляются сетевыми узлами с запросом ответа от любого прослушивающего маршрутизатора.
  • Сообщения объявления маршрутизатора (Router Advertisement, RA) отправляются маршрутизатором в ответ на сообщения RS от сетевых узлов. Эти сообщения информируют сетевые узлы о корректном IPv6-префиксе для использования, а также об адресе шлюза по умолчанию.

NDP также используется сетевыми узлами для обнаружения MAC-адресов других интерфейсов в сети, полностью заменяя тем самым ARP при использовании IPv6. Однако NDP не может предоставлять сетевым узлам адрес DNS-сервера — он может передавать только сетевой префикс и адрес шлюза по умолчанию.

Последний вариант настройки адресов IPv6 — использование DHCP. Как и для IPv4, назначение адресов IPv6 может выполняться автоматически с помощью обновлённой версии DHCP — DHCPv6. Поскольку IPv6 имеет значительно больше вариантов настройки, чем IPv4, DHCPv6 работает иначе. Существует два режима:

  • DHCPv6 с сохранением состояния (Stateful DHCPv6) — настраивает DHCP-сервер для предоставления каждому IPv6-клиенту DHCP IP-адреса, адреса шлюза по умолчанию и IP-адреса DNS-сервера. DHCP-сервер отслеживает состояние каждого IPv6-клиента DHCP, откуда и название — «с сохранением состояния».
  • DHCPv6 без сохранения состояния (Stateless DHCPv6) — не назначает IPv6-адреса клиентам IPv6 и не отслеживает их состояние. В этой конфигурации сервер DHCPv6 просто назначает сетевым узлам IP-адрес DNS-сервера. Очевидно, что DHCPv6 без сохранения состояния не предоставляет полного решения для адресации. Вместо этого он должен использоваться совместно с другими схемами назначения IPv6-адресов, например SLAAC.

При загрузке узел IPv6 выполняет следующий процесс для настройки адреса на своём сетевом интерфейсе:

  1. Узел автоматически генерирует IPv6 локальный канальный адрес (link-local address), используя канальный локальный префикс (обычно начинается с FE80) в сочетании с идентификатором интерфейса, производным от его MAC-адреса.
  2. Узел отправляет сообщение запроса соседа (Neighbor Solicitation, NS), адресованное его собственному локальному канальному адресу, чтобы убедиться, что другой узел в сети уже не использует его.
  3. Узел рассылает многоадресное сообщение RS, которое должны получить все маршрутизаторы в том же сегменте сети. Если ни один маршрутизатор не отвечает, узел пытается использовать DHCPv6 с сохранением состояния для получения IPv6-адреса.
  4. Если маршрутизатор получает сообщение RS, он отправляет многоадресное сообщение RA всем узлам в сегменте. Сообщение RA определяет способ настройки IPv6-адреса. Возможные варианты:
    • Получить всю конфигурационную информацию IPv6 от DHCPv6-сервера. В этом случае узел отправляет сообщение REQUEST любому прослушивающему DHCPv6-серверу.
    • Использовать автоконфигурацию без сохранения состояния: получить префикс и шлюз по умолчанию из сообщения RA, а часть идентификатора интерфейса сгенерировать автоматически. Адрес DNS-сервера должен быть затем получен от DHCPv6-сервера.
  5. Если был настроен статический IPv6-адрес или использована автоконфигурация с сохранением состояния, узел отправляет сообщение NS, чтобы убедиться, что никто другой не использует его адрес.

Далее рассмотрим некоторые инструменты для диагностики сетевых неполадок в Linux.