Ens3 ubuntu что это

Обновлено: 07.07.2024

Сегодня я хочу рассказать о сетевых настройках в системах CentOS и Debian. Прежде всего статья будет полезна новичкам в Linux. Все действия описываемые в этой статье, рекомендую сначала воспроизводить на виртуальной машине, для тренировки, во избежание неприятностей на реальной машине в сети.

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

Как узнать свой ip-адрес

Чтобы узнать ip-адрес системы можно выполнить следующие команды:

На данный момент команда ifconfig является хоть и устаревшей, но еще работающей командой (В CentOS требуется установить пакет net-tools). Начиная с ядра версии 2.2 ей на смену пришел пакет iproute2, состоящий из утилит: ip, tc, ss.

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

Настройка сетевых интерфейсов в CentOS происходит правкой конфигурационных файлов. Файлы интерфейсов хранятся в директории /etc/sysconfig/network-scripts, каждый отвечает за свой интерфейс, таким образом сколько интерфейсов, столько и файлов. Во время установки создается дефолтный файл с именем - ifcfg-enp0s3.

Рассмотрим самые важные параметры и значения, чтобы понимать что к чему. Более подробно все параметры описаны в официальной документации Red Hat.

  • TYPE - задает тип сетевого адаптера, в данном случае "Ethernet".
  • BOOTPROTO - способ назначения ip-адреса. Может иметь значения: dhcp — динамический ip-адрес, static или none — статический ip-адрес.
  • DEFROUTE - использовать интерфейс в качестве маршрута по умолчанию. Значения yes или no.
  • IPV4_FAILURE_FATAL - В случае отсутствия IPv4 протокола закрывать соединение, по умолчанию no.
  • NAME - имя интерфейса.
  • DEVICE - имя устройства.
  • UUID - идентификационный номер интерфейса.
  • ONBOOT - старт интерфейса при загрузке, значения yes или no.
  • IPV6INIT - включение поддержки IPv6 протокола, значения yes или no.
  • IPV6_AUTOCONF
    IPV6_DEFROUTE
    IPV6_PEERDNS
    IPV6_PEERROUTES
    IPV6_FAILURE_FATAL - дополнительные параметры для IPv6 протокола.

Подобная конфигурация означает получение динамического ip-адреса при каждом запуске. Для назначения статического адреса нужно изменить несколько параметров.

  • BOOTPROTO=none - изменяем на none, тем самым указывая что ip будет статическим.
  • IPADDR=192.168.1.6 - назначаем сам адрес.
  • NETMASK=255.255.255.0 - задаем маску подсети.
  • GATEWAY=192.168.1.1 - указываем адрес шлюза.
  • DNS1=192.168.1.1 - задаем адреса DNS серверов.

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

Перезапустим интерфейс для применения изменений.

Настройка сетевых интерфейсов в Debian & Ubuntu

За конфигурацию интерфейсов в Debian отвечает файл interfaces, расположенный в каталоге /etc/network/. В Debian & Ubuntu все интерфейсы прописываются в одном файле. В Debian интерфейсы именуются eth0, eth1 и т.д. В Ubuntu - enp0s3 и т.д.

Данная конфигурация обозначает получение динамического ip-адреса при загрузке системы.

  • allow-hotplug eth0 - инициализация интерфейса eth0 при определении ядром, грубо говоря запуск.
  • iface eth0 inet dhcp - назначение динамического адреса для eth0, значение inet dhcp.
  • iface lo inet loopback - интерфейс обратной петли lo, локальный интерфейс другими словами.
  • auto lo - старт при загрузке.

Строки начинающиеся со слов "auto", используются для идентификации интерфейсов при их подъеме командой ifup -a (c доп. опцией -a), именно так поднимает интерфейсы система при загрузке. Имена интерфейсов следуют за словом "auto" в этой же строке, ifup поднимет их в порядке перечисления. Строк начинающихся с "auto" может быть несколько.

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

Для задания интерфейса со статическим ip-адресом могут использоваться следующие опции.

  • inet static - указывает на статический ip-адрес
  • address - задает ip-адрес
  • netmask - указание маски подсети
  • gateway - указание шлюза
  • network - указание адреса подсети
  • broadcast - указание широковещательного канала.
  • dns-nameservers - указывает имена DNS-серверов (Если установлен пакет resolvconf)

Интерфейс настроенный на получение статического ip-адреса будет выглядеть так.

Для применения изменений перезапустим интерфейс.

Изменение hostname в CentOS

Для изменения hostname в CentOS нужно проделать несколько манипуляций с конф. файлами. Чтобы узнать текущее имя выполним команду hostname.

Текущее имя системы test. Я хочу изменить его на techlist, делаем следующее.

Изменение hostname в Debian

Существует несколько способов изменения hostname в Debian. Первый способ самый простой, но временный, он действует до первой перезагрузки. Выполните команду - hostname newname, где newname надо заменить на имя которое хотите присвоить системе.

Например я хочу изменить имя системы на techlist

Как я уже говорил, оно действует только до первой перезагрузки системы, так как при загрузке системы идет считывание имени из файла /etc/hostname.

Чтобы изменить имя системы при помощи файла /etc/hostname, отредактируем его:

Чтобы применить изменения внесенные в файл hostname, надо выполнить скрипт hostname.sh

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

За настройку DNS-серверов в CentOS отвечают два файла: сам файл сетевого интерфейса и файл resolv.conf в директории /etc.

Чтобы изменить значения DNS серверов в CentOS, достаточно внести правку в файл интерфейса, при включенном параметре PEERDNS.

Настройка DNS в Debian

Назначить DNS сервера в Debian можно несколькими способами. Правкой файла /etc/resolv.conf и использованием утилиты resolvconf, только не путайте, это совершенно разные вещи.

Прежде чем настраивать DNS нужно узнать стоит ли пакет resolvconf или нет. Узнать можно так:

Если resolvconf не установлен, то можно добавить адреса DNS сразу в файл /etc/resolv.conf, сохранить изменения и перезапустить интерфейс.

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

После установки файл /etc/resolv.conf заменяется ссылкой на /etc/resolvconf/run/resolv.conf. Если понадобится внести свои значения DNS, то сделать это можно через файл интерфейсов.

После чего добавленные DNS адреса, пропишутся в файл resolv.conf автоматически.

Отключение IPv6 протокола

Протокол IPv6 - технология предоставляющая более обширное пространство ip-адресов нежели привычный IPv4. На данный момент редко используется и поддерживается не всем сетевым оборудованием.

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

Узнать свой IPv6 адрес можно следующим способом

Перед тем как отключить поддержку IPv6 протокола надо узнать какая из программ использует его на текущий момент.

Все что начинается с . это IPv6, его используют три демона: sshd, chronyd и master (postfix). Для того чтобы исключить ошибки в дальнейшей работе, надо отключить IPv6 для каждого.

В CentOS

Отключение поддержки IPv6 протокола в CentOS происходит следующим образом.

Также можно убрать все строки начинающиеся с IPV6 в конфигурационном файле интерфейса.

В Debian & Ubuntu

В Debian отключение поддержки IPv6 происходит правкой файла sysctl.conf или правкой файла grub.

Применить изменения в файле sysctl.conf

Иногда бывает что IPv6 приходится отключать путем редактирования параметров загрузки ядра.

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

eth — сетевой интерфейс к карте Ethernet или картам WaveLan (Radio Ethernet).

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

Параметры интерфейса

  • DEVICE: Имя интерфейса.
  • IPADDR: IP-адрес, соответствующий данному сетевому интерфейсу. Пакеты, отправленные по этому адресу, поступят на соответствующий интерфейс.
  • NETMASK: Битовая маска, необходимая для вычисления маршрута передачи IP-пакета.
  • BROADCAST: Адрес, используемый при широковещательной рассылке пакетов через интерфейс.
  • Метрика: Условная характеристика интерфейса соответствующая уровню затрат при передаче информации через него. Используется при маршрутизации пакетов, для выбора оптимального маршрута.
  • MTU: Maximum Transfer Unit. Максимальный размер блока данных обрабатываемого интерфейсом. Наибольшее значение MTU определяется типом интерфейса (например, для Ethernet MTU=1500), но может быть искусственно снижено.
  • MAC-адрес: Аппаратный адрес сетевого устройства, соответствующего интерфейсу (для которых это имеет смысл).

Кроме этих параметров интерфейс характеризуется ещё:

  • Флагами, которые определяют состояния устройства, например такие как: включен ли интерфейс (Up/Down), находится ли он в неразборчивом режиме (promiscuous/nonpromiscuous).
  • Аппаратными характеристиками, такими как адрес памяти, номер IRQ, DMA, порт ввода/вывода.
  • Статистической информацией, характеризующей различные аспекты работы интерфейса. Например, количество переданных/полученных байтов/пакетов, число переполнений, коллизий и др. с момента создания интерфейса.

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

Debian/Ubuntu

Настройки сетевого интерфейса указываются в конфигурационном файле /etc/network/interfaces :

Ubuntu 16.04 LTS

Директивы сетевого интерфейса записываются в файл /etc/network/interfaces . В отличие от Debian и Ubuntu более ранних версий, интерфейсы именуются с префиксом ens , например — ens3 :

Ubuntu 18.04 LTS

В этой версии ОС сеть может задаваться не с помощью networking, а с помощью утилиты netplan.

Конфигурационный файл сетевого интерфейса расположен в каталоге: /etc/netpal/50-cloud-init.yaml . Описание интерфейса выглядит следующим образом:

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

Redhat/Fedora/CentOS

В Redhat, Fedora или CentOS директория, отвечающая за присвоение постоянных IP-адресов - это /etc/sysconfig/network-scripts . В данной директории необходимо создать файл, соответствующий вашему новому виртуальному интерфейсу. Например, на наших боксах подобный файл будет называться ifcfg-eth0:0 .

/etc/sysconfig/network-scripts — каталог, содержащий конфигурационные файлы интерфейсов и скрипты, выполняющие их инициализацию.
/etc/sysconfig/network-scripts/ifup — скрипт, который выполняет настройку и активацию интерфейса.
/etc/sysconfig/network-scripts/ifdown — скрипт, который выполняет деактивацию интерфейса.
/etc/sysconfig/network-scripts/ifcfg-* — конфигурационные файлы, описывающие интерфейсы системы.
/etc/init.d/network — скрипт, выполняющий настройку сетевых интерфейсов и маршрутизации при загрузке.
/etc/sysconfig/network — конфигурационный файл, содержащий имя хоста, IP-адрес основного шлюза и IP-адреса основного и вспомогательного DNS-серверов:

Адрес можно добавить на тот же интерфейс, что и IPv4, новый создавать не нужно.

На нашей площадке используется универсальный шлюз fe80::1 .

CentOS

Для работы с IPv6 необходимо добавить следующие директивы в конфигурационный файл /etc/sysconfig/network :

  • NETWORKING_IPV6 - включаем поддержку IPV6.
  • IPV6_DEFAULTDEV - интерфейс по умолчанию.
  • IPV6_DEFAULTGW - gateway по умолчанию.

IP-адрес назначается в конфигурационном файле /etc/sysconfig/network-scripts/ifcfg-* :

Debian/Ubuntu

IP-адрес добавляется на интерфейс в файле /etc/network/interfaces :

Ubuntu 16.04 LTS

От других систем семейства отличается имя интерфейса, вместо eth0 – ens3.

Ubuntu 18.04 LTS

В файл /etc/netplan/50-cloud-init.yaml нужно добавить:

И применить изменения командой netplan apply.

Несколько IP-адресов

Чтобы назначить дополнительные IPv4-адреса на тот же самый интерфейс, необходимо создать виртуальный интерфейс в виде имя_интерфейса:номер, например eth0:0 .

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

CentOS

Debian/Ubuntu

Ubuntu 16.04 LTS

Для данной ОС не требуется создавать виртуальный интерфейс, достаточно добавить второй IP-адрес на уже существующий, например:

Ubuntu 18.04 LTS с netplan

В интерфейсе описываются необходимые адреса, роутинг происходит через директиву routes .

Несколько IPv6-адресов можно назначать на один интерфейс без создания виртуального. При этом gateway указывается только один раз. Например:

CentOS

Debian/Ubuntu

Ubuntu 16.04 LTS

Nameservers

Необходимые директивы для nameservers добавляются в конфигурационный файл. Указать можно столько DNS-серверов, сколько необходимо.

CentOS

Ubuntu/Debian

Настройка приватной сети

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

У боксов без приватной сети только два интерфейса: lo и eth/ens . У боксов с приватной сетью есть ещё один интерфейс eth/ens , изначально он выключен. Чтобы его включить, надо:

Ubuntu 18.04 LTS и старше

Добавить в файл /etc/netplan/50-cloud-init.yaml :

Важно соблюдать количество пробелов как в остальном файле.

Debian

Добавить в файл /etc/network/interfaces.d/50-cloud-init :

CentOS

Создать файл /etc/sysconfig/network-scripts/ifcfg-eth1 :

Вы можете использовать любые IP-адреса из диапазона приватных. Там же можно узнать, какие маски для каких диапазонов лучше использовать.

Проверить работу приватной сети можно с помощью ssh, ping или любых других подходящих утилит:

Настройка mtu на интерфейсе

Параметр mtu нужно менять, если вы пользуетесь индивидуальной защитой от DDoS. В стандарте Ethernet TCP-пакеты разбиты на кадры объемом 1500 байт, но при передаче через GRE-тоннель маршрутизаторы дописывают к кадрам свои 24 байта. Принимающая система оказывается не готова к кадру размером 1524 байт, поэтому мы изменим параметр mtu на интерфейсе, уменьшив его до 1476 байт, чтобы принимающая система спокойно восприняла итоговый кадр в 1500 байт.

Ubuntu 18.04+

Дописываем mtu в конфигурационный файл /etc/netpal/50-cloud-init.yaml сразу после имени интерфейса, например:

Важно соблюдать количество пробелов как в остальном файле.

После чего перезагружаем сетевую службу командой netplan apply.

Debian

Редактируем файл /etc/network/interfaces, добавляя параметр вслед за описанием интерфейса:

Перезагружаем сеть командой systemctl restart networking.

CentOS

Вносим в файл /etc/sysconfig/network строку:

И перезагружаем сетевую службу: systemctl restart network.

ifconfig

Команда ifconfig позволяет получать диагностическую информацию об интерфейсах системы и выполнять их настройку.

Формат вызова команды:

Для получения информации, программа ifconfig может вызываться простым пользователем. Файл ifconfig находится в каталоге /sbin , чаще всего при вызове нужно указывать абсолютное путевое имя.

Без параметров программа выводит на экран информацию обо всех активных (находящих в состоянии up ) интерфейсах. Если указано имя интерфейса и отсутствуют опции, выводится информация только о нем.

Просмотр информации об интерфейсе eth0

Формат вывода информации о интерфейсе программой ifconfig:
Характеристики канального уровня
Канальный уровень Link encap. Аппаратный MAC-адрес устройства HWaddr.
Характеристики сетевого уровня
IP-адрес интерфейса inet addr; широковещательный адрес интерфейса Bcast; маска подсети интерфейса Mask.
Флаги, метрика и MTU
Список установленных флагов интерфейса: включён UP; принимает широковещательные пакеты BROADCAST; принимает групповые пакеты MULTICAST. Среди списка установленных флагов может присутствовать слово PROMISC, означающее, что интерфейс работает в неразборчивом режиме. Установленный размер максимального блока, передаваемого через интерфейс MTU и метрика интерфейса Metric.
Информация о полученных пакетах RX
Число пакетов packets, ошибок errors, отброшенных пакетов dropped, переполнений overruns. Такое назначение полей соответствует только сетям Ethernet. В других сетях, смысл может отличаться.
Информация об отправленных пакетах
Число пакетов packets, ошибок errors, отброшенных пакетов dropped, переполнений overruns, потерь несущей carrier, коллизий collisions ; объем буфера передачи txqueuelen. Такое назначение полей соответствует только сетям Ethernet. В других сетях, смысл может отличаться.
Объем переданных данных
Количество байтов полученных RX bytes и отправленных TX bytes через интерфейс/
Аппаратные параметры
Номер линии IRQ Interrupt и адрес памяти Base address.

Назначение IP-адреса 10.0.0.1 первой Ethernet-карте

Назначение IP-адреса 10.0.0.1 первой Ethernet-карте выполняется командой:

Включение интерфейса

Включение добавленного интерфейса выполняется командой:

Маршрутизация (route)

route — утилита для настройки таблицы маршрутизации.

Просмотр таблицы маршрутизации

Вывод совпадает с выводом netstat -r :

Добавление шлюза по умолчанию

Добавление маршрута в локальную сеть

Добавление маршрута в удаленную сеть

Удаление маршрута

Утилита ip

Утилита ip совмещает в себе другие сетевые утилиты и позволяет производить те же самые операции, что и ifconfig, route и arp вместе взятые.

Подробную информацию об утилите можно получить с помощью help :

Разберем вывод команды подробнее.

Блок «Usage» содержит синтаксис утилиты:

В блоке «OBJECT» указаны все доступные объекты:

Часто используемые объекты:

  • address — сетевой адрес на устройстве
  • link— физическое сетевое устройство
  • monitor — мониторинг состояния устройств
  • neigh — ARP
  • route — управление маршрутизацией
  • rule — правила маршрутизации
  • tunnel — настройка туннелирования

«OPTIONS» содержит список доступных опций:

Часто используемые опции:

  • -v — вывод информации об утилите и ее версии
  • -s — включает вывод статистической информации
  • -f — указывает протокол для работы. Если протокол не указан, берется на основе параметров команды. Принимает одно из значений:
    • bridge — . Аналогично опции -B
    • dnet —
    • inet — . Аналогично опции -4
    • inet6 — . Аналогично опции -6
    • ipx —
    • link — означает отсутствие протокола. Аналогично опции -0

    Также при работе с утилитой ip используются различные команды и параметры.

    Команды:

    Если команда не указана, выполняется show .

    Параметры:

    Не все команды и параметры доступны при работе с различными объектами. Подробную информацию также можно получить применив «help».

    При выводе help для объекта address блок «Usage» содержит синтаксис различных комбинаций команд и параметров:

    Примеры

    Показать все соединения

    Сокращенный вывод ifconfig без параметров:

    Отображение информации об интерфейсе eth0

    Включение интерфейса eth1

    Вывод всех интерфейсов и IP-адресов

    Установка/удаление IP-адреса для интерфейса eth1

    Отображение маршрута к указанной сети

    Отображение маршрута к указанной сети от указанного интерфейса

    Создание/удаление маршрута

    Создание маршрута по умолчанию

    Создание маршрута к указанной сети

    Как и для утилиты route, команды можно сокращать. Например, ip l тоже самое, что и ip link show .

    Перезапуск сетевых сервисов

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

    Название самого сервиса будет отличаться в зависимости от выбранного дистрибутива, для Ubuntu/Debian это networking, для CentOS - network.

    Начиная с Ubuntu 18.04 конфигурирование сети выполняется с помощью утилиты netplan. В других системах на базе deb, например, Debian, она может быть установлена командой:

    apt-get install netplan

    В данной статье рассмотрим принцип и примеры настройки сети с помощью netplan.

    Конфигурационный файл

    Файл для настройки сети находится в каталоге /etc/netplan/. Имя файла может быть любым, на конце должно быть расширение yaml, например:

    * чаще всего, это файл 50-cloud-init.yaml или 01-netcfg.yaml.

    Простая настройка сети

    Разберем пример настройки 3-х сетевых интерфейсов. Два из них будут с IP-адресами назначенными вручную (static IP), один — по DHCP.

    Приводим файл к следующему виду:

    • version — версия YAML. На момент обновления статьи, была 2.
    • renderer — менеджер сети (networkd или NetworkManager).
    • ethernets — настройка сетевых адаптеров ethernet.
    • ens3, ens7, ens9 — настройки для соответствующих сетевых адаптеров. В данном примере мы настраиваем 3 сетевых адаптера.
    • dhcp4 — будет ли получать сетевой адаптер IP-адрес автоматически. Возможны варианты yes/true — получать адрес автоматически; no/false — адрес должен быть назначен вручную.
    • addresses — задает IP-адреса через запятую.
    • gateway4 — шлюз по умолчанию. В данном примере указывается только для интерфейса ens7.
    • mtu — при желании, можно задать значение MTU.
    • nameservers — настройка серверов имен (DNS).
    • nameservers addresses — указываем серверы DNS. Обратите внимание на разный формат записи для ens7 и ens9. Приемлемы оба варианта.
    • nameservers search — дописывает окончание домена, если мы обращаемся к узлу сети только по его имени. Стоит обратить внимание, что мы можем указать несколько доменов через запятую.

    Применение настроек

    Для применения настроек необходимо запустить команду netplan. Ее синтаксис:

    netplan <опции> <команда>

    Для проверки нашего конфигурационного файла вводим:

    netplan --debug generate

    Для применения настроек вводим:

    * данную команду мы вводим также для перечитывания настроек и перезапуска сети (вместо привычных restart и reload).

    Статический маршрут

    Статический маршрут задается для конкретного интерфейса, также в конфигурационном файле netplan, например:

    network:
    version: 2
    renderer: networkd
    ethernets:
    ens9:
    dhcp4: no
    addresses: 192.168.1.10/24
    nameservers:
    addresses:
    - 8.8.8.8
    - 77.88.8.8
    routes:
    - to: 192.168.0.0/24
    via: 192.168.1.1
    on-link: true

    * в данном примере мы настроили маршрут для сетевого интерфейса ens9. Данная настройка задается параметром routes:

    • to — направление маршрута (в какую сеть мы должны попадать). В данном примере, 192.168.0.0/24.
    • via — через какой шлюз мы попадаем в сеть to.
    • on-link — активация маршрута при поднятии линка на сетевом интерфейсе.

    Объединение интерфейсов (bonds)

    С помощью bonds мы можем объединить интерфейсы с целью обеспечения отказоустойчивости и/или повышения пропускной способности.

    network:
    version: 2
    renderer: networkd
    ethernets:
    ens2f0: <>
    ens2f1: <>
    bonds:
    bond0:
    dhcp4: no
    interfaces:
    - ens2f0
    - ens2f1
    parameters:
    mode: active-backup
    addresses:
    - 192.168.122.195/24
    gateway4: 192.168.122.1
    mtu: 1500
    nameservers:
    addresses:
    - 8.8.8.8
    - 77.88.8.8

    * в данном примере мы объединяем физические интерфейсы ens2f0 и ens2f1; настройка parameters mode указываем на тип объединения — доступны варианты:

    • balance-rr (задействуются оба интерфейса по очереди, распределение пакетов по принципу Round Robin).
    • active-backup (используется только один интерфейс, второй активируется в случае неработоспособности первого).
    • balance-xor (задействуются оба интерфейса по очереди, распределение пакетов на основе политики хеширования xmit_hash_policy).
    • broadcast (задействуются оба интерфейса одновременно, пакеты передаются все интерфейсы).
    • 802.3ad (задействуются оба интерфейса по очереди, распределение пакетов на основе политики хеширования xmit_hash_policy)
    • balance-tlb (задействуются оба интерфейса по очереди, пакеты распределяются в соответствии с текущей нагрузкой)

    Сетевой мост (bridge)

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

    network:
    version: 2
    renderer: networkd
    ethernets:
    ens2f0: <>
    bridges:
    br0:
    macaddress: ce:ce:ce:45:45:45
    interfaces:
    - ens2f0
    addresses:
    - 192.168.1.15/24
    gateway4:
    nameservers:
    addresses:
    - 77.88.8.8
    - 8.8.8.8
    mtu: 1500
    parameters:
    stp: true
    forward-delay: 4
    dhcp4: false
    dhcp6: false

    • bridges — настройки для интерфейсов bridge.
    • bridges br0 — настройка интерфейса br0.
    • macaddress — физический адрес (MAC) интерфейса. Настройка важна для некоторых провайдеров VPS — без нее бридж может не заработать.
    • interfaces — перечисление интерфейсов, из которых собираем мост. В данном примере ens2f0.
    • addresses, gateway4, nameservers — сетевые настройки (IP-адрес, шлюз, сервер имен).
    • mtu — одноименный параметр. Для сетей ethernet обычно равен 1500.
    • parameters stp — включает или отключает устранение петель в сети. В данном примере включено.
    • parameters forward-delay — время в секундах в течение которого мост будет оставаться в состояниях «Listening» и «Learning».
    • dhcp4, dhcp6 — включает или отключает автоматическое получение IP-адреса. В нашем случае, отключает.

    Подробнее про настройку сетвого моста для KVM в инструкции Настройка KVM на Ubuntu Server.

    Также мы можем настроить тегированный интерфейс vlan:

    network:
    version: 2
    renderer: networkd
    ethernets:
    ens3: <>
    vlans:
    vlan5:
    id: 5
    link: ens3
    dhcp4: no
    addresses: [10.0.0.15/24]
    gateway: 10.0.0.1

    * в данном примере мы настроили интерфейс с тегом 5 на физическом адаптере ens3.

    Для подключения к беспроводной сети задаем следующие настройки:

    network:
    version: 2
    renderer: networkd
    wifis:
    wlp2s0b1:
    dhcp4: no
    dhcp6: no
    addresses: [192.168.2.10/24]
    gateway4: 192.168.2.1
    nameservers:
    addresses: [192.168.2.1, 77.88.8.8]
    access-points:
    <имя WiFi сети (SSID)>:
    password: wifi_password

    • wifis — определяет настойки для WiFi.
    • wlp2s0b1 — настройка для беспроводного сетевого адаптера.
    • dhcp4, dhcp6 — включает или отключает автоматическое получение IP-адреса.
    • addresses, gateway4, nameservers — настройка сети (IP-адрес, шлюз, сервер DNS).
    • access-points — настройка для подключения к беспроводной сети.
    • <имя WiFi сети (SSID)> — имя беспроводной сети, к которой будем подключаться.
    • password — пароль для подключения к беспроводной сети.

    Отключение netplan и возврат к interfaces

    При желании, мы можем вернуть привычный принцип настройки сети. Для этого выполним несколько шагов.

    1. Открываем настройку grub:

    2. Находим опцию GRUB_CMDLINE_LINUX и дописываем в нее параметр:

    * если GRUB_CMDLINE_LINUX содержит другие настройки, то наш параметр добавляем через пробел.

    3. Устанавливаем пакет ifupdown:

    apt-get install ifupdown

    4. Настраиваем сеть в файле:

    auto lo
    iface lo inet loopback

    auto ens5
    iface ens5 inet dhcp

    * в данном примере мы настраиваем сетевой интерфейс ens5 на автоматическое получение IP-адреса.

    5. Применяем настройки загрузчика:

    И перезагружаем систему:

    Возможные ошибки

    1. Error in network definition *.yaml line xxx column yyy: expected mapping

    Ошибка появляется при проверке (generate) или применении (apply) настроек сети.

    Причина: ошибка синтаксиса YAML.

    Решение: внимательно смотрим на количество отступов, которое сделано для строки xxx. Количество пробелов должно точно соответствовать количеству в других строках. Если параметр вложенный, он также должен отделяться от родителя нужным количеством пробелов. Пример неправильной настройки:

    network:
    version: 2
    renderer: networkd

    * обратите внимание, что version имеет 4 пробела для отступа, а renderer — 2. Так как version и renderer равнозначные параметры для родителя network, они должны иметь одинаковое количество пробелов.

    Ядро Linux обнаруживает сетевые интерфейсы (eth0, wlan1, . ) в непредсказуемом и нестабильном порядке. Но для того, чтобы из различных мест (ifupdown, networkd, firewall) работать с интерфейсом, нужно обладать единственным и постоянным именем.

    Общая идея состоит в том, что для udev делается правило, которое находит по критерию нужный интерфейс и присваивает ему имя NAME="foo". Интерфейсы с указанной NAME будут названы, а остальные получат от ядра имена, традиционно ethN, wlanN или что-то подобное.

    Решения по именованию сетевых интерфейсов.

    На протяжение многих лет появилось несколько решений по именам сетевых интерфейсов:

    Заметьте, что выше перечисленные решения могут и на практике объединены. Первое правило, которое задаст имя, побеждает. В настоящее время biosdevname побеждает mac, побеждая ifnames.

    Детали о схеме mac.

    Это решение применяется в данный момент на большинстве оборудования, но, то, что хорошо работало много лет назад, начинает показывает свои возрастные проблемы:

    Поддержка схемы mac была закончена 2 года назад в апстриме проекта udev и с того времени поддерживалась силами Debian и Ubuntu.

    Детали о схеме biosdevname.

    Схему biosdevname используют много лет в образах для серверов и никогда для десктопных. В целом неплохой подход, но, к сожалению, большинство BIOS настольных ПК не заполняют нужную информацию и такое же поведение свойственно не-x86 машинам. Получается, что данная схема охватывает небольшое количество случаев и обычно всё скатывается к схеме mac.

    Детали о схеме ifnames.

    Это решение расширяет идею biosdevname и применимо для множества случаев и архитектур. Данной схеме не нужно сохранять состояние (значит не нужен каталог для записи типа /etc/udev/rules.d/) и нет race conditions.

    Основным, косметическим недостатком можно посчитать вычурные имена сетевых устройств, так как бородатые админы привыкли к eth. Для выданных BIOS имена могут быть вида ens0. Для сетевых карт в PCI слоте - enp1s1 (ethernet) или wlp3s0 (wlan). Это необходимая плата и, к слову сказать, имена в схеме biosdevname выглядят похоже.

    Разработчики Debian и Ubuntu отключили такую схему до всестороннего её обсуждения. Можно загрузиться с параметром net.ifnames=1 и увидеть её работу в действии.

    Итоговое решение.

    17 июня 2015 года разработчик Мартин Питт (Martin Pitt) объявил, что Ubuntu 15.10 Wily Werewolf и Debian GNU/Linux 9 Stretch будут использовать схему "постоянные сетевые имена без сохранения состояния" (stateless persistent network interface names - ifnames) при установке системы в чистую. Ubuntu будет использовать схему ifnames на всех своих платформах (десктоп, сервер, touch, snappy), чтобы перестать делать различия и ещё чуть-чуть приблизиться к своей цели - конвергенции.

    Обновление существующей системы у пользователя данный переход не затронет, так как разработчики не могут гарантированно знать текущее состояние сети у каждого пользователя и не могут безопасно удалить схему, создавшую её. Разработчики надеются, что со временем и переустановленными системами, старая схема безопасно уйдёт в прошлое. Генератор для схемы mac будет удалён.

    Привожу кусочек email переписки разработчиков в оригинале, чтобы вы оценили масштаб трагедии:

    Считаю, что панику разводить рано. Разработчики призрачно и безболезненно переводили наши системы с использования систем инициализации Upstart на Systemd. Никто не заметил прыжок в версии загрузчика GRUB. Тут какое-то простое изменение в именах сетевых устройств!

    В Ubuntu подключение к сети настраивается с помощью сервиса Network Manager. Чтобы подключиться к сети, достаточно пару раз кликнуть мышкой, выбрать соединение - и готово. То же самое, и даже ещё проще, при использовании проводного соединения - тут интернет подключается автоматически, как только загрузился апплет.

    Но не всегда доступен графический интерфейс: после неудачной установки драйвера или очередного обновления не запускается графическая оболочка, а на серверах она и вовсе не используется. В этой небольшой инструкции будет разобрана настройка сети Ubuntu из консоли. Мы поговорим о том, как настроить получение IP-адреса по DHCP, а также настроить работу DNS. Рассмотрим ручную и автоматическую настройку, также попробуем сделать это через системные конфигурационные файлы.

    Как работает сеть?

    Перед тем, как перейти к самим командам, давайте немного разберёмся в теории работы сети. Это нужно, чтобы вы не просто выполнили какие-то непонятные команды, а поняли всю суть того, что мы будем делать и как выполняется настройка локальной сети Ubuntu.

    Компьютеры обмениваются между собой информацией с помощью пакетов. Все данные в сети интернет передаются с помощью пакетов небольшого размера. Если не углубляться в подробности, то каждый пакет содержит адрес отправителя, адрес получателя и сами данные. Эти адреса есть не что иное, как привычные нам IP-адреса. Кроме IP, у компьютера есть физический адрес, который используется для общения между компьютерами в локальной сети. Это MAC-адрес? и задается он производителем сетевой карты.

    Как только компьютер подключился к сети, независимо от того проводное это соединение или беспроводное, он может общаться только с компьютерами в локальной сети и только по физическим адресам. Для того, чтобы получить доступ в Глобальную сеть, машине в ней нужно получить IP-адрес. Для этого используется протокол DHCP. Если кратко: наш компьютер спрашивает все компьютеры в локальной сети, кто здесь DHCP-сервер, DHCP ему отвечает и выдаёт IP-адрес. Таким же образом компьютер узнаёт IP маршрутизатора, через который он может получить доступ к Сети, а затем пытается найти DNS-серверы или узнать стандартные у маршрутизатора. С теорией разобрались, перейдем к практике.

    Настройка сети через терминал в Ubuntu

    Тут мы рассмотрим автоматическую настройку сети для Ubuntu 16.04 без Network Manager с помощью стандартных скриптов системы, которые остались от Upstart и пока всё ещё используются. Давайте сначала определим, какие шаги нам нужно предпринять, чтобы всё заработало:

    • Включаем сетевой интерфейс и подключаемся к сети;
    • Устанавливаем IP-адрес;
    • Получаем адреса DNS-серверов.

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

    Но если хотите, можете использовать ifconfig:

    net

    В нашей системе только один интерфейс - это enp0s3, есть еще lo, но он виртуальный и указывает на эту машину.

    Настройки сети находятся в файле /etc/network/interfaces.

    net1

    Нас будут интересовать в этом файле строчки auto и iface. Первая указывает, что нужно активировать интерфейс при загрузке, вторая же определяет настройки самого интерфейса.

    Настройка динамического получения IP-адреса

    Добавьте в этот файл такие строки, чтобы запускать интерфейс при загрузке и получать IP-адрес автоматически по DHCP:

    auto enp0s3
    iface enp0s3 inet dhcp

    Синтаксис строки auto прост. Он состоит из самой команды и имени сетевого интерфейса. Рассмотрим подробнее:

    $ iface интерфейс inet тип

    Тип получения IP-адреса может иметь несколько значений, но нас в этой статье будут интересовать только два: dhcp и static.

    После завершения настройки сохраните файл и перезапустите сетевой сервис:

    sudo service networking restart

    Всё, если сетевой кабель подключён, и вы всё сделали правильно, Сеть будет работать.

    Настройка статического адреса Ubuntu

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

    Содержимое нашего конфигурационного файла будет выглядеть вот так:

    auto eth0
    iface eth0 inet static
    address 192.168.1.7
    gateway 192.168.1.1
    netmask 255.255.255.0
    network 192.168.1.0
    broadcast 192.168.1.255

    С первыми двумя строчками все понятно, а следующие задают параметры настройки интерфейса:

    • address - наш IP-адрес;
    • gateway - шлюз, через который будем получать доступ в интернет;
    • netmask - маска сети;
    • network - адрес сети, имеет тот же адрес, что и шлюз, только с нулем вместо единицы;
    • broadcast - широковещательный адрес сети, отправленный на него пакет придет всем компьютерам локальной сети.

    Как видите, network и broadcast - это первый и последний IP-адреса сети. Теперь сохраните файл и перезапустите сеть:

    sudo service networking restart

    Если все параметры были указаны правильно, всё будет работать. Но если допущена хоть одна ошибка, доступ к сети вы не получите.

    Это была автоматическая настройка локальной сети Гbuntu, но я ещё расскажу, как всё сделать вручную, без конфигурационных файлов.

    Ручная настройка сети в Ubuntu

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

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

    Как и в предыдущем примере, смотрим сетевые интерфейсы:

    net

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

    Получение IP-адреса по DHCP

    Сначала включаем интерфейс:

    sudo ip link set enp0s3 up

    Затем с помощью команды dhclient запрашиваем ip:

    sudo dhclient enp0s3

    Всё, настройка сети Ubuntu 16.04 завершена, у нас есть IP-адрес, и осталось только настроить DNS, но это мы рассмотрим ниже.

    Настройка статического IP

    sudo ip link set enp0s3 up

    Устанавливаем IP-адрес, маску сети и broadcast-адрес для нашего интерфейса:

    sudo ip addr add 192.168.1.7/255.255.255.0 broadcast 192.168.1.255 dev enp0s3

    Указываем IP-адрес шлюза:

    sudo ip route add default via 192.168.1.1

    net2

    Здесь 192.168.1.7 - наш IP-адрес, 255.255.255.0 - маска сети, 192.168.1.255 - широковещательный адрес. Замените эти значения на свои.

    Как видите, сеть работает. Если хотите поэкспериментировать на машине с рабочей сетью, её можно сбросить командой:

    sudo ip -4 addr flush dev enp0s3

    Настройка DNS

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

    Если вам нужно настроить DNS так, чтобы он не сбивался после перезагрузки, необходимо использовать систему настройки сети Ubuntu. Для этого откройте файл /etc/network/interfaces и добавьте в него строчку после директив для нужного интерфейса:

    dns-nameservers 8.8.8.8 4.4.4.4

    Здесь 8.8.8.8 и 4.4.4.4 это IP-адреса DNS серверов, можете заменить их на свои. И можно использовать один, а не два. Дальше сохраните файл и перезапустите сеть:

    sudo service networking restart

    Если же вам нужно настроить DNS только для этого сеанса, то добавьте строчку в /etc/resolv.conf

    sudo vi /etc/resolv.conf

    nameserver 8.8.8.8
    nameserver 4.4.4.4

    После сохранения файла сеть будет работать полностью так, как нужно. Но последний способ пригоден только до перезагрузки, поскольку файл /etc/resolv.conf генерируется автоматически.

    Выводы

    В этой статье была рассмотрена настройка сети Ubuntu из консоли. Я пытался не просто показать команды, с помощью которых это можно сделать, но и объяснить, как это работает. Теперь вы будете знать, что нужно делать, если у вас нет доступа к графическому интерфейсу, но срочно нужно попасть в сеть. Если остались вопросы, пишите в комментариях!

    Читайте также: