← Весь справочник

ip

Сетевые интерфейсы, IP-адреса, маршруты и ARP-таблица — ip addr, ip link, ip route, ip neigh

ip из пакета iproute2 показывает и меняет сетевую конфигурацию: интерфейсы, адреса, маршруты, соседей. Заменяет старые ifconfig, route и arp.

Синтаксис

ip [опции] ОБЪЕКТ [команда] [аргументы]

Объект — что смотрим: addr, link, route, neigh, rule, netns. Команда по умолчанию — show (или list). Объекты и команды можно сокращать до однозначного префикса: ip a, ip r, ip l, ip n.

Общие опции

ОпцияЧто значит
-brкратко: одна строка на интерфейс — имя, состояние, адреса
-4 / -6только IPv4 / только IPv6
-sстатистика: байты, пакеты, ошибки, отброшенные; -s -s — подробнее
-dподробности: тип интерфейса, параметры драйвера
-oкаждая запись в одну строку — удобно для grep и awk
-jвывод в JSON (-j -p — с отступами), дальше — через jq
-cцветной вывод
-n имявыполнить в другом сетевом пространстве имён

ip addr — адреса

КомандаЧто делает
ip addrвсе интерфейсы и их адреса
ip addr show dev eth0адреса одного интерфейса
ip addr show scope globalтолько «настоящие» адреса, без loopback и link-local
ip addr add 10.0.0.2/24 dev eth0добавить адрес (маска обязательна)
ip addr del 10.0.0.2/24 dev eth0удалить адрес
ip addr flush dev eth0удалить все адреса интерфейса

Как читать вывод:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
    link/ether 6a:5d:a3:85:87:be brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.5/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
ЧастьЧто значит
<…UP,LOWER_UP>UP — интерфейс включён, LOWER_UP — есть связь на физическом уровне («кабель вставлен»)
mtu 1500максимальный размер пакета
state UP / DOWN / UNKNOWNрабочее состояние канала
link/ether …MAC-адрес
inet 172.17.0.5/16IPv4-адрес и длина маски; inet6 — IPv6
brdшироковещательный адрес подсети
scope global / link / hostадрес для внешнего мира / только для своего сегмента / только для этой машины
valid_lftсрок жизни адреса (у полученных по DHCP — конечный)

ip link — интерфейсы

КомандаЧто делает
ip linkинтерфейсы: флаги, MTU, MAC, состояние
ip link set eth0 up / downвключить / выключить интерфейс
ip link set eth0 mtu 1400сменить MTU
ip link set eth0 address 02:00:00:00:00:01сменить MAC
ip link add dummy0 type dummyсоздать виртуальный интерфейс (dummy, bridge, veth, vlan…)
ip link del dummy0удалить виртуальный интерфейс

ip route — маршруты

КомандаЧто делает
ip routeосновная таблица маршрутов
ip route show defaultтолько маршрут по умолчанию (шлюз)
ip route get 1.1.1.1каким маршрутом, через какой интерфейс и с какого адреса уйдёт пакет
ip route add 10.10.0.0/16 via 192.168.1.1маршрут в сеть через шлюз; dev eth0 — через интерфейс напрямую
ip route add default via 192.168.1.1шлюз по умолчанию
ip route replace …добавить или заменить маршрут с тем же назначением и метрикой
ip route del 10.10.0.0/16удалить маршрут
ip route show table localдругие таблицы: local, main, номер; правила выбора таблиц — ip rule

Строка маршрута:

default via 172.17.0.1 dev eth0
172.17.0.0/16 dev eth0 proto kernel scope link src 172.17.0.5

default — куда идёт всё, что не подошло под другие маршруты. via — через какой шлюз, dev — через какой интерфейс, src — каким адресом подписываться. proto kernel scope link — маршрут в собственную подсеть, ядро добавило его само при назначении адреса. metric — приоритет: из нескольких одинаковых маршрутов выбирается с меньшей метрикой. Из пересекающихся маршрутов выигрывает самый точный (с самой длинной маской).

ip neigh и netns

КомандаЧто делает
ip neighсоседи: IP → MAC и состояние (REACHABLE, STALE, FAILED)
ip neigh flush dev eth0очистить кеш соседей
ip netns listсетевые пространства имён
ip netns exec имя командавыполнить команду внутри пространства имён

Примеры

# все интерфейсы и адреса кратко
ip -br addr

# только IPv4-адреса
ip -4 -br addr

# шлюз по умолчанию
ip route show default

# через какой интерфейс машина пойдёт к адресу
ip route get 8.8.8.8

# есть ли связь на интерфейсе и сколько ошибок
ip -s link show eth0

# IP-адреса в виде «интерфейс адрес/маска» через JSON и jq
ip -j addr | jq -r '.[] | .ifname as $i | .addr_info[] | "\($i) \(.local)/\(.prefixlen)"'

# адрес и маршрут вручную (нужны права)
ip addr add 192.168.50.10/24 dev eth1
ip link set eth1 up
ip route add 10.20.0.0/16 via 192.168.50.1

Подводные камни

  • Изменения не переживают перезагрузку. ip addr add и ip route add меняют только текущее состояние ядра. Постоянная настройка живёт в netplan (/etc/netplan/), NetworkManager или /etc/network/interfaces.
  • Без прав менять нельзя: RTNETLINK answers: Operation not permitted. Нужен root, а в контейнере ещё и capability NET_ADMIN — в песочнице обычно доступен только просмотр.
  • state UNKNOWN у lo и виртуальных интерфейсов — это нормально: у них нет «кабеля». Смотри на флаги UP,LOWER_UP в угловых скобках.
  • Маска обязательна. ip addr add 10.0.0.2 dev eth0 добавит адрес с маской /32, и маршрут в подсеть не появится.
  • ip route add для уже существующего маршрута даёт RTNETLINK answers: File exists. Используй replace или сначала del.
  • Два маршрута по умолчанию с разными метриками — частая причина «интернет то есть, то нет». Проверяй ip route show default.
  • Имена вида eth0@if12 значат, что это одна сторона пары veth (обычно в контейнере). В командах указывай имя без @…: dev eth0.
  • ip route get ничего не отправляет в сеть — это только вопрос к таблице маршрутов.

См. также

ss · dig · jq · curl