Сайт недоступен с соседней машины
Сетевое (2 ВМ) · Сложное · 40 мин · 220 баллов
Сайт недоступен с соседней машины
Две машины: node1 (клиент) и node2 (веб-сервер на nginx). Сайт на node2 должен
открываться с node1 по http://node2/, но не открывается. Проблема многослойная —
здесь не одна причина: что-то с привязкой сервиса, что-то с файрволом. Нужно методично
продиагностировать всю цепочку и устранить все помехи.
Задача
Сделай так, чтобы:
- с node1 сайт открывался:
curl http://node2/возвращает 200; - nginx на node2 слушал доступный извне адрес (а не только
127.0.0.1); - файрвол на node2 пропускал входящие на порт 80;
- сайт на node2 оставался валидным и активным (
nginx -t, службаactive).
Подсказки по подходу
- Диагностируй слоями снизу вверх: связь (
ping node2), порт (nc -vz node2 80), ответ (curl -v http://node2/). На каком шаге рвётся — там и слой проблемы. - Привязка: на node2
ss -ltnp | grep :80— слушает0.0.0.0или только127.0.0.1? Если локально — правьlistenв конфиге nginx. - Файрвол:
sudo iptables -L INPUT -n --line-numbers— ищиDROP/REJECTдля:80. - Хочешь увидеть, доходят ли пакеты — на node2
sudo tcpdump -ni any tcp port 80, параллельно дёргайcurlс node1. - Проверяй результат по кнопке «Проверить» — она проверяет доступ именно с node1.
Всё нужное уже установлено. Интернета нет — обе машины в изолированной лаборатории.
Подсказки
Подсказка 1
Иди по слоям с node1: ping node2 → nc -vz node2 80 → curl -v http://node2/. Запиши,
на каком шаге обрывается — это укажет слой (сеть / порт / HTTP). Скорее всего проблемных
шагов будет несколько.
Подсказка 2
На node2 проверь привязку nginx: ss -ltnp | grep :80. Если там 127.0.0.1:80, сайт
виден только локально — в конфиге nginx (/etc/nginx/sites-available/default) директива
listen должна слушать 80 (на всех адресах), а не 127.0.0.1:80. После правки нужен
именно restart, а не reload: смена адреса прослушивания требует пересоздания сокета
(reload не переключит 127.0.0.1:80 на 0.0.0.0:80).
Подсказка 3
Затем сними сетевую блокировку на node2: sudo nft list ruleset — найди правило tcp
dport 80 drop и убери его (sudo nft delete table inet lab, если блок в отдельной
таблице). Проверь, что закрыты оба слоя сразу: с node1 curl -I http://node2/ → 200.
sudo tcpdump -ni any tcp port 80 на node2 покажет, доходят ли SYN-пакеты.
Поднимет вашу личную эфемерную Linux-ВМ для задания — обычно пара секунд. После работы её можно остановить.