Вопрос или проблема
Я пытаюсь сделать свою страницу “статус” на 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.
Рекомендации по устранению неисправностей
-
Проверка iptables: Убедитесь, что в iptables нет правил, которые блокируют трафик на порт 80.
sudo iptables -L -v -n
Просмотрите список правил и устраните любые конфликты.
-
Сбрасывание и перезагрузка UFW: Попробуйте отключить UFW и снова включить его, чтобы обновить правила.
sudo ufw disable sudo ufw enable
-
Логирование: Включите логирование в UFW, чтобы отслеживать, какие пакеты блокируются.
sudo ufw logging on
-
Дополнительные параметры безопасности: Если у вас включены настройки SELinux или AppArmor, убедитесь, что они не блокируют доступ.
-
Перезапуск Nginx: Не забудьте перезапустить Nginx после изменения конфигурации.
sudo systemctl restart nginx
Заключение
После устранения потенциальных конфликтов и очистки правил iptables, вы упомянули, что служба успешно заработала. Необходимо помнить, что сетевые настройки являются тонкими, и оптимизация работы с инструментами управления файрволом, такими как UFW и iptables, может существенно повлиять на доступность услуг. Следите за тем, чтобы ваше сетевое оборудование, включая маршрутизаторы и коммутаторы, было также правильно настроено и не блокировало трафик между машинами.
Эти подробные шаги помогут вам избежать подобных проблем в будущем и обеспечат стабильность вашего сетевого окружения.