Назад | Перейти на главную страницу

Ошибка nslookup клиента OpenVPN после отключения

В настоящее время я пытаюсь направить свой трафик через шлюз под управлением Debian Linux, который пересылает весь входящий трафик через VPN-соединение (Клиент -> Шлюз с клиентом OpenVPN -> Сервер VPN -> Интернет). Это работает нормально, за исключением того, что время от времени теряется соединение и невозможно восстановить соединение самостоятельно из-за тайм-аутов nslookup. Это происходит каждые несколько дней, в основном ночью (насколько мне известно, некоторые серверы завершают сеанс, если трафик не отправлялся долгое время).

Когда это произойдет, я попытаюсь подключиться через SSH, но после ввода имени пользователя сервер ждет около 20 секунд, прежде чем запросить пароль, что также странно. Обычно он запрашивает пароль сразу.

При просмотре системного журнала появляется следующее:

Jul 20 00:50:11 gateway ovpn-cyberghost[23893]: RESOLVE: Cannot resolve host address: 5-nl.cg-dialup.net: Temporary failure in name resolution

ifconfig и route показывают, что интерфейс VPN все еще работает, но, похоже, завис.

root@gateway:~# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.129.57.169   128.0.0.0       UG    0      0        0 tun0
0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 eth2
10.129.57.169   0.0.0.0         255.255.255.255 UH    0      0        0 tun0
93.190.138.125  192.168.0.1     255.255.255.255 UGH   0      0        0 eth2
128.0.0.0       10.129.57.169   128.0.0.0       UG    0      0        0 tun0
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth2
217.23.12.229   192.168.0.1     255.255.255.255 UGH   0      0        0 eth2

Вот моя конфигурация OpenVPN:

client
remote 5-nl.cg-dialup.net 443
dev tun 
proto udp
auth-user-pass /etc/openvpn/auth.txt
route-nopull

resolv-retry infinite 
redirect-gateway def1
persist-key
persist-tun
writepid /run/openvpn.pid
nobind
cipher AES-256-CBC
auth MD5
ping 5
ping-restart 20
persist-local-ip
ping-timer-rem
explicit-exit-notify 2
script-security 2
remote-cert-tls server
route-delay 5
tun-mtu 1500 
fragment 1300
mssfix 1300
verb 1
comp-lzo

Вот мой файл resolv.conf:

 root@gateway:~# cat /etc/resolv.conf
 nameserver 85.214.20.141
 nameserver 213.73.91.35

Изменение серверов имен, например, на 127.0.0.1 (bind9 правильно установлен как преобразователь DNS), ничего не решило, но я не ожидаю найти здесь проблему.

Я предполагаю, что причина в следующем: сервер закрыл сеанс из-за неактивности клиента, поэтому клиент пытается повторно подключиться. В процессе переподключения OpenVPN разрешает имя хоста VPN-сервера, но использует сломанный интерфейс VPN, который установлен в качестве шлюза по умолчанию, а не правильный шлюз по умолчанию. Никакой очистки (удаление интерфейса tun0 и удаление маршрутов) не производится, что, возможно, решит проблему. Также я думаю, что может быть проблема с двумя шлюзами по умолчанию, но я не уверен.

После завершения процесса OpenVPN вручную и его повторного запуска все работает нормально, как будто ничего не случилось.

Я не знаю, как указать OpenVPN использовать интерфейс eth2 для первоначального nslookup или заставить OpenVPN очистить маршруты. Я забыл добавить что-то в конфигурационный файл (я не нашел никаких полезных команд на странице руководства)?

https://askubuntu.com/questions/28733/how-do-i-run-a-script-after-openvpn-has-connected- успешно рассказывает, как вы можете выполнять пользовательские скрипты после того, как соединение будет увеличиваться или уменьшаться.

Итак, вы должны создать сценарий отключения, который очистит маршруты и заставит OpenVPN выполнить это при разрыве соединения.