Нет доступа к хосту на порту 80, но порт открыт.

Вопрос или проблема

Я пытаюсь сделать свою страницу “статус” на nginx с машины A (Ubuntu 16.04) доступной с машины B (Ubuntu 20.04), но при попытке получить доступ к странице я получаю ошибку порт 80: Нет маршрута к хосту.

Обе машины подключены через внутреннюю сеть с адресами 10.3.1.1 и 10.3.2.201.

ping работает в обоих направлениях, и я настроил свой файл конфигурации nginx следующим образом:

server {
    listen 127.0.0.1;
    listen 10.3.1.1:80;
    root /home/www/public_html;
    index index.html;

    location /basic_status {
      stub_status on;
      allow 127.0.0.1;
      allow 10.3.2.201;
      allow 10.3.1.1;
      deny all;
    }
}

По какой-то причине я могу получить доступ к странице /basic_status на машине A с самой машины A, но не с машины B:

ubuntu@machine-a:~$ curl http://10.3.1.1/basic_status
Активные соединения: 1
сервер принимает обработанные запросы
 187325 187325 2010480
Чтение: 0 Запись: 1 Ожидание: 0

ubuntu@machine-a:~$ curl http://127.0.0.1/basic_status
Активные соединения: 1
сервер принимает обработанные запросы
 187326 187326 2010481
Чтение: 0 Запись: 1 Ожидание: 0
ubuntu@machine-b:~$ curl http://10.3.1.1/basic_status
curl: (7) Не удалось подключиться к 10.3.1.1 порт 80: Нет маршрута к хосту

ufw настроен на машине A для приема входящих соединений на порт 80 с любого адреса:

ubuntu@machine-a:~$ sudo ufw status
Статус: активен

Куда                       Действие     Откуда
--                         ------       ----
80                         РАЗРЕШИТЬ    Везде
443                        РАЗРЕШИТЬ    Везде
80 (v6)                    РАЗРЕШИТЬ    Везде (v6)
443 (v6)                   РАЗРЕШИТЬ    Везде (v6)

На данный момент я не знаю, какое другое значение может вызывать это…

При дальнейшем расследовании кажется, что UFW “говорил правду” – но он просто создает правила для iptables от вашего имени… и там уже существовало множество правил iptables, что заменяло UFW. После хорошей очистки теперь это работает.

.

Ответ или решение

Проблема "Нет маршрута к хосту на порту 80, но порт открыт"

В данной ситуации вы столкнулись с ошибкой "No route to host" при попытке доступа к статусной странице Nginx на машине A (Ubuntu 16.04) с машины B (Ubuntu 20.04). Несмотря на то, что порт 80 открыт и доступен из локальной среды, возникающая проблема указывает на возможное несоответствие в конфигурации сетевого оборудования или настройках файрвола.

Первоначальные условия

В вашем случае оба компьютера работают в одной внутренней сети с адресами 10.3.1.1 (машина A) и 10.3.2.201 (машина B). Пинг между обоими машинами проходит успешно, что указывает на наличие сети между ними.

Конфигурация Nginx

Выразим некоторые аспекты вашей конфигурации Nginx:

server {
    listen 127.0.0.1;
    listen 10.3.1.1:80;
    root /home/www/public_html;
    index index.html;

    location /basic_status {
      stub_status on;
      allow 127.0.0.1;
      allow 10.3.2.201;
      allow 10.3.1.1;
      deny all;
    }
}
  • Зафиксировано, что вы слушаете на 10.3.1.1:80, что теоретически должно позволить доступ извне, включая машину B.
  • Опции allow и deny настроены корректно, так что машина B должна иметь возможность видеть статус.

Анализ проблем с маршрутизацией

Как вы уже отметили, UFW (Uncomplicated Firewall) на машине A настроен на разрешение входящих соединений на порт 80. Ниже приведен вывод статуса UFW:

80                         ALLOW       Anywhere
443                        ALLOW       Anywhere

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

Рекомендации по устранению неисправностей

  1. Проверка iptables: Убедитесь, что в iptables нет правил, которые блокируют трафик на порт 80.

    sudo iptables -L -v -n

    Просмотрите список правил и устраните любые конфликты.

  2. Сбрасывание и перезагрузка UFW: Попробуйте отключить UFW и снова включить его, чтобы обновить правила.

    sudo ufw disable
    sudo ufw enable
  3. Логирование: Включите логирование в UFW, чтобы отслеживать, какие пакеты блокируются.

    sudo ufw logging on
  4. Дополнительные параметры безопасности: Если у вас включены настройки SELinux или AppArmor, убедитесь, что они не блокируют доступ.

  5. Перезапуск Nginx: Не забудьте перезапустить Nginx после изменения конфигурации.

    sudo systemctl restart nginx

Заключение

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

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

Оцените материал
Добавить комментарий

Капча загружается...