
У компьютера с Linux может быть одновременно адрес Ethernet, Wi-Fi, VPN, контейнерной сети и несколько IPv6-адресов. Поэтому вопрос «какой у меня IP» нужно уточнить: адрес интерфейса, адрес источника до конкретного сервера или внешний адрес, который видит удалённый сервис.
Ниже — команды чтения для Linux с iproute2. Они не изменяют адреса и маршруты. Примеры вывода условные; реальные имена интерфейсов и сеть определяются на вашей машине. Для первичного просмотра обычно не нужны права root.

1. Как быстро показать IPv4 и IPv6
Начните с краткого представления интерфейсов:
ip -br address show
ip -br -4 address show
ip -br -6 address show
Первый столбец — имя интерфейса, далее состояние и адреса с длиной префикса. У lo обычно есть loopback 127.0.0.1/8 и ::1/128: это адрес самой машины, а не точка подключения к ней из сети. Одновременно могут отображаться несколько адресов одного интерфейса.
Команды iproute2 заменяют поиск «главного адреса» через устаревший ifconfig. Формат и атрибуты адресов описаны в ip-address. Если ip отсутствует в минимальном контейнере, установку пакета согласуют отдельно; отсутствие утилиты не означает отсутствие сетевого интерфейса.
2. Как посмотреть конкретный интерфейс
Найдите имя в кратком выводе и запросите его подробно. В примере enp1s0 нужно заменить фактическим именем.
ip address show dev enp1s0
ip -4 address show dev enp1s0 scope global
ip -6 address show dev enp1s0
Префикс /24 у IPv4 соответствует размеру сети, а не порту или сроку аренды. В подробном выводе смотрите состояние, scope, флаги dynamic и время действия адреса. IPv4 с scope global может быть частным: scope не является проверкой публичности.
Интерфейс UP означает административное включение; состояние линка и фактическая маршрутизация проверяются отдельно. Если адрес назначен bridge или bond, IP может отсутствовать на физическом порту, входящем в этот агрегат. Подключение кабеля к enp1s0 не доказывает, что адрес должен находиться именно на нём.
3. Как узнать адрес источника до конкретного сервера
При нескольких сетях нужен маршрут до получателя. Команда route get вычисляет решение ядра; она не является ping и сама не проверяет доступность приложения.
ip -4 route get 1.1.1.1
ip -4 route get 10.20.30.40
Первый адрес — пример внешнего получателя, второй — пример внутреннего. Замените их адресом нужного сервиса. Типичный ответ содержит via, dev и src: следующий шлюз, выходной интерфейс и выбранный локальный адрес источника.
Если маршрут идёт через VPN, src может относиться к туннелю. Для сервера внутри LAN может использоваться прямой маршрут без via. Команда показывает адрес до NAT; внешний адрес после трансляции нужно выяснять на другой стороне. Возможности route get описаны в ip-route.
4. Как проверить шлюз и правила маршрутизации
Для простого устройства проверьте основной маршрут. Для машины с VPN, policy routing или несколькими таблицами дополнительно прочитайте правила:
ip -4 route show default
ip -4 route show
ip -4 rule show
ip -4 route show table all
Не выбирайте адрес по первой строке default, если действует отдельное правило для пользователя, источника или марки пакета. Также приложение может явно привязать сокет к адресу либо использовать HTTP-прокси. Обычный route get без этих условий описывает только запрошенный контекст.
Проверьте состояние VPN и маршрут к корпоративному серверу отдельно от выхода в интернет. Отсутствие ответа ping может означать запрет ICMP, а не неправильный IP. Для прикладной проверки используйте нужный протокол и порт.
5. Как различить частный адрес, CGNAT и публичный
Частные IPv4-диапазоны — 10.0.0.0/8, 172.16.0.0/12 и 192.168.0.0/16. Они определены в RFC 1918. Публикация сервиса из такой сети обычно требует отдельной маршрутизации или NAT на границе.
Для CGNAT выделен диапазон 100.64.0.0/10 из RFC 6598. Он отличается от RFC 1918, но также не означает индивидуально доступный публичный адрес абонента. Проброс порта только на домашнем маршрутизаторе может не открыть входящее соединение через NAT провайдера.
Отсутствие адреса в этих диапазонах не доказывает входящую доступность. Важны маршрут, firewall, политика провайдера и фактическая привязка сервиса. Не делайте заключение «белый IP» только по одной строке в интерфейсе Linux.
6. Как узнать внешний IP
Внешний адрес определяется получателем соединения. Используйте утверждённый HTTPS-сервис, который возвращает адрес клиента, или собственный диагностический endpoint. Следующая команда — шаблон для вашего сервиса, а не ссылка на существующую службу:
curl -4 --fail --silent --show-error --max-time 5 \
https://ip.example.net/plain
Адрес заменяют своим endpoint с проверенным форматом ответа. -4 выбирает IPv4, для отдельной проверки IPv6 используют -6. Не отключайте проверку TLS. Учтите, что внешняя служба увидит адрес и время обращения; выбирайте её по правилам организации.
Если curl использует прокси, сервис покажет адрес выхода прокси. Сравните настройки приложения и переменные окружения, не публикуя их содержимое: URL прокси может включать учётные данные. После переключения WAN или VPN повторите запрос и сопоставьте результат с маршрутом.
7. Как читать IPv6 и адреса link-local
IPv6-интерфейс может иметь link-local, глобальный и временный адреса. Link-local обычно находится в fe80::/10 и действует в пределах канала; для подключения к нему часто требуется указать зону, например %enp1s0. Это не адрес для доступа через произвольный внешний маршрутизатор.
ip -6 address show
ip -6 route show default
ip -6 route get 2606:4700:4700::1111
Адрес получателя приведён для примера выбора маршрута. Для ULA используется fc00::/7; наличие глобального IPv6 не означает, что firewall разрешает входящие подключения. Временные адреса могут меняться, поэтому их не стоит механически записывать как постоянный адрес сервера.
Сравните preferred_lft и valid_lft, наличие deprecated или tentative в подробном выводе. Если адрес ещё проходит проверку уникальности либо больше не предпочтителен, приложение может выбрать другой адрес источника. Общая архитектура IPv6 описана в RFC 4291.
8. Как получить адреса для сценария без разбора колонок
Для автоматизации удобен JSON-вывод. Следующий пример выбирает IPv4 с scope global и печатает имя интерфейса, адрес и префикс. Он намеренно не называет их публичными.
ip -j -4 address show | python3 -c '
import json, sys
for interface in json.load(sys.stdin):
for address in interface.get("addr_info", []):
if address.get("family") == "inet" and address.get("scope") == "global":
print(interface["ifname"],
address["local"] + "/" + str(address["prefixlen"]))
'
Здесь нужен Python 3. Проверяйте код завершения команды и пустой результат; не подставляйте первый найденный IP в настройку сервиса автоматически. Для сервиса важны выбранный интерфейс, допустимый диапазон и политика выбора при нескольких адресах.
JSON устраняет зависимость от выравнивания текстовых колонок, но не решает задачу выбора адреса. Добавьте проверку, что результат соответствует ожидаемой топологии, и завершайте сценарий с ошибкой при неоднозначности.
9. Что делать с контейнерами и сетевыми пространствами
Команда внутри контейнера показывает его сетевой контекст. Адрес контейнера может отличаться от адреса хоста и внешнего NAT. На хосте чтение именных пространств выполняют, например, так:
ip netns list
# Только если существует именное пространство app-test
sudo ip netns exec app-test ip -br address show
sudo ip netns exec app-test ip route get 1.1.1.1
Docker и Kubernetes не обязаны регистрировать свои пространства в ip netns list. Их сетевое состояние изучают через принятые средства платформы и контекст нужного pod/container. Пустой список ip netns не доказывает, что пространств нет.
Проверяйте из того места, где работает приложение. Успешный curl с хоста не подтверждает маршрут контейнера. В отчёте укажите контекст выполнения, иначе адреса из разных сетевых пространств будут выглядеть противоречивыми.
10. Как проверить найденный адрес для практической задачи
Для локального подключения сопоставьте адрес интерфейса, маршрут клиента и слушающий сокет сервера. Для внешнего доступа добавьте NAT, пограничный firewall и проверку из внешней сети. Для выбора исходящего адреса проверьте route get и наблюдение на получателе.
Не используйте изменение адреса, flush или отключение интерфейса как способ «узнать IP». Эти команды меняют сеть и могут прервать удалённое управление. Более широкий справочник чтения и настройки приведён в статье о команде ip.
В заявке запишите интерфейс, локальный адрес, адрес назначения, выбранный маршрут, внешний адрес при необходимости и время измерения. Такой набор отвечает на конкретный сетевой вопрос и помогает администратору воспроизвести результат.
Нужно сопровождение Linux-систем?
Выберите направление по роли устройства: серверная инфраструктура или пользовательские компьютеры.
