Перейти к содержимому

ip: сетевая настройка и диагностика в CLI

Когда привычный ifconfig выдаёт пустую строку, а настройка маршрута через route требует отдельной команды — это не баг системы. Это iproute2, который в современных дистрибутивах вытеснил net-tools. Утилита ip из пакета iproute2 — стандартный интерфейс управления сетевым стеком Linux. Она покрывает интерфейсы, адреса, маршруты, ARP-кеш, правила маршрутизации и изоляцию через namespace.

Зачем iproute2 заменил net-tools

net-tools (ifconfig, route, arp, netstat, nameif) появились в BSD и перешли в Linux в 90-х. К 2000-м стало очевидно: они не поддерживают VLAN, IPsec, QoS, multicast-маршрутизацию и Policy Routing. Каждая задача требовала отдельной команды с несвязанным синтаксисом.

iproute2 объединил всё в одну утилиту ip с подкомандами. Ядро Linux взаимодействует с сетевой подсистемой через netlink-сокеты — ip работает напрямую с ними, тогда как ifconfig парсит вывод /proc/net/. В дистрибутивах на базе systemd (RHEL 7+, Ubuntu 16.04+, Debian 9+) ip установлена по умолчанию. net-tools остаётся в репозиториях для совместимости, но разработчики ядра не добавляют в него новые функции с 2001 года.

Установка, если потребовалась: apt install iproute2 или yum install iproute.

ip link оперирует уровнем L2 — выводит список и управляет состоянием интерфейсов.

ip link show
ip link show eth0
ip link show type bridge

Вывод показывает индекс, имя, MAC-адрес, MTU, состояние (UP/DOWN) и счётчики ошибок/пакетов.

Поднять или опустить интерфейс:

ip link set eth0 up
ip link set eth0 down
Предупреждение

Опускание интерфейса разрывает соединение. При удалённой работе лучше обернуть в скрипт с таймаутом и автовосстановлением.

Установить MTU, сменить MAC или переименовать:

ip link set eth0 mtu 9000
ip link set eth0 address 02:42:ac:11:00:02
ip link set eth0 name enp0s3

Создать виртуальный интерфейс (VETH-пара для namespace или моста):

ip link add veth0 type veth peer name veth1
ip link add br0 type bridge
ip link set veth0 master br0

Удалить интерфейс:

ip link del veth0
ФлагНазначение
showотобразить интерфейсы (краткая форма: ip l)
setизменить параметры интерфейса
add / delсоздать или удалить виртуальный интерфейс
masterпривязать интерфейс к мосту

ip addr: привязка и диагностика адресов

ip addr управляет IP-адресами (L3).

ip addr show
ip addr show eth0

Добавить адрес:

ip addr add 192.168.1.10/24 dev eth0

Добавить вторичный адрес (алиас) на тот же интерфейс:

ip addr add 192.168.1.11/24 dev eth0
Примечание

Вторичные адреса в Linux — не алиасы в понимании ifconfig, а часть одной адресной сущности. Команда ifconfig eth0:0 создавала псевдоним с отдельным именем; ip работает иначе.

Удалить адрес:

ip addr del 192.168.1.10/24 dev eth0

Очистить все адреса с интерфейса:

ip addr flush dev eth0

Полезно при перенастройке: сбросить старые адреса и назначить новые без перезагрузки сервиса.

Указать scope и label:

ip addr add 10.0.0.5/8 dev eth0 scope host label eth0:internal

scope host — адрес только для локальных сокетов, scope global — маршрутизируемый.

ПодкомандаДействие
addназначить адрес
delудалить адрес
showотобразить адреса
flushочистить адреса интерфейса

ip route: маршруты по умолчанию и static

ip route работает с таблицей маршрутизации.

ip route show

Добавить маршрут по умолчанию (gateway):

ip route add default via 192.168.1.1 dev eth0

Добавить конкретный маршрут:

ip route add 10.20.0.0/16 via 192.168.1.254 dev eth0

Маршрут к хосту через прямой ARP (no route, только L2):

ip route add 192.168.1.50/32 dev eth0

Удалить маршрут:

ip route del default via 192.168.1.1

Заменить маршрут (если существует — изменит, если нет — создаст):

ip route replace default via 10.0.0.1 dev eth0

Получить маршрут, который ядро выберет для адреса:

ip route get 8.8.8.8

Добавить маршрут в другую таблицу (по умолчанию таблица 254):

ip route add default via 10.0.0.1 dev eth0 table 100
ПодкомандаНазначение
show / listпоказать таблицу маршрутов
addдобавить маршрут
delудалить маршрут
replaceизменить или создать маршрут
getпоказать маршрут до адреса
flushочистить кэш маршрутов

ip neigh: ARP/NDP-кеш

ip neigh управляет таблицей соседей — ARP для IPv4, NDP для IPv6.

ip neigh show
ip neigh show dev eth0

Добавить статическую ARP-запись:

ip neigh add 192.168.1.1 lladdr 00:11:22:33:44:55 dev eth0 nud permanent

nud (Neighbour Unreachability Detection) определяет состояние:

  • permanent — запись не устаревает
  • noarp — управляется протоколом, но не удаляется
  • reachable / stale / delay / probe — автоматические состояния

Удалить запись:

ip neigh del 192.168.1.1 dev eth0

Очистить весь кеш соседей на интерфейсе:

ip neigh flush dev eth0
Подсказка

После смены MAC-адреса шлюза очистка ARP-кеша ускоряет восстановление связности: ip neigh flush dev eth0.

ip rule: политики маршрутизации

ip rule определяет, какая таблица маршрутизации используется для пакета.

ip rule show

Стандартный вывод:

0:      from all lookup local
32766:  from all lookup main
32767:  from all lookup default

Добавить правило для source IP:

ip rule add from 10.0.0.5 table 100

Правило для исходящего интерфейса:

ip rule add iif eth0 table 100

Удалить правило:

ip rule del from 10.0.0.5 table 100
Примечание

Правила проверяются по порядку (приоритет). Низкий номер — высокий приоритет. Добавляйте правила с приоритетом между существующими, если важна очерёдность.

ДействиеНазначение
fromsource IP или CIDR
todestination IP или CIDR
iifвходящий интерфейс
lookupтаблица маршрутизации
prioчисловой приоритет

ip maddr: multicast-адреса

ip maddr выводит и управляет multicast-группами интерфейса.

ip maddr show eth0

Добавить интерфейс в multicast-группу:

ip maddr add 239.0.0.1 dev eth0

Удалить:

ip maddr del 239.0.0.1 dev eth0

В отличие от unicast, multicast-адресация используется для broadcast-доменов, протоколов маршрутизации (OSPF, RIP), сервисов обнаружения и стриминга. В большинстве задач эта команда не нужна, но при настройке кластеров или мониторинга через специфичные протоколы — потребуется.

ip netns: изоляция сетевых стеков

ip netns создаёт изолированные сетевые namespace. Каждый namespace имеет собственные интерфейсы, адреса, маршруты, ARP-таблицу и правила.

Создать namespace:

ip netns add testns

Запустить процесс внутри namespace:

ip netns exec testns ip link show

Поднять интерфейс в namespace:

ip netns exec testns ip link set lo up
ip netns exec testns ip addr add 127.0.0.1/8 dev lo

Переместить VETH-интерфейс в namespace:

ip link set veth1 netns testns

Удалить namespace:

ip netns del testns

Список namespace:

ip netns list
Подсказка

Контейнеры (docker, podman, LXC) используют именно netns. Если контейнер не получает сеть — проверьте namespace хоста: ip netns exec <container_pid> ip addr.

ifconfig, arp, route — что осталось для совместимости

net-tools формально доступны в репозиториях всех major-дистрибутивов. Исходный код не развивается, но пакеты поддерживаются для совместимости.

Старая командаЭквивалент ipСтатус
ifconfigip addr, ip linkdeprecated
route -nip routedeprecated
arp -aip neighdeprecated
netstat -tulpnss -tulpndeprecated
nameifip link namedeprecated

ss из iproute2 заменяет netstat — работает быстрее, выводит больше информации о сокетах.

Предупреждение

Скрипты инициализации сети в старых дистрибутивах могут опираться на ifconfig. На новых системах systemd-networkd, NetworkManager и cloud-init используют ip напрямую или через свои абстракции.

Если в новом дистрибутиве ifconfig не найден — это нормально. Настройка через ip покрывает все актуальные сценарии: от назначения адреса до сложных политик маршрутизации и изоляции сервисов через namespace.