Kontener Docker z openvpn - jak ponownie połączyć się z VPN, jeśli jest wyłączony?

1

Mam kontener dokerów na hoście LUbuntu 15.10.

Ten kontener używa klienta openvpn do łączenia się z kontem VPN.ac.

To jest skrypt, który uruchamiam, aby zrestartować połączenie VPN, jeśli nie działa:

#! /bin/bash
while true
do
   sleep 60s
   ps -ef | grep -v grep | grep "/usr/sbin/openvpn --cd /etc/openvpn --config      /etc/openvpn/default.conf --redirect-gateway"
   if [ $? -eq 1 ] ; then
       sv restart openvpn
   fi
done

Problem polega na tym, że jeśli połączenie internetowe zostanie zerwane, po powrocie do skryptu skrypt mówi, że nie jest w stanie rozwiązać nazwy hosta serwera VPN i muszę ponownie uruchomić kontener.

Czy jest na to lepszy sposób?

BTW powodem, dla którego szukam całej instrukcji, jest to, że mam inny kontener działający jako serwer VPN i jeśli po prostu wykonam polecenie „grep openvpn”, znajdzie on również inną usługę.

Dzięki.

PS - Proszę zobaczyć poniżej zawartość pliku konfiguracyjnego OpenVPN.

remote nl1.vpn.ac 50000 udp
dev tun
tls-client
persist-tun
persist-key
nobind
pull
redirect-gateway def1
route-delay 3
auth-user-pass pw
keepalive 10 60
verb 3
explicit-exit-notify 2
remote-cert-tls server
setenv CLIENT_CERT 0
key-direction 1
cipher AES-256-CBC
auth SHA512
<ca>
-----BEGIN CERTIFICATE-----

-----END CERTIFICATE-----
</ca>
<tls-auth>
#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----

-----END OpenVPN Static key V1-----
</tls-auth>

script-security 2
up update-resolv-conf.sh
down update-resolv-conf.sh
Alberto
źródło
Czy konfiguracja OpenVPN ma resolv-retrygdzieś dyrektywę?
Daniel B
Nie, nie ma. Zaktualizowałem oryginalny post z zawartością pliku OpenVPN.
Alberto,

Odpowiedzi:

1

Zwykle nie powinieneś robić tego w ten sposób: stwierdzenie podobne

    keepalive 10 60

w pliku konfiguracyjnym klienta automatycznie zrestartuje klienta po 60 sekundach bez pingowania. Pingi są wysyłane co 10 sekund, jeśli pominięto 6, klient uruchamia się ponownie.

Alternatywnie możesz uruchomić openvpn jako usługę; w dystrybucjach systemd, po prostu skopiuj plik /lib/systemd/system/[email protected]do nowego pliku, powiedz /lib/systemd/system/[email protected]i zmień linię

     ExecStart=/usr/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn --config /etc/openvpn/%i.conf

do

     ExecStart=/usr/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn --config /path/to/client-config-file/%i.conf

W końcu,

Problem polega na tym, że jeśli połączenie internetowe zostanie zerwane, po powrocie do skryptu skrypt mówi, że nie jest w stanie rozwiązać nazwy hosta serwera VPN i muszę ponownie uruchomić kontener.

oznacza, że ​​utraciłeś konfigurację DNS, jeśli nie cała łączność. Nie podałeś wystarczających szczegółów, aby to rozwiązać, możesz spróbować, sprawdzając, czy utraciłeś łączność, czy tylko DNS przez

      ping -c1 8.8.8.8

Jeśli otrzymasz odpowiedź, utraciłeś konfigurację DNS (najprawdopodobniej /etc/resolv.confplik jest pusty), jeśli nie utraciłeś całej łączności.

Edytuj :

Plik konfiguracyjny klienta wywołuje skrypt update-resolv-conf, aby korzystać z serwerów DNS dostawcy VPN. Czy to może być powód, dla którego nie można połączyć się ponownie? - Alberto

Na pewno. Masz dwie opcje: albo usuń persist-tun, jak poprawnie wskazał DanielB, albo użyj `persist-remote-ip. Zgodnie z instrukcją :

--persist-tun

Nie zamykaj i nie otwieraj ponownie urządzenia TUN / TAP ani nie uruchamiaj skryptów w górę / w dół na SIGUSR1 lub --ping-restart restartuje.

--persist-remote-ip

Zachowaj ostatnio uwierzytelniony zdalny adres IP i numer portu w SIGUSR1 lub --ping-restart uruchomi się ponownie.

MariusMatutiae
źródło
Plik konfiguracyjny klienta wywołuje skrypt update-resolv-conf, aby korzystać z serwerów DNS dostawcy VPN. Czy to może być powód, dla którego nie można połączyć się ponownie?
Alberto,
To jest. Usuń persist-tun.
Daniel B
@Alberto Pls zobacz moją edycję.
MariusMatutiae