Проблема
VPN-клиент получает уведомление «Сервер закрыл соединение» — принудительный разрыв туннеля со стороны сервера или промежуточного сетевого устройства.

Причины
1. Несоответствие параметров аутентификации (протокол, шифры, pre-shared key, сертификаты).
2. Истечение таймаута (session timeout, idle timeout) — настройки сервера.
3. Блокировка/сброс пакетов DPI-фильтром, файрволом провайдера или межсетевым экраном сервера (RST-пакеты).
4. Несовместимость версий протокола (OpenVPN 2.x ↔ 3.x, WireGuard разные реализации).
5. Изменение внешнего IP клиента/сервера (при динамическом NAT/PPP).
6. Достижение лимита одновременных подключений на сервере.
7. Активное вмешательство: атака сброса TCP (RST-пакет от MITM), перехват и модификация согласования.

Решение
1. Логи — первичный источник.
- OpenVPN: `journalctl -u openvpn@client --since "5 min ago"`
- WireGuard: `wg show` (статус handshake), `ip link` (MTU).
- IPSec: `ipsec status` или `/var/log/charon.log`.
2. Проверить настройки аутентификации:
- Совпадение протоколов (tcp/udp), портов, версий TLS (если применимо).
- Срок действия клиентского сертификата (`openssl x509 -in client.crt -text -noout | grep -A2 "Validity"`).
3. Таймауты:
- OpenVPN: `keepalive 10 60` в конфиге сервера и клиента.
- WireGuard: `PersistentKeepalive = 25` на клиенте.
4. Блокировка DPI/файрволом:
- Переключить протокол TCP ↔ UDP.
- Использовать obfuscation (OpenVPN — `scramble`, `--tls-crypt-v2`).
- Поменять порт (443, 80, 53).
- Проверить через tcpdump: `tcpdump -i eth0 port 1194 -vvv` (искать RST-пакеты).
5. Стабильность адреса:
- На клиенте: `persist-tun`, `persist-key` (OpenVPN).
- На сервере: `explicit-exit-notify` (OpenVPN) для быстрого уведомления о смене IP.
6. Лимит подключений:
- Сервер: `max-clients` (OpenVPN), `AllowedIPs` без перекрытия (WireGuard).
7. Атака сброса (RST):
- Включить `mssfix 1400` (OpenVPN) для фрагментации.
- Использовать VPN over TLS (например, stunnel) для маскировки протокола.
- Применить `--tls-crypt-v2` (OpenVPN) для защиты от активного прослушивания.

Пример проверки на сервере OpenVPN
bash
grep -E "AUTH_FAILED|PUSH_REPLY|peer-.*-disconnected" /var/log/openvpn-status.log

Если в логах нет записей — сброс идёт на уровне сети, проверять файрвол и DPI.