Введение
Диагностировать сеть проще, если проверять её уровень за уровнем. Сначала определите имя хоста, затем проверьте его интерфейсы и адреса, выбор маршрута, базовую доступность, разрешение имён, прослушиваемые сокеты, ответ приложения и, наконец, локальную политику межсетевого экрана.
В этой лабораторной работе вы пройдёте эту последовательность на хосте Ubuntu. Подготовленный HTTP-сервис прослушивает только loopback-порт 8088, предоставляя безопасную цель для практики с ss, curl и правилами UFW. Вы не будете изменять конфигурацию интерфейсов хоста, маршрут по умолчанию, настройки DNS или доступ по SSH.
Определите хост
На этом шаге вы изучите имя хоста и локальные записи имён, с помощью которых программы идентифицируют эту машину.
Перейдите в рабочую директорию лаборатории:
cd /home/labex/project/network-lab
Выведите текущее имя хоста:
hostname
Отобразите статическое, временное имя и идентификатор операционной системы, известные systemd:
hostnamectl
Static hostname — это настроенное имя. На учебных облачных машинах временное имя может назначаться во время загрузки.
Проверьте локальные сопоставления имён:
cat /etc/hosts
Имена loopback localhost, 127.0.0.1 и ::1 обозначают этот же хост без использования внешней сети. Выведите назначенные хосту IP-адреса в компактном виде:
hostname -I
Сохраните имя хоста и список адресов:
printf 'hostname=%s\naddresses=%s\n' "$(hostname)" "$(hostname -I | xargs)" > host-identity.txt
cat host-identity.txt
Изучите интерфейсы и IP-адреса
На этом шаге вы определите сетевые интерфейсы, состояние каналов, IPv4-адреса, префиксы и область действия адресов.
Используйте краткое представление каналов:
ip -brief link
lo — это loopback-интерфейс. Другой интерфейс, обычно с именем eth0 или ens..., подключает виртуальную машину к сети. Состояние UP означает, что интерфейс административно включён.
Отобразите адреса в компактном виде:
ip -brief address
Адрес вроде 192.0.2.10/24 объединяет IPv4-адрес и длину префикса. Префикс показывает, какие старшие биты определяют локальную сеть.
Подробно изучите loopback-интерфейс:
ip address show dev lo
IPv4-адрес 127.0.0.1/8 имеет scope host, поэтому действителен только внутри этого хоста. Найдите интерфейс, используемый маршрутом по умолчанию:
primary_if=$(ip route show default | awk 'NR==1 {print $5}')
echo "Primary interface: $primary_if"
ip address show dev "$primary_if"
ifconfig — более старый инструмент работы с интерфейсами, который всё ещё встречается в существующих инструкциях и руководствах по устранению неполадок. Сравните его вывод с современным выводом ip, который вы только что изучили:
ifconfig
Сохраните также устаревшее представление:
ifconfig > ifconfig-addresses.txt
Сохраните краткий снимок интерфейсов:
ip -brief address > interface-addresses.txt
cat interface-addresses.txt
Изучите таблицу маршрутизации
На этом шаге вы определите шлюз по умолчанию и узнаете, какой маршрут Linux выбрал бы для указанного назначения.
Отобразите основную таблицу маршрутизации:
ip route
Подключённые маршруты описывают сети, присоединённые напрямую. Строка, начинающаяся с default via, используется, когда не найден более специфичный маршрут.
Узнайте у ядра, как оно достигло бы общедоступного назначения. Эта команда показывает выбранные шлюз, интерфейс и исходный адрес, не отправляя пакет:
ip route get 1.1.1.1
Извлеките шлюз и интерфейс по умолчанию:
gateway=$(ip route show default | awk 'NR==1 {print $3}')
primary_if=$(ip route show default | awk 'NR==1 {print $5}')
echo "Default gateway: $gateway via $primary_if"
Сохраните сводку по маршруту:
printf 'gateway=%s\ninterface=%s\n' "$gateway" "$primary_if" > route-summary.txt
cat route-summary.txt
Проверьте сетевую доступность
На этом шаге вы используете ping для проверки всё более удалённых границ сети, учитывая, что некоторые сети блокируют диагностические пакеты.
Начните с loopback. Параметр -c 2 отправляет два запроса, а -W 2 ожидает каждый ответ не более двух секунд:
ping -c 2 -W 2 127.0.0.1
Успешная проверка loopback подтверждает, что локальный IP-стек отвечает. Затем получите адрес шлюза по умолчанию и проверьте его:
gateway=$(ip route show default | awk 'NR==1 {print $3}')
ping -c 2 -W 2 "$gateway" || echo "The gateway does not answer ICMP echo requests"
Резервное сообщение важно: маршрутизатор может пересылать трафик, одновременно не отвечая на ping. Проверьте общедоступный IP-адрес, не полагаясь на DNS:
ping -c 2 -W 2 1.1.1.1 || echo "Public ICMP is blocked or unavailable"
Сохраните стабильный результат проверки локальной связности, не зависящий от внешней политики:
ping -c 1 -W 2 127.0.0.1 > loopback-ping.txt
tail -n 2 loopback-ping.txt
Проверьте разрешение имён хостов
На этом шаге вы изучите конфигурацию разрешения имён и преобразуете имена хостов в адреса.
Просмотрите файл разрешения имён, используемый стандартными приложениями Linux:
cat /etc/resolv.conf
Обычно он содержит одну или несколько строк nameserver. На хостах с systemd-resolved этот адрес может указывать на локальный промежуточный преобразователь, а не непосредственно на внешний DNS-сервер.
Разрешите локальное имя с учётом всей системной конфигурации служб имён:
getent hosts localhost
getent следует настройкам /etc/nsswitch.conf, поэтому может объединять данные из /etc/hosts, DNS и других настроенных источников. Разрешите внешнее имя и запросите адреса IPv4-сокетов:
getent ahostsv4 example.com
Если ping по IP-адресу успешен, но этот запрос завершается ошибкой, проверьте конфигурацию преобразователя или доступность DNS. Сохраните первую найденную запись IPv4:
getent ahostsv4 example.com | head -n 1 > dns-result.txt
cat dns-result.txt
Изучите прослушиваемый порт и HTTP-ответ
На этом шаге вы свяжете прослушиваемый TCP-сокет с процессом-владельцем и проверите протокол приложения.
Подготовленный демонстрационный сервис прослушивает loopback-порт 8088. Используйте ss, чтобы изучить прослушиваемые TCP-сокеты. Параметры -l, -t, -n и -p означают прослушивание, TCP, числовые адреса и информацию о процессах:
sudo ss -ltnp | grep ':8088'
Найдите 127.0.0.1:8088. Привязка к loopback означает, что сервис доступен только с этого хоста.
Проверьте процесс сервиса, которому принадлежит сокет:
systemctl status labex-network-demo.service --no-pager
Используйте curl -i, чтобы вывести заголовки и тело HTTP-ответа:
curl -i http://127.0.0.1:8088/
Статус HTTP 200 OK подтверждает больше, чем просто открытый порт: приложение приняло HTTP-запрос и вернуло содержимое. Сохраните только тело ответа с помощью тихого режима -s:
cd /home/labex/project/network-lab
curl -s http://127.0.0.1:8088/ > http-response.html
grep 'network demo ready' http-response.html
Сохранение доступа и включение UFW
На этом шаге вы проверите состояние UFW, сохраните удалённый административный доступ, разрешите порт учебного сервиса и включите межсетевой экран.
UFW — это интерфейс управления правилами фильтрации пакетов Linux. Проверьте текущее состояние:
sudo ufw status verbose
Подготовка оставляет UFW неактивным и очищает набор правил. Перед удалённым включением межсетевого экрана хоста разрешите используемый канал администрирования. Эта виртуальная машина использует TCP-порт 22 для SSH:
sudo ufw allow 22/tcp
Теперь разрешите входящий TCP-трафик на порт учебного сервиса:
sudo ufw allow 8088/tcp
Перед активацией проверьте подготовленные изменения:
sudo ufw show added
Включите UFW без интерактивного запроса подтверждения:
sudo ufw --force enable
Убедитесь, что межсетевой экран активен и оба разрешения присутствуют:
sudo ufw status verbose
Сервис привязан к адресу обратной петли, поэтому после изменения межсетевого экрана проверьте его локально:
curl -fsS http://127.0.0.1:8088/
Сохраните активное состояние как проверяемый результат:
cd /home/labex/project/network-lab
sudo ufw status verbose > firewall-status.txt
cat firewall-status.txt
Порядок важен: сохраните канал администрирования, добавьте необходимые правила для сервисов, включите межсетевой экран и сразу проверьте политику и доступность приложения. На рабочих хостах может использоваться другой порт SSH, поэтому уточняйте фактический канал администрирования, а не предполагайте порт 22.
Итоги
Вы прошли структурированную последовательность сетевой диагностики Linux: идентификация хоста, интерфейсы и IP-адреса, выбор маршрута, проверка доступности, разрешение имён, прослушиваемые сокеты и HTTP-ответ. Вы увидели, что каждый уровень отвечает на отдельный вопрос, а сбой на одной границе сужает область дальнейшего поиска.
Кроме того, вы проверили состояние UFW и безопасно настроили узкое правило для loopback, не рискуя удалённым доступом. Эти приёмы помогут диагностировать и защищать сетевой сервис без широких и потенциально disruptive изменений.



