linux-labs

← Практика

Сайт недоступен с соседней машины

Сетевое (2 ВМ) · Сложное · 40 мин · 220 баллов

Сайт недоступен с соседней машины

Две машины: node1 (клиент) и node2 (веб-сервер на nginx). Сайт на node2 должен открываться с node1 по http://node2/, но не открывается. Проблема многослойная — здесь не одна причина: что-то с привязкой сервиса, что-то с файрволом. Нужно методично продиагностировать всю цепочку и устранить все помехи.

Задача

Сделай так, чтобы:

  1. с node1 сайт открывался: curl http://node2/ возвращает 200;
  2. nginx на node2 слушал доступный извне адрес (а не только 127.0.0.1);
  3. файрвол на node2 пропускал входящие на порт 80;
  4. сайт на 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 node2nc -vz node2 80curl -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-ВМ для задания — обычно пара секунд. После работы её можно остановить.