Сайт не работает на linux сервере, что нужно проверить и сделать

Обновлено: 01.07.2024

Пользователи Linux могут легко проверить доступность веб-сайтов из командной строки, получив коды состояния с веб-сервера.

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

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

Мы добавили различные параметры для проверки этой информации для одного и нескольких хостов.

Если вы поддерживаете определенные веб-сайты и хотите получать оповещения в режиме реального времени, когда веб-сайт выходит из строя. Я рекомендую использовать инструменты отслеживания веб-сайтов в режиме реального времени, некоторые из которых бесплатны, но большинство из них платные, поэтому выберите тот, который вы предпочитаете, в зависимости от ваших потребностей. Мы рассмотрим эту тему в нашей следующей статье.

Метод 1: проверить доступность веб-сайта с помощью fping

Команда fping – это такая программа, как ping, которая использует эхо-запрос протокола управляющих сообщений Интернета (ICMP), чтобы определить, отвечает ли целевой хост.

fping отличается от ping тем, что позволяет пользователям параллельно пинговать любое количество хостов, как показано ниже:

Метод 2: тестирование веб-сайта из командной строки Linux

Это не замена cURL, но она особенно хорошо подходит для REST API на основе JSON.

Способ 3. Проверка работоспособности веб-страницы с помощью curl

Команда curl предназначена для работы без взаимодействия с пользователем, а это неизбежно при работе на консоли.

Запустите скрипт после добавления вышеуказанного скрипта в файл:

Используйте следующий сценарий оболочки для просмотра состояния нескольких веб-сайтов с помощью команды curl:

Запустите скрипт, чтобы увидеть результат:

Метод 4: Как проверить, работает ли веб-сайт с помощью wget

Это неинтерактивный инструмент командной строки, название которого происходит от слова «Всемирная паутина и доступ».

wget справляется с загрузкой довольно хорошо по сравнению с другими инструментами. Его функции включают работу в фоновом режиме, рекурсивную загрузку, загрузку нескольких файлов, возобновление загрузки, неинтерактивную загрузку и загрузку больших файлов.

Используйте следующий скрипт bash, чтобы добавить дополнительное значение в вывод на основе кода состояния для лучшей читабельности:

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

Используйте следующий сценарий оболочки для просмотра состояния нескольких веб-сайтов:

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

Метод 5: команда lynx для проверки работоспособности веб-сайта

lynx — это текстовый веб-браузер с широкими возможностями настройки для использования на терминалах символьных ячеек с адресацией курсора. Это самый старый веб-браузер, который все еще находится в активной разработке.

Если вы хотите проверить, работает ли данный веб-сайт, используйте следующий скрипт Bash:

После того как вы добавили приведенный выше скрипт в файл, запустите файл, чтобы увидеть результат:

Используйте следующий сценарий оболочки, если вы хотите увидеть статус нескольких веб-сайтов:

После того как вы добавили приведенный выше скрипт в файл, запустите файл, чтобы увидеть результат:

Способ-6: команда ping для проверки доступности URL

Команда ping (расшифровывается как "Packet Internet Groper") – это сетевая утилита, которая используется для проверки доступности/подключения хоста в сети Интернет-протокола (IP).

Он проверяет доступность хоста, отправляя пакеты эхо-запроса протокола управляющих сообщений Интернета (ICMP) на целевой хост и ожидая эхо-ответа ICMP.

Способ-7: как проверить, работает сайт или нет

Команда Telnet — это старый сетевой протокол, используемый для связи с другим хостом по сети TCP/IP с использованием протокола TELNET.

Он использует порт 23 для подключения к другим устройствам, таким как компьютер и сетевое оборудование.

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

Метод 8: Сценарий оболочки для проверки статуса веб-сайта

Проще говоря, сценарий оболочки — это файл, содержащий набор команд. Оболочка считывает этот файл и выполняет команды одну за другой по мере их ввода непосредственно в командной строке.

Чтобы сделать его более полезным, мы можем добавить некоторые условия, которые сокращают задачи администратора Linux.

Если вы хотите просмотреть состояние нескольких веб-сайтов с помощью команды wget, используйте следующий сценарий оболочки:

После того как вы добавили приведенный выше скрипт в файл, запустите файл, чтобы увидеть результат:

Если вы хотите просмотреть состояние нескольких веб-сайтов с помощью команды curl, используйте следующий сценарий bash:

После того как вы добавили приведенный выше скрипт в файл, запустите файл, чтобы увидеть результат:

Заключение

В этом руководстве мы показали несколько команд, которые можно выполнить с терминала Linux для проверки работоспособности веб-сайта.Также включен небольшой сценарий оболочки для одновременной проверки состояния нескольких веб-сайтов в каждом сеансе.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии, и мы свяжемся с вами как можно скорее.

Иногда мы можем столкнуться с проблемами, когда один из наших веб-серверов или сайт не работает. Мы должны быть в состоянии определить эту проблему, которая, вероятно, вызывает проблемы, и устранить проблему.

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

Предпосылки

Чтобы устранить эту проблему, вам потребуется:

Шаг 1. Проверьте состояние сервера

Прежде чем приступить к упомянутым шагам, сначала нам нужно проверить, можете ли вы получить доступ к самому серверу. Иногда сам сервер мог выйти из строя. Вы можете проверить это с помощью команды ping и ssh

Если вы сможете пропинговать свой сервер и его UP, вы получите вывод, как показано ниже

Если ваш сервер не работает, в этом случае вы не получите никакого пинга. Вы можете проверить консоль сервера на наличие ошибок и перезапустить сервер через Myaccount

Примечание. Иногда вы не можете проверить связь с сервером, даже если ваш сервер работает, и это может быть связано с тем, что проверка связи на вашем сервере отключена.

Вы также должны иметь возможность использовать SSH и войти на сервер, чтобы убедиться, что он работает нормально. Вы можете получить доступ к своему серверу через ssh с помощью следующей команды

Если вы не можете войти на свой сервер, скорее всего, ваш сервер не работает или находится в зависшем состоянии. Проверьте консоль сервера на наличие ошибок и перезапустите сервер через Myaccount

Шаг 2. Мониторинг вашего сервера

Высокая загрузка процессора или потребление памяти могут привести к тому, что ваш сервер не будет отвечать на запросы. Вы можете обратиться к этой статье о том, как контролировать сервер E2E через Zabbix

После того, как вы обнаружите аномалии в использовании ресурсов вашего сервера, вы сможете принять необходимые меры для предотвращения проблемы.

Шаг 3. Проверьте журналы

Прежде чем отслеживать какие-либо проблемы, нам необходимо сначала проверить журналы нашего веб-сервера и связанных с ним компонентов. Если мы обнаружим какие-либо журналы ошибок или какие-либо подозрительные журналы в журналах доступа, мы сможем точно определить проблемы.

Если вы используете Nginx в качестве веб-сервера, журналы обычно находятся ниже

/var/log/nginx/access.log
/var/log/nginx/error.log
/var/log/nginx/nginx_error.log
/var/log/ nginx/access_error.log

Проверьте файлы в этом каталоге, чтобы увидеть, какие сообщения об ошибках генерируются. В качестве альтернативы вы также можете проверить файлы конфигурации веб-сервера, если вы настроили путь для журналов вручную.

Чтобы проверить последние журналы, сгенерированные сервером, вы можете запустить команду tail, как показано в примере ниже

Вы также можете просмотреть полные журналы с помощью команды less, как показано ниже. Обязательно измените путь к файлу журнала в соответствии с вашим в приведенной ниже команде.

как только вы определите проблему с помощью журналов, вы сможете легко обнаружить проблему и устранить ее соответствующим образом.

Шаг 4. Убедитесь, что ваш веб-сервер работает

Вы можете проверить, работают ли ваши службы нормально. Один из способов проверить, работают ли службы, — это предпочтительный метод дистрибутива — проверить с помощью приведенной ниже общей команды.

Используйте команду состояния, чтобы проверить, запущена служба или нет. Если служба не запущена, вы можете запустить ее с помощью следующей команды запуска

Если вы используете дистрибутив, в котором Apache называется Apache2, команды для использования функций apache2 приведены ниже

Команды для использования функций Nginx приведены ниже

Шаг 5. Проверка синтаксиса веб-сервера

Если ваш веб-сервер не запускается, это может означать, что проблема связана с вашим файлом конфигурации.

И Apache, и Nginx требуют правильного синтаксиса директив для чтения файлов. Файлы конфигурации расположены, как показано ниже

Каталоги конфигурации по умолчанию для Apache

Каталоги конфигурации для Nginx

Каждый из этих веб-серверов также предоставляет вам возможность проверить синтаксис конфигурации ваших файлов. Чтобы проверить синтаксис ваших файлов конфигурации Apache без необходимости перезапуска сервера, вы можете запустить следующую команду в системах Debian и Ubuntu.

Чтобы проверить синтаксис конфигурации в Nginx, используйте команду ниже

После того, как вы запустите указанную выше команду, вы получите сообщение типа «Синтаксис в порядке» или «Проверка прошла успешно». Это означает, что в конфигурации вашего веб-сервера нет ошибок. которые указаны в файле конфигурации и которые необходимо отредактировать.

Шаг 6. Работает ли серверная часть вашей базы данных нормально

Если вы настроили свой сайт для подключения к серверной базе данных, такой как MySQL, PostreSQL, MongoDB и т. д.вам нужно убедиться, что он запущен и работает. Вы можете сделать это, когда проверяли наличие веб-сервера.

Выполните приведенную ниже команду, чтобы проверить, работает ли ваша база данных MySQL/Mongod.

Кроме того, вы также можете проверить с помощью приведенной ниже команды netstat

Вы получите вывод, как показано ниже, если ваш MySQL запущен и работает.

tcp 0 0 127.0.0.1:3306 0.0.0.0:* ПРОСЛУШАТЬ 3356/mysqld

Шаг 7. Убедитесь, что ваш веб-сервер или сервер приложений может подключиться к серверной части базы данных

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

Например, на сайте WordPress параметры подключения к базе данных можно проверить с помощью конфигурации, расположенной в файле wp-config.php. Вам необходимо проверить правильность DB_NAME, DB_USER и DB_PASSWORD, чтобы ваш сайт мог подключиться к базе данных.

Вы можете проверить, содержит ли файл правильную информацию, попытавшись подключиться к базе данных вручную, изменив соответствующее значение в приведенной ниже команде

Шаг 8. Убедитесь, что порты открыты

Даже если все настройки и подключение выполнены правильно, в некоторых случаях вы не сможете получить доступ к сайту, поскольку настроенные порты должны быть доступны. Веб-серверы используют порт 80 для обычного веб-трафика и используют порт 443 для трафика, зашифрованного с помощью SSL.

Вы можете проверить, открыты ли настроенные порты с помощью команды telnet

Вы получите вывод, как показано ниже, если ваши порты открыты

e2e@compaqlaptop:~$ telnet xx.xx.xx.xx 80
Попытка xx.xx.xx.xx…
Подключение к xx.xx.xx.xx.
Экран-символ «^]».

Вы также можете проверить, может ли ваш сервер приложений/веб-сайтов подключаться к порту вашей базы данных на серверной части. Сервер MySQL по умолчанию работает на порту 3306

Если ваши веб-порты или порты базы данных недоступны, проверьте конфигурацию брандмауэра. Возможно, вам потребуется открыть порт 80, порт 443 или порт 3306 соответственно.

Шаг 9. Проверка настроек DNS

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

Вы можете проверить, указывает ли ваш сайт на правильный IP-адрес, с помощью приведенной ниже команды dig

Вы получите вывод, как показано ниже

Помимо этого, проверьте файлы виртуального хоста Apache или файлы блоков сервера Nginx, чтобы убедиться, что они настроены для ответа на запросы для вашего домена.

Если кажется, что ваш сервер Linux отключен или недоступен по какой-либо иной причине, вы всегда сможете войти в систему с помощью веб-консоли на панели управления UpCloud или через соединение VNC. После входа в систему проверьте интернет-соединение вашего сервера с помощью ping и общедоступного IP-адреса, например общедоступного DNS-сервера Google, который, скорее всего, ответит, если ваше интернет-соединение работает.

Вывод должен выглядеть примерно так:

Если сервер не может связаться с пунктом назначения, возможно, проблема связана с вашей конфигурацией. Выполните шаги, описанные здесь, чтобы устранить наиболее распространенные сетевые проблемы с облачным сервером Linux.

Проверьте конфигурацию вашей сети

Убедитесь, что сетевые интерфейсы, такие как eth0, включены. Чтобы просмотреть все настроенные интерфейсы, используйте эту команду.

Вывод команды покажет состояние каждого сетевого интерфейса на сервере с «состоянием UP» или «состоянием DOWN», например, как показано ниже.

Включите все отключенные интерфейсы с помощью следующей команды.

Здесь имя интерфейса является одним из имен, перечисленных в выводе команды ip addr, например eth0, eth1 или eth2< /tt>.

Когда все сетевые интерфейсы будут включены, попробуйте снова использовать команду ping. Если проблема не устранена, убедитесь, что сетевым интерфейсам назначены IP-адреса, и они совпадают с информацией в разделе «Сеть» панели управления UpCloud.

Попробуйте перезапустить любой проблемный интерфейс с помощью следующих команд.

Если какая-либо из этих команд не удалась, возможно, интерфейс находится в состоянии, неизвестном командному сценарию. Попробуйте те же команды еще раз с параметром --force, чтобы устранить подобные проблемы.

Если перезапуск сетевого интерфейса устранил проблему, отлично! Если нет, продолжайте устранение неполадок.

Проверьте файл конфигурации сети

Linux обычно хранит сетевые настройки в определенных файлах и считывает их, например, при загрузке или при использовании команды ifup. Чтобы внести изменения в конфигурацию сети, вам нужно открыть нужный файл в текстовом редакторе. В дистрибутивах на основе Debian и Ubuntu это можно сделать с помощью

В большинстве случаев файл interfaces должен содержать как минимум следующие интерфейсы.

В CentOS и других вариантах Red Hat эти конфигурации разделены на отдельные файлы для каждого сетевого интерфейса и хранятся в /etc/sysconfig/network-scripts/. Интерфейс по умолчанию для подключения к Интернету обычно называется eth0, откройте соответствующий файл конфигурации.

Файл конфигурации для eth0 должен выглядеть так.

Если файлы конфигурации интерфейсов не соответствуют приведенному здесь примеру, отредактируйте файл, относящийся к вашей системе, чтобы восстановить исходную функциональность. Чтобы любые изменения, внесенные в эти файлы, вступили в силу, необходимо перезапустить интерфейсы, к которым применяются изменения, как описано ранее с помощью команд ifdown и ifup.

Проверьте DNS-записи серверов

Если ping с IP-адресом работает, но обычное соединение по-прежнему не работает, попробуйте вместо этого проверить связь с доменным именем. Например, вы можете пропинговать домен UpCloud таким образом.

Если домен не отвечает, проблема, скорее всего, связана с тем, как ваш сервер преобразует доменные имена в IP-адреса. Проверьте записи DNS вашего сервера.

Список должен содержать как минимум 1 сервер имен. Все резолверы DNS по умолчанию в UpCloud имеют одинаковые IP-адреса независимо от зоны доступности. DNS-серверы предоставляются автоматически по протоколу DHCP, поэтому в операционной системе не требуется ручная настройка.

Если ваш сервер имеет общедоступный IPv6-адрес, вы также можете использовать IPv6 со следующими серверами:

Если список пуст, не редактируйте его вручную, потому что, если у вас установлен диспетчер серверов имен, все внесенные вами изменения будут просто отменены. Вместо этого в Ubuntu и некоторых системах Debian вы можете попробовать обновить его с помощью этой команды.

На серверах Debian, на которых не установлен resolvconf, вы можете напрямую редактировать файл resolv.conf.

Добавьте строки, показанные ниже, в файл, сохраните и выйдите.

Те, у кого установлен resolvconf, в случае, если resolv.conf все еще пуст после команды обновления, вы можете добавить серверы имен в свой файл интерфейсов. Откройте его для редактирования.

Добавьте сервер имен в конец раздела eth0.

После этого сохраните файл и выйдите. Вам также потребуется перезапустить сетевую службу с помощью следующей команды.

В CentOS и других вариантах Red Hat файл resolv.conf заполняется немного по-другому. Если файл пуст, вы можете добавить до двух записей DNS в файл конфигурации сети для сети. интерфейс, отвечающий за публичный IP. Например, откройте ifcfg-eth0 с помощью следующей команды.

Отредактируйте файл, чтобы он выглядел следующим образом.

Выйдите из редактора и перезапустите интерфейс, файл конфигурации которого вы только что редактировали, с помощью команд ifdown и ifup.

Проверьте соединение в обоих направлениях

Попробуйте пропинговать свой сервер через Интернет. Откройте терминал или командную строку на своем компьютере и попробуйте пропинговать общедоступный IP-адрес вашего сервера, который вы можете найти в панели управления UpCloud в разделе «Сеть».

Проверьте подключение к Интернету, отправив эхо-запрос на другой сайт с вашего сервера. Например, используйте следующую команду, чтобы пропинговать общедоступный DNS Google.

Если у вас есть второй сервер, развернутый в вашей учетной записи, и проблема связана с интерфейсом, назначенным с частным IP-адресом, попробуйте выполнить эхо-запрос с другим сервером, используя частные IP-адреса, указанные в панели управления UpCloud.

Если проверка связи не дает ответа, попробуйте перезапустить все сетевые службы вашего сервера. В Debian и Ubuntu 12.04 или более ранней версии используйте приведенную ниже команду.

В CentOS и других системах на базе Red Hat вместо этого перезапустите сеть с помощью приведенной ниже команды.

В Ubuntu 14.04 и новее вам нужно будет запустить команду для каждого сетевого интерфейса отдельно, например, вы можете перезапустить eth0 просто следующим образом.

После перезапуска сетевых служб попробуйте снова запустить ping в обоих направлениях. Если ping работает в одном направлении, но не работает в другом, проверьте настройки брандмауэра.

Узнайте, где происходит сбой соединения

Ваше основное подключение к Интернету сводится к знанию маршрута до пункта назначения. Иногда маршрутизация соединения может зайти в тупик, что приведет к сбою соединения. Запустите трассировку маршрута со своего сервера, чтобы увидеть, на каком сетевом узле теряется соединение.

Для этой цели на серверах Ubuntu есть сетевой инструмент mtr. Запустите его с помощью следующей команды.

Чтобы выйти, просто нажмите q на клавиатуре.

Чтобы сделать это в системах Debian, где mtr обычно не устанавливается по умолчанию, вместо этого можно использовать traceroute.

На серверах CentOS используйте команду tracepath.

В разных дистрибутивах работают разные инструменты, и выходные данные этих инструментов также немного различаются. mtr выполняется на переднем плане до отмены, обновляя таблицу ответов при каждом проходе. Пример вывода показан ниже.

Traceroute и tracepath очень похожи друг на друга, они выполняют передачу по сети к заданному месту назначения и показывают задержку для каждого ответившего узла. Пример traceroute, показанный ниже, содержит большую часть той же информации, что и mtr.

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

Если исходящая трассировка не достигает даже первого узла, проверьте настройки сети и брандмауэр. Брандмауэр также может нести ответственность за отказы в подключении, если трассировка через Интернет до вашего сервера не выполняется непосредственно перед достижением сервера.

Настройки брандмауэра

Убедитесь, что ваше соединение не блокируется брандмауэром. CentOS и некоторые другие дистрибутивы на основе Red Hat по умолчанию имеют строгие правила брандмауэра. Следующая команда выведет список всех правил брандмауэра на стороне сервера в вашей системе.

Iptables — это встроенный в Linux программный брандмауэр, и приведенная выше команда выводит следующее.

Ваша панель управления UpCloud также предоставляет легко настраиваемый брандмауэр в настройках сервера на вкладке Брандмауэр.

Настройки брандмауэра базы данных

В приведенном выше примере изображения есть несколько принятых входящих правил, но правило по умолчанию настроено на отклонение. Убедитесь, что нет правил, блокирующих желаемое соединение.

Информация о статусе хоста

Если кажется, что все в порядке, но сетевое подключение по-прежнему не работает или вы не можете устранить проблемы с подключением по другим причинам, не стесняйтесь обращаться за помощью.

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

Кабели Ethernet

Когда я работал в должности, ориентированной на сеть, одной из самых больших проблем всегда было преодоление разрыва между сетевым и системным проектированием. Системные администраторы, которым не хватало информации о сети, часто винили сеть в сбоях или странных проблемах. Сетевые администраторы, неспособные контролировать серверы и уставшие от отношения к сети "виновен, пока не доказана его невиновность", часто обвиняли конечные точки сети.

Конечно, обвинения не решают проблемы. Потратив время на понимание основ чьей-то области, вы сможете улучшить отношения с другими командами и ускорить решение проблем. Этот факт особенно актуален для системных администраторов. Имея базовые знания об устранении неполадок в сети, мы можем предоставить более убедительные доказательства нашим коллегам по сетевым технологиям, когда мы подозреваем, что сеть может быть виновата. Точно так же мы часто можем сэкономить время, выполнив первоначальное устранение неполадок самостоятельно.

В этой статье мы рассмотрим основы устранения неполадок в сети с помощью командной строки Linux.

Краткий обзор модели TCP/IP

Для начала рассмотрим основы сетевой модели TCP/IP. Хотя большинство людей используют модель взаимодействия открытых систем (OSI) для обсуждения теории сети, модель TCP/IP более точно представляет набор протоколов, развернутых в современных сетях.

Уровни модели OSI и соответствующие уровни TCP/IP

Уровни сетевой модели TCP/IP по порядку включают:

Я предполагаю, что вы знакомы с этой моделью, и перейдем к обсуждению способов устранения неполадок на уровнях стека с 1 по 4. С чего начать устранение неполадок, зависит от ситуации. Например, если вы можете подключиться к серверу по SSH, но сервер не может подключиться к базе данных MySQL, проблема вряд ли связана с физическим уровнем или уровнем канала передачи данных на локальном сервере. В общем, неплохо идти вниз по стеку. Начните с приложения, а затем постепенно устраняйте неполадки на каждом нижнем уровне, пока не изолируете проблему.

После этого перейдем к командной строке и приступим к устранению неполадок.

Уровень 1: физический уровень

Часто мы воспринимаем физический уровень как должное ("Вы убедились, что кабель подключен?"), но мы можем легко устранять неполадки физического уровня из командной строки Linux. Это если у вас есть консольное подключение к хосту, что может быть не так для некоторых удаленных систем.

Начнем с самого основного вопроса: работает ли наш физический интерфейс? Команда ip link show сообщает нам:

Обратите внимание на индикацию DOWN в приведенном выше выводе для интерфейса eth0.Этот результат означает, что уровень 1 не подходит. Мы можем попытаться устранить неполадки, проверив кабели или удаленный конец соединения (например, коммутатор) на наличие проблем.

Прежде чем приступать к проверке кабелей, рекомендуется убедиться, что интерфейс не просто отключен. Выдача команды для включения интерфейса может исключить эту проблему:

Вывод ip link show может быть трудно проанализировать с первого взгляда. К счастью, параметр -br выводит этот вывод в гораздо более удобном для чтения формате таблицы:

Похоже, ip link set eth0 помог, и eth0 снова в деле.

Дополнительные ресурсы по Linux

Эти команды отлично подходят для устранения очевидных физических проблем, но как насчет более коварных проблем? Интерфейсы могут согласовываться с неправильной скоростью, а коллизии и проблемы на физическом уровне могут привести к потере или повреждению пакетов, что приведет к дорогостоящим повторным передачам. С чего начать устранение этих проблем?

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

Для более сложного устранения неполадок уровня 1 отлично подходит утилита ethtool. Особенно хорошим вариантом использования этой команды является проверка того, согласовал ли интерфейс правильную скорость. Интерфейс, который согласовал неправильную скорость (например, интерфейс 10 Гбит/с, который сообщает только о скорости 1 Гбит/с), может быть индикатором проблемы с оборудованием/кабелем или неправильной конфигурацией согласования на одной стороне канала (например, неправильно настроенный порт коммутатора).< /p>

Наши результаты могут выглядеть следующим образом:

Обратите внимание, что в выходных данных выше показан канал, который правильно согласовал скорость 1000 Мбит/с и полнодуплексный режим.

Уровень 2. Канальный уровень

Уровень канала передачи данных отвечает за подключение к локальной сети; по сути, это передача кадров между хостами в одном и том же домене уровня 2 (обычно называемом локальной сетью). Наиболее подходящим протоколом уровня 2 для большинства системных администраторов является протокол разрешения адресов (ARP), который сопоставляет IP-адреса уровня 3 с MAC-адресами Ethernet уровня 2. Когда хост пытается связаться с другим хостом в своей локальной сети (например, со шлюзом по умолчанию), он, скорее всего, имеет IP-адрес другого хоста, но не знает MAC-адреса другого хоста. ARP решает эту проблему и вычисляет MAC-адрес для нас.

Распространенной проблемой, с которой вы можете столкнуться, является запись ARP, которая не заполняется, особенно для шлюза вашего хоста по умолчанию. Если ваш локальный хост не может успешно разрешить MAC-адрес своего шлюза уровня 2, он не сможет отправлять трафик в удаленные сети. Эта проблема может быть вызвана неверным IP-адресом, настроенным для шлюза, или другой проблемой, например неправильно настроенным портом коммутатора.

Мы можем проверить записи в нашей таблице ARP с помощью команды ip Neighbor:

Еще одно распространенное использование команды ip Neighbor связано с управлением таблицей ARP. Представьте, что ваша сетевая команда только что заменила вышестоящий маршрутизатор (который является шлюзом вашего сервера по умолчанию). MAC-адрес также мог быть изменен, поскольку MAC-адреса — это аппаратные адреса, которые назначаются на заводе.

Примечание. Хотя уникальные MAC-адреса назначаются устройствам на заводе, их можно изменить или подделать. Многие современные сети также часто используют такие протоколы, как протокол избыточности виртуального маршрутизатора (VRRP), в котором используется сгенерированный MAC-адрес.

Linux кэширует запись ARP в течение определенного периода времени, поэтому вы не сможете отправлять трафик на шлюз по умолчанию до тех пор, пока не истечет время ожидания записи ARP для вашего шлюза. Для особо важных систем такой результат нежелателен. К счастью, вы можете вручную удалить запись ARP, что вызовет новый процесс обнаружения ARP:

В приведенном выше примере мы видим заполненную запись ARP для 192.168.122.70 на eth0. Затем мы удаляем запись ARP и видим, что она была удалена из таблицы.

Уровень 3: сетевой/интернет-уровень

Уровень 3 включает работу с IP-адресами, которые должны быть знакомы любому системному администратору. IP-адресация предоставляет хостам способ связаться с другими хостами, находящимися за пределами их локальной сети (хотя мы часто используем их и в локальных сетях). Одним из первых шагов устранения неполадок является проверка локального IP-адреса машины, которую можно выполнить с помощью команды ip address, снова используя флаг -br для упрощения вывода:

Мы видим, что наш интерфейс eth0 имеет IPv4-адрес 192.168.122.135. Если бы у нас не было IP-адреса, мы бы хотели устранить эту проблему. Отсутствие IP-адреса может быть вызвано локальной неправильной настройкой, например неверным файлом конфигурации сетевого интерфейса, или проблемами с DHCP.

Наиболее распространенным передовым инструментом, который большинство системных администраторов используют для устранения неполадок уровня 3, является утилита ping.Ping отправляет пакет эхо-запроса ICMP на удаленный хост и ожидает в ответ эхо-ответ ICMP. Если у вас возникли проблемы с подключением к удаленному хосту, ping — это обычная утилита для начала устранения неполадок. Выполнение простого эхо-запроса из командной строки бесконечно отправляет эхо-сигналы ICMP на удаленный хост; вам нужно будет нажать CTRL+C, чтобы завершить проверку связи, или передать флаг -c, например:

Обратите внимание, что каждый пинг включает время, которое потребовалось для получения ответа. Хотя ping может быть простым способом узнать, жив ли хост и отвечает ли он, он ни в коем случае не является окончательным. Многие сетевые операторы блокируют пакеты ICMP из соображений безопасности, хотя многие другие не согласны с этой практикой. Еще одна распространенная ошибка заключается в использовании поля времени как точного индикатора задержки в сети. Скорость пакетов ICMP может быть ограничена промежуточным сетевым оборудованием, и не следует полагаться на то, что они обеспечивают достоверное представление о задержке приложения.

Следующим инструментом в наборе инструментов для устранения неполадок уровня 3 является команда traceroute. Traceroute использует поле Time to Live (TTL) в IP-пакетах, чтобы определить путь, по которому трафик идет к месту назначения. Traceroute будет отправлять по одному пакету за раз, начиная с TTL, равного единице. Поскольку срок действия пакета истекает в пути, вышестоящий маршрутизатор отправляет обратно пакет ICMP Time-to-Live Exceeded. Затем traceroute увеличивает TTL, чтобы определить следующий переход. В результате получается список промежуточных маршрутизаторов, через которые проходил пакет на пути к месту назначения:

Traceroute кажется отличным инструментом, но важно понимать его ограничения. Как и в случае ICMP, промежуточные маршрутизаторы могут фильтровать пакеты, на которые опирается traceroute, например сообщение ICMP Time-to-Live Exceeded. Но что еще более важно, путь, по которому идет трафик к месту назначения и обратно, не обязательно симметричен и не всегда одинаков. Traceroute может ввести вас в заблуждение, заставив думать, что ваш трафик идет по прямолинейному пути к месту назначения и обратно. Однако такая ситуация бывает редко. Трафик может следовать по другому обратному пути, и пути могут динамически меняться по многим причинам. Хотя traceroute может обеспечить точное представление пути в небольших корпоративных сетях, он часто не точен при попытке отследить большие сети или Интернет.

Еще одна распространенная проблема, с которой вы, скорее всего, столкнетесь, – это отсутствие шлюза исходящего трафика для определенного маршрута или отсутствие маршрута по умолчанию. Когда IP-пакет отправляется в другую сеть, он должен быть отправлен на шлюз для дальнейшей обработки. Шлюз должен знать, как направить пакет к конечному пункту назначения. Список шлюзов для разных маршрутов хранится в таблице маршрутизации, которую можно просматривать и изменять с помощью команд ip route.

Мы можем распечатать таблицу маршрутизации с помощью команды ip route show:

В простых топологиях часто настроен только шлюз по умолчанию, представленный записью "по умолчанию" в верхней части таблицы. Распространенной проблемой является отсутствующий или неправильный шлюз по умолчанию.

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

В приведенном выше примере мы отправляем весь трафик, предназначенный для сети 10.0.0.0/8, на другой шлюз (192.168.122.200).

Ярким признаком проблемы с DNS является возможность подключения к удаленному хосту по IP-адресу, но не по имени хоста. Выполнение быстрого nslookup по имени хоста может многое нам рассказать ( nslookup является частью пакета bind-utils в системах на базе Red Hat Enterprise Linux):

Вышеприведенные выходные данные показывают серверу, что поиск был выполнен по адресу 192.168.122.1, и в результате был получен IP-адрес 172.217.3.100.

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

Уровень 4. Транспортный уровень

Транспортный уровень состоит из протоколов TCP и UDP, причем TCP является протоколом, ориентированным на установление соединения, а UDP — без установления соединения. Приложения прослушивают сокеты, которые состоят из IP-адреса и порта. Трафик, направленный на IP-адрес определенного порта, будет направляться ядром прослушивающему приложению. Полное обсуждение этих протоколов выходит за рамки этой статьи, поэтому мы сосредоточимся на устранении проблем с подключением на этих уровнях.

Первое, что вы можете сделать, это посмотреть, какие порты прослушиваются на локальном хосте. Результат может быть полезен, если вы не можете подключиться к определенной службе на машине, например к веб-серверу или SSH-серверу. Другая распространенная проблема возникает, когда демон или служба не запускаются из-за того, что что-то еще прослушивает порт. Команда ss незаменима для выполнения следующих типов действий:

Давайте разберем эти флаги:

  • -t — показать порты TCP.
  • -u — показать порты UDP.
  • -n — не пытаться разрешать имена хостов.
  • -l — показать только прослушиваемые порты.
  • -p — показать процессы, использующие определенный сокет.
  • -4 — показывать только сокеты IPv4.

Глядя на результат, мы видим несколько сервисов прослушивания. Приложение sshd прослушивает порт 22 на всех IP-адресах, обозначенных выводом *:22.

Команда ss — это мощный инструмент, и обзор ее краткой справочной страницы может помочь вам найти флаги и параметры, чтобы найти то, что вы ищете.

Еще один распространенный сценарий устранения неполадок связан с удаленным подключением. Представьте, что ваш локальный компьютер не может подключиться к удаленному порту, например к MySQL через порт 3306. Маловероятно, но часто устанавливаемый инструмент может помочь вам при устранении проблем такого типа: telnet. Команда telnet пытается установить TCP-соединение с любым хостом и портом, который вы ей предоставляете. Эта функция идеально подходит для тестирования удаленного TCP-подключения:

В приведенном выше выводе telnet зависает, пока мы его не завершим. Этот результат говорит нам о том, что мы не можем получить доступ к порту 3306 на удаленной машине. Возможно, приложение не слушает, и нам нужно применить предыдущие шаги по устранению неполадок, используя ss на удаленном хосте — если у нас есть доступ. Другой возможностью является хост или промежуточный брандмауэр, фильтрующий трафик. Возможно, нам придется работать с сетевой командой, чтобы проверить подключение уровня 4 по пути.

Telnet отлично работает для TCP, но как насчет UDP? Инструмент netcat предоставляет простой способ проверки удаленного порта UDP:

Утилиту netcat можно использовать для многих других целей, включая проверку соединения TCP. Обратите внимание, что netcat может быть не установлен в вашей системе, и часто считается угрозой безопасности, если вы оставите его без присмотра. Возможно, вы захотите удалить его, когда закончите устранение неполадок.

В приведенных выше примерах обсуждались распространенные простые утилиты. Однако гораздо более мощным инструментом является nmap. Функционалам nmap посвящены целые книги, поэтому мы не будем рассматривать его в этой статье для начинающих, но вы должны знать некоторые вещи, на которые он способен:

  • Сканирование портов TCP и UDP на удаленных компьютерах.
  • Отпечатки ОС.
  • Определение того, закрыты ли удаленные порты или просто отфильтрованы.

Подведение итогов

В этой статье мы рассмотрели множество вводных сведений о сети, продвигаясь вверх по сетевому стеку от кабелей и коммутаторов до IP-адресов и портов. Обсуждаемые здесь инструменты должны стать хорошей отправной точкой для устранения основных проблем с сетевым подключением, и они должны оказаться полезными, когда вы пытаетесь предоставить как можно больше подробностей вашей сетевой команде.

По мере вашего продвижения по устранению неполадок в сети вы, несомненно, столкнетесь с ранее неизвестными флагами команд, причудливыми однострочниками и новыми мощными инструментами (tcpdump и Wireshark — мои любимые), чтобы разобраться в причинах проблем с сетью. Получайте удовольствие и помните: посылки не врут!

Читайте также: