Сетевые интерфейсы создаются автоматически для каждого обнаруженного сетевого устройства при загрузке ядра ОС.
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-серверов:
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 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
Вы можете использовать любые IP-адреса из диапазона приватных. Там же можно узнать, какие маски для каких диапазонов лучше использовать.
Проверить работу приватной сети можно с помощью 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. Среди списка установленных флагов может присутствовать слово 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-карте выполняется командой:
$ 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 — . Аналогично опции -B
- dnet —
- inet — . Аналогично опции -4
- inet6 — . Аналогично опции -6
- ipx —
- link — означает отсутствие протокола. Аналогично опции -0
- -o — выводить каждую запись с новой строки
- -r — выполнять резолвинг и выводить символические имена хостов
Также при работе с утилитой ip используются различные команды и параметры.
Команды:
add, change, delete, flush, get, list, show, monitor, replace, restore, save, set, и update.
Если команда не указана, выполняется show
.
Параметры:
- dev имя_устройства — сетевое устройство.
- up — включить.
- down — выключить.
- llarrr — MAC — адрес.
- initcwnd — размер окна перегрузки TCP при инициализации.
- window — размер окна TCP.
- cwnd — размер окна перегрузки TCP.
- type — тип.
- via — подключиться к роутеру.
- default — маршрут по умолчанию.
- blackhole — маршрут «черная дыра» — отбрасывать пакеты и не посылать ICMP сообщения о недоступности.
- prohibit — маршрут «запрета» — отбрасывать пакеты и возвращать ICMP сообщения о запрете доступа.
- unreachable — маршрут «недостижимый» — отбрасывать пакеты и посылать ICMP пакеты о недостижимости узла.
Не все команды и параметры доступны при работе с различными объектами. Подробную информацию также можно получить применив «help».
При выводе help
для объекта address
блок «Usage» содержит синтаксис различных комбинаций команд и параметров:
$ ip address help Usage: ip addr {add|change|replace} IFADDR dev STRING [ LIFETIME ] [ CONFFLAG-LIST ] ip addr del IFADDR dev STRING [mngtmpaddr] ip addr {show|save|flush} [ dev STRING ] [ scope SCOPE-ID ] [ to PREFIX ] [ FLAG-LIST ] [ label PATTERN ] [up] ip addr {showdump|restore} IFADDR := PREFIX | ADDR peer PREFIX [ broadcast ADDR ] [ anycast ADDR ] [ label STRING ] [ scope SCOPE-ID ] SCOPE-ID := [ host | link | global | NUMBER ] FLAG-LIST := [ FLAG-LIST ] FLAG FLAG := [ permanent | dynamic | secondary | primary | tentative | deprecated | dadfailed | temporary | CONFFLAG-LIST ] CONFFLAG-LIST := [ CONFFLAG-LIST ] CONFFLAG CONFFLAG := [ home | nodad | mngtmpaddr | noprefixroute ] LIFETIME := [ valid_lft LFT ] [ preferred_lft LFT ] LFT := forever | SECONDS
Примеры
Показать все соединения
Сокращенный вывод ifconfig без параметров:
$ ip link show 1: lo: mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000 link/ether 52:54:00:72:40:d3 brd ff:ff:ff:ff:ff:ff 4: eth1: mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000 link/ether 52:54:00:58:e5:fc brd ff:ff:ff:ff:ff:ff
Отображение информации об интерфейсе eth0
$ ip link show eth0 2: eth0: mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000 link/ether 52:54:00:72:40:d3 brd ff:ff:ff:ff:ff:ff
Включение интерфейса eth1
$ ip link set eth1 up
Вывод всех интерфейсов и IP-адресов
$ ip address show 1: lo: mtu 65536 qdisc noqueue state UNKNOWN qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 52:54:00:72:40:d3 brd ff:ff:ff:ff:ff:ff inet 141.8.196.228/24 brd 141.8.196.255 scope global eth0 valid_lft forever preferred_lft forever inet6 2a0a:2b40::4:1703/64 scope global valid_lft forever preferred_lft forever inet6 2a0a:2b40::4:1702/64 scope global valid_lft forever preferred_lft forever inet6 2a0a:2b40::4:1701/64 scope global valid_lft forever preferred_lft forever inet6 fe80::5054:ff:fe72:40d3/64 scope link valid_lft forever preferred_lft forever 4: eth1: mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 52:54:00:58:e5:fc brd ff:ff:ff:ff:ff:ff inet 192.168.0.1/24 brd 192.168.0.255 scope global eth1 valid_lft forever preferred_lft forever inet6 fe80::5054:ff:fe58:e5fc/64 scope link valid_lft forever preferred_lft forever
Установка/удаление IP-адреса для интерфейса eth1
$ ip addr add 192.168.0.10/24 dev eth1
$ ip addr del 192.168.0.10/24 dev eth1
Отображение маршрута к указанной сети
$ ip route get 192.168.0.0/24
Отображение маршрута к указанной сети от указанного интерфейса
$ ip route get 192.168.0.0/24 from 141.8.196.228 broadcast 192.168.0.0 from 141.8.196.228 dev eth1 cache
Создание/удаление маршрута
$ ip route add 10.10.20.0/24 via 192.168.50.100
$ ip route delete 10.10.20.0/24
Создание маршрута по умолчанию
$ ip route add default via 192.168.50.100
Создание маршрута к указанной сети
$ ip route add 10.10.20.0/24 dev eth0
Как и для утилиты route, команды можно сокращать. Например, ip l
тоже самое, что и ip link show
.
Перезапуск сетевых сервисов
Чтобы применить изменения, внесенные в конфигурационный файл, необходимо перезапустить сервис.
Название самого сервиса будет отличаться в зависимости от выбранного дистрибутива, для Ubuntu/Debian это networking, для CentOS - network.
Debian/Ubuntu
service networking restart /etc/init.d/networking restart systemctl restart networking
CentOS
/etc/init.d/network restart systemctl restart network