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/16 | IPv4-адрес и длина маски; 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, а в контейнере ещё и capabilityNET_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ничего не отправляет в сеть — это только вопрос к таблице маршрутов.