open atlas
↑ К треку
Linux: операционная система LIN · 09 · 01

Интерфейсы и ip

Набор iproute2 — ip addr, ip link, ss — заменил устаревший ifconfig/netstat. Предсказуемые имена интерфейсов (ens3, enp2s0) сохраняются после перезагрузки; loopback (lo) присутствует всегда. ss -tlnp показывает, что слушает порт и какой процесс владеет сокетом.

LIN Middle ◷ 20 min
Уровень
ОсновыJuniorMiddleSenior

Ты подключаешься по SSH к новой виртуальной машине, и первое, что нужно выяснить: есть ли у неё рабочий сетевой интерфейс, какой у неё IP и какие порты открыты. Старые инструменты — ifconfig, netstat — отсутствуют на минимальных образах Debian; они из пакета net-tools, который большинство дистрибутивов больше не устанавливает по умолчанию. Современная замена: ip (из iproute2) и ss (статистика сокетов). Это не просто замена — они предоставляют больше информации, понимают сетевые пространства имён и активно поддерживаются разработчиками ядра. Если ты по-прежнему тянешься к ifconfig, ты отлаживаешь инструментом, который не знает о network namespaces, MPLS или VRF — разница важна в контейнерах и облачных VM.

Цель

После этого урока ты сможешь перечислить все интерфейсы и их адреса через ip addr, поднять и опустить интерфейс через ip link set, назначить временный адрес через ip addr add, читать предсказуемые имена интерфейсов и понимать, зачем они нужны, а также использовать ss -tlnp для просмотра слушающих портов и владеющих ими процессов.

1

ip addr show — основной инструмент для просмотра адресов интерфейсов.

Каждый сетевой интерфейс имеет имя, флаги (UP, LOWER_UP, LOOPBACK), индекс и один или несколько адресов. Loopback-интерфейс (lo) присутствует всегда; inet 127.0.0.1/8 — его адрес.

ip addr show
# 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
#     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
#     inet 127.0.0.1/8 scope host lo
#     inet6 ::1/128 scope host
# 2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP
#     link/ether 52:54:00:ab:cd:ef brd ff:ff:ff:ff:ff:ff
#     inet 10.0.0.10/24 brd 10.0.0.255 scope global dynamic ens3

# Короткая форма: ip addr (тот же вывод)
# Для одного интерфейса: ip addr show ens3

Строка inet — IPv4-адрес в нотации CIDR. scope global означает, что адрес доступен с других хостов; scope host (loopback) — только локально. dynamic означает, что адрес получен по DHCP.

2

ip link show — состояние интерфейса без адресов.

Когда нужно проверить, поднят ли интерфейс, или посмотреть MAC-адрес без лишней информации:

ip link show
# 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 ...
# 2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 ...
#     link/ether 52:54:00:ab:cd:ef brd ff:ff:ff:ff:ff:ff

# Опустить и поднять интерфейс (нужен root):
sudo ip link set ens3 down
sudo ip link set ens3 up

# Проверка: флаг UP исчезает из угловых скобок при опускании
ip link show ens3
# 2: ens3: <BROADCAST,MULTICAST> mtu 1500 ...  ← нет флага UP

ip link set ... down не разрушает конфигурацию: интерфейс не удаляется, адреса остаются в таблице ядра. DHCP-клиенты замечают изменение carrier и могут отреагировать, но адрес сохраняется до явного удаления.

3

Предсказуемые имена интерфейсов: почему ens3, а не eth0.

До udev ядро Linux использовало eth0, eth1 в порядке обнаружения — нестабильно на многопортовых машинах. Systemd’s udev переименовывает интерфейсы на основе слота прошивки, адреса PCI-шины или MAC-адреса:

# Схема именования:
# en = Ethernet
# wl = Wireless LAN
# ww = Wireless WAN (WWAN/LTE)
#
# Суффикс:
# o<index>       = встроенный (например eno1)
# s<slot>        = PCI-слот (например ens3)
# p<bus>s<slot>  = PCI-путь (например enp2s0)
# x<MAC>         = по MAC (резервный вариант)
#
# На облачных VM обычно встречается:
# ens3   → PCI-слот 3
# enp0s3 → PCI-шина 0, слот 3
# ens192 → виртуальный NIC VMware в слоте 192

# Старое имя eth0 используется, когда udev не может определить
# стабильный путь — например, в контейнерах (veth-пара).

Практический результат: имя интерфейса не меняется после перезагрузки, замены железа в том же слоте или обновления ядра. На облачных VM можно полагаться, что ens3 останется ens3.

4

Назначение временного адреса через ip addr add.

Адреса, полученные по DHCP, управляются сетевым демоном. Ручное назначение полезно для тестирования, добавления второго адреса или поднятия интерфейса до запуска демона:

# Добавить временный адрес (теряется после перезагрузки):
sudo ip addr add 192.0.2.50/24 dev ens3

# Проверить:
ip addr show ens3
# inet 10.0.0.10/24 ...
# inet 192.0.2.50/24 scope global ens3   ← второй адрес виден

# Удалить:
sudo ip addr del 192.0.2.50/24 dev ens3

Один интерфейс может иметь несколько адресов (multihoming). Ядро выбирает адрес источника по таблице маршрутизации. Для сохранения адресов после перезагрузки используй /etc/network/interfaces (Debian ifupdown), netplan (Ubuntu) или systemd-networkd.

5

ss -tlnp — что слушает и какой процесс.

ss — современная замена netstat. Наиболее используемые флаги:

ss -tlnp
# -t  только TCP-сокеты
# -l  только слушающие сокеты (серверы, ожидающие соединений)
# -n  числовые порты (не резолвить /etc/services)
# -p  показать процесс (PID и имя), владеющий сокетом

# Пример вывода:
# State   Recv-Q  Send-Q  Local Address:Port  Peer Address:Port  Process
# LISTEN  0       128     0.0.0.0:22           0.0.0.0:*          users:(("sshd",pid=1234,fd=3))
# LISTEN  0       4096    127.0.0.1:5432       0.0.0.0:*          users:(("postgres",pid=5678,fd=7))
# LISTEN  0       128     0.0.0.0:80           0.0.0.0:*          users:(("nginx",pid=9012,fd=6))

# Все TCP (установленные + слушающие):
ss -tnp

# UDP-сокеты:
ss -ulnp

Local Address:Port равный 0.0.0.0:22 означает, что sshd слушает на всех интерфейсах; 127.0.0.1:5432 означает, что postgres принимает соединения только от localhost — граница безопасности, видная прямо здесь.

Разбор примера

Сетевая диагностика при первом входе на новую VM.

Ты подключаешься по SSH к host-a (10.0.0.10/24). Приложение недоступно. За 60 секунд:

# 1. Есть ли живой интерфейс?
ip addr show
# → ens3 UP, inet 10.0.0.10/24 — хорошо

# 2. Приложение действительно слушает?
ss -tlnp | grep ':8080'
# → ничего — приложение не запустилось или упало

# 3. Запустить приложение (пример через systemd):
sudo systemctl start myapp
ss -tlnp | grep ':8080'
# LISTEN  0  511  0.0.0.0:8080  0.0.0.0:*  users:(("myapp",pid=4321,fd=10))

# 4. Слушает ли оно на всех интерфейсах или только на localhost?
# 0.0.0.0:8080 → все интерфейсы, доступно из 10.0.0.x
# 127.0.0.1:8080 → только localhost — проблема в firewall или bind-address

# 5. Проверить снаружи (с host-b):
# ssh host-b 'curl -s http://10.0.0.10:8080/health'

Просмотр ss -tlnp до проверки правил firewall или DNS экономит минуты в 3 часа ночи.

Частая ошибка

ifconfig не просто устарел — его нет. На свежем Debian 12 или Ubuntu 24.04 minimal ifconfig не установлен. Его запуск даёт “command not found”. Мышечная память, тянущаяся к ifconfig eth0, введёт в заблуждение. Маппинг на iproute2: ifconfigip addr show; ifconfig eth0 upip link set eth0 up; netstat -tlnpss -tlnp. Установи net-tools если старые команды нужны временно, но не пиши скрипты под них — они не обслуживаются и не понимают network namespaces.

Почему это работает

На macOS ifconfig — основной инструмент и активно поддерживается (BSD-наследие). ip недоступен без iproute2mac из Homebrew, и даже тогда это частичная обёртка. Для просмотра сокетов macOS использует netstat -an или lsof -i. Концепции идентичны (интерфейсы, адреса, слушающие сокеты), но набор инструментов полностью другой. Если твоя машина разработчика — macOS, а продакшн — Linux, держи оба словаря: ifconfig/netstat для ноутбука, ip/ss для всего остального.

Проверь себя
Викторина

Ты запускаешь ss -tlnp и видишь: LISTEN 0 128 127.0.0.1:5432 0.0.0.0:* users:((postgres,pid=5678,fd=7)). Что это говорит о доступности postgres с другого хоста?

Итог

ip addr show перечисляет все интерфейсы и их IPv4/IPv6-адреса в нотации CIDR; scope global — внешнедоступный, scope host — только loopback. ip link set <iface> up/down управляет состоянием интерфейса без удаления адресов. Предсказуемые имена интерфейсов (ens3, enp2s0) назначаются udev на основе PCI-топологии — стабильны после перезагрузок, в отличие от гонки eth0. ip addr add/del назначает временные адреса; для сохранения нужны netplan, systemd-networkd или /etc/network/interfaces. ss -tlnp показывает TCP-слушающие сокеты с владеющим процессом — адрес 0.0.0.0 означает все интерфейсы, 127.0.0.1 — только localhost. Этих пяти операций хватает для 90% сетевой диагностики при первом входе.

Практика

Начни сверху. Задачи идут от простого к сложному: вспомнить факт, применить к случаю, затем senior-уровень. Открой, попробуй, потом открой ответ.

вспомнитьприменитьуглубить0 из 4 завершено

Что-то непонятно?

Задай вопрос по этому уроку. Вопросы анонимны и попадают напрямую автору — урок станет лучше.

хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources1
expand
  1. 01

Trademarks belong to their respective owners. Editorial reference only.