Mullvad VPN na Ubuntu Server

VPN je placená služba. Jestliže je pro váš případ žádoucí, níže je v 10 krocích postup instalace a aktivace Mullvad VPN na Ubuntu serveru. Vyjma instalace přímo na serveru, VPN může být nakonfigurována i na úrovni routeru.

Instalace a nastavení Mullvad VPN v 10 krocích

  1. Přejděte do výchozí složky účtu cd ~ a stáhněte poslední instalační soubor Mullvad VPN wget --content-disposition https://mullvad.net/download/app/deb/latest
  2. Příkazem ls si zobrazte soubory ve složce, najděte stažený MullvadVPN-XXXX.X_amd64.deb soubor a příkazem sudo apt install -y ./MullvadVPN-XXXX.X_amd64.deb jej nainstalujte.
  3. Příkazem mullvad version si ověřte, že Mullvad VPN máte nainstalováno
  4. Příkazem mullvad account login <číslo účtu> se přihlaste ke svému účtu, jehož číslo získáte po přihlášení / při registraci. Konečný příkaz může vypadat následujícím způsobem: mullvad account login 1234123412341234.
  5. Na stránce Mullvad Servers si můžete projít lokace (VPN servery), ke kterým je možné se připojit. Totožný seznam dostanete i příkazem mullvad relay list.
  6. Připojení k vybranému serveru definujete příkazem mullvad relay set location se mma, kdy "se" nahraďte zemí a "mma" městem. Dále je ještě možné na konec přiřadit celý název serveru z Mullvad seznamu mullvad relay list. V případě České Republiky a Prahy příkaz vypadá následovně: mullvad relay set location cz prg, jestliže výběr seznamu necháváme automaticky na klinetu, respektive se můžeme připojit i ke konkrétnímu serveru, viz mullvad relay set location cz prg cz-prg-wg-201.
  7. Příkazem mullvad lan set allow můžete povolit LAN přístup - tedy, i když je server skryt za VPN, stále se k němu lze připojit z lokální sítě.
  8. Samotné připojení k VPN se provede příkazem mullvad connect, případné odpojení příkazem mullvad disconnect
  9. Automatické připojování k VPN se nastaví příkazem mullvad auto-connect set on.
  10. Stav připojení lze zjistit příkazem mullvad status, log připojení příkazem journalctl -fu mullvad-daemon.

Upgrade Mullvad VPN klienta se provede zopakováním kroku 1 a 2. Veškeré Mullvad Cli příkazy najdete na stránce How to use Mullvad Cli.

Mullvad běží jako systémový servis. Jako takový, je možné jej ovládat systémovými příkazy:

  • sudo systemctl status mullvad-daemon - zobrazit stav služby
  • sudo systemctl stop mullvad-daemon - vypnout službu
  • sudo systemctl start mullvad-daemon - zapnout službu
  • sudo systemctl enable mullvad-daemon - povolit automatické spouštění služby při načtení OS
  • sudo systemctl disable mullvad-daemon - zakázat automatické spouštění služby při načtení OS

Mullvad účet se spravuje prostřednictvím příkazové nabídky mullvad account, pro informace kolem přihlášeného mullvad účtu (název zařízení a mullvad id) použijte příkaz mullvad account get.

Poznámka: Aktivní VPN může komplikovat připojování se na server. Pro připojování se z lokální sítě, ujistěte se, že máte na mullvad klientu povolen LAN přístup (mullvad lan set allow). Pro vzdálené připojení řešte VPN síť, ať už mezi klientem a serverem, nebo klientem a routerem, za nímž je server umístěn.

Více postupů a tipů pro Ubuntu Server naleznete v publikaci Instalace, zabezpečení a správa Ubuntu Serveru.

VPN Split Tunnel

Split Tunnel umožňuje směrovat část provozu aplikací nebo zařízení přes šifrovanou VPN, zatímco jiným aplikacím nebo zařízením nechat přímý přístup k internetu. To je zvláště užitečné při využívání služeb, které s použítím VPN nefungují tak, jak by bylo očekáváno.

VPN Split Tunel pro NTP service systemd-timesyncd

systemd-timesyncd daemon je zodpovědný za synchronizaci času serveru s přesným světovým časem dle nastavené časové zóny. Správná funkce tohoto daemona je zásadní při všech službách pracujících s časem. Tou je například i 2-faktorové ověřování (2FA) pro možnost se k serveru vůbec přihlásit.

  • Zjištění stavu timedatectl

    timedatectl status - zjištění stavu systemd-timesyncd daemonu

    Výstupem je informace o různých časech. Zásadními řádky jsou NTP service se stavem active (lze aktivovat příkazem timedatectl set-ntp true ) a poté řádek System clock synchronized s hodnotou yes. Ovšem, stav yes může být v případě používání VPN lichý - a to stav z doby před aktivací VPN. Problém je, že VPN může blokovat přístuk k NTP serverům a tím zamezit synchronizaci času.

  • Zjištění stavu systemd-timesyncd služby

    Stav služby zjistíme dotazem systemctl status systemd-timesyncd. Zde nás zajímá stav klíče Status. Stav "Initial synchronization to time server ..." je běžný, jedná se o funkční stav. Současně stav zahrnuje IP adresu NTP serveru, který je službou k synchronizaci času využíván. Problematický je stav Idle.

  • Test přístupu k IP NTP serveru

    IP NTP serveru lze zjistit rovněž pod příkazem timedatectl timesync-status, který ukazuje detailní časové hodnoty vztahující se k přesnosti času na serveru. IP NTP serveru, který je službou využíván, je pod hodnotu klíče Server. Možnost přístupu k danému serveru lze zjistit příkazem ping s adresou serveru, např. ping 8.8.8.8. Jestliže jsme schopni IP NTP serveru pingnout, vše je v pořádku.

  • Nastavení Spilt Tunelu VPN, pokud není možné NTP server pingnout

    • Split tunel je potřeba v případě NTP serveru řešit, jestliže:
      • timedatectl status ukazuje "System clock synchronized: no"
      • systemctl status systemd-timesyncd ukazuje stav "Status: Idle."
      • není možné NTP server pingnout

      Split Tunel lze aktivovat pro jakoukoli službu na serveru, a to na základě jejího pid. PID zjistíme příkazem systemctl status systemd-timesyncd, kdy pid číslo je pod klíčem Main PID.

    • pid služby lze vložit do mullvad VPN klienta příkazem:
      mullvad split-tunnel add <pid>
      mullvad split-tunnel pid add <pid>

      Od této chvíle by služba měla být prostřednictvím Split Tunnelu z VPN vyloučena. Opětovně zkontrolujte stav služby systemctl status systemd-timesyncd. Samotný ping bude i nadále neúspěšný, jelikož ten vykonáváte z vašeho účtu a ne účtu vyjmuté služby.

    • Další užitečné příkazy:
      • mullvad split-tunnel list - Zobraz všechny vyjmuté služby z VPN
      • mullvad split-tunnel delete <pid> - Obnov dříve vyloučený proces z VPN
      • mullvad split-tunnel clear - obnovit všechny dříve vyloučené procesy
      • mullvad split-tunnel pid list - Zobraz všechny vyjmuté služby z VPN
      • mullvad split-tunnel pid delete <pid> - Obnov dříve vyloučený proces z VPN
      • mullvad split-tunnel pid clear - obnovit všechny dříve vyloučené procesy
  • Další příkazy

Automatická kontrola synchroniazce času a nastavení Split Tunnelu pro Mullvad VPN v případě, kdy čas není synchronizovaný

Níže je postup vytvoření mechanismu, kdy po spuštění systému a následně v pravidelných intervalech probíhá kontrola stavu synchronizace systémového času. Není-li čas synchronizován, nastaví se splitting VPN tunelu pro službu spravující čas serveru.

Postup níže zjistí zjištění PID služby systemd-timesyncd a následně tuto službu vyjme z provozu jdoucího skrze VPN.

  1. Vytvořte soubor set_mullvad_split_tunnel.sh
    sudo nano /usr/local/bin/mullvad_split_tunnel_setup.sh
    Zkopírujte do souboru kód níže
    #!/bin/bash
    # check sync status of timedatectl
    sync_status=$(timedatectl status | grep -oP 'System clock synchronized: \K\w+')
    
    if [[ $sync_status == "no" ]]; then
        # system time is not synchronized - set split tunnel for systemd-timesyncd service
    	
    	# Get PID of systemd-timesyncd
    	SERVICE_PID=$(pgrep -f systemd-timesyncd)
    
    	if [[ ! -z "$SERVICE_PID" ]]; then
    		# Add PID to Mullvad split tunnel configuration
    		mullvad split-tunnel add $SERVICE_PID
    		echo "New VPN Split tunnel was set for PID $SERVICE_PID"
    	else
    		echo "Failed to get PID of systemd-timesyncd."
    	fi
    else
        echo "System time is synchronized, no need of setting VPN split tunnel"
    fi
    Nastavte souboru oprávnění ke spouštění
    sudo chmod +x /usr/local/bin/mullvad_split_tunnel_setup.sh
  2. Vytvořte systemd soubor služby servertime_sync_check.service, prostřednictvím které se bude spouštět script mullvad_split_tunnel_setup.sh
    sudo nano /etc/systemd/system/servertime_sync_check.service
    Zkopírujte do souboru kód níže
    [Unit]
    Description=Check time synchronization and setup Mullvad VPN split tunneling if needed
    
    [Service]
    Type=oneshot
    ExecStart=/usr/local/bin/mullvad_split_tunnel_setup.sh
    
    [Install]
    WantedBy=multi-user.target
  3. Vytvořte časovač služby servertime_sync_check
    sudo nano /etc/systemd/system/servertime_sync_check.timer
    Zkopírujte do souboru kód níže
    [Unit]
    Description=Timer to regularly check time synchronization
    
    [Timer]
    # Run it in 30 minutes interval
    OnCalendar=*:0/30
    Persistent=true
    
    [Install]
    WantedBy=timers.target
  4. Načtěte provedené změny do systému
    sudo systemctl daemon-reload
  5. Povolte automatické spuštění služeb při startu počítače
    sudo systemctl enable servertime_sync_check.service
    sudo systemctl enable servertime_sync_check.timer
  6. Spusťte servertime_sync_check.timer service
    sudo systemctl start servertime_sync_check.timer

    servertime_sync_check.service potřeba spouštět není. Je spouštěn prostřednictvím servertime_sync_check.timer. Jelikož se používá direktiva Persistent=true, jestliže některá z kontrol byla vynechána (napříkald počítač byl v dané době vypnutý), kontrola se vykoná současně i co nejdříve po spuštění počítače.

  7. Kontrolujte logy služby
    journalctl -u servertime_sync_check.service