Иногда проблема начинается с очень простого наблюдения: перестают открываться собственные сайты. Сначала кажется, что упал сервер. Потом проверяешь — сервер работает. Nginx работает, SSH работает, WireGuard работает для тех, кто уже подключён. DNS-записи на месте. Сертификаты действующие. Внутри самого сервера всё прекрасно.
А снаружи — тишина.
Именно такая история произошла у меня. На одном сервере находятся три моих сайта. В какой-то момент из обычного российского интернета они перестали быть доступны. Причём проблема оказалась гораздо глубже, чем просто «сайт не открывается».
Сам IP-адрес сервера перестал быть доступен вообще. Не открывался HTTP, не устанавливалось HTTPS-соединение, адрес не пинговался ни через домашний Wi-Fi, ни через мобильного оператора. Со стороны клиента это выглядело так, будто такого IP-адреса в интернете просто не существует.
Первое подозрение, естественно, падает на сам сервер. Проверяем Nginx — работает. Проверяем HTTPS непосредственно на сервере — работает. Сертификаты корректные. Проверяем DNS — домены указывают на правильный IP. Проверяем firewall — правила на месте. Проверяем WireGuard — сервер слушает порт, конфигурация рабочая.
Но самое интересное начинается с VPN.
VPN-клиент с этого подключения вообще не может нормально установить соединение с сервером. Рукопожатие не проходит. То есть нельзя даже сказать, что VPN подключился, но потом что-то блокирует сайты. Нет. Само соединение до сервера не устанавливается.
Получается довольно странная картина: сервер физически работает, но из определённой сети его IP-адрес словно вырезан из интернета.
При этом смена настроек сайта, Nginx или SSL ничего не меняет. Потому что запрос в принципе не доходит до сервера. Можно сколько угодно проверять конфигурацию веб-сервера, но если сетевой пакет не добрался до машины, Nginx о нём никогда не узнает.
Дальше начинается любимая часть любого системного администратора — попытка доказать очевидное с помощью двадцати инструментов.
Проверяем DNS. Проверяем маршрутизацию. Проверяем TCP. Смотрим tcpdump на сервере. Проверяем WireGuard. Проверяем firewall. Проверяем журналы. Смотрим, приходят ли пакеты вообще.
И постепенно становится понятно: проблема находится не на сервере.
Наиболее вероятный вывод после всех проверок — фильтрация сетевого трафика, из-за которой конкретный VPN-маршрут и сам IP-адрес сервера становятся недоступными из определённых сетей. Причём блокировка проявляется не как аккуратная ошибка браузера «доступ запрещён», а гораздо прозаичнее: соединение просто не происходит.
Сервер для пользователя в этот момент фактически исчезает.
И это особенно неприятно потому, что речь идёт не о попытке получить доступ к чему-то запрещённому. Это мой собственный сервер, мои собственные домены, мой собственный VPN и обычная техническая работа.
Законопослушному гражданину или айтишнику при этом приходится регулярно разбираться, почему вчера всё работало, а сегодня сервер внезапно стал невидимым. Менять маршруты, VPN, адреса, проверять DNS, ловить пакеты и искать причину там, где раньше её просто не существовало.
Самая ироничная часть заключается в том, что сервер в это время продолжает работать совершенно нормально. Он не упал. Его никто не выключал. Nginx не сломался. DNS не исчез. Просто с определённой стороны интернета до него больше не получается добраться.
И каждый раз приходится решать эту проблему заново.
Получается своеобразный новый вид системного администрирования: не только следить за тем, чтобы сервер был доступен, но и следить за тем, разрешено ли сегодня конкретному пользователю вообще увидеть, что этот сервер существует.
Для айтишника это ещё один вечер с tcpdump.
Для обычного человека — просто интернет, который почему-то решил, что твоего сервера больше нет.