15%

Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код:

Skills
Начать
08.10.2024

«ping: command not found» — Как установить и использовать Ping в Ubuntu

Ошибка `ping: command not found` появляется в Ubuntu, когда в системе отсутствует пакет iputils-ping. Это часто встречается на минимальных установках, облачных образах VPS и Docker-контейнерах, где несущественные утилиты удалены для уменьшения размера образа. Исправление — одна команда `apt`: `sudo apt install iputils-ping`. В этой статье объясняется, почему пакет отсутствует, как правильно установить его в различных средах Ubuntu и как эффективно использовать `ping` для реальной диагностики сети.

Что на самом деле делает команда Ping

`ping` — это утилита диагностики сети, которая отправляет пакеты ICMP Echo Request целевому хосту и ожидает ответов ICMP Echo Reply. Время приёма-передачи (RTT) для каждого пакета измеряется в миллисекундах, что даёт точный сигнал о сетевой задержке, доступности и стабильности.

Под капотом `ping` использует протокол управляющих сообщений Интернета (ICMP), определённый в RFC 792. Он работает на сетевом уровне (уровень 3 модели OSI), что означает полный обход TCP и UDP. Это делает его полезным для определения того, находится ли проблема с подключением на уровне IP-маршрутизации или на уровне приложения или транспортном уровне.

Основные варианты использования

  • Проверка доступности — подтверждает, что удалённый хост активен и отвечает.
  • Измерение задержки — сообщает RTT в миллисекундах; повышенный RTT указывает на перегрузку сети или географически удалённый сервер.
  • Обнаружение потери пакетов — потерянные ICMP-ответы указывают на неисправность оборудования, перегруженные маршрутизаторы или нестабильные каналы.
  • Проверка сетевого пути — полезно для проверки того, что вновь настроенный маршрут или правило брандмауэра не блокирует трафик.
  • Обнаружение брандмауэра и фильтрации ICMP — если `ping` истекает по времени, но TCP-сервисы отвечают, брандмауэр, вероятно, блокирует именно ICMP-трафик.
  • Проверка разрешения DNS — пинг имени хоста (а не IP) подтверждает, что разрешение DNS работает корректно.

Почему Ping отсутствует в Ubuntu?

Полная установка Ubuntu для рабочего стола включает `ping` по умолчанию. Однако существует несколько распространённых сценариев, при которых бинарный файл отсутствует в системе:

  • Минимальные установки сервера — минимальный ISO Ubuntu Server намеренно не включает многие утилиты, чтобы уменьшить занимаемое пространство.
  • Облачные образы и образы VPS — провайдеры часто распространяют урезанные образы Ubuntu для более быстрого развёртывания. Если вы используете экземпляр VPS Хостинга, вы можете столкнуться с этим при первой загрузке.
  • Контейнеры Docker и LXC — официальные базовые образы Ubuntu (`ubuntu:22.04`, `ubuntu:24.04`) не включают `iputils-ping` по умолчанию.
  • Автоматизированные развёртывания и CI/CD-конвейеры — скриптовые среды, построенные на основе минимальных базовых образов, часто не имеют стандартных сетевых инструментов.
  • Среды Chroot и WSL — Windows Subsystem for Linux и chroot-окружения также могут не включать пакет.

Сам бинарный файл находится по пути `/bin/ping` (или `/usr/bin/ping` в более новых системах). Если этот путь не существует, оболочка возвращает `command not found`. Вы можете проверить, просто ли отсутствует бинарный файл или он находится по нестандартному пути, с помощью:

“`bash

which ping

or

type ping

“`

Если оба возвращают пустой результат, пакет не установлен.

Как установить Ping в Ubuntu (пошаговая инструкция)

Шаг 1: Обновите индекс пакетов

Всегда обновляйте локальный индекс пакетов перед установкой чего-либо. Это гарантирует, что `apt` разрешит последние доступные версии пакетов и избежит ошибок устаревших метаданных:

“`bash

sudo apt update

“`

На Выделенном сервере или только что подготовленном VPS этот шаг особенно важен, поскольку кэш пакетов может быть устаревшим на несколько дней или недель.

Шаг 2: Установите iputils-ping

Бинарный файл `ping` в Ubuntu предоставляется пакетом iputils-ping, который является частью более широкого набора `iputils`, поддерживаемого сообществом ядра Linux:

“`bash

sudo apt install iputils-ping

“`

При появлении запроса `Do you want to continue? [Y/n]` нажмите `Y` и `Enter`. Пакет небольшой (обычно менее 100 КБ) и устанавливается за секунды.

Шаг 3: Проверьте установку

Убедитесь, что бинарный файл теперь доступен и работает:

“`bash

ping -c 4 google.com

“`

Флаг `-c 4` ограничивает вывод 4 пакетами. Успешный ответ выглядит следующим образом:

“`

PING google.com (142.250.185.46) 56(84) bytes of data.

64 bytes from lga34s32-in-f14.1e100.net (142.250.185.46): icmp_seq=1 ttl=118 time=12.4 ms

64 bytes from lga34s32-in-f14.1e100.net (142.250.185.46): icmp_seq=2 ttl=118 time=11.9 ms

64 bytes from lga34s32-in-f14.1e100.net (142.250.185.46): icmp_seq=3 ttl=118 time=12.1 ms

64 bytes from lga34s32-in-f14.1e100.net (142.250.185.46): icmp_seq=4 ttl=118 time=12.3 ms

— google.com ping statistics —

4 packets transmitted, 4 received, 0% packet loss, time 3004ms

rtt min/avg/max/mdev = 11.9/12.175/12.4/0.185 ms

“`

Вы должны увидеть 0% потери пакетов и стабильные значения RTT. Высокая вариативность RTT (`mdev`) сигнализирует о сетевом джиттере, что важно для приложений, чувствительных к задержкам.

Шаг 4: Проверьте путь к установленному бинарному файлу и права доступа

“`bash

which ping

ls -la $(which ping)

“`

В Ubuntu 20.04 и более поздних версиях `ping` больше не требует бита setuid. Вместо этого он использует возможности Linux (`cap_net_raw`) для отправки необработанных ICMP-пакетов без привилегий root. Вы можете проверить это с помощью:

“`bash

getcap $(which ping)

Expected output: /usr/bin/ping cap_net_raw=ep

“`

Это улучшение безопасности по сравнению со старыми реализациями на основе setuid.

Установка Ping внутри Docker-контейнера

Если вы работаете внутри Docker-контейнера на основе Ubuntu, процесс идентичен, но вам может потребоваться выполнять команды от имени root (пользователь по умолчанию в большинстве базовых образов):

“`bash

apt update && apt install -y iputils-ping

“`

Флаг `-y` автоматически подтверждает запрос, что необходимо для неинтерактивных сборок Dockerfile. Чтобы встроить `ping` в пользовательский образ, добавьте его в ваш `Dockerfile`:

“`dockerfile

FROM ubuntu:22.04

RUN apt update && apt install -y iputils-ping && rm -rf /var/lib/apt/lists/*

“`

Строка `rm -rf /var/lib/apt/lists/*` очищает кэш пакетов, чтобы уменьшить размер слоя образа — это лучшая практика для производственных образов контейнеров.

Установка Ping в Ubuntu без доступа к интернету (офлайн-метод)

На изолированных серверах или в изолированных сетевых сегментах `apt` не может получить доступ к внешним репозиториям. В этом случае у вас есть два варианта:

Вариант 1: Перенесите пакет .deb вручную

На машине с доступом к интернету скачайте пакет:

“`bash

apt download iputils-ping

“`

Перенесите файл `.deb` на целевую машину через `scp` или USB-накопитель, затем установите его:

“`bash

sudo dpkg -i iputils-ping_*.deb

“`

Вариант 2: Используйте локальное зеркало или внутренний APT-репозиторий

Настройте `/etc/apt/sources.list` для указания на внутреннее зеркало, в котором кэширован пакет. Это стандартный подход для корпоративных сред со строгим контролем исходящего трафика.

Альтернативные инструменты, если Ping заблокирован или недоступен

ICMP-трафик часто блокируется брандмауэрами, группами безопасности облака или хостинг-провайдерами. Если `ping` постоянно истекает по времени, несмотря на доступность хоста, рассмотрите следующие альтернативы:

ИнструментПротоколОсновное использованиеКоманда установки
`ping`ICMPБазовая проверка доступности и задержки`apt install iputils-ping`
`traceroute`ICMP / UDPАнализ пути по каждому узлу`apt install traceroute`
`mtr`ICMPНепрерывный путь + статистика задержки`apt install mtr`
`nmap`TCP/UDP/ICMPСканирование портов, обнаружение хостов`apt install nmap`
`curl` / `wget`HTTP/HTTPSДоступность на уровне приложения`apt install curl`
`nc` (netcat)TCP/UDPТестирование подключения через необработанные сокеты`apt install netcat-openbsd`
`hping3`TCP/UDP/ICMPСоздание пользовательских пакетов`apt install hping3`
`fping`ICMPМассовое тестирование доступности хостов`apt install fping`

Ключевое замечание: `mtr` (Matt’s Traceroute) можно считать более полезным, чем `ping`, для диагностики периодических потерь пакетов, поскольку он непрерывно зондирует каждый узел пути и отображает процент потерь на каждом узле в реальном времени. На производственных серверах — включая те, на которых работает VPS с cPanel — `mtr` должен быть вашим первым инструментом, когда клиент сообщает о периодических проблемах с подключением.

Распространённые ошибки и способы их устранения

«permission denied» или «operation not permitted»

Это происходит, когда возможность `cap_net_raw` отсутствует в бинарном файле или при работе внутри контейнера с ограниченными возможностями Linux:

“`bash

Check capabilities

getcap /usr/bin/ping

Restore if missing

sudo setcap cap_net_raw+ep /usr/bin/ping

“`

Внутри Docker вам может потребоваться запустить контейнер с `–cap-add NET_RAW` или `–privileged` (используйте `–privileged` только в доверенных изолированных средах):

“`bash

docker run –cap-add NET_RAW ubuntu:22.04 ping -c 2 8.8.8.8

“`

«unable to locate package iputils-ping»

Это означает, что `apt` не может найти пакет в текущем списке репозиториев. Причины и способы устранения:

  1. Устаревший индекс пакетов — сначала выполните `sudo apt update`.
  2. Повреждённый sources.list — проверьте, что `/etc/apt/sources.list` содержит допустимые записи репозитория Ubuntu.
  3. Минимальный контейнер без репозитория universe — добавьте репозиторий universe: `sudo add-apt-repository universe`.
  4. Нет сетевого подключения — проверьте с помощью `curl https://archive.ubuntu.com`, может ли машина достичь серверов пакетов Ubuntu.

«ping: connect: Network is unreachable»

Бинарный файл установлен, но в системе нет настроенного сетевого маршрута. Это проблема конфигурации сети, а не проблема `ping`. Диагностируйте с помощью:

“`bash

ip route show

ip addr show

“`

Если маршрут по умолчанию отсутствует, добавьте его:

“`bash

sudo ip route add default via <gateway_ip>

“`

«Name or service not known» (сбой DNS)

`ping google.com` разрешает имя хоста перед отправкой ICMP-пакетов. Если DNS неисправен, вы увидите эту ошибку. Проверьте, пингуя IP напрямую:

“`bash

ping -c 2 8.8.8.8

“`

Если это успешно, проблема специфична для DNS. Проверьте `/etc/resolv.conf` и убедитесь, что настроен допустимый сервер имён.

Основные флаги Ping, которые должен знать каждый системный администратор

ФлагОписаниеПример
`-c <n>`Отправить ровно n пакетов, затем остановиться`ping -c 5 8.8.8.8`
`-i <sec>`Интервал между пакетами (по умолчанию: 1 с)`ping -i 0.2 8.8.8.8`
`-s <bytes>`Установить размер полезной нагрузки пакета (по умолчанию: 56 байт)`ping -s 1400 8.8.8.8`
`-t <ttl>`Установить значение IP Time-To-Live`ping -t 64 8.8.8.8`
`-W <sec>`Тайм-аут ожидания каждого ответа`ping -W 2 8.8.8.8`
`-q`Тихий режим — показывать только итоги`ping -q -c 10 8.8.8.8`
`-f`Флуд-пинг (требует root)`sudo ping -f 8.8.8.8`
`-4` / `-6`Принудительно использовать IPv4 или IPv6`ping -6 ipv6.google.com`
`-D`Печатать временную метку перед каждой строкой`ping -D -c 5 8.8.8.8`
`-O`Сообщать о незавершённых ответах (показывает потерю пакетов в строке)`ping -O 8.8.8.8`

Практический совет: Используйте `ping -s 1472 -M do <gateway>` для тестирования обнаружения MTU пути. Флаг `-M do` устанавливает бит «Don’t Fragment»; если пакет превышает MTU пути, вы получите сообщение ICMP «Frag needed», что является окончательным способом диагностики TCP-«чёрных дыр», связанных с MTU, — распространённой проблемы в VPN-туннелях и некоторых конфигурациях облачных сетей.

Соображения безопасности: когда отключать ICMP

Хотя `ping` незаменим для диагностики, неограниченный ICMP на общедоступных серверах несёт риски:

  • ICMP-флуд атаки (ping flood) — высокообъёмный ICMP-трафик может насытить полосу пропускания или загрузить CPU на старом оборудовании.
  • Сетевая разведка — ответ на ICMP раскрывает, что хост активен, что помогает злоумышленникам картировать вашу инфраструктуру.
  • Smurf-атаки — усиленные ICMP-широковещательные атаки (в основном устранены в современных сетях, но всё ещё актуальны для устаревшей инфраструктуры).

Для производственных серверов — особенно тех, на которых размещены веб-приложения или сервисы Почтового хостинга — разумной политикой является разрешение ICMP только с доверенных управляющих IP-адресов и ограничение скорости или блокировка ICMP из публичного интернета с помощью `iptables` или `nftables`:

“`bash

Allow ICMP from a trusted management IP

sudo iptables -A INPUT -p icmp –icmp-type echo-request -s 203.0.113.10 -j ACCEPT

Rate-limit ICMP from all other sources (max 10 pings/second)

sudo iptables -A INPUT -p icmp –icmp-type echo-request -m limit –limit 10/second -j ACCEPT

Drop remaining ICMP echo requests

sudo iptables -A INPUT -p icmp –icmp-type echo-request -j DROP

“`

Этот подход сохраняет диагностическую полезность для вашей команды, одновременно уменьшая поверхность атаки.

Ping в контексте серверных и хостинговых сред

Поведение `ping` существенно варьируется в зависимости от вашей хостинговой среды:

Общий хостинг: На планах Общего веб-хостинга у вас обычно нет доступа к оболочке. Диагностика на основе Ping должна выполняться с локальной машины или внешней службы мониторинга, направленной на IP вашего сервера.

VPS и выделенные серверы: Полный root-доступ означает, что вы можете установить `iputils-ping` и свободно выполнять все диагностические команды. Именно здесь `ping`, `mtr` и `traceroute` наиболее ценны для устранения проблем с подключением между вашим сервером и вышестоящими провайдерами.

GPU-серверы: Высокопроизводительные вычислительные среды, такие как узлы GPU Хостинга, часто работают на минимальных образах ОС для максимального выделения ресурсов вычислительным нагрузкам. Ping и другие диагностические инструменты обычно отсутствуют и должны быть установлены явно.

Контейнеры и оркестрация: В подах Kubernetes или сервисах Docker Swarm инструменты отладки сети обычно отсутствуют в производственных образах. Рекомендуемый подход — использовать выделенный отладочный sidecar-контейнер или временный отладочный под (`kubectl debug`), а не перегружать производственные образы диагностическими утилитами.

Быстрая справочная матрица решений

Используйте эту матрицу для определения правильного действия в зависимости от вашего конкретного сценария:

СценарийРекомендуемое действие
Новая установка сервера Ubuntu, ping отсутствует`sudo apt update && sudo apt install iputils-ping`
Docker-контейнер, нет приглашения root`apt update && apt install -y iputils-ping`
Ping установлен, но «permission denied»`sudo setcap cap_net_raw+ep /usr/bin/ping`
Ping истекает по времени, хост доступен через HTTPICMP заблокирован брандмауэром — используйте `curl` или `nc`
Разрешение DNS не работает при пинге имени хостаПроверьте `/etc/resolv.conf`; проверьте с помощью `ping 8.8.8.8`
Нужен анализ пути по каждому узлуУстановите и используйте `mtr` вместо `ping`
Офлайн / изолированный серверСкачайте `.deb` на другой машине, перенесите через `scp`, установите с помощью `dpkg -i`
ICMP заблокирован у облачного провайдераПроверьте правила группы безопасности / брандмауэра; разрешите входящий ICMP типа 8

Технический чеклист: правильная настройка Ping

  • [ ] Выполните `sudo apt update` перед попыткой установки
  • [ ] Установите с помощью `sudo apt install iputils-ping`
  • [ ] Подтвердите путь к бинарному файлу: `which ping` должен вернуть `/usr/bin/ping`
  • [ ] Проверьте возможности: `getcap /usr/bin/ping` должен показать `cap_net_raw=ep`
  • [ ] Сначала проверьте с IP (`ping -c 2 8.8.8.8`), прежде чем тестировать с именем хоста
  • [ ] Если имя хоста не работает, но IP работает, диагностируйте DNS через `/etc/resolv.conf`
  • [ ] Для контейнеров добавьте `–cap-add NET_RAW`, если ошибки прав доступа сохраняются
  • [ ] На производственных серверах применяйте ограничение скорости `iptables` для публичного ICMP
  • [ ] Рассмотрите `mtr` для постоянных или периодических проблем с подключением
  • [ ] Для офлайн-сред используйте `apt download` на подключённой машине и перенесите `.deb`

Часто задаваемые вопросы

В: Почему Ubuntu не включает ping по умолчанию?

Минимальные образы Ubuntu и образы для серверов не включают `iputils-ping` для уменьшения размера установки. Пакет не является частью обязательных зависимостей базовой системы, поэтому он исключается, если явно не запрошен. Установите его с помощью `sudo apt install iputils-ping`.

В: Есть ли разница между `ping` и `ping6` в Ubuntu?

В современных системах Ubuntu (18.04 и более поздних) бинарный файл `ping` обрабатывает как IPv4, так и IPv6. Используйте `ping -4` для принудительного использования IPv4 или `ping -6` для принудительного использования IPv6. Отдельный бинарный файл `ping6` устарел и больше не поставляется отдельно в текущих выпусках `iputils-ping`.

В: Почему ping работает от имени root, но не работает для обычных пользователей?

Это указывает на то, что возможность `cap_net_raw` отсутствует в бинарном файле. Выполните `sudo setcap cap_net_raw+ep /usr/bin/ping` для её восстановления. Кроме того, переустановка пакета (`sudo apt install –reinstall iputils-ping`) сбросит возможности бинарного файла к правильным значениям по умолчанию.

В: Можно ли использовать ping для проверки открытости конкретного порта?

Нет. `ping` использует ICMP и не имеет понятия о TCP/UDP-портах. Для проверки открытости конкретного порта используйте `nc -zv <host> <port>` (netcat) или `nmap -p <port> <host>`. Хост может быть доступен через `ping`, при этом конкретный порт может быть заблокирован, или наоборот.

В: Что означает высокое значение `mdev` (стандартное отклонение) в выводе ping?

`mdev` измеряет вариативность RTT между пакетами. Высокое значение `mdev` (например, 20–50 мс при среднем RTT 30 мс) указывает на сетевой джиттер — непоследовательное время доставки пакетов. Это особенно вредно для приложений реального времени, таких как VoIP, видеоконференции и онлайн-игры. Постоянный джиттер обычно указывает на перегрузку промежуточного маршрутизатора, неисправный сетевой интерфейс или неправильно настроенную политику QoS.

15%

Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код:

Skills
Начать