Сетевой интерфейс — физическое или виртуальное устройство, предназначенное для передачи данных между программами через компьютерную сеть.
Примеры сетевых интерфейсов:
Каждый интерфейс в сети может быть однозначно идентифицирован по его адресу. Разные сетевые протоколы используют разные системы адресации, например MAC-адреса в Ethernet или IP-адреса в IP.
Настройка сетевых интерфейсов в UNIX/Linux-системах традиционно выполняется с помощью команды ifconfig, а в Linux ещё и при помощи команды ip.
Содержание
[править] Сетевой интерфейс в Linux
Сетевое взаимодействие Linux-компьютера происходит через сетевые интерфейсы. Любые данные, которые компьютер отправляет в сеть или получает из сети проходят через сетевой интерфейс.
Интерфейс определён реализацией модели TCP/IP для того чтобы скрыть различия в сетевом обеспечении и свести сетевое взаимодействие к обмену данными с абстрактной сущностью.
Для каждого устройства, поддерживаемого ядром, существует сетевой интерфейс. Существует соглашение о наименовании интерфейсов, в соответствии с которым имя интерфейса состоит из префикса, характеризующего его тип, и числа, соответствующего номеру интерфейса данного типа в системе. Так, например, ppp0 соответствует первому интерфейсу PPP, а eth1 соответствует интерфейсу второго сетевого адаптера Ethernet. Обратите внимание на то, что нумерация интерфейсов начинается с 0.
[править] Наименования сетевых интерфейсов в Linux
Начиная с середины 2011 года (Fedora 15) в Linux используется новая схема наименования интерфейсов. Интерфейсы называются em[1234] (для интегрированных) или pci #
lo Интерфейс петли обратной связи. eth Сетевой интерфейс к карте Ethernet или картам WaveLan (Radio Ethernet). tr Сетевой интерфейс к карте Token Ring. ppp Сетевой интерфейс к каналу PPP (Point-to-Point Protocol). sl Сетевой интерфейс к каналу SLIP (Serial Line IP). plip Сетевой интерфейс к каналу PLIP (Parallel Line IP). Используется для организации сетевого взаимодействия с использованием параллельного порта. ax Сетевой интерфейс к устройствам любительского радио AX.25. fddi Сетевой интерфейс к карте FDDI arc0e, arc0s Сетевой интерфейс к карте ArcNet. Используется инкапсуляция пакетов в формате Ethernet или RFC 1051. wlan Сетевой интерфейс wi-fi адаптеров
Интерфейсы создаются автоматически для каждого обнаруженного сетевого устройства при загрузке ядра ОС.
Каждый интерфейс характеризуется определёнными параметрами, необходимыми для обеспечения его нормального функционирования, и в частности для сетевого обмена данными по протоколу IP.
[править] Параметры интерфейса
Кроме этих параметров интерфейс характеризуется ещё:
Debian. Долговременные настройки хранятся в файле /etc/network/interfaces.
[править] Программа ifconfig
Для управления интерфейсами в ОС Linux используется программа ifconfig. Команда позволяет как получать диагностическую информацию об интерфейсах системы, так и выполнять их настройку.
Формат вызова команды:
ifconfigifconfiginterfaceoptions
Для получения информации, программа 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 выглядят как набор ключевых слов с дополнительными параметрами. Последовательность ключевых слов в строке не имеет значения, хотя и существует общепринятый порядок.
[править] Аргументы командой строки ifconfig
При изменении 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
[править] Пример использования ifconfig
Просмотр информации обо всех интерфейсах
Просмотр информации об интерфейсе eth0:
Назначить IP-адрес 10.0.0.1 первой Ethernet-карте:
Интерфейс не включается автоматически. Если необходимо включить интерфейс, в командной строке следует явно указать параметр up:
Значения широковещательного адреса и сетевой маски будут определены автоматически на основе информации о классе адреса. Если необходимо явно задать маску, например, ограничить размер сети 14 хостами (4 бита на хост), нужно использовать команду:
Запретить использование ARP на интерфейсе eth0:
Перевести интерфейс в неразборчивый режим:
[править] Создание сетевого интерфейса
Интерфейс создается ядром автоматически при обнаружении устройства. Для того чтобы устройство было доступно, необходимо включить его драйверную поддержку в состав ядра. Это может быть сделано в момент сборки ядра или при работе системы с использованием механизма загружаемых модулей.
Если устройств, обеспечивающих одинаковый тип интерфейса, несколько, их автоматическое определение не производится.
При использовании нескольких устройств одного типа нужно произвести их ручную настройку, то есть явным образом назначить интерфейс каждому из них. Это необходимо, поскольку при автоматическом определении устройств порядок привязки к интерфейсам непредсказуем, что недопустимо.
Не путайте интерфейсы и устройства системы. Интерфейсам не соответствуют никакие специальные файлы в каталоге /dev
Вновь созданный интерфейс является ненастроенным: он выключен и к нему не привязан никакой IP-адрес. Для того чтобы ввести интерфейс в работу, нужно провести его настройку и включить (поднять) его при помощи команды ifconfig.
При настройке интерфейса обычно настраиваются следующие параметры:
Эти параметры задаются одной командой, которая при этом, как правило, сразу и включает интерфейс.
[править] Настройка интерфейсов при загрузке системы
Настройки интерфейса, выполненные при помощи ifconfig, автоматически пропадают при выключении компьютера. После того как ядро Linux загружено опять, всю настройку нужно выполнять снова. Обычно она производится автоматически специальными скриптами при загрузке компьютера.
Рассмотренная ниже процедура автоматической настройки сетевых интерфейсов при загрузке выглядит так только в RedHat-based системах. В Slackware и Debian сетевые интерфейсы настраиваются несколько иначе.
Настройка интерфейсов производится скриптом /etc/rc.d/init.d/network, который автоматически вызывается при переходе на 2, 3, 4 или 5 уровень выполнения. Скрипт network при вызове с параметром startподнимает интерфейсы, т.е. выполняет настройку и включение всех описанных интерфейсов, после чего настраивает статическую маршрутизацию.
Конфигурационные файлы интерфейсов могут быть созданы вручную или при помощи псевдографических и графических инструментов настройки, таких как netconfig или neat
Параметры интерфейса в файле ifcfg.
DEVICE Имя устройства ONBOOT Нужно ли инициализировать интерфейс при загрузке (yes | no) BOOTPROT При динамической настройке тип протокола, при помощи которого должен быть сконфигурирован интерфейс ( bootp | dhcp ) BOOTP Интерфейс необходимо настроить с использованием протокола удаленной загрузки BOOTP IPADDR IP-адрес, который должен быть присвоен интерфейсу NETMASK Маска подсети IP-адреса интерфейса NETWORK Адрес сети интерфейса BROADCAST Широковещательный адрес интерфейса
Значения NETMASK, NETWORK, BROADCAST могут быть вычислены скриптом ifup автоматически при помощи программы ipcalc, поэтому, если они соответствуют классу IP-адреса, указывать явно их не обязательно
Для настройки интерфейсов во время загрузки компьютера используется скрипт 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.
[править] Файл конфигурации eth0
Вот пример наиболее распространённой конфигурации Ethernet-интерфейса:
В данном случае файл описывает интерфейс eth0, которому назначен IP-адрес из диапазона рекомендованного для локальных сетей 10.0.0.188. Поскольку адрес принадлежит классу A, а необходимо чтобы под сетевую часть было отведено 24 бита, явным образом задана сетевая маска NETMASK, адрес сети NETWORK и широковещательный адрес BROADCAST.
Сетевые интерфейсы создаются автоматически для каждого обнаруженного сетевого устройства при загрузке ядра ОС.
eth — сетевой интерфейс к карте Ethernet или картам WaveLan (Radio Ethernet).
Каждый интерфейс характеризуется определёнными параметрами, необходимыми для обеспечения его функционирования и для сетевого обмена данными по протоколу IP.
Параметры интерфейса
Кроме этих параметров интерфейс характеризуется ещё:
Конфигурационные файлы и настройка IPv4
Debian/Ubuntu
Настройки сетевого интерфейса указываются в конфигурационном файле /etc/network/interfaces :
Ubuntu 16.04 LTS
Ubuntu 18.04 LTS
В этой версии ОС сеть может задаваться не с помощью networking, а с помощью утилиты netplan.
Для применения изменений необходимо выполнить команду netplan apply. Она проверяет конфигурационный файл на наличие ошибок, применяет изменения и автоматически перезагружает интерфейс.
Redhat/Fedora/CentOS
/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, новый создавать не нужно.
CentOS
Для работы с IPv6 необходимо добавить следующие директивы в конфигурационный файл /etc/sysconfig/network :
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-адресов
В остальном интерфейс настраивается аналогично физическому.
CentOS
Debian/Ubuntu
Ubuntu 16.04 LTS
Для данной ОС не требуется создавать виртуальный интерфейс, достаточно добавить второй IP-адрес на уже существующий, например:
Ubuntu 18.04 LTS с netplan
Несколько IPv6-адресов можно назначать на один интерфейс без создания виртуального. При этом gateway указывается только один раз. Например:
CentOS
Debian/Ubuntu
Ubuntu 16.04 LTS
Nameservers
Необходимые директивы для nameservers добавляются в конфигурационный файл. Указать можно столько DNS-серверов, сколько необходимо.
CentOS
Ubuntu/Debian
Настройка приватной сети
Для создания приватной сети между боксами необходимо настроить новый интерфейс — он уже добавлен, увидеть его можно в выводе утилиты ip
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 позволяет получать диагностическую информацию об интерфейсах системы и выполнять их настройку.
Формат вызова команды:
Без параметров программа выводит на экран информацию обо всех активных (находящих в состоянии 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-карте выполняется командой:
в этом разделе описываются основные понятия сетевых интерфейсов на Windows, включая способы их определения в коде и их свойства.
этот раздел предназначен для аудитории разработчика, как для Windows настольных сетевых приложений, так и для сетевых драйверов в режиме ядра. Тем не менее, некоторые из представленных здесь сведений также могут быть полезны для системных администраторов, управляющих сетевыми интерфейсами с помощью командлетов PowerShell.
Обзор
Сетевой интерфейс — это точка, в которой соединяются две части сетевого оборудования или уровней протоколов. Как правило, он представлен физической сетевой картой (NIC) для подключения между компьютером и частной или общедоступной сетью. Однако он также может принимать форму программного компонента, такого как интерфейс замыкания на себя ( 127.0.0.1 для IPv4 или ::1 IPv6).
Сетевые интерфейсы определяются с помощью IETF в RFC 2863 и не предназначены для определения с помощью Windows. Подробные вопросы о значении идентификаторов сетевых интерфейсов, таких как ifIndex, см. в их определениях IETF. в оставшейся части этого раздела обсуждаются сведения о реализации, связанные с Windows.
Идентификаторы и свойства сетевых интерфейсов
в Windows сетевой интерфейс можно идентифицировать различными способами. Некоторые из этих идентификаторов используются для различения сетевых интерфейсов друг от друга, но не все идентификаторы так же хорошо подходят для этой задачи из-за их различий в свойствах. Как правило, сетевые интерфейсы определяются сетевым адресом для внешних компонентов. Например, это может быть идентификатор узла и номер порта или просто уникальный идентификатор узла.
В коде сетевой интерфейс может быть идентифицирован различными способами. В следующей таблице описаны способы идентификации сетевого интерфейса вместе со связанными свойствами. Мы рекомендуем использовать идентификатор GUID интерфейса (ифгуид) для программирования, если для определенного API не требуется другой идентификатор сетевого интерфейса.
Идентификатор
Размер
Является уникальным в системе
Является уникальным в мире
Является прогнозируемым
Будет перезапущено, если сетевая карта удалена
Сохраняется во всех перезагрузках
Конечные пользователи могут изменять в любое время
Драйверы могут измениться в любое время
Общее знакомство с конечными пользователями
Всегда имеется
ifIndex
4 байта
Да
Нет
Нет
Да
Нет 1
Нет
Нет
Некоторые 2
Да
нетлуид
8 байт
Да
Нет
Нет
Да
Да
Нет
Нет
Нет
Да
ифгуид
16 байт
Да
Обычно 3
Нет
Нет
Да
Нет
Нет
Нет
Да
ифалиас
514 байт
Да для сетевых карт 4
Нет
Иногда 5
Да
Да
Да
Нет
Да
Обычно 4
ифдескр
514 байт
Обычно 6
Нет
Нет
Да
Да
Нет
Да
Да
Расположена
Иффисаддресс (MAC-адрес)
от 0 до 32 байт
Обычно для сетевых адаптеров
Обычно для сетевых адаптеров
Да
Привязано к оборудованию
Да
Нет
Нет
Да
Обычно 7
ИД экземпляра PnP
До 400 байт
Да
Нет
Нет
Да
Да
Нет
Нет
Нет
Обычно для сетевых адаптеров 8
Расположение PnP (номер гнезда PCI)
До 400 байт
Да
Нет
Да
Да
Да
Нет
Нет
Порой
Иногда 8, 9
Примечания для предыдущей таблицы:
Видимость для разработчиков
API вспомогательного приложения IP также доступен для настольных приложений в пользовательском режиме и драйверов режима ядра.
Поверхность API UWP предоставляет только свойство ифгуид напрямую. Однако разработчики приложений UWP могут импортировать функцию GetIfTable2 с помощью P/Invoke, если они необходимы для доступа к другим свойствам сетевого интерфейса.
Связанные темы
Определения информационной базы MIB для сетевых интерфейсов см. в RFC 2863.
Сетевые интерфейсы NDIS в сетевых драйверах см. в разделе NDIS Network Interfaces.
Справочник по API Нетиоапи. h см. в разделе нетиоапи. h Header.