База знаний

Часто задаваемые вопросы, на которые мы уже ответили

Сетевые интерфейсы

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

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-адрес для каждого бокса задаётся при подключении бокса в сеть. Узнать нужный адрес для приватной сети можно обратившись в службу поддержки.

Узнав нужный 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. Среди списка установленных флагов может присутствовать слово 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


Была ли эта статья полезной?