У меня два сервера openvpn, но оба идут в одну сеть. Сделано для отказоустойчивости. Если один из них не работает, трафик должен идти через другой. Клиенты получают маршруты с разной метрикой, поэтому эта задача решена.
Но когда один из серверов отключается, клиент пытается повторно подключиться к этому серверу и не выключает tun-интерфейс. Таким образом, трафик пытается пройти через проблемный сервер.
Я хочу, чтобы клиент отключал tun-интерфейс, когда сервер переходит в автономный режим, и автоматически включал его, когда сервер возвращается.
Это конфиг клиента:
tls-client
dev tun
proto udp
remote server1.ovpn.example.com 2100
topology subnet
pull
#resolv-retry infinite
#nobind
tls-auth keys/ta.key 1
ca keys/ca.crt
cert keys/client.crt
key keys/client.key
ns-cert-type server
cipher DES-EDE3-CBC
keepalive 10 120
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn-status.log
log-append /var/log/openvpn.log
verb 3
route 172.19.20.0 255.255.255.0 172.16.150.3
route-metric 3
Думаю, если я удалю keep-alive
Tun-интерфейс перейдет в автономный режим после тайм-аута ping, но вернется ли он обратно, когда сервер вернется?
После создания моего проекта VPN для Qubes, Я обнаружил, что OpenVPN имеет определенную тенденцию зависать при обрыве соединения.
Вот параметры, которые я добавил, чтобы OpenVPN реагировал на отключения:
ping 10
ping-restart 40
connect-retry 5 30
connect-retry-max 7
resolv-retry 15
Согласно документам, если у вас несколько remote
записи, то после сбоя соединения ping-restart приведет к использованию следующего пульта ДУ. Следовательно, указав несколько remote
строки для ваших серверов могут быть здесь полезны.
Избавьтесь от persist-tun
вариант. Без этой опции соединение VPN отключается, устройство tun закроется и будет удалено. Проблема, конечно же, в том, что удаление этой опции означает, что вам нужно запустить демон VPN как root, а не под ником. Потому что, поскольку у вас нет учетной записи, OpenVPN не сможет создать новое устройство tun при восстановлении соединения.