Сетевые интерфейсы создаются автоматически для каждого обнаруженного сетевого устройства при загрузке ядра ОС.
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:
auto eth0 iface eth0 inet static address 123.123.123.123 netmask 255.255.255.0 gateway 123.123.123.0 dns-nameservers 141.8.194.254 141.8.197.254
Ubuntu 16.04 LTS
Директивы сетевого интерфейса записываются в файл /etc/network/interfaces. В отличие от Debian и Ubuntu более ранних версий, интерфейсы именуются с префиксом ens, например — ens3:
auto ens3 iface ens3 inet static address 123.123.123.123 netmask 255.255.255.0 gateway 123.123.123.1 dns-nameservers 141.8.194.254 141.8.197.254
Ubuntu 18.04 LTS
В этой версии ОС сеть может задаваться не с помощью networking, а с помощью утилиты netplan.
Конфигурационный файл сетевого интерфейса расположен в каталоге: /etc/netplan/50-cloud-init.yaml. Описание интерфейса выглядит следующим образом:
network: version: 2 ethernets: ens3: addresses: - 185.185.68.210/22 gateway4: 185.185.68.1 nameservers: addresses: - 141.8.194.254 - 141.8.197.254
Для применения изменений необходимо выполнить команду 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-серверов:
/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-серверов:
TYPE=Ethernet NAME=eth0 DEVICE=eth0 ONBOOT=yes DNS1=141.8.194.254 DNS2=141.8.197.254 NETMASK=255.255.255.0 BOOTPROTO=static IPADDR=123.123.123.123 GATEWAY=123.123.123.1
IPv6
Адрес можно добавить на тот же интерфейс, что и IPv4, новый создавать не нужно.
На нашей площадке используется универсальный шлюз fe80::1.
CentOS
Для работы с IPv6 необходимо добавить следующие директивы в конфигурационный файл /etc/sysconfig/network:
NETWORKING_IPV6=yes IPV6_DEFAULTDEV=eth0 IPV6_DEFAULTGW=fe80::1
- NETWORKING_IPV6 - включаем поддержку IPV6.
- IPV6_DEFAULTDEV - интерфейс по умолчанию.
- IPV6_DEFAULTGW - gateway по умолчанию.
IP-адрес назначается в конфигурационном файле /etc/sysconfig/network-scripts/ifcfg-*:
IPV6INIT=yes IPV6ADDR=2a0a:2b40::4:1701/64
Debian/Ubuntu
IP-адрес добавляется на интерфейс в файле /etc/network/interfaces:
iface eth0 inet6 static address 2a0a:2b40::4:16d1 netmask 64 gateway fe80::1
Ubuntu 16.04 LTS
От других систем семейства отличается имя интерфейса, вместо eth0 – ens3.
iface ens3 inet6 static address 2a0a:2b40::4:16d1 netmask 64 gateway fe80::1
Ubuntu 18.04 LTS
В файл /etc/netplan/50-cloud-init.yaml нужно добавить:
addresses: - 2a0a:2b40:fa:a31::/64 gateway6: fe80::1
И применить изменения командой netplan apply.
Несколько IP-адресов
IPv4
Чтобы назначить дополнительные IPv4-адреса на тот же самый интерфейс, необходимо создать виртуальный интерфейс в виде имя_интерфейса:номер, например
eth0:0.
В остальном интерфейс настраивается аналогично физическому.
CentOS
$ cat /etc/sysconfig/network-scripts/ifcfg-eth1:0 DEVICE=eth1:0 ONBOOT=yes BOOTPROTO=static IPADDR=192.168.0.1 NETMASK=255.255.255.0
Debian/Ubuntu
$ cat /etc/network/interfaces source /etc/network/interfaces.d/* auto eth0 iface ens6 inet static address 192.168.0.1 netmask 255.255.255.0 auto eth0:0 iface ens6:0 inet static address 192.168.1.1 netmask 255.255.255.0
Ubuntu 16.04 LTS
Для данной ОС не требуется создавать виртуальный интерфейс, достаточно добавить второй IP-адрес на уже существующий, например:
$ cat /etc/network/interfaces source /etc/network/interfaces.d/* auto ens6 iface ens6 inet static address 192.168.0.1 netmask 255.255.255.0 iface ens6 inet static address 192.168.1.1
Ubuntu 18.04 LTS с netplan
В интерфейсе описываются необходимые адреса, роутинг происходит через директиву
routes.
$cat /etc/netplan/50-cloud-init.yaml network: version: 2 ethernets: ens3: addresses: - 185.185.68.210/22 - 141.8.198.107/22 gateway4: 185.185.68.1 nameservers: addresses: - 141.8.194.254 - 141.8.197.254 routes: - to: 185.185.68.210/22 via: 185.185.68.1 - to: 141.8.198.107/22 via: 141.8.198.1
IPv6
Несколько IPv6-адресов можно назначать на один интерфейс без создания виртуального. При этом gateway указывается только один раз. Например:
CentOS
$ cat /etc/sysconfig/network-scripts/ifcfg-eth0 IPV6INIT=yes IPV6ADDR=2a0a:2b40::4:1701/64 IPV6ADDR_SECONDARIES="2a0a:2b40::4:1702/64 2a0a:2b40::4:1703/64"
Debian/Ubuntu
$ cat /etc/network/interfaces iface eth0 inet6 static address 2a0a:2b40::4:16d1 netmask 64 gateway 2a0a:2b40::1 iface eth0 inet6 static address 2a0a:2b40::4:16d2 netmask 64
Ubuntu 16.04 LTS
$ cat /etc/network/interfaces iface ens3 inet6 static address 2a0a:2b40::4:16d1 netmask 64 gateway 2a0a:2b40::1 iface ens3 inet6 static address 2a0a:2b40::4:16d2 netmask 64
Nameservers
Необходимые директивы для nameservers добавляются в конфигурационный файл. Указать можно столько DNS-серверов, сколько необходимо.
CentOS
DNS1=8.8.8.8 DNS2=8.8.4.4
Ubuntu/Debian
dns-nameservers 8.8.8.8 8.8.4.4
Настройка приватной сети
Обратите внимание вы не сможете использовать любые IP-адреса из диапазона приватных. IP-адрес для каждого бокса задаётся при подключении бокса в сеть. Узнать нужный адрес для приватной сети можно обратившись в службу поддержки.
Узнав нужный IP-адрес для приватной сети можно приступать к самой настройке.
Для создания приватной сети между боксами необходимо настроить новый интерфейс — он уже добавлен, увидеть его можно в выводе утилиты ip
$ ip a
У боксов без приватной сети только два интерфейса: lo и eth/ens. У боксов с приватной сетью есть ещё один интерфейс eth/ens, изначально он выключен. Чтобы его включить, надо:
Ubuntu 18.04 LTS и старше
Добавить в файл /etc/netplan/50-cloud-init.yaml:
ens6: addresses: - 10.0.0.1/8
Важно соблюдать количество пробелов как в остальном файле.
Debian
Добавить в файл /etc/network/interfaces.d/50-cloud-init:
auto eth1 iface eth1 inet static address 10.0.0.1 netmask 255.0.0.0
CentOS
Создать файл /etc/sysconfig/network-scripts/ifcfg-eth1:
TYPE=Ethernet NAME=eth1 DEVICE=eth1 ONBOOT=yes NETMASK=255.0.0.0 BOOTPROTO=static IPADDR=10.0.0.1
Проверить работу приватной сети можно с помощью ssh, ping или любых других подходящих утилит:
ssh login@10.0.0.2 ping 10.0.0.2
Настройка mtu на интерфейсе
Параметр mtu нужно менять, если вы пользуетесь индивидуальной защитой от DDoS. В стандарте Ethernet TCP-пакеты разбиты на кадры объемом 1500 байт, но при передаче через GRE-тоннель маршрутизаторы дописывают к кадрам свои 24 байта. Принимающая система оказывается не готова к кадру размером 1524 байт, поэтому мы изменим параметр mtu на интерфейсе, уменьшив его до 1476 байт, чтобы принимающая система спокойно восприняла итоговый кадр в 1500 байт.
Ubuntu 18.04+
Дописываем mtu в конфигурационный файл /etc/netplan/50-cloud-init.yaml сразу после имени интерфейса, например:
ens3: mtu: 1476 addresses: - 185.185.68.210/22
Важно соблюдать количество пробелов как в остальном файле.
После чего перезагружаем сетевую службу командой netplan apply.
Debian
Редактируем файл /etc/network/interfaces, добавляя параметр вслед за описанием интерфейса:
auto ens3 iface ens3 inet static mtu 1476 address 123.123.123.123
Перезагружаем сеть командой systemctl restart networking.
CentOS
Вносим в файл /etc/sysconfig/network строку:
MTU=1476
И перезагружаем сетевую службу: systemctl restart network.
ifconfig
Команда ifconfig позволяет получать диагностическую информацию об интерфейсах системы и выполнять их настройку.
Формат вызова команды:
ifconfig interface options
Для получения информации, программа ifconfig может вызываться простым пользователем. Файл ifconfig находится в каталоге /sbin, чаще всего при вызове нужно указывать абсолютное путевое имя.
Без параметров программа выводит на экран информацию обо всех активных (находящихся в состоянии up) интерфейсах. Если указано имя интерфейса и отсутствуют опции, выводится информация только о нем.
Просмотр информации об интерфейсе eth0
$ ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:01:02:B4:61:10 inet addr:10.0.0.188 Bcast:10.255.255.255 Mask:255.0.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1347443 errors:0 dropped:0 overruns:0 frame:0 TX packets:865328 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:830641609 (792.1 Mb) TX bytes:72315353 (68.9 Mb) Interrupt:10 Base address:0xcc00
Формат вывода информации о интерфейсе программой ifconfig:
- Характеристики канального уровня: Канальный уровень Link encap. Аппаратный MAC-адрес устройства HWaddr.
- Характеристики сетевого уровня: IP-адрес интерфейса inet addr; широковещательный адрес интерфейса Bcast; маска подсети интерфейса Mask.
- Флаги, метрика и MTU: Список установленных флагов интерфейса: включён UP; принимает широковещательные пакеты BROADCAST; принимает групповые пакеты MULTICAST. Установленный размер MTU и метрика Metric.
- Информация о полученных пакетах RX: Число пакетов packets, ошибок errors, отброшенных пакетов dropped, переполнений overruns.
- Информация об отправленных пакетах: Число пакетов packets, ошибок errors, отброшенных пакетов dropped, переполнений overruns, потерь несущей carrier, коллизий collisions; объем буфера передачи txqueuelen.
- Объем переданных данных: Количество байтов полученных RX bytes и отправленных TX bytes через интерфейс.
- Аппаратные параметры: Номер линии IRQ Interrupt и адрес памяти Base address.
Назначение IP-адреса 10.0.0.1 первой Ethernet-карте
Назначение IP-адреса 10.0.0.1 первой Ethernet-карте выполняется командой:
$ ifconfig eth0 10.0.0.1
Включение интерфейса
Включение добавленного интерфейса выполняется командой:
$ ifconfig eth0 10.0.0.1 up
Маршрутизация (route)
route — утилита для настройки таблицы маршрутизации.
Просмотр таблицы маршрутизации
Вывод совпадает с выводом netstat -r:
$ route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default 185.185.68.1 0.0.0.0 UG 0 0 0 eth0 185.185.68.0 * 255.255.252.0 U 0 0 0 eth0 $ netstat -r Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default 185.185.68.1 0.0.0.0 UG 0 0 0 eth0 185.185.68.0 * 255.255.252.0 U 0 0 0 eth0
Добавление шлюза по умолчанию
$ route add default gw 192.168.0.1
Добавление маршрута в локальную сеть
$ route add -net 192.56.76.0 netmask 255.255.255.0 dev eth0
Добавление маршрута в удаленную сеть
$ route add -net 192.57.66.0 netmask 255.255.255.0 gw 192.168.0.2
Удаление маршрута
$ route del -net 192.57.66.0 netmask 255.255.255.0 gw 192.168.0.2
Утилита ip
Утилита ip совмещает в себе другие сетевые утилиты и позволяет производить те же самые операции, что и ifconfig, route и arp вместе взятые.
Подробную информацию об утилите можно получить с помощью help:
$ ip help Usage: ip [ OPTIONS ] OBJECT { COMMAND | help } ip [ -force ] -batch filename where OBJECT := { link | addr | addrlabel | route | rule | neigh | ntable | tunnel | tuntap | maddr | mroute | mrule | monitor | xfrm | netns | l2tp | tcp_metrics | token | netconf } OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] | -f[amily] { inet | inet6 | ipx | dnet | bridge | link } | -4 | -6 | -I | -D | -B | -0 | -l[oops] { maximum-addr-flush-attempts } | -o[neline] | -t[imestamp] | -b[atch] [filename] | -rc[vbuf] [size]}
Разберем вывод команды подробнее.
Блок «Usage» содержит синтаксис утилиты:
ip [ OPTIONS ] OBJECT { COMMAND | help } - общий синтаксис. ip [ -force ] -batch filename - синтаксис при работе со скриптами.
В блоке «OBJECT» указаны все доступные объекты:
OBJECT := { link | addr | addrlabel | route | rule | neigh | ntable | tunnel | tuntap | maddr | mroute | mrule | monitor | xfrm | netns | l2tp | tcp_metrics | token | netconf }
Часто используемые объекты:
- address — сетевой адрес на устройстве
- link— физическое сетевое устройство
- monitor — мониторинг состояния устройств
- neigh — ARP
- route — управление маршрутизацией
- rule — правила маршрутизации
- tunnel — настройка туннелирования
«OPTIONS» содержит список доступных опций:
OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] | -f[amily] { inet | inet6 | ipx | dnet | bridge | link } | -4 | -6 | -I | -D | -B | -0 | -l[oops] { maximum-addr-flush-attempts } | -o[neline] | -t[imestamp] | -b[atch] [filename] | -rc[vbuf] [size]}
Часто используемые опции:
- -v — вывод информации об утилите и ее версии
- -s — включает вывод статистической информации
- -f — указывает протокол для работы:
- bridge
- inet
- inet6
- ipx
- link
- -o — выводить каждую запись с новой строки
- -r — выполнять резолвинг
Команды:
add, change, delete, flush, get, list, show, monitor, replace, restore, save, set, и update.
Если команда не указана, выполняется show.
Примеры
Показать все соединения
$ ip link show
Создание маршрута по умолчанию
$ ip route add default via 192.168.50.100
Перезапуск сетевых сервисов
Чтобы применить изменения, необходимо перезапустить сервис.
Debian/Ubuntu
service networking restart /etc/init.d/networking restart systemctl restart networking
CentOS
/etc/init.d/network restart systemctl restart network