Команда ip вместо ifconfig: шпаргалка по iproute2

9 минут чтения
Средний рейтинг статьи — 4.8

ifconfig до сих пор встречается в старых инструкциях, но на большинстве Linux-серверов основной инструмент для сетевой диагностики и настройки — ip из пакета iproute2. Он показывает интерфейсы, IP-адреса, маршруты, ARP/neighbor-таблицу, сетевые пространства имён и статистику линков.

Если вы администрируете сервер, работаете с контейнерами или просто разбираетесь, почему перестал открываться сайт, команда ip почти всегда одна из первых, которые стоит проверить. Она быстро отвечает на базовые вопросы: поднят ли интерфейс, какой адрес назначен, куда пойдёт пакет, есть ли default gateway, видит ли сервер соседний хост в L2-сети.

Ниже — практичная шпаргалка по iproute2: как читать вывод, какие команды использовать вместо ifconfig, route, arp и части netstat, и как применять ip при диагностике сетевых проблем.

Почему ip заменил ifconfig

ifconfig входит в старый набор net-tools. Он долго был стандартом де-факто, но плохо отражает возможности современного Linux networking: policy routing, network namespaces, VRF, расширенную работу с IPv6, множественные таблицы маршрутизации и современные типы интерфейсов.

ip — часть iproute2. В этот же набор входит ss, современная альтернатива netstat для сокетов и соединений. Если нужно смотреть открытые порты, TCP-состояния и listening-сокеты, лучше использовать не ip, а ss. Если нужно смотреть адреса, интерфейсы, маршруты и соседей — это зона ответственности ip.

Главное отличие: ip работает через Netlink API ядра и показывает сетевую конфигурацию ближе к тому, как её видит Linux. Поэтому вывод иногда кажется менее «человеческим», чем у ifconfig, зато он точнее и полнее.

Что полезно запомнить:

1) ip — не одна команда, а набор подкоманд — ip link, ip addr, ip route, ip neigh, ip netns, ip rule.

2) Большинство изменений временные — если выполнить sudo ip addr add ..., настройка обычно пропадёт после перезагрузки или рестарта сетевого менеджера. Для постоянной конфигурации нужен Netplan, NetworkManager, systemd-networkd или конфиги дистрибутива — подробнее об этом ниже, в разделе про безопасную работу.

3) Команды можно сокращать — ip address show можно написать как ip addr show, ip a или даже ip ad. В скриптах лучше использовать читаемые формы.

4) Есть удобные флаги вывода — -br для краткого вывода, -c для цвета, -j для JSON, -s для статистики, -d для деталей.

Например:

ip -br addr
ip -c route
ip -j link show
ip -s link show dev eth0

Базовый синтаксис ip

Общий формат команды:

ip [OPTIONS] OBJECT COMMAND [ARGUMENTS]

Где OBJECT — объект сетевой подсистемы, с которым вы работаете.

Самые частые объекты:

1) link — сетевые интерфейсы на L2-уровне: eth0, ens3, wlan0, lo, bridge, veth, bond, VLAN.

2) addr или address — IP-адреса на интерфейсах.

3) route — таблица маршрутизации.

4) neigh или neighbor — соседи: ARP для IPv4 и NDP для IPv6.

5) rule — правила policy routing.

6) netns — network namespaces, особенно полезно при контейнерах и изоляции сетей.

У команды есть справка:

ip help
ip addr help
ip route help

Вывод ip часто содержит термины, которые стоит понимать:

1) UP — интерфейс административно включён.

2) LOWER_UP — физический или виртуальный линк реально поднят. Для Ethernet это обычно означает, что есть carrier.

3) state UP/DOWN/UNKNOWN — состояние интерфейса. У lo часто UNKNOWN, это нормально.

4) mtu — максимальный размер L2-пакета без фрагментации на интерфейсе. Ошибки с MTU могут ломать VPN, туннели и отдельные HTTPS-соединения.

5) qdisc — очередь дисциплины трафика. Обычно при базовой диагностике её можно игнорировать.

6) scope — область действия адреса или маршрута: host, link, global.

Полезная привычка — начинать с краткого вывода:

ip -br link
ip -br addr

Он компактнее и быстрее показывает главное: имя интерфейса, состояние, IP-адреса.

ip link показывает и настраивает сетевые интерфейсы. Это ближайший аналог части возможностей ifconfig.

Посмотреть все интерфейсы:

ip link show

Краткий вид:

ip -br link

Показать конкретный интерфейс:

ip link show dev eth0

Типичный вывод:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff

Что здесь важно:

1) eth0 — имя интерфейса. На современных системах чаще встречаются ens3, enp0s3, eno1.

2) UP — интерфейс включён командой или сетевым менеджером.

3) LOWER_UP — линк есть на нижнем уровне. Если UP есть, а LOWER_UP нет, проблема может быть в кабеле, виртуальном адаптере, bridge, provider-сети или гипервизоре.

4) mtu 1500 — текущий MTU.

5) link/ether — MAC-адрес.

Включить или выключить интерфейс:

sudo ip link set dev eth0 up
sudo ip link set dev eth0 down

Изменить MTU:

sudo ip link set dev eth0 mtu 1400

Переименовать интерфейс:

sudo ip link set dev eth0 name wan0

На продакшен-сервере с удалённым SSH переименование, выключение интерфейса и изменение MTU могут оборвать доступ. Перед такими действиями полезно иметь консоль провайдера или out-of-band-доступ.

Статистика интерфейса:

ip -s link show dev eth0

Вы увидите счётчики RX/TX: bytes, packets, errors, dropped, overruns, carrier, collisions. Если растут errors или dropped, это повод копать глубже: драйвер, виртуализация, перегрузка, проблемы на канале, фаервол, очереди. Для постоянного наблюдения за трафиком удобнее специализированные утилиты — например, iftop, nload, vnstat; про них есть отдельный материал про мониторинг сети с помощью iftop, nload и vnstat.

IP-адреса: ip addr

ip addr показывает адреса, назначенные интерфейсам. Это самая частая замена ifconfig.

Показать все адреса:

ip addr show

Краткий вид:

ip -br addr

Только IPv4:

ip -4 addr

Только IPv6:

ip -6 addr

Показать адреса конкретного интерфейса:

ip addr show dev eth0

Пример:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP
    inet 192.0.2.10/24 brd 192.0.2.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 2001:db8::10/64 scope global
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fe12:3456/64 scope link
       valid_lft forever preferred_lft forever

Как читать:

1) inet 192.0.2.10/24 — IPv4-адрес и префикс сети. /24 соответствует маске 255.255.255.0.

2) brd 192.0.2.255 — broadcast-адрес для IPv4-сети.

3) scope global — адрес пригоден для обычной сетевой коммуникации за пределами хоста.

4) scope link — адрес действует только в пределах линка. У IPv6 это часто fe80::....

5) valid_lft и preferred_lft — время жизни адреса. Особенно актуально для DHCP и IPv6 SLAAC.

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

sudo ip addr add 192.0.2.20/24 dev eth0

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

sudo ip addr del 192.0.2.20/24 dev eth0

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

sudo ip addr flush dev eth0

Команду flush используйте осторожно: если интерфейс обслуживает SSH-подключение, вы можете потерять доступ к серверу.

Частые проверки:

ip -br addr show dev eth0
ip -4 addr show scope global
ip -6 addr show scope global

Если сервис слушает на конкретном IP, а адрес пропал после перезагрузки, дело обычно не в приложении, а в постоянной сетевой конфигурации — Netplan, NetworkManager, systemd-networkd или cloud-init.

Маршруты: ip route

ip route отвечает на вопрос: куда Linux отправит пакет. При диагностике недоступности сайта, API или базы данных это одна из ключевых команд.

Показать основную таблицу маршрутизации:

ip route show

Обычно вывод выглядит так:

default via 192.0.2.1 dev eth0 proto dhcp src 192.0.2.10 metric 100
192.0.2.0/24 dev eth0 proto kernel scope link src 192.0.2.10

Что означает:

1) default via 192.0.2.1 dev eth0 — default gateway. Через него уйдёт трафик во внешние сети.

2) 192.0.2.0/24 dev eth0 — локальная сеть доступна напрямую через eth0.

3) src 192.0.2.10 — исходный IP, который ядро предпочитает для этого маршрута.

4) metric 100 — приоритет маршрута. Чем меньше metric, тем предпочтительнее маршрут среди сопоставимых.

Самая полезная диагностическая команда:

ip route get 8.8.8.8

Или для домена после резолва:

ip route get 203.0.113.50

Она показывает, какой интерфейс, gateway и source IP будут использованы для конкретного назначения. Это быстрее и точнее, чем гадать по всей таблице маршрутов.

Добавить default route:

sudo ip route add default via 192.0.2.1 dev eth0

Удалить default route:

sudo ip route del default

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

sudo ip route add 10.10.0.0/16 via 192.0.2.254 dev eth0

Заменить маршрут, если он уже есть:

sudo ip route replace default via 192.0.2.1 dev eth0

Если на сервере несколько интерфейсов, VPN или policy routing, смотрите не только основную таблицу:

ip rule show
ip route show table all

ip rule показывает правила выбора таблицы маршрутизации. Например, трафик с одного source IP может уходить через один gateway, а с другого — через другой. Это частая причина «странных» проблем, когда curl с сервера работает, а приложение с bind на другой адрес — нет.

Для проверки сетевого пути за пределами локальной машины используйте ping, traceroute или mtr. У нас есть отдельные шпаргалки по ping и по тому, как читать трассировку в mtr и WinMTR.

ARP и соседи: ip neigh

ip neigh показывает neighbor table: соответствия IP-адресов и MAC-адресов на локальном линке. Для IPv4 это ARP, для IPv6 — Neighbor Discovery Protocol.

Показать соседей:

ip neigh show

Пример:

192.0.2.1 dev eth0 lladdr 00:11:22:33:44:55 REACHABLE
192.0.2.50 dev eth0 lladdr 00:11:22:33:44:66 STALE

Состояния:

1) REACHABLE — сосед недавно подтверждён, всё нормально.

2) STALE — запись есть, но давно не подтверждалась. Это не ошибка само по себе.

3) DELAY и PROBE — ядро проверяет доступность соседа.

4) FAILED — не удалось получить MAC-адрес или подтвердить соседа. Для gateway это серьёзный сигнал.

Показать соседей конкретного интерфейса:

ip neigh show dev eth0

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

sudo ip neigh del 192.0.2.1 dev eth0

Очистить neighbor-таблицу интерфейса:

sudo ip neigh flush dev eth0

Когда это полезно:

1) Gateway не отвечает — ip route показывает default gateway, но ip neigh для него в FAILED.

2) Конфликт IP-адресов — MAC-адрес для IP внезапно меняется.

3) После миграции VM трафик идёт не туда — старые ARP-записи на соседних устройствах или в гипервизоре.

4) Проблемы с bridge/VLAN — IP в той же подсети не резолвится в MAC.

Если нужно увидеть пакеты ARP, TCP SYN, TLS-рукопожатие или DNS-запросы, используйте tcpdump. Команда ip показывает состояние ядра, но не заменяет анализ трафика. Для практики пригодится материал что такое tcpdump и как анализировать сетевой трафик из терминала.

Сетевые пространства имён: ip netns

Network namespaces позволяют иметь несколько изолированных сетевых стеков на одной Linux-машине. У каждого namespace могут быть свои интерфейсы, адреса, маршруты, iptables/nftables-правила и сокеты.

Это основа контейнерной сетевой изоляции. Docker, containerd, Kubernetes и CNI-плагины активно используют namespaces, veth-пары, bridge и маршрутизацию. Если тема контейнеров актуальна, полезно отдельно разобраться, как работает Docker networking.

Посмотреть network namespaces, зарегистрированные через ip netns:

ip netns list

Создать namespace:

sudo ip netns add testns

Выполнить команду внутри namespace:

sudo ip netns exec testns ip addr

Удалить namespace:

sudo ip netns del testns

Минимальный пример с veth-парой:

sudo ip netns add testns
sudo ip link add veth-host type veth peer name veth-ns
sudo ip link set veth-ns netns testns
 
sudo ip addr add 10.200.1.1/24 dev veth-host
sudo ip link set veth-host up
 
sudo ip netns exec testns ip addr add 10.200.1.2/24 dev veth-ns
sudo ip netns exec testns ip link set veth-ns up
sudo ip netns exec testns ip link set lo up
 
ping -c 3 10.200.1.2

Этот пример показывает базовый принцип: veth-пара похожа на виртуальный кабель. Один конец остаётся в root namespace, второй переносится в testns.

В реальной диагностике контейнеров часто нужно понять, где именно находится интерфейс и маршрут: на хосте, в namespace контейнера, в bridge, в overlay-сети или на стороне CNI. ip netns, ip link, ip addr и ip route здесь используются вместе.

Нюанс: Docker не всегда регистрирует namespaces в ip netns list. Иногда приходится искать namespace через PID процесса контейнера и заходить через nsenter. Но базовая логика та же: внутри namespace можно выполнять обычные команды ip.

Быстрая диагностика сетевой проблемы через ip

Когда сайт не открывается или сервер «потерял сеть», не начинайте сразу с перезапуска всего подряд. Команда ip помогает быстро сузить область поиска.

Базовый порядок:

1) Проверить интерфейсы

ip -br link

Ищите нужный интерфейс и состояния UP, LOWER_UP. Если интерфейс DOWN, проверьте сетевой менеджер, конфигурацию, гипервизор или физический линк.

2) Проверить IP-адреса

ip -br addr

Убедитесь, что есть ожидаемый IPv4/IPv6-адрес. Если адреса нет, проблема может быть в DHCP, cloud-init, Netplan, NetworkManager или ручной конфигурации.

3) Проверить default route

ip route

Если нет default via ..., сервер может видеть только локальную подсеть.

4) Проверить маршрут до конкретного адреса

ip route get 1.1.1.1

Команда покажет, через какой интерфейс и gateway пойдёт пакет.

5) Проверить gateway в neighbor-таблице

ip neigh show

Если gateway в FAILED, проблема может быть на L2-уровне: ARP, VLAN, bridge, виртуальный свитч, сеть провайдера.

6) Проверить счётчики ошибок

ip -s link show dev eth0

Растущие errors и dropped помогают отличить проблему приложения от сетевой или драйверной.

7) Проверить сокеты и порты

Здесь подключайте ss, а не ip:

ss -tulpen
ss -tan state established

Если сервис не слушает порт, маршруты могут быть в порядке, но сайт всё равно будет недоступен.

При внешнем мониторинге доступности картина дополняется: сервис вроде Statuser проверяет сайт с заданным интервалом и присылает уведомление о сбое. После алерта ip помогает быстро понять, проблема внутри сервера или где-то дальше по сети. Если сбой кратковременный, полезно сохранить вывод ip -br addr, ip route, ip neigh и ip -s link в инцидентные заметки — потом проще сопоставить это с логами и метриками.

Для общего плана действий при падении сайта пригодится отдельная инструкция что делать, если упал сайт.

Шпаргалка: замена ifconfig, route, arp и netstat

Короткая таблица соответствий.

1) Показать интерфейсы

Старый вариант:

ifconfig -a

Современный вариант:

ip addr
ip -br addr

2) Показать только L2-интерфейсы

ip link
ip -br link

3) Включить интерфейс

sudo ip link set dev eth0 up

4) Выключить интерфейс

sudo ip link set dev eth0 down

5) Назначить IP-адрес

Старый стиль:

sudo ifconfig eth0 192.0.2.10 netmask 255.255.255.0

Через ip:

sudo ip addr add 192.0.2.10/24 dev eth0

6) Удалить IP-адрес

sudo ip addr del 192.0.2.10/24 dev eth0

7) Показать маршруты

Старый вариант:

route -n
netstat -rn

Современный вариант:

ip route

8) Добавить default gateway

sudo ip route add default via 192.0.2.1 dev eth0

9) Проверить маршрут до адреса

ip route get 8.8.8.8

У route такой удобной команды нет.

10) Показать ARP-таблицу

Старый вариант:

arp -n

Современный вариант:

ip neigh

11) Показать слушающие порты

Старый вариант:

netstat -tulpen

Современный вариант:

ss -tulpen

ip не заменяет netstat полностью. Разделение такое: ip — интерфейсы, адреса, маршруты, соседи; ss — сокеты и соединения.

12) Машиночитаемый вывод

ip -j addr
ip -j route

JSON-вывод удобен для скриптов, Ansible, health checks и разовых автоматизаций. Лучше парсить ip -j, чем нестабильный текстовый вывод.

Частые ошибки и безопасная работа

ip — мощный инструмент, но на удалённом сервере им легко отрезать себе доступ.

1) Не путайте временную и постоянную конфигурацию

Команды вида sudo ip addr add и sudo ip route add меняют состояние ядра прямо сейчас. После перезагрузки они обычно исчезают. Если изменение должно пережить reboot, внесите его в конфиг сетевого менеджера.

В Ubuntu Server это часто Netplan в /etc/netplan/*.yaml, в Debian может быть /etc/network/interfaces, в RHEL-подобных системах — NetworkManager через nmcli или профили соединений.

2) Проверяйте, какой интерфейс обслуживает SSH

Перед ip link set down, ip addr flush или сменой маршрута выполните:

ip route get YOUR_CLIENT_IP

Так вы увидите, через какой интерфейс идёт ваш SSH-трафик.

3) Используйте replace, если не уверены, есть ли маршрут

sudo ip route replace default via 192.0.2.1 dev eth0

add завершится ошибкой, если маршрут уже существует. replace добавит или заменит.

4) Не удаляйте default route без запасного доступа

Команда sudo ip route del default на удалённой машине может мгновенно оборвать внешний доступ.

5) Сохраняйте исходное состояние

Перед изменениями полезно выполнить:

ip -br addr
ip route
ip rule
ip neigh

Скопируйте вывод в заметку или тикет. Это ускоряет откат.

6) Учитывайте IPv6

Иногда IPv4 работает, а IPv6 сломан — или наоборот. Проверяйте отдельно:

ip -4 route
ip -6 route
ip -4 addr
ip -6 addr

Если у домена есть AAAA-запись, клиенты могут пытаться идти по IPv6. При проблемах с DNS и адресацией полезны отдельные инструменты вроде dig; про него есть материал как проверить DNS-записи и отладить домен.

7) Не смешивайте инструменты без понимания

Если системой управляет NetworkManager, ручная команда ip может быть перезаписана. Если сеть настраивает cloud-init, правки Netplan тоже могут неожиданно поменяться при пересоздании инстанса. ip отлично подходит для диагностики и временных проверок, но постоянный источник правды должен быть один.

В связке с мониторингом доступности это особенно заметно: алерт говорит, что сломался пользовательский путь, а ip помогает проверить нижний уровень — адресацию, маршрутизацию, линк и соседей, прежде чем переходить к ss, ping, mtr и логам.

FAQ

Можно ли полностью удалить ifconfig и пользоваться только ip?

Да. Для современных Linux-систем ip покрывает задачи ifconfig, route и arp. Для сокетов и портов используйте ss.

Почему ip addr add не сохраняется после перезагрузки?

Потому что команда меняет текущее состояние ядра, а не постоянный конфиг. Настройку нужно добавить в Netplan, NetworkManager, systemd-networkd или другой сетевой менеджер.

Чем ip link отличается от ip addr?

ip link показывает и настраивает интерфейсы на канальном уровне: состояние, MTU, MAC. ip addr показывает и настраивает IP-адреса на этих интерфейсах.

Как понять, через какой интерфейс пойдёт трафик до IP?

Используйте ip route get IP_ADDRESS. Команда покажет маршрут, интерфейс, gateway и выбранный source IP.

Опубликовано 9 ноября 20269 минут чтенияДенис Коршунов
Средний рейтинг статьи — 4.8

Настроить мониторинг за 30 секунд

Надёжные уведомления о даунтаймах. Без ложных срабатываний