iPhone z automatycznym VPN

A gdyby tak chcieć mieć zawsze pod ręką w iPhone dostęp do zasobów sieci domowej (bądź firmowej)? Rozwiązaniem jest skorzystanie z wirtualnej sieci prywatnej (VPN), której utworzenie system iOS wspiera, jednak jej dobra konfiguracja nie jest wcale taka prosta.

Virtual Private Network (VPN), wirtualna sieć prywatna – tunel, przez który płynie ruch w ramach sieci prywatnej pomiędzy klientami końcowymi za pośrednictwem publicznej sieci (takiej jak Internet) w taki sposób, że węzły tej sieci są przezroczyste dla przesyłanych w ten sposób pakietów. Można opcjonalnie kompresować lub szyfrować przesyłane dane w celu zapewnienia lepszej jakości lub większego poziomu bezpieczeństwa. [1]

Co nam to daje?

  1. Mamy ostęp do zasobów sieci lokalnej z każdego miejsca na świecie.
  2. Korzystamy po prostu z adresów jak w sieci lokalnej.
  3. Bezpieczne, szyfrowane połączenie z zasobami domu (firmie).
  4. Bezpieczne połączenie ze światem, ponieważ cały ruch sieciowy może zostać przekierowany przez to połączenie.
  5. Ominięcie ewentualnych blokad regionalnych, będąc na przykład za granicą, ponieważ ruch do sieci może wychodzić przez sieć domową (firmową).

Co jest potrzebne?

  1. Serwer VPN wspierający L2TP. W tym artykule pokazuję przykład serwera uruchomionego na NAS Synology.
  2. W przypadku zmiennego adresu sieci domowej potrzebny jest DDNS, czyli przypisanie nazwy domenowej do zmiennego IP.
  3. Odpowiednia konfiguracja telefonu, pozwalająca na łączenie się z

Serwer VPN

Serwer VPN może w zasadzie działać na dowolnym komputerze w domu. Jednak skoro ma to być narzędzie pracujące bez przerwy, dobrze mieć albo maszynę serwerową (co w firmie będzie bardzo prawdopodobne), albo chociażby serwer NAS. W naszym przypadku możemy skorzystać z urządzenia Synology. Np. takiego…

W panelu administracyjnym Synology należy zainstalować i uruchomić pakiet “VPN Server” dostępny wśród standardowych pakietów.

W konfiguracji należy zaznaczyć opcję “Włącz serwr L2TP/IPSec VPN”, podać dane uwierzytelniania IKE (klucz wstępny (preshared key)) oraz określić uprawnienia dla użytkowników serwera Synology (czyli kto może się logować). Tego klucza i tych danych logowania trzeba użyć później w ustawieniach telefonu.

Serwer VPN będzie nasłuchiwał na konkretnych portach, więc porty takie muszą zostać udostępnione na zewnątrz sieci (odpowiednia konfiguracja routera trochę dalej).

Konfiguracja DDNS.

Jeżeli Wasza sieć domowa nie ma stałego IP, nie obędzie się bez konfiguracji sieci DDNS, czyli dynamicznego przypisywania nazw. Chodzi generalnie o to, żeby do Waszego aktualnego IP była przypisana zawsze ta sama nazwa domenowa, a w razie jego zmiany to przypisanie powinno być zaktualizowane. Można to zrobić chociażby z wykorzystaniem serwisu noip.com. W DSM Synology jest jednak narzędzie EZ-Internet, które pozwoli skonfigurować DDNS korzystając z adresów typu login.synology.me, którego konfiguracja jest oparta na prostym i przejrzystym kreatorze.

Przekierowanie portów

Pozostaje przekierować jeszcze tylko porty z routera do serwera VPN. Są to porty 1701, 500 i 4500. Połączenia przychodzące na adres routera powinny być przekierowane na NAS, na którym działa serwer VPN.

Konfiguracja ręczna połączenia na telefonie.

W GUI iOS dostępna jest możliwość ręcznej konfiguracji VPN. Wchodzimy do “Ustawienia > Ogólne > VPN“. Tam możemy dodać nową konfigurację VPN, która pozwala na podanie kilku podstawowych danych.

 

Konfiguracja ręczna ma niestety kilka minusów:

  1. Konieczność ręcznego ustanawiania połączenia.
  2. W przypadku błędu połączenia, przejścia do innej sieci, zerwania połączenia przez VPN, połączenie nie jest wznawiane automatycznie.
  3. Trzeba pamiętać, żeby przebywając w sieci lokalnej nie korzystać z VPN.

Konfiguracja automatycznego łączenia i wykluczania sieci.

Chcielibyśmy, aby nasze połączenie VPN miało kilka cech:

  1. Zawsze przy podłączeniu telefonu do obcej sieci lub będąc podłączonym do LTE, połączenie było aktywne.
  2. W razie problemów, połączenie powinno zostać wznowione.
  3. W sieci domowej (tej do której się chcemy podłączyć) powinniśmy wyłączać połączenie VPN.

Tego niestety nie można zrobić przez GUI telefonu. Aby dodać takie ustawienia, trzeba wygenrować plik *.mobilconfig i go wysłać do telefonu.

Format pliku do standardowy konfiguracyjny XML, których setki możemy znaleźć na przykład w macOS oraz podczas tworzenia aplikacji iOS.

Musi zawierać klucze określające nazwę, identyfiaktory, typ VPN, login (AuthName), hasło (AuthPassword), klucz (SharedSecret), adres serwera (CommRemoteAddress), listę sieci wykluczających (SSIDMatch) oraz zasady zachowania w nich oraz zasady zachowania w sieciach obcych i w LTE (Action).

vpn.mobileconfig

Plik konfiguracyjny będzie więc wyglądał tak:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PayloadContent</key>
<array> <dict>
<key>UserDefinedName</key>
<string>Autoconnect VPN</string>
<key>PayloadDisplayName</key>
<string>Autoconnect VPN</string>
<key>PayloadIdentifier</key>
<string>identyfikator.swiftacademy.pl</string>
<key>PayloadUUID</key>
<string>31BADB02-8937-A212-BC1F-5D43A5E64296</string>
<key>VPNType</key>
<string>L2TP</string>
<key>IPSec</key>
<dict>
<key>AuthenticationMethod</key>
<string>SharedSecret</string>
<key>LocalIdentifierType</key>
<string>KeyID</string>
<key>SharedSecret</key>
<string>DO-ZMIANY-SECRET-PRESHAREDKEY</string>
</dict>
<key>PPP</key>
<dict>
<key>AuthName</key>
<string>DO-ZMIANY-UZYTKOWNIK-NAS</string>
<key>AuthPassword</key>
<string>DO-ZMIANY-HASŁO-NAS</string>
<key>CommRemoteAddress</key>
<string>DO-ZMIANY-DDNS-NAS</string>
</dict>
<key>OnDemandEnabled</key>
<integer>1</integer>
<key>OnDemandRules</key>
<array>
<dict>
<key>InterfaceTypeMatch</key>
<string>WiFi</string>
<key>SSIDMatch</key>
<array>
<string>SIEC-WYLACZONA-1</string>
<string>SIEC-WYLACZONA-2</string>
</array>
<key>Action</key>
<string>Disconnect</string>
</dict>
<dict>
<!-- VPN Default state -->
<key>Action</key>
<string>Connect</string>
</dict>
</array>
<key>OverridePrimary</key>
<true/>
<key>IPv4</key>
<dict>
<key>OverridePrimary</key>
<integer>1</integer>
</dict>
<key>PayloadType</key>
<string>com.apple.vpn.managed</string>
<key>PayloadVersion</key>
<integer>1</integer>
</dict>
</array>
<key>PayloadDisplayName</key>
<string>VPN Configurations</string>
<key>PayloadIdentifier</key>
<string>36EC7040-6A73-C412-6F10-FA9231DE065F</string>
<key>PayloadRemovalDisallowed</key>
<false/>
<key>PayloadType</key>
<string>Configuration</string>
<key>PayloadUUID</key>
<string>7E3392C1-92EC-31DA-C9E3-C9213747D135</string>
<key>PayloadVersion</key>
<integer>1</integer>
</dict>
</plist>

Taki plik należy przesłać (np. przez AirDrop) do telefonu. I gotowe. Plik taki możemy wygenerować ręcznie, bądź skorzystać z generatora udostępnionego przez Krisa Linquista na github [2].

Plik można bardziej rozbudowywać, dodając inne warunki dla większej ilości sieci (co jest pokazane na przykład tutaj [3]).

Źródła

[1] https://pl.wikipedia.org/wiki/Virtual_Private_Network

[2] https://github.com/klinquist/iOS-VPN-Autoconnect

[3] https://thomas-witt.com/auto-connect-your-ios-device-to-a-vpn-when-joining-an-unknown-wifi-d1df8100c4ba

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *