Реальный кейс: сервер перестал выходить в интернет после ручной настройки WireGuard и фаервола. Разбираем по шагам, как диагностировать и исправить.
Представьте: у вас есть VPS-сервер. На нём крутится сайт, работает SSH, всё замечательно. Вы решаете поднять VPN (WireGuard, чтобы смотреть YouTube или для доступа к сервисам) — настраиваете, проверяете, всё работает.
Но потом замечаете: формы на сайте перестали отправлять письма. Лезете в логи — PHPMailer не может подключиться к SMTP. Проверяете вручную:
nslookup pochta.logoakademia.ru → timed out
ping 8.8.8.8 → 100% packet loss
curl https://google.com → Resolving timed out
Сервер как будто в изоляции: пинг до шлюза есть, а дальше — тишина. Что сломалось?
Первое, что приходит в голову — DNS. Может, /etc/resolv.conf
слетел? Проверяем — нет, там 8.8.8.8
. Пробуем nslookup
— таймаут. Значит, не DNS-сервер виноват, а сетевой стек.
Проверяем маршруты:
ip route show
default via 91.199.160.254 dev ens3 onlink
Флаг onlink
— красный флаг. Он говорит ядру: «не проверяй, в одной ли ты подсети со шлюзом». В 99% случаев он не нужен — и может ломать маршрутизацию. Убираем:
sudo ip route replace default via 91.199.160.254 dev ens3
Проверяем снова — всё равно не работает. Значит, проблема глубже.
Смотрим настройки ufw
:
Default: deny (incoming), allow (outgoing), deny (routed)
Исходящий трафик разрешён! Значит, ufw не блокирует ping, DNS или SMTP. Проверяем правила ICMP — разрешены. Проверяем логи — тишина. Фаервол не виноват.
Но… при включении ufw — интернет появляется? Нет. Значит, дело не в фильтрации, а в NAT.
Лезем в /etc/ufw/before.rules
. Видим:
*nat
-A POSTROUTING -s 10.0.0.0/24 -o ens3 -j MASQUERADE
COMMIT
Это правило маскарадит (подменяет исходный IP) только для клиентов VPN (10.0.0.0/24
). А что насчёт самого сервера с IP 91.199.160.238
? Для него — никакого MASQUERADE!
Провайдер видит пакет с исходным IP сервера — но так как сервер не находится «за NAT провайдера» в его логике — пакеты отбрасываются. Особенно часто такое бывает у хостингов с CGNAT или строгим egress-filtering.
Решение — добавить универсальное правило:
-A POSTROUTING -o ens3 -j MASQUERADE
Теперь ВЕСЬ трафик, уходящий через ens3
, будет маскарадиться — и сервер, и VPN-клиенты.
После добавления правила — ufw enable
падает с ошибкой:
Bad argument '*nat'
В чём дело? Оказывается, секция *nat
была вставлена ВНУТРИ секции *filter
. А iptables так не умеет. Правильная структура:
*filter
... правила ...
COMMIT
*nat
... правила NAT ...
COMMIT
Исправляем структуру → перезапускаем ufw → и...
ping ya.ru → 64 bytes from ya.ru: icmp_seq=1 ttl=56 time=43ms
nslookup pochta.logoakademia.ru → Address: 185.9.145.131
🎉 Интернет заработал! Форма на сайте снова отправляет письма.
wg0.conf
:
Table = off
или настройте policy-based routing.
ping ШЛЮЗ
— есть ли связь с роутером?nslookup
— работает ли DNS?curl -I
— работает ли HTTP/HTTPS?ip route show
— правильный ли маршрут?iptables -t nat -L -n -v
— применяются ли правила NAT?Иногда проблема не в том, что что-то запрещено — а в том, что чего-то не хватает. В нашем случае — не хватало одной строчки MASQUERADE.
Внимание: Cтатьи здесь сгенерированны через нейросеть, не правил ошибки, да и не до этого пока. Блог только запустил. Просто чтобы вы знали и не запускали ядерный реактор по моим статьям ))
НО!
Каждый кейс я делал минимум один раз. Сервера стоят, клиенты довольны, дата-центры не горят.
Если у вас есть вопросы, или Нашли неточность? пишите в коментах —
вместе поправим и сделаем статью более качественной. Я лично объясню нюансы из практики.
Комментарии
Пока нет комментариев. Будьте первым!