Opiszę tutaj sposób w jaki możemy przenieść klienta VPN (Cisco AnyConnect) zainstalowanego w systemie "Windows 10" na router NEWIFI-D2 z zainstalowanym firmware padavan wykorzystując aplikacje OpenConnect.
W moim przypadku autoryzacja do sieci VPN w aplikacji Cisco AnyConnect oprócz podania hasła potrzebuje również certyfikatu, który jest zapisany na naszym komputerze. Najpierw otwieramy plik konfiguracyjny AnyConnect:
C:\Users\%USERNAME%\AppData\Local\Cisco\Cisco AnyConnect Secure Mobility Client\preferences.xml
W pliku tym znacznik "ClientCertificateThumbprint" to identyfikator, który określa certyfikat używany do autoryzacji.
Otwieramy narzędzie do zarządzania certyfikatami - "certlm.msc" a następnie w folderze "Personal -> Certificates" szukamy certyfikatu, który posiada taki sam identyfikator w pozycji "Thumbprint"
Certyfikat ten musimy zapisać razem z kluczem prywatnym - tutaj pojawia się pierwszy problem ponieważ eksport klucza prywatnego został zablokowany.
Tutaj z pomocą przychodzi projekt o nazwie Jailbreak, który umożliwia eksport klucza prywatnego. Edytujemy plik o nazwie "jbcert64.bat" w następujący sposób:
@jailbreak64.exe %WINDIR%\system32\mmc.exe %WINDIR%\system32\certlm.msc -64
Teraz mamy możliwość uruchomienia skryptu oraz zapisania certyfikatu razem z kluczem prywatnym. Certyfikat zapisujemy w formacie "Personal Information Exchange – PKCS #12 (.PFX)" który następnie musimy przekonwertować do postaci zrozumiałej dla aplikacji OpenConnect przy pomocy polecenia:
openssl pkcs12 -in certyfikat.pfx -out certyfikat.cer -nodes
Aplikacja OpenConnect dostępna jest na firmware padavan dzięki repozytorium Entware. Po zainstalowaniu przy pomocy polecenia "opkg" uruchamiamy OpenConnect z następującymi parametrami:
/bin/echo "HASLO" | /opt/sbin/openconnect VPN_SERVER -i tun2 -c CERTYFIKAT.cer -u UZYTKOWNIK --passwd-on-stdin -l -b --servercert FINGERPRINT
gdzie odpowiednio zmieniamy poszczególne zmienne typu haslo, vpn_server, uzytkownik itp. Polecenie te możemy dodać do skryptów "autostart" w systemie. Musimy jeszcze zezwolić na dostęp naszej lokalnej sieci LAN do zdalnego VPN'a przy pomocy iptables:
/bin/iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o tun2 -j MASQUERADE
To wszystko - od teraz mamy dostęp do zdalnej sieci VPN bez potrzeby logowania się za każdym razem w aplikacji Cisco AnyConnect ;-)
Zauważyłem, że serwer VPN po określonym czasie (timeout) będzie próbował nas rozłączyć. Możemy się przed tym uchronić przy pomocy prostego skryptu, który będzie działał w tle na routerze.
while [ 1 ] ; do curl WEBSERVER ; sleep 60 ; done
Skrypt ten uruchomiony w pętli wykonuje zapytanie do webserwera w zdalnej sieci a następnie czeka minute na kolejne wywołanie. Tym sposobem nasze połączenie jest ciągle utrzymywane i nie występuje "timeout" po stronie serwera.
Nie ukrywam, że moją główna motywacją do całej tej konfiguracji był dostęp do sieci w której działa kontroler domeny - Active Directory. Jak wiadomo usługa AD opiera się w całości o DNS a więc musimy mieć możliwość odpytywania z naszej lokalnej sieci LAN zdalnego serwera DNS gdzie uruchomiona jest usługa AD.
Musimy skonfigurować nasz lokalny DNS w tym przypadku Dnsmasq aby przekazywał zapytania "domenowe" do określonego serwera przy pomocy takiego wpisu w pliku "dnsmasq.servers"
server=/domena/adres_serwera_DNS_VPN
w ten sposób określone zapytania do usługi kontrolera domeny będą prawidłowo rozwiązywane. Możemy teraz sprawdzić czy nasz komputer prawidłowo komunikuje się z kontrolerem domeny.
nltest /sc_query:domena
Flags: 30 HAS_IP HAS_TIMESERV
Trusted DC Name \domena
Trusted DC Connection Status Status = 0 0x0 NERR_Success
The command completed successfully