Тип сетевого интерфейса linux

Обновлено: 02.07.2024

Каков стандарт соглашения об именах для интерфейсов Ethernet и Wi-Fi на компьютере с Linux?

Мы разрабатываем инструмент, который должен отображать только интерфейсы Ethernet и Wi-Fi компьютера с Linux и его текущее состояние.

Например, ниже приведен список сетевых интерфейсов (физических и виртуальных) на моем компьютере с Linux (Ubuntu):

docker0 , enp0s25 , lo , wlp3s0

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

Мы написали код с логикой, что все интерфейсы Ethernet всегда начинаются с буквы, e а интерфейсы Wi-Fi всегда начинаются с буквы w .

Правильна ли логика? Если нет, как мы можем решить эту проблему?

Я хотел бы посмотреть, как iwconfig фильтрует интерфейсы WiFi от других. Есть ли причина, по которой вы бы не смотрели на что-то вроде lshw? Специально проверить содержимое lshw -class network возможно? Ищи все что есть capabilities: ethernet physical ? Возможно, искать и другие возможности?

Сетевые интерфейсы могут быть названы как угодно, поэтому независимо от того, что вы делаете, вы столкнетесь с ситуациями, когда (1) существует «физический» сетевой интерфейс с именем, которое не соответствует вашему шаблону, или (2) существует «Физический» сетевой интерфейс, который будет соответствовать вашему шаблону.

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

Физические и виртуальные сетевые интерфейсы имеют общий API - вот что делает Linux по-настоящему гибким. Пожалуйста, не пытайтесь нянчить своего пользователя и отнимать это у него или нее. Ваши пользователи будут вам благодарны.

Вы на самом деле не ответили на вопрос; Вы потратили 3 параграфа, оспаривая контекст вопроса. Хотя я знаю, что ответы на фрейм-вызовы - вещь, это не похоже на один из тех случаев . тем более, что user4556274 дал краткий ответ на вопрос в ответ на вопрос. @MikeOunsworth: проблема в том, что ответ user4556274 не работает в общем случае, он работает, только если имена интерфейсов действительно являются предсказуемыми именами интерфейсов. Что простое ip link set . name . может измениться. И да, я мог бы сам перечислить предсказуемые имена интерфейсов. Ответ на оригинальный вопрос: «Пожалуйста, не делайте так». Потому что независимо от того, как вы это сделаете, это не сработает. @ fpmurphy1 Нет, я думаю, он имеет в виду предсказуемые имена интерфейсов. Не имеет значения, системный ли он, традиционный (ethN), конкретные соглашения вашей компании или какие-либо другие стандарты, которые делают имена предсказуемыми @MikeOunsworth: Ответ содержится в самом первом подпункте самого первого предложения самого первого абзаца: «Сетевые интерфейсы могут быть названы как угодно […]». Поэтому то, о чем спрашивает OP, невозможно и не может быть сделано , Вы не можете определить тип сетевого интерфейса на основе стандарта соглашения об именах, потому что нет стандарта соглашения об именах, и любой может назвать свои интерфейсы как угодно. Например, на моем старом Linux маршрутизатора, я голова цветных наклеек на спине, а также интерфейсы Ethernet физических были названы red , blue и green . @ JörgWMittag, конечно, вы можете обнаружить их на основе стандарта, если вы знаете, что стандарт используется (и вы ожидаете, что он экспортирует эту информацию в имени в первую очередь). Мы знаем, что у systemd есть стандарт для именования сетевых интерфейсов , поэтому бесполезно говорить, что его не существует.

поэтому как для традиционного ethX стиля именования, так и для более нового именования systemd, начальная буква e должна быть интерфейсом Ethernet для любых автоматически генерируемых имен интерфейсов. Все интерфейсы wifi должны начинаться с w в обеих схемах, хотя не все интерфейсы, начинающиеся с w, будут wifi.

Если этот инструмент должен работать в произвольной среде (а не только на внутренние среды , которые вы контролируете), отмечают , что пользователи могут переименовывать интерфейсы систем Linux с произвольными именами, такими как [ wan0 , lan0 , lan1 , dmz0 ] , которые будут нарушать любые предположения о начальных буквах ,

И некоторые из нас являются стойкими системными отказниками. Обратите внимание, что это решение не будет работать в системах, использующих biosdevname для именования интерфейсов, где интерфейс Ethernet может быть назван как p3p7 . Этот метод является предшественником новых предсказуемых имен systemd, и хотя сейчас он не рекомендуется использовать в распространенных дистрибутивах, все равно будет много систем, которые использовали его, когда он был по умолчанию несколько лет назад. systemd услужливо вызывает один из моих интерфейсов Ethernet 'rename3'. Какой из них может меняться, вздох :( @ user1908704: Обычно это означает, что udev было сказано присвоить одно и то же имя нескольким интерфейсам. (Возможно, у вас есть старый автоматически сгенерированный файл «постоянных имен» в /etc/udev/rules.d?) Тем не менее, в версии 187 процесс переименования был исправлен, чтобы быть полностью атомарным (либо успешным, либо rename%u откатным ), и формат hasn ' t существует в исходном коде с 2012 года. Я хотел бы вздохнуть, что ваше программное обеспечение устарело на шесть лет. @ Grawity Это Ubuntu 18.04. Оказывается, у определенных материнских плат есть две сетевые карты с одинаковой записью ACPI, в результате чего обе они имеют eno1. Так как это не может произойти, один из них называется «rename3». Я не до конца проработал логику того, кто победит в гонке, но любые изменения могут нарушить конкуренцию и вызвать переименование другого3.

Соглашение об именах таково, что интерфейсы LAN называются eth0 , eth1 . и что интерфейсы WLAN названы wlan0 , wlan1 .

То, что вы видите, это так называемые «предсказуемые имена», которые представил systemd. На практике они совсем не предсказуемы и даже могут меняться при смене аппаратного обеспечения, что и является той проблемой, которой они должны избегать.

Для угадывания начальная буква может быть достаточно хорошей. Некоторые интерфейсы, в частности WLAN, имеют подсказки в /sys/class/net/*/uevent :

К сожалению, DEVTYPE для интерфейсов ЛВС такого нет .

Имя устройства изменяется, когда аппаратные изменения не являются проблемой, которую пытается избежать предсказуемые имена интерфейсов. Предсказуемые имена интерфейсов позволяют избежать смены имен при неизменном оборудовании . Это проблема, когда аппаратные устройства обнаруживаются в случайном порядке. Мотивация для введения предсказуемых имен интерфейсов заключалась в том, что зондирование не является детерминированным и «присвоение имен« eth0 »,« eth1 »и т. Д. Больше не фиксируется, и вполне может случиться, что« eth0 »в одной загрузке в конечном итоге окажется "eth1" на следующий. " Это бонус, если предсказуемые имена могут пережить аппаратные изменения, но это не было основной причиной для них. Выиграть, а некоторые проиграть - в некоторых сценариях очень желательно, чтобы измененное оборудование надежно вставлялось в один и тот же «слот именования» :) @ JohanMyréen Старая схема назначения имен интерфейсов на основе MAC или некоторых других свойств работала более надежно при добавлении интерфейсов, без хлопот с новыми именами.

Одно предостережение с моим ответом (относится и к большинству других): я не знаю цели вашего заявления. Если это одноразовое приложение для устранения одной конкретной проблемы или для лучшего понимания работы сети, которое никогда не будет использоваться снова, то использование первой буквы интерфейса может быть отличным вариантом для быстрого и грязного использования. Если вы планируете записать следующего конкурента в Wireshark или tcpdump, вы должны быть уверены, что получите его правильно для всех видов крайних случаев.

И если приложение, которое вы пишете, находится где-то между этими крайностями, только вы (и ваши клиенты) могут знать, насколько тщательно вам нужно реализовать свою логику.

Другие уже указывали, что имена никогда не бывают достоверными по ряду причин. Конечная проблема очень распространена в программном обеспечении: жесткие предположения вместо того, чтобы полагаться на известные / документированные факты.

Вторая проблема, которая не была упомянута, также основана на предположении о ваших требованиях: список интерфейсов, которые вы хотите перечислить, это всегда именно «аппаратные интерфейсы Ethernet» и «интерфейсы wifi».

Третья проблема - это еще одно предположение: все интерфейсы попадут в категории, о которых вы можете подумать прямо сейчас. Как насчет Infiniband, как упомянуто @ user4556274? Как насчет туннельных интерфейсов для VPN? Как насчет мостовых интерфейсов? Как насчет мостовых интерфейсов, которые объединяют физические и логические интерфейсы?

Но могут быть варианты, чтобы выполнить то, что вы ищете. Во-первых, определите, что именно характеризует интерфейс, который вы хотите перечислить, а не тот, который вы не хотите.

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

Любой интерфейс, который имеет маршрут по умолчанию (т. Е. Маршрут к 0.0.0.0), вероятно, будет тем, который вы ищете.

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

Другой вариант - перейти к реальному оборудованию и посмотреть, какой драйвер он использует. Вы можете исключить некоторых известных водителей


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

Примеры сетевых интерфейсов:

  • Физические интерфейсы сетевых карт и телекоммуникационных устройств (коммутаторов, маршрутизаторов и так далее)
  • Петлевые интерфейсы для обмена данными между процессами на одном компьютере или управляемом сетевом устройстве. Для них выделена специальная подсеть 127.0.0.0/8
  • Туннели — для инкапсуляции протокола того же или более низкого уровня в другой протокол
  • Интерфейсы виртуальных сетей (VLAN)

Каждый интерфейс в сети может быть однозначно идентифицирован по его адресу. Разные сетевые протоколы используют разные системы адресации, например MAC-адреса в Ethernet или IP-адреса в IP.

Настройка сетевых интерфейсов в UNIX/Linux-системах традиционно выполняется с помощью команды ifconfig, а в Linux ещё и при помощи команды ip.

Содержание

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

Интерфейс определён реализацией модели TCP/IP для того чтобы скрыть различия в сетевом обеспечении и свести сетевое взаимодействие к обмену данными с абстрактной сущностью.

Для каждого устройства, поддерживаемого ядром, существует сетевой интерфейс. Существует соглашение о наименовании интерфейсов, в соответствии с которым имя интерфейса состоит из префикса, характеризующего его тип, и числа, соответствующего номеру интерфейса данного типа в системе. Так, например, ppp0 соответствует первому интерфейсу PPP, а eth1 соответствует интерфейсу второго сетевого адаптера Ethernet. Обратите внимание на то, что нумерация интерфейсов начинается с 0.

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

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

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

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

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

Debian. Долговременные настройки хранятся в файле /etc/network/interfaces.

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

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

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

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

Формат вывода информации о интерфейсе программой 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

Если в командной строке ifconfig указаны options, выполняется настройка интерфейса. В процессе настройки можно изменить режим работы интерфейса, настройки IP-адреса и другие характеристики.

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

Задаваемые в командной строке options выглядят как набор ключевых слов с дополнительными параметрами. Последовательность ключевых слов в строке не имеет значения, хотя и существует общепринятый порядок.

interface Имя интерфейса, к которому применяется действие программы ifconfig. up | down Включает/выключает интерфейс. address IP-адрес, который назначается интерфейсу. netmask address Устанавливает значение сетевой маски для интерфейса равному значению address. [-]broadcast [address] Устанавливает значение широковещательного адреса равному значению address. Если дополнительный аргумент address отсутствует, включает или выключает работу интерфейса в широковещательном режиме. [-]promisc Включает/выключает неразборчивый режим работы интерфейса. [-]arp Разрешает/запрещает использование протокола ARP по этому интерфейсу. metric N Устанавливает метрику интерфейса равной N. mtu N Устанавливает значение MTU интерфейса равным N irq N Установить IRQ устройства равным N (если позволяет драйвер устройства) io_addr address Установить адрес ввода-вывода, равным параметру address (если позволяет драйвер устройства) media type Задать тип физической среды передачи данных (если позволяет драйвер устройства)

При изменении IP-адреса интерфейса автоматически изменяются значения его маски и широковещательного адреса. Если параметры netmask и broadcast не указаны явно, соответствующие значения вычисляются исходя из класса IP-адреса. Например, для IP-адреса 200.200.200.200, который относится к диапазону адресов класса C, значения сетевой маски и широковещательного адреса будут соответственно равны 255.255.255.0 и 200.200.200.255, а для адреса 1.2.3.4 (адрес класса A), равны соответственно 255.0.0.0 и 1.255.255.255.

Более тонкую настройку интерфейса можно произвести при помощи утилиты ip

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

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

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

Интерфейс не включается автоматически. Если необходимо включить интерфейс, в командной строке следует явно указать параметр up:

Значения широковещательного адреса и сетевой маски будут определены автоматически на основе информации о классе адреса. Если необходимо явно задать маску, например, ограничить размер сети 14 хостами (4 бита на хост), нужно использовать команду:

Запретить использование ARP на интерфейсе eth0:

Перевести интерфейс в неразборчивый режим:

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

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

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

Не путайте интерфейсы и устройства системы. Интерфейсам не соответствуют никакие специальные файлы в каталоге /dev

Вновь созданный интерфейс является ненастроенным: он выключен и к нему не привязан никакой IP-адрес. Для того чтобы ввести интерфейс в работу, нужно провести его настройку и включить (поднять) его при помощи команды ifconfig.

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

  • IP-адрес должен быть указан обязательно, поскольку без него использование интерфейса неосуществимо;
  • Сетевая маска должна указываться в том случае, если она отличается от той, которая соответствует классу IP-адреса;
  • Широковещательный адрес указывается в том случае, если он отличается от широковещательного адреса, вычисляемого на основе значений IP-адреса и сетевой маски.

Эти параметры задаются одной командой, которая при этом, как правило, сразу и включает интерфейс.

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

Рассмотренная ниже процедура автоматической настройки сетевых интерфейсов при загрузке выглядит так только в RedHat-based системах. В Slackware и Debian сетевые интерфейсы настраиваются несколько иначе.

Настройка интерфейсов производится скриптом /etc/rc.d/init.d/network, который автоматически вызывается при переходе на 2, 3, 4 или 5 уровень выполнения. Скрипт network при вызове с параметром start поднимает интерфейсы, т.е. выполняет настройку и включение всех описанных интерфейсов, после чего настраивает статическую маршрутизацию.

Конфигурационные файлы интерфейсов могут быть созданы вручную или при помощи псевдографических и графических инструментов настройки, таких как netconfig или neat

Описание интерфейсов находится в файлах ifcfg-* в каталоге /etc/sysconfig/network-scripts. В названии файла, за символом - следует имя интерфейса, например файл ifcfg-eth0 содержит настройки интерфейса eth0. Файл описания интерфейсов — это небольшой скрипт, содержащий только несколько команд присвоения variable=value где variable — определённый параметр настройки интерфейса, а value — необходимое значение этого параметра.

Параметры интерфейса в файле ifcfg.

DEVICE Имя устройства ONBOOT Нужно ли инициализировать интерфейс при загрузке (yes | no) BOOTPROT При динамической настройке тип протокола, при помощи которого должен быть сконфигурирован интерфейс ( bootp | dhcp ) BOOTP Интерфейс необходимо настроить с использованием протокола удаленной загрузки BOOTP IPADDR IP-адрес, который должен быть присвоен интерфейсу NETMASK Маска подсети IP-адреса интерфейса NETWORK Адрес сети интерфейса BROADCAST Широковещательный адрес интерфейса


Значения NETMASK, NETWORK, BROADCAST могут быть вычислены скриптом ifup автоматически при помощи программы ipcalc, поэтому, если они соответствуют классу IP-адреса, указывать явно их не обязательно

Для настройки интерфейсов во время загрузки компьютера используется скрипт ifup, который принимает в качестве аргумента командной строки имя интерфейса interface.

ifup interface

Он читает конфигурационный файл interface или, если он отсутствует, файл из каталога /etc/sysconfig/networking/default. В крайнем случае, если не найден ни один из этих файлов читается конфигурация из ifcfg-interface. После этого скрипт производит настройку интерфейсов при помощи утилиты ip. Настраиваются не только интерфейсы сами по себе, но и необходимые маршруты для обращения к сетям, непосредственно доступным через интерфейс.

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

Перезапуск интерфейса eth0:

Файлы ifup и ifdown в каталоге /etc/sysconfig/network-scripts являются символическими ссылками на файлы ifup и ifdown в каталоге /sbin. Поэтому, при вызове вручную можно просто воспользоваться командами ifup и ifdown.

При вызове в ходе начальной загрузки, скрипту ifup передается дополнительный аргумент boot, который сообщает, что интерфейс нужно поднимать только в том случае, если в файле его конфигурации параметр ONBOOT не установлен в no.

Вот пример наиболее распространённой конфигурации Ethernet-интерфейса:

В данном случае файл описывает интерфейс eth0, которому назначен IP-адрес из диапазона рекомендованного для локальных сетей 10.0.0.188. Поскольку адрес принадлежит классу A, а необходимо чтобы под сетевую часть было отведено 24 бита, явным образом задана сетевая маска NETMASK, адрес сети NETWORK и широковещательный адрес BROADCAST.

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

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.

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

    Часть сетевой подсистемы, выполняющаяся в режиме ядра, естественным образом ответственна за управление сетевыми устройствами ввода-вывода, но кроме этого на нее также возложены задачи маршрутизации и транспортировки пересылаемых данных, которые решаются при помощи соответствующих Сетевых протоколов. Таким образом, именно ядерная часть сетевой подсистемы обеспечивает процессы средствами сетевого межпроцессного взаимодействия (network IPC).

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

    Драйверы сетевых устройств

    $ lspci

    $ lspci -ks 01:00.0

    01:00.0 Network controller: Intel Corporation Centrlno Wireless-N 130 (rev 34)

    Subsystem Intel Corporation Centrino Wireless-N 130 BGN

    Kernel driver in use: iwlwifi

    Kernel modules: iwlwifi

    Subsystem: Samsung Electronics Co Ltd Device c0b6

    Kernel driver in use: r8169

    $ modinfo iwlwifi r8169 | grep ^description

    description: Intel(R) Wireless WiFi driver for Linux
    description: RealTek RTL-8169 Gigabit Ethernet driver

    В отличие от несетевых устройств, большинство которых имеют специальный файл в каталоге /dev, сетевые устройства представляются в системе своими интерфейсами. Список доступных интерфейсов, их параметры и статистику можно получить при помощи «классической» UNIX-команды ifconfig или специфичной для Linux команды ip.

    Сетевые интерфейсы (UNIX ifconfig)

    eth0 Link encap:Ethernet HWaddr e8:03:9a:0a:73:40
    UP BROADCAST MULTICAST MTU: 1500 Metric: 1

    lo Link encap:Локальная петля (Loopback)
    inet addr:127.0.0.1 Mask:255.0.0.0

    inet6 addr: ::1/128 Scope:Host

    UP LOOPBACK RUNNING MTU:65536 Metric:1

    wlan0 Link encap:Ethernet HWaddr b8:03:05:a2:28:4e
    inet addr:192.168.100.5 Bcast: 192.168.100.255 Mask-.255.255.255.0

    inet6 addr: fe80::ba03:5ff:fea2:284e/64 Scope:Link

    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

    $ ifconfig wlanO

    wlanO Link encap:Ethernet HWaddr b8:03:05:a2:28:4e

    inet addr-.192.168.100.5 Beast: 192.168.100.255 Mask:255.255.255.0
    inet6 addr: fe80: :ba03:5ff:fea2:284e/64 Scope:Link

    UP BROADCAST RUNNING MULTICAST MTU: 1500 Metric: 1

    RX packets:23103842 errors:0 dropped:0 overruns:0 frame:0

    TX packets-.15591575 errors:0 dropped:0 overruns:0 carrier:0

    collisions:0 txqueuelen:1000
    RX bytes:2010967763 (2.0 GB) TX bytes:2828583098 (2.8 GB)

    Сетевые интерфейсы (Linux ip)

    $ ip link 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

    2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000 link/ether e8:03:9a:0a:73:40 brd ff:ff:ff:ff:ff:ff
    3: wlan0: «BROADCAST,MULTICAST,UP,L0WER_UP> mtu 1500 qdisc mq state UP qlen 1000

    link/ether b8:03:05:а2:28:4е brd ff:ff:ff:ff:ff:ff

    $ ip -s link show dev wlanO
    3: wlan0: «BROADCAST,MULTICAST,UP, LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000

    link/ether b8:03:05:a2:28:4e brd ff:ff:ff:ff:ff:ff

    RX: bytes packets errors dropped overrun mcast

    2026956879 23261031 0 0 0 0

    TX: bytes packets errors dropped carrier collsns

    $ ip addr show dev wlanO
    3: wlan0: «BROADCAST,MULTICAST,UP,L0WER_UP> mtu 1500 qdisc nq state UP qlen 1000

    link/ether b8:03:05:a2:28:4e brd ff:ff:ff:ff:ff:ff

    inet 192.168.100.5/24 brd 192.168.100.255 scope global wlan0
    valid_lft forever preferred_lft forever

    inet6 fe80::ba03:5ff: fea2:284e/64 scope link

    valid_lft forever preferred_lft forever

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

    Нужно отметить, что в примере из листинга ниже показан список динамически загруженных модулей, среди которых присутствует «нестандартный» TCP vegas, но нет IP, TCP, UDP и прочих «стандартных» протоколов стека TCP/IP.

    На текущий момент времени сложно вообразить применение Linux без подключения к IP-сети, поэтому модули стандартных протоколов TCP/IP стека скомпонованы в ядро статически и являются частью «стартового» модуля.

    Драйверы сетевых протоколов

    $ lsmod

    Module Size Used by
    tcp_vegas 13603 0
    esp4 12868 0

    ah4 12866 0
    xfm_algo 14869 2 esp4,ah4
    bnep 19167 2
    bluetooth 356727 24 bnep,rf com,btusb
    mac80211 564463 1 iwldvm

    description: TCP Vegas
    description: Bluetooth BNEP ver 1.3
    description: IEEE 862.11 subsystem

    Доступ процессов к услугам ядерной части сетевой подсистемы реализует интерфейс сетевых сокетов socket, являющихся основным (и единственным) средством сетевого взаимодействия процессов в Linux.

    Для просмотра статистики по использованию сетевых сокетов применяют «классическую» UNIX-команду netstat или специфичную для Linux команду ss. В листингах ниже иллюстрируется использование этих команд для вывода информации обо всех (-a, all) сокетах протоколов (-u, udp) UDP и (-t, tcp) TCP стека TCP/IP v4 (-4), порты и адреса которых выведены в числовом (-n, numeric) виде, а также изображены процессы (-p, process), их открывшие.

    Сетевые сокеты (UNIX netstat)

    $ sudo netstat -4autpn
    Активные соединения с интернетом (servers and established)
    Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

    Сетевые сокеты идентифицируются парой адресов (собственным, local, и чужим (адрес удаленного приложения, с которым установлено соединение), foreign), принятыми в их семействе. Например, для семейства TCP/IP адрес сокета состоит из (сетевого) IP-адреса и (транспортного) номера порта, причем нули имеют специальное — «неопределенное» значение.

    Так для прослушивающего (LISTEN) сокета 0.0.00 в собственном IP-адресе означает, что он принимает соединения, направленные на любой адрес любого сетевого интерфейса, а 0.0.0.0 в чужом адресе указывает на то, что взаимодействие еще не установлено. Прослушивающие сокеты используются «серверными» приложениями, пассивно ожидающими входящие соединения с ними.

    Для сокетов с установленным (ESTABLISHED) взаимодействием оба адреса имеют конкретные значения, определяющие участников взаимодействия, например 192.168.100.5:22 и 192.168.100.3:57929.

    Сетевые сокеты (Linux ss)

    Из примеров листингов выше видны 5 «слушающих» (LISTEN) сокетов TCP и 4«несоелииеиных» (UNCONN) сокета UDP, открытых разными службами операционной системы. Например, 22 порт TCP открыл сервер sshd, PID = 655 службы удаленного доступа W:[SSH], а 5900 порт TCP — сервер vino-server, PID = 28880 службы удаленного доступа к рабочему столу пользователя W:[VNC].

    Сетевая подсистема ОС Linux чрезвычайно развита на всех ее уровнях — от сетевых интерфейсов и протоколов до прикладных сетевых служб. На сегодняшний день колоссальное количество сетевых устройств работают под управлением Linux — маршрутизаторы, сетевые хранилища, медиаплееры, TV-боксы, планшеты, смартфоны и прочие «встраиваемые» и мобильные устройства.

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

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

    Исключительное место (эдакий «швейцарский нож») среди прочих сетевых инструментов Linux займет служба SSH, при распределенном использовании оконной системы X Window System, являющейся основой современного графического интерфейса пользователя.


    Конечно, вы можете настроить сетевые интерфейсы во время установки.

    Но некоторые из вас могут предпочесть сделать это после установки или изменить существующие настройки.

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

    В этом кратком руководстве рассматриваются все возможные способы поиска доступных сетевых интерфейсов в операционных системах Linux и Unix.

    Найти доступные сетевые интерфейсы в Linux

    Мы можем найти доступные сетевые карты несколькими способами.

    Способ 1. Использование команды ifconfig:

    Я полагаю, что некоторые пользователи Linux все еще могут использовать это.

    Как вы видите в приведенном выше выводе, у меня есть два сетевых интерфейса, а именно enp5s0 (на плате проводного адаптера Ethernet) и wlp9s0 (адаптер беспроводной сети) на моем компьютере с Linux.

    Он имеет IP-адрес 127.0.0.1.

    Мы также можем использовать одну и ту же команду ifconfig во многих вариантах UNIX, например, FreeBSD, для просмотра списка доступных сетевых карт.

    Способ 2. Использование команды «ip»:

    Команда ifconfig устарела в последних версиях Linux.

    Таким образом, вы можете использовать команду «ip» для отображения сетевых интерфейсов, как показано ниже.

    Вы также можете использовать следующие команды.

    Вы заметили, что эти команды также показывают состояние подключения сетевых интерфейсов?

    Если вы внимательно посмотрите на вышеприведенный вывод, вы заметите, что моя карта Ethernet не подключена с помощью сетевого кабеля (см. Слово «DOWN» в вышеприведенном выводе).

    И беспроводная сетевая карта подключена (см. Слово «UP»).

    Для получения более подробной информации обратитесь к нашему предыдущему руководству, чтобы найти состояние подключения сетевых интерфейсов в Linux:

    Этих двух команд (ifconfig и ip) достаточно, чтобы найти доступные сетевые карты в ваших системах Linux.

    Тем не менее, есть немного других доступных методов для перечисления сетевых интерфейсов в Linux.

    Способ 3:

    Ядро Linux сохраняет данные о сетевом интерфейсе в каталоге /sys/class/net.

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

    Способ 4:

    В операционных системах Linux файл /proc/net/dev содержит статистику о сетевых интерфейсах.

    Чтобы просмотреть доступные сетевые карты, просто просмотрите его содержимое с помощью команды:

    Способ 5: использование команды «netstat»

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

    Пожалуйста, помните, что netstat устарел.

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

    Способ 6: использование команды «nmcli»

    Он используется для создания, отображения, редактирования, удаления, активации и деактивации сетевых подключений и отображения состояния сети.

    Если у вас установлена система Linux с установленным Network Manager, вы можете получить список доступных сетевых интерфейсов с помощью инструмента nmcli, используя следующие команды:

    Теперь вы знаете, как найти доступные сетевые интерфейсы в Linux.

    Далее, проверьте следующие руководства, чтобы узнать, как настроить IP-адрес в Linux.

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