GNU/Linux >> Znalost Linux >  >> Panels >> OpenVPN

Jak nastavit WireGuard na Ubuntu 22.04

Úvod

WireGuard je odlehčená virtuální privátní síť (VPN), která podporuje připojení IPv4 a IPv6. VPN vám umožňuje procházet nedůvěryhodnými sítěmi, jako byste byli v privátní síti. Poskytuje vám svobodu bezpečného a bezpečného přístupu k internetu ze smartphonu nebo notebooku, když jste připojeni k nedůvěryhodné síti, jako je WiFi v hotelu nebo kavárně.

Šifrování WireGuard se opírá o veřejné a soukromé klíče pro partnery, aby mezi sebou vytvořili šifrovaný tunel. Každá verze WireGuard používá specifickou sadu kryptografických šifer, aby byla zajištěna jednoduchost, bezpečnost a kompatibilita s kolegy.

Pro srovnání, jiný software VPN, jako je OpenVPN a IPSec, používá Transport Layer Security (TLS) a certifikáty k ověřování a vytváření šifrovaných tunelů mezi systémy. Různé verze TLS zahrnují podporu pro stovky různých kryptografických sad a algoritmů, a přestože to umožňuje velkou flexibilitu pro podporu různých klientů, také to činí konfiguraci VPN, která používá TLS, časově náročnější, složitější a náchylnější k chybám.

V tomto tutoriálu nastavíte WireGuard na serveru Ubuntu 22.04 a poté nakonfigurujete další počítač, aby se k němu připojil jako peer pomocí připojení IPv4 i IPv6 (běžně označovaného jako duální zásobník spojení). Dozvíte se také, jak směrovat internetový provoz partnera přes server WireGuard v konfiguraci brány, kromě použití VPN pro šifrovaný peer-to-peer tunel.

Pro účely tohoto tutoriálu nakonfigurujeme jiný systém Ubuntu 22.04 jako peer (také označovaný jako klient) k serveru WireGuard. Následující výukové programy v této sérii vysvětlí, jak nainstalovat a spustit WireGuard na systémech a zařízeních Windows, macOS, Android a iOS.

Poznámka: Pokud plánujete nastavit WireGuard na DigitalOcean Droplet, mějte na paměti, že stejně jako mnoho poskytovatelů hostingu účtujeme poplatky za překročení šířky pásma. Z tohoto důvodu mějte prosím na paměti, kolik provozu váš server zpracovává. Více informací naleznete na této stránce.

Předpoklady

Abyste mohli postupovat podle tohoto návodu, budete potřebovat:

  • Jeden server Ubuntu 22.04 s uživatelem sudo bez oprávnění root a povolenou bránou firewall. Chcete-li to nastavit, můžete postupovat podle našeho výukového programu Počáteční nastavení serveru s Ubuntu 22.04. Budeme to označovat jako WireGuard Server v této příručce.
  • Budete potřebovat klientský počítač, který budete používat k připojení k serveru WireGuard. V tomto tutoriálu budeme tento stroj označovat jako WireGuard Peer . Pro účely tohoto výukového programu se doporučuje používat místní počítač jako WireGuard Peer, ale pokud chcete, můžete jako klienty použít vzdálené servery nebo mobilní telefony. Pokud používáte vzdálený systém, nezapomeňte se řídit všemi volitelnými sekcemi dále v tomto tutoriálu, jinak se můžete ze systému uzamknout.
  • Chcete-li používat WireGuard s protokolem IPv6, musíte se také ujistit, že váš server je nakonfigurován pro podporu tohoto typu provozu. Pokud byste chtěli povolit podporu IPv6 s WireGuard a používáte DigitalOcean Droplet, podívejte se na tuto stránku dokumentace Jak povolit IPv6 na kapičkách. Podporu IPv6 můžete přidat při vytváření kapky nebo později podle pokynů na této stránce.

Krok 1 — Instalace WireGuard a vygenerování páru klíčů

Prvním krokem v tomto tutoriálu je instalace WireGuard na váš server. Chcete-li začít, aktualizujte index balíčků serveru WireGuard a nainstalujte WireGuard pomocí následujících příkazů. Pokud sudo používáte poprvé, můžete být vyzváni k zadání hesla uživatele sudo v této relaci:

  1. sudo apt update
  2. sudo apt install wireguard

Nyní, když máte nainstalovaný WireGuard, je dalším krokem vygenerování soukromého a veřejného páru klíčů pro server. Budete používat vestavěný wg genkey a wg pubkey příkazy k vytvoření klíčů a poté přidejte soukromý klíč do konfiguračního souboru WireGuard.

Budete také muset změnit oprávnění na klíči, který jste právě vytvořili pomocí chmod příkaz, protože ve výchozím nastavení je soubor čitelný pro každého uživatele na vašem serveru.

Vytvořte soukromý klíč pro WireGuard a změňte jeho oprávnění pomocí následujících příkazů:

  1. wg genkey | sudo tee /etc/wireguard/private.key
  2. sudo chmod go= /etc/wireguard/private.key

sudo chmod go=... příkaz odebere veškerá oprávnění k souboru pro uživatele a skupiny jiné než uživatel root, aby bylo zajištěno, že k soukromému klíči bude mít přístup pouze on.

Měli byste obdržet jeden řádek base64 zakódovaný výstup, což je soukromý klíč. Kopie výstupu je také uložena v /etc/wireguard/private.key soubor pro budoucí použití tee část příkazu. Pečlivě si poznamenejte soukromý klíč, který je na výstupu, protože jej budete muset přidat do konfiguračního souboru WireGuard později v této části.

Dalším krokem je vytvoření odpovídajícího veřejného klíče, který je odvozen od soukromého klíče. K vytvoření souboru veřejného klíče použijte následující příkaz:

  1. sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key

Tento příkaz se skládá ze tří samostatných příkazů, které jsou spojeny dohromady pomocí | (potrubí) operátor:

  • sudo cat /etc/wireguard/private.key :tento příkaz načte soubor soukromého klíče a odešle jej do standardního výstupního proudu.
  • wg pubkey :druhý příkaz převezme výstup z prvního příkazu jako svůj standardní vstup a zpracuje jej za účelem vygenerování veřejného klíče.
  • sudo tee /etc/wireguard/public.key :poslední příkaz převezme výstup příkazu pro generování veřejného klíče a přesměruje jej do souboru s názvem /etc/wireguard/public.key .

Když spustíte příkaz, znovu obdržíte jeden řádek base64 zakódovaný výstup, což je veřejný klíč pro váš server WireGuard. Zkopírujte si jej někam pro referenci, protože budete muset distribuovat veřejný klíč všem kolegům, kteří se připojují k serveru.

Krok 2 – Výběr adres IPv4 a IPv6

V předchozí části jste nainstalovali WireGuard a vygenerovali pár klíčů, který bude použit k šifrování provozu do a ze serveru. V této části vytvoříte konfigurační soubor pro server a nastavíte WireGuard tak, aby se automaticky spouštěl při restartu serveru. Také definujete soukromé adresy IPv4 a IPv6, které se mají používat se serverem WireGuard a partnery.

Pokud plánujete používat adresy IPv4 i IPv6, postupujte podle obou těchto částí. Jinak postupujte podle pokynů v příslušné části pro potřeby vaší sítě VPN.

Krok 2(a) – Výběr rozsahu IPv4

Pokud používáte server WireGuard s protějšky IPv4, server potřebuje řadu privátních adres IPv4, které může použít pro klienty a pro rozhraní tunelu. Můžete si vybrat libovolný rozsah IP adres z následujících vyhrazených bloků adres (pokud se chcete dozvědět více o tom, jak jsou tyto bloky přidělovány, navštivte specifikaci RFC 1918):

  • 10.0.0.0 na 10.255.255.255 (předpona 10/8)
  • 172.16.0.0 na 172.31.255.255 (předpona 172,16/12)
  • 192.168.0.0 na 192.168.255.255 (předpona 192.168/16)

Pro účely tohoto tutoriálu budeme používat 10.8.0.0/24 jako blok IP adres z prvního rozsahu rezervovaných IP adres. Tento rozsah umožní až 255 různých peer připojení a obecně by neměl mít překrývající se nebo konfliktní adresy s jinými rozsahy soukromých IP adres. Pokud tento vzorový rozsah není kompatibilní s vašimi sítěmi, můžete si vybrat rozsah adres, který vyhovuje konfiguraci vaší sítě.

WireGuard Server použije jednu IP adresu z rozsahu pro svou privátní tunelovou IPv4 adresu. Použijeme 10.8.0.1/24 zde, ale jakákoli adresa v rozsahu 10.8.0.110.8.0.255 může být použito. Poznamenejte si IP adresu, kterou zvolíte, pokud používáte něco jiného než 10.8.0.1/24 . Tuto adresu IPv4 přidáte do konfiguračního souboru, který jste definovali v kroku 3 — Vytvoření konfigurace serveru WireGuard.

Krok 2(b) – Výběr rozsahu IPv6

Pokud používáte WireGuard s IPv6, budete muset vygenerovat jedinečnou místní předponu unicast adresy IPv6 na základě algoritmu v RFC 4193. Adresy, které používáte s WireGuard, budou spojeny s rozhraním virtuálního tunelu. Budete muset provést několik kroků k vygenerování náhodné, jedinečné předpony IPv6 v rámci vyhrazené fd00::/8 blok soukromých adres IPv6.

Podle RFC je doporučeným způsobem získání jedinečné předpony IPv6 zkombinovat denní dobu s jedinečnou identifikační hodnotou ze systému, jako je sériové číslo nebo ID zařízení. Tyto hodnoty jsou poté hašovány a zkráceny, což vede k sadě bitů, které lze použít jako jedinečnou adresu v rámci vyhrazené soukromé fd00::/8 blok IP adres.

Chcete-li začít generovat rozsah IPv6 pro váš server WireGuard, shromážděte 64bitové časové razítko pomocí date pomocí následujícího příkazu:

  1. date +%s%N

Obdržíte číslo podobné následujícímu, což je počet sekund (%s v date příkaz) a nanosekundy (%N ) od 1970-01-01 00:00:00 UTC dohromady:

Output1650301699497770167

Zaznamenejte si hodnotu někde pro použití později v této části. Dále zkopírujte machine-id hodnotu pro váš server z /var/lib/dbus/machine-id soubor. Tento identifikátor je jedinečný pro váš systém a neměl by se měnit, dokud server existuje.

  1. cat /var/lib/dbus/machine-id

Obdržíte výstup podobný následujícímu:

/var/lib/dbus/machine-id610cef4946ed46da8f71dba9d66c67fb

Nyní musíte zkombinovat časové razítko s machine-id a výslednou hodnotu hashujte pomocí algoritmu SHA-1. Příkaz bude používat následující formát:

printf <timestamp><machine-id> | sha1sum

Spusťte příkaz a nahraďte hodnoty vašeho časového razítka a identity počítače:

  1. printf 1650301699497770167610cef4946ed46da8f71dba9d66c67fb | sha1sum

Obdržíte hash hodnotu, jako je tato:

Output442adea1488d96388dae9ab816045b24609a6c18  -

Všimněte si, že výstup sha1sum příkaz je v šestnáctkové soustavě, takže výstup používá dva znaky k reprezentaci jednoho bajtu dat. Například 4f a 26 v příkladu jsou výstupem první dva bajty hašovaných dat.

Algoritmus v RFC vyžaduje pouze nejméně významných (koncových) 40 bitů nebo 5 bajtů hašovaného výstupu. Použijte cut příkaz k vytištění posledních 5 hexadecimálně zakódovaných bajtů z hash:

  1. printf 442adea1488d96388dae9ab816045b24609a6c18 | cut -c 31-

-c argument říká cut příkaz pro výběr pouze zadané sady znaků. 31- argument říká cut pro tisk všech znaků od pozice 31 do konce vstupního řádku.

Měli byste obdržet výstup jako následující:

Output24609a6c18

V tomto příkladu výstupu je sada bajtů:24 60 9a 6c 18 .

Nyní si můžete vytvořit svou jedinečnou předponu sítě IPv6 připojením 5 bajtů, které jste vygenerovali, pomocí fd prefix, oddělující každé 2 bajtů s : dvojtečka pro čitelnost. Protože každá podsíť ve vašem jedinečném prefixu může obsahovat celkem 18 446 744 073 709 551 616 možných adres IPv6, můžete podsíť omezit na standardní velikost /64 pro jednoduchost.

Použití bajtů dříve vygenerovaných pomocí /64 velikost podsítě, výsledná předpona bude následující:

Unique Local IPv6 Address Prefixfd24:609a:6c18::/64

Toto fd24:609a:6c18::/64 rozsah je to, co použijete k přiřazení jednotlivých IP adres k rozhraním tunelu WireGuard na serveru a na peerech. Chcete-li serveru přidělit IP adresu, přidejte 1 za poslední :: znaky. Výsledná adresa bude fd24:609a:6c18::1/64 . Protějšky mohou použít libovolnou IP v rozsahu, ale obvykle zvýšíte hodnotu o jednu pokaždé, když přidáte peer, např. fd24:609a:6c18::2/64 . Poznamenejte si IP a pokračujte v konfiguraci serveru WireGuard v další části tohoto návodu.

Krok 3 — Vytvoření konfigurace serveru WireGuard

Před vytvořením konfigurace serveru WireGuard budete potřebovat následující informace:

  1. Ujistěte se, že máte k dispozici soukromý klíč z kroku 1 — Instalace WireGuard a vygenerování páru klíčů.

  2. Pokud používáte WireGuard s IPv4, budete potřebovat IP adresu, kterou jste vybrali pro server v kroku 2(a) – Výběr rozsahu IPv4, což je v tomto příkladu 10.8.0.1/24 .

  3. Pokud používáte WireGuard s IPv6, budete potřebovat IP adresu serveru, kterou jste vygenerovali v kroku 2(b) – Výběr rozsahu IPv6. V tomto příkladu je IP adresa fd24:609a:6c18::1/64 .

Jakmile budete mít požadovaný soukromý klíč a IP adresu (adresy), vytvořte nový konfigurační soubor pomocí nano nebo váš preferovaný editor spuštěním následujícího příkazu:

  1. sudo nano /etc/wireguard/wg0.conf

Přidejte do souboru následující řádky a nahraďte svůj soukromý klíč místo zvýrazněného base64_encoded_private_key_goes_here hodnotu a IP adresu(y) v Address čára. Můžete také změnit ListenPort pokud chcete, aby byl WireGuard dostupný na jiném portu:

/etc/wireguard/wg0.conf[Interface]
PrivateKey = base64_encoded_private_key_goes_here
Address = 10.8.0.1/24, fd24:609a:6c18::1/64
ListenPort = 51820
SaveConfig = true

SaveConfig line zajišťuje, že když se rozhraní WireGuard vypne, všechny změny se uloží do konfiguračního souboru.

Uložte a zavřete /etc/wireguard/wg0.conf soubor. Pokud používáte nano , můžete tak učinit pomocí CTRL+X a poté Y a ENTER potvrdit. Nyní máte počáteční konfiguraci serveru, na které můžete stavět v závislosti na tom, jak plánujete používat server WireGuard VPN.

Krok 4 — Úprava konfigurace sítě serveru WireGuard

Pokud používáte WireGuard k připojení peer k serveru WireGuard za účelem přístupu ke službám pouze na serveru , pak tuto sekci nemusíte vyplňovat. Pokud byste chtěli směrovat internetový provoz vašeho WireGuard Peer přes server WireGuard, budete muset nakonfigurovat předávání IP podle této části výukového programu.

Chcete-li nakonfigurovat předávání, otevřete /etc/sysctl.conf soubor pomocí nano nebo váš preferovaný editor:

  1. sudo nano /etc/sysctl.conf

Pokud používáte IPv4 s WireGuard, přidejte na konec souboru následující řádek:

/etc/sysctl.conf
net.ipv4.ip_forward=1

Pokud používáte IPv6 s WireGuard, přidejte tento řádek na konec souboru:

/etc/sysctl.conf
net.ipv6.conf.all.forwarding=1

Pokud používáte IPv4 i IPv6, ujistěte se, že jste zahrnuli obě linky. Po dokončení uložte a zavřete soubor.

Chcete-li soubor přečíst a načíst nové hodnoty pro vaši aktuální relaci terminálu, spusťte:

  1. sudo sysctl -p
Outputnet.ipv6.conf.all.forwarding = 1
net.ipv4.ip_forward = 1

Nyní bude váš server WireGuard schopen předávat příchozí provoz z virtuálního ethernetového zařízení VPN ostatním na serveru a odtud do veřejného internetu. Použití této konfigurace vám umožní směrovat veškerý webový provoz z vašeho WireGuard Peer přes IP adresu vašeho serveru a veřejná IP adresa vašeho klienta bude efektivně skryta.

Než však bude možné provoz přes váš server správně směrovat, budete muset nakonfigurovat některá pravidla brány firewall. Tato pravidla zajistí, že provoz do az vašeho WireGuard Serveru a Peers bude probíhat správně.

Krok 5 — Konfigurace brány firewall serveru WireGuard

V této části upravíte konfiguraci serveru WireGuard a přidáte pravidla brány firewall, která zajistí správné směrování provozu do a ze serveru a klientů. Stejně jako v předchozí části tento krok přeskočte, pokud používáte WireGuard VPN pouze pro připojení mezi počítači pro přístup ke zdrojům, které jsou omezeny na vaši VPN.

Chcete-li povolit provoz WireGuard VPN přes bránu firewall serveru, budete muset povolit maskování, což je koncept iptables, který poskytuje dynamický překlad síťových adres (NAT) za běhu pro správné směrování klientských připojení.

Nejprve najděte veřejné síťové rozhraní vašeho serveru WireGuard pomocí ip route dílčí příkaz:

  1. ip route list default

Veřejné rozhraní je řetězec nalezený ve výstupu tohoto příkazu, který následuje za slovem „dev“. Tento výsledek například ukazuje rozhraní s názvem eth0 , který je zvýrazněn níže:

Outputdefault via 203.0.113.1 dev eth0 proto static

Poznamenejte si název svého zařízení, protože jej přidáte do iptables pravidla v dalším kroku.

Chcete-li přidat pravidla brány firewall na svůj server WireGuard, otevřete /etc/wireguard/wg0.conf soubor s nano nebo znovu váš preferovaný editor.

  1. sudo nano /etc/wireguard/wg0.conf

Ve spodní části souboru za SaveConfig = true řádek, vložte následující řádky:

/etc/wireguard/wg0.conf. . .
PostUp = ufw route allow in on wg0 out on eth0
PostUp = iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
PostUp = ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
PreDown = ufw route delete allow in on wg0 out on eth0
PreDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
PreDown = ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

PostUp linky poběží, když server WireGuard spustí virtuální tunel VPN. V tomto příkladu přidá tři ufw a iptables pravidla:

  • ufw route allow in on wg0 out on eth0 – Toto pravidlo umožní přesměrování provozu IPv4 a IPv6, který přichází na wg0 rozhraní VPN na eth0 síťové rozhraní na serveru. Funguje ve spojení s net.ipv4.ip_forward a net.ipv6.conf.all.forwarding hodnoty sysctl, které jste nakonfigurovali v předchozí části.
  • iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE – Toto pravidlo konfiguruje maskování a přepisuje provoz IPv4, který přichází na wg0 rozhraní VPN, aby to vypadalo, že pochází přímo z veřejné adresy IPv4 serveru WireGuard.
  • ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE – Toto pravidlo konfiguruje maskování a přepisuje provoz IPv6, který přichází na wg0 rozhraní VPN, aby to vypadalo, že pochází přímo z veřejné adresy IPv6 serveru WireGuard.

PreDown pravidla se spustí, když server WireGuard zastaví virtuální tunel VPN. Tato pravidla jsou opakem PostUp pravidla a funkce pro zrušení pravidel předávání a maskování pro rozhraní VPN, když je VPN zastavena.

V obou případech upravte konfiguraci tak, aby zahrnovala nebo vylučovala pravidla IPv4 a IPv6, která jsou vhodná pro vaši VPN. Pokud například právě používáte IPv4, můžete řádky vyloučit pomocí ip6tables příkazy.

A naopak, pokud používáte pouze IPv6, upravte konfiguraci tak, aby zahrnovala pouze ip6tables příkazy. ufw linky by měly existovat pro jakoukoli kombinaci sítí IPv4 a IPv6. Po dokončení uložte a zavřete soubor.

Poslední částí konfigurace brány firewall na vašem serveru WireGuard je povolení provozu do a ze samotného portu WireGuard UDP. Pokud jste nezměnili port v /etc/wireguard/wg0.conf serveru soubor, port, který otevřete, je 51820 . Pokud jste při úpravě konfigurace zvolili jiný port, nezapomeňte jej nahradit v následujícím příkazu UFW.

V případě, že jste zapomněli otevřít port SSH, když jste postupovali v základním tutoriálu, přidejte jej také sem:

  1. sudo ufw allow 51820/udp
  2. sudo ufw allow OpenSSH

Poznámka :Pokud používáte jiný firewall nebo jste si přizpůsobili konfiguraci UFW, možná budete muset přidat další pravidla brány firewall. Pokud se například rozhodnete tunelovat veškerý síťový provoz přes připojení VPN, budete muset zajistit, aby port 53 provoz je povolen pro požadavky DNS a porty jako 80 a 443 pro provoz HTTP a HTTPS. Pokud přes VPN používáte jiné protokoly, budete pro ně muset přidat pravidla.

Po přidání těchto pravidel deaktivujte a znovu povolte UFW, abyste jej restartovali a načetli změny ze všech souborů, které jste upravili:

  1. sudo ufw disable
  2. sudo ufw enable

Platnost pravidel můžete potvrdit spuštěním ufw status příkaz. Spusťte jej a měli byste obdržet výstup jako následující:

  1. sudo ufw status
OutputStatus: active

To                         Action      From
--                         ------      ----
51280/udp                  ALLOW       Anywhere                  
22/tcp                     ALLOW       Anywhere                  
51280/udp (v6)             ALLOW       Anywhere (v6)             
22/tcp (v6)                ALLOW       Anywhere (v6)

Váš WireGuard Server je nyní nakonfigurován tak, aby správně zpracovával provoz VPN, včetně předávání a maskování pro ostatní. Se zavedenými pravidly brány firewall můžete spustit samotnou službu WireGuard, která bude naslouchat spojením vrstevníků.

Krok 6 — Spuštění serveru WireGuard

WireGuard lze nakonfigurovat tak, aby běžel jako systemd pomocí vestavěného wg-quick skript. I když můžete ručně použít wg příkaz k vytvoření tunelu pokaždé, když chcete použít VPN, je to ruční proces, který se stává opakovaným a náchylným k chybám. Místo toho můžete použít systemctl pro správu tunelu pomocí wg-quick skript.

Pomocí systemd Služba WireGuard znamená, že můžete nakonfigurovat WireGuard tak, aby se spouštěl při spouštění, abyste se mohli kdykoli připojit k síti VPN, dokud server běží. Chcete-li to provést, povolte wg-quick službu pro wg0 tunel, který jste definovali přidáním do systemctl :

  1. sudo systemctl enable [email protected]

Všimněte si, že příkaz určuje název tunelu wg0 název zařízení jako součást názvu služby. Tento název se mapuje na /etc/wireguard/wg0.conf konfigurační soubor. Tento přístup k pojmenování znamená, že můžete pomocí svého serveru vytvořit tolik samostatných tunelů VPN, kolik chcete.

Můžete mít například tunelové zařízení a název prod a jeho konfigurační soubor by byl /etc/wireguard/prod.conf . Každá konfigurace tunelu může obsahovat různá nastavení IPv4, IPv6 a klientské brány firewall. Tímto způsobem můžete podporovat více různých peer připojení, z nichž každé má své vlastní jedinečné IP adresy a pravidla směrování.

Nyní spusťte službu:

  1. sudo systemctl start [email protected]

Pomocí následujícího příkazu znovu zkontrolujte, zda je služba WireGuard aktivní. Měli byste vidět active (running) ve výstupu:

  1. sudo systemctl status [email protected]
Output● [email protected] - WireGuard via wg-quick(8) for wg0
     Loaded: loaded (/lib/systemd/system/[email protected]; enabled; vendor preset: enabled)
     Active: active (exited) since Mon 2022-04-18 17:22:13 UTC; 2s ago
       Docs: man:wg-quick(8)
             man:wg(8)
             https://www.wireguard.com/
             https://www.wireguard.com/quickstart/
             https://git.zx2c4.com/wireguard-tools/about/src/man/wg-quick.8
             https://git.zx2c4.com/wireguard-tools/about/src/man/wg.8
    Process: 98834 ExecStart=/usr/bin/wg-quick up wg0 (code=exited, status=0/SUCCESS)
   Main PID: 98834 (code=exited, status=0/SUCCESS)
        CPU: 193ms

Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] wg setconf wg0 /dev/fd/63
Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ip -4 address add 10.8.0.1/24 dev wg0
Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ip -6 address add fd24:609a:6c18::1/64 dev wg0
Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ip link set mtu 1420 up dev wg0
Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ufw route allow in on wg0 out on ens3
Apr 18 17:22:13 thats-my-jam wg-quick[98890]: Rule added
Apr 18 17:22:13 thats-my-jam wg-quick[98890]: Rule added (v6)
Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] iptables -t nat -I POSTROUTING -o ens3 -j MASQUERADE
Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ip6tables -t nat -I POSTROUTING -o ens3 -j MASQUERADE
Apr 18 17:22:13 thats-my-jam systemd[1]: Finished WireGuard via wg-quick(8) for wg0.

Výstup zobrazuje ip příkazy, které se používají k vytvoření virtuálního wg0 zařízení a přiřaďte mu adresy IPv4 a IPv6, které jste přidali do konfiguračního souboru. Tato pravidla můžete použít k odstraňování problémů s tunelem nebo pomocí wg samotný příkaz, pokud byste se chtěli pokusit ručně nakonfigurovat rozhraní VPN.

Když je server nakonfigurován a spuštěn, dalším krokem je nakonfigurovat klientský počítač jako WireGuard Peer a připojit se k serveru WireGuard.

Krok 7 — Konfigurace WireGuard Peer

Konfigurace protějšku WireGuard je podobná nastavení serveru WireGuard. Jakmile nainstalujete klientský software, vygenerujete pár veřejného a soukromého klíče, rozhodnete se pro IP adresu nebo adresy pro peer, definujete konfigurační soubor pro peer a poté spustíte tunel pomocí wg-quick skript.

Vygenerováním páru klíčů a konfigurace pomocí následujících kroků můžete do své VPN přidat libovolný počet vrstevníků. Pokud do VPN přidáte více vrstevníků, nezapomeňte sledovat jejich soukromé IP adresy, abyste předešli kolizím.

Chcete-li nakonfigurovat WireGuard Peer, ujistěte se, že máte nainstalovaný balíček WireGuard pomocí následujícího apt příkazy. Na rovnocenném spuštění WireGuard:

  1. sudo apt update
  2. sudo apt install wireguard

Vytvoření páru klíčů WireGuard Peer

Dále budete muset vygenerovat pár klíčů na peeru pomocí stejných kroků, jaké jste použili na serveru. Z místního počítače nebo vzdáleného serveru, který bude sloužit jako peer, pokračujte a vytvořte soukromý klíč pro peer pomocí následujících příkazů:

  1. wg genkey | sudo tee /etc/wireguard/private.key
  2. sudo chmod go= /etc/wireguard/private.key

Opět obdržíte jeden řádek base64 zakódovaný výstup, což je soukromý klíč. Kopie výstupu je také uložena v /etc/wireguard/private.key . Pečlivě si poznamenejte soukromý klíč, který je na výstupu, protože jej budete muset přidat do konfiguračního souboru WireGuard později v této části.

Poté pomocí následujícího příkazu vytvořte soubor veřejného klíče:

  1. sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key

Opět obdržíte jeden řádek base64 zakódovaný výstup, což je veřejný klíč vašeho WireGuard Peer. Zkopírujte si jej někam pro referenci, protože budete muset distribuovat veřejný klíč na WireGuard Server, abyste mohli vytvořit šifrované spojení.

Vytvoření konfiguračního souboru WireGuard Peer

Nyní, když máte pár klíčů, můžete vytvořit konfigurační soubor pro peer, který obsahuje všechny informace, které potřebuje k navázání připojení k serveru WireGuard.

Pro konfigurační soubor budete potřebovat několik informací:

  • base64 zakódovaný soukromý klíč, který jste vygenerovali na rovnocenném serveru.

  • Rozsahy adres IPv4 a IPv6, které jste definovali na serveru WireGuard.

  • base64 zakódovaný veřejný klíč ze serveru WireGuard.

  • Veřejná IP adresa a číslo portu serveru WireGuard. Obvykle to bude adresa IPv4, ale pokud má váš server adresu IPv6 a váš klientský počítač má připojení IPv6 k internetu, můžete ji použít místo IPv4.

Se všemi těmito informacemi po ruce otevřete nový /etc/wireguard/wg0.conf soubor na počítači WireGuard Peer pomocí nano nebo váš preferovaný editor:

  1. sudo nano /etc/wireguard/wg0.conf

Přidejte do souboru následující řádky a podle potřeby nahraďte různá data do zvýrazněných částí:

/etc/wireguard/wg0.conf[Interface]
PrivateKey = base64_encoded_peer_private_key_goes_here
Address = 10.8.0.2/24
Address = fd24:609a:6c18::2/64

[Peer]
PublicKey = U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE=
AllowedIPs = 10.8.0.0/24, fd24:609a:6c18::/64
Endpoint = 203.0.113.1:51820

Notice how the first Address line uses an IPv4 address from the 10.8.0.0/24 subnet that you chose earlier. This IP address can be anything in the subnet as long as it is different from the server’s IP. Incrementing addresses by 1 each time you add a peer is generally the easiest way to allocate IPs.

Likewise, notice how the second Address line uses an IPv6 address from the subnet that you generated earlier, and increments the server’s address by one. Again, any IP in the range is valid if you decide to use a different address.

The other notable part of the file is the last AllowedIPs line. These two IPv4 and IPv6 ranges instruct the peer to only send traffic over the VPN if the destination system has an IP address in either range. Using the AllowedIPs directive, you can restrict the VPN on the peer to only connect to other peers and services on the VPN, or you can configure the setting to tunnel all traffic over the VPN and use the WireGuard Server as a gateway.

If you are only using IPv4, then omit the trailing fd24:609a:6c18::/64 range (including the , comma). Conversely, if you are only using IPv6, then only include the fd24:609a:6c18::/64 prefix and leave out the 10.8.0.0/24 IPv4 range.

In both cases, if you would like to send all your peer’s traffic over the VPN and use the WireGuard Server as a gateway for all traffic, then you can use 0.0.0.0/0 , which represents the entire IPv4 address space, and ::/0 for the entire IPv6 address space.

(Optional) Configuring a Peer to Route All Traffic Over the Tunnel

If you have opted to route all of the peer’s traffic over the tunnel using the 0.0.0.0/0 or ::/0 routes and the peer is a remote system, then you will need to complete the steps in this section. If your peer is a local system then it is best to skip this section.

For remote peers that you access via SSH or some other protocol using a public IP address, you will need to add some extra rules to the peer’s wg0.conf soubor. These rules will ensure that you can still connect to the system from outside of the tunnel when it is connected. Otherwise, when the tunnel is established, all traffic that would normally be handled on the public network interface will not be routed correctly to bypass the wg0 tunnel interface, leading to an inaccessible remote system.

First, you’ll need to determine the IP address that the system uses as its default gateway. Run the following ip route příkaz:

  1. ip route list table main default

You will receive output like the following:

Outputdefault via 203.0.113.1 dev eth0 proto static

Note the gateway’s highlighted IP address 203.0.113.1 for later use, and device eth0 . Your device name may be different. If so, substitute it in place of eth0 in the following commands.

Next find the public IP for the system by examining the device with the ip address show příkaz:

  1. ip -brief address show eth0

You will receive output like the following:

Outputeth0             UP             203.0.113.5/20 10.20.30.40/16 2604:a880:400:d1::3d3:6001/64 fe80::68d5:beff:feff:974c/64

In this example output, the highlighted 203.0.113.5 IP (without the trailing /20 ) is the public address that is assigned to the eth0 device that you’ll need to add to the WireGuard configuration.

Now open the WireGuard Peer’s /etc/wireguard/wg0.conf file with nano or your preferred editor.

  1. sudo nano /etc/wireguard/wg0.conf

Before the [Peer] line, add the following 4 lines:

PostUp = ip rule add table 200 from 203.0.113.5
PostUp = ip route add table 200 default via 203.0.113.1
PreDown = ip rule delete table 200 from 203.0.113.5
PreDown = ip route delete table 200 default via 203.0.113.1

[Peer]
. . .

These lines will create a custom routing rule, and add a custom route to ensure that public traffic to the system uses the default gateway.

  • PostUp = ip rule add table 200 from 203.0.113.5 - This command creates a rule that checks for any routing entries in the table numbered 200 when the IP matches the system’s public 203.0.113.5 address.
  • PostUp = ip route add table 200 default via 203.0.113.1 - This command ensures that any traffic being processed by the 200 table will use the 203.0.113.1 gateway for routing, instead of the WireGuard interface.

The PreDown lines remove the custom rule and route when the tunnel is shutdown.

Note:The table number 200 is arbitrary when constructing these rules. You can use a value between 2 and 252, or you can use a custom name by adding a label to the /etc/iproute2/rt_tables file and then referring to the name instead of the numeric value.

For more information about how routing tables work in Linux visit the Routing Tables Section of the Guide to IP Layer Network Administration with Linux.

If you are routing all the peer’s traffic over the VPN, ensure that you have configured the correct sysctl and iptables rules on the WireGuard Server in Step 4 — Adjusting the WireGuard Server’s Network Configuration and Step 5 — Configuring the WireGuard Server’s Firewall.

(Optional) Configuring the WireGuard Peer’s DNS Resolvers

If you are using the WireGuard Server as a VPN gateway for all your peer’s traffic, you will need to add a line to the [Interface] section that specifies DNS resolvers. If you do not add this setting, then your DNS requests may not be secured by the VPN, or they might be revealed to your Internet Service Provider or other third parties.

If you are only using WireGuard to access resources on the VPN network or in a peer-to-peer configuration then you can skip this section.

To add DNS resolvers to your peer’s configuration, first determine which DNS servers your WireGuard Server is using. Run the following command on the WireGuard Server , substituting in your ethernet device name in place of eth0 if it is different from this example:

  1. resolvectl dns eth0

You should receive output like the following:

OutputLink 2 (eth0): 67.207.67.2 67.207.67.3 2001:4860:4860::8844 2001:4860:4860::8888

The IP addresses that are output are the DNS resolvers that the server is using. You can choose to use any or all of them, or only IPv4 or IPv6 depending on your needs. Make a note of the resolvers that you will use.

Next you will need to add your chosen resolvers to the WireGuard Peer’s configuration file. Back on the WireGuard Peer , open /etc/wireguard/wg0.conf file using nano or your preferred editor:

  1. sudo nano /etc/wireguard/wg0.conf

Before the [Peer] line, add the following:

DNS = 67.207.67.2 2001:4860:4860::8844

[Peer]
. . .

Again, depending on your preference or requirements for IPv4 and IPv6, you can edit the list according to your needs.

Once you are connected to the VPN in the following step, you can check that you are sending DNS queries over the VPN by using a site like DNS leak test.com.

You can also check that your peer is using the configured resolvers with the resolvectl dns command like you ran on the server. You should receive output like the following, showing the DNS resolvers that you configured for the VPN tunnel:

OutputGlobal: 67.207.67.2 67.207.67.3
. . .

With all of these DNS resolver settings in place, you are now ready to add the peer’s public key to the server, and then start the WireGuard tunnel on the peer.

Step 8 — Adding the Peer’s Public Key to the WireGuard Server

Before connecting the peer to the server, it is important to add the peer’s public key to the WireGuard Server. This step ensures that you will be able to connect to and route traffic over the VPN. Without completing this step the WireGuard server will not allow the peer to send or receive any traffic over the tunnel.

Ensure that you have a copy of the base64 encoded public key for the WireGuard Peer by running:

  1. sudo cat /etc/wireguard/public.key
OutputPeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=

Now log into the WireGuard server, and run the following command:

  1. sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed-ips 10.8.0.2,fd24:609a:6c18::2

Note that the allowed-ips portion of the command takes a comma separated list of IPv4 and IPv6 addresses. You can specify individual IPs if you would like to restrict the IP address that a peer can assign itself, or a range like in the example if your peers can use any IP address in the VPN range. Also note that no two peers can have the same allowed-ips setting.

If you would like to update the allowed-ips for an existing peer, you can run the same command again, but change the IP addresses. Multiple IP addresses are supported. For example, to change the WireGuard Peer that you just added to add an IP like 10.8.0.100 to the existing 10.8.0.2 and fd24:609a:6c18::2 IPs, you would run the following:

  1. sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed-ips 10.8.0.2,10.8.0.100,fd24:609a:6c18::2

Once you have run the command to add the peer, check the status of the tunnel on the server using the wg příkaz:

  1. sudo wg
Outputinterface: wg0
 public key: U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE=
 private key: (hidden)
 listening port: 51820

peer: PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=
 allowed ips: 10.8.0.2/32, fd24:609a:6c18::/128

Notice how the peer line shows the WireGuard Peer’s public key, and the IP addresses, or ranges of addresses that it is allowed to use to assign itself an IP.

Now that you have defined the peer’s connection parameters on the server, the next step is to start the tunnel on the peer.

Step 9 — Connecting the WireGuard Peer to the Tunnel

Now that your server and peer are both configured to support your choice of IPv4, IPv6, packet forwarding, and DNS resolution, it is time to connect the peer to the VPN tunnel.

Since you may only want the VPN to be on for certain use cases, we’ll use the wg-quick command to establish the connection manually. If you would like to automate starting the tunnel like you did on the server, follow those steps in Step 6 — Starting the WireGuard Server section instead of using the wq-quick příkaz.

In case you are routing all traffic through the VPN and have set up DNS forwarding, you’ll need to install the resolvconf utility on the WireGuard Peer before you start the tunnel. Run the following command to set this up:

  1. sudo apt install resolvconf

To start the tunnel, run the following on the WireGuard Peer:

  1. sudo wg-quick up wg0

You will receive output like the following:

Output[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.8.0.2/24 dev wg0
[#] ip -6 address add fd24:609a:6c18::2/64 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] resolvconf -a tun.wg0 -m 0 -x

Notice the highlighted IPv4 and IPv6 addresses that you assigned to the peer.

If you set the AllowedIPs on the peer to 0.0.0.0/0 and ::/0 (or to use ranges other than the ones that you chose for the VPN), then your output will resemble the following:

Output[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.8.0.2/24 dev wg0
[#] ip -6 address add fd24:609a:6c18::2/64 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] resolvconf -a tun.wg0 -m 0 -x
[#] wg set wg0 fwmark 51820
[#] ip -6 route add ::/0 dev wg0 table 51820
[#] ip -6 rule add not fwmark 51820 table 51820
[#] ip -6 rule add table main suppress_prefixlength 0
[#] ip6tables-restore -n
[#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820
[#] ip -4 rule add not fwmark 51820 table 51820
[#] ip -4 rule add table main suppress_prefixlength 0
[#] sysctl -q net.ipv4.conf.all.src_valid_mark=1
[#] iptables-restore -n

In this example, notice the highlighted routes that the command added, which correspond to the AllowedIPs in the peer configuration.

You can check the status of the tunnel on the peer using the wg příkaz:

  1. sudo wg
Outputinterface: wg0
 public key: PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=
 private key: (hidden)
 listening port: 49338
 fwmark: 0xca6c

peer: U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE=
 endpoint: 203.0.113.1:51820
 allowed ips: 10.8.0.0/24, fd24:609a:6c18::/64
 latest handshake: 1 second ago
 transfer: 6.50 KiB received, 15.41 KiB sent

You can also check the status on the server again, and you will receive similar output.

Verify that your peer is using the VPN by using the ip route and ip -6 route příkazy. If you are using the VPN as a gateway for all your Internet traffic, check which interface will be used for traffic destined to CloudFlare’s 1.1.1.1 and 2606:4700:4700::1111 DNS resolvers.

If you are only using WireGuard to access resources on the VPN, substitute a valid IPv4 or IPv6 address like the gateway itself into these commands. For example 10.8.0.1 or fd24:609a:6c18::1 .

  1. ip route get 1.1.1.1
Output1.1.1.1 dev wg0 table 51820 src 10.8.0.2 uid 1000
   cache

Notice the wg0 device is used and the IPv4 address 10.8.0.2 that you assigned to the peer. Likewise, if you are using IPv6, run the following:

  1. ip -6 route get 2606:4700:4700::1111
Output2606:4700:4700::1111 from :: dev wg0 table 51820 src fd24:609a:6c18::2 metric 1024 pref medium

Again note the wg0 interface, and the IPv6 address fd24:609a:6c18::2 that you assigned to the peer.

If your peer has a browser installed, you can also visit ipleak.net and ipv6-test.com to confirm that your peer is routing its traffic over the VPN.

Once you are ready to disconnect from the VPN on the peer, use the wg-quick příkaz:

  1. sudo wg-quick down wg0

You will receive output like the following indicating that the VPN tunnel is shut down:

Output[#] ip link delete dev wg0
[#] resolvconf -d tun.wg0 -f

If you set the AllowedIPs on the peer to 0.0.0.0/0 and ::/0 (or to use ranges other than the ones that you chose for the VPN), then your output will resemble the following:

Output[#] ip rule delete table 200 from 203.0.113.5
[#] ip route delete table 200 default via 203.0.113.1
[#] ip -4 rule delete table 51820
[#] ip -4 rule delete table main suppress_prefixlength 0
[#] ip -6 rule delete table 51820
[#] ip -6 rule delete table main suppress_prefixlength 0
[#] ip link delete dev wg0
[#] resolvconf -d tun.wg0 -f
[#] iptables-restore -n
[#] ip6tables-restore -n

To reconnect to the VPN, run the wg-quick up wg0 command again on the peer. If you would like to completely remove a peer’s configuration from the WireGuard Server, you can run the following command, being sure to substitute the correct public key for the peer that you want to remove:

  1. sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= remove

Typically you will only need to remove a peer configuration if the peer no longer exists, or if its encryption keys are compromised or changed. Otherwise it is better to leave the configuration in place so that the peer can reconnect to the VPN without requiring that you add its key and allowed-ips each time.

Závěr

In this tutorial you installed the WireGuard package and tools on both the server and client Ubuntu 22.04 systems. You set up firewall rules for WireGuard, and configured kernel settings to allow packet forwarding using the sysctl command on the server. You learned how to generate private and public WireGuard encryption keys, and how to configure the server and peer (or peers) to connect to each other.

If your network uses IPv6, you also learned how to generate a unique local address range to use with peer connections. Finally, you learned how to limit which traffic should go over the VPN by restricting the network prefixes that the peer can use, as well as how to use the WireGuard Server as a VPN gateway to handle all Internet traffic for peers.

If you would like to learn more about WireGuard, including how to configure more advanced tunnels, or use WireGuard with containers, visit the official WireGuard documentation.


OpenVPN
  1. Jak nastavit WireGuard VPN na Ubuntu 20.04

  2. Jak nastavit Ubuntu/Debian LAMP Server

  3. Jak nastavit a nakonfigurovat certifikační úřad na Ubuntu 22.04

  1. Jak nastavit WireGuard VPN na Ubuntu (průvodce krok za krokem)

  2. Jak nastavit Nginx jako reverzní proxy na Ubuntu 20.04

  3. Jak nastavit TeamSpeak Server na Ubuntu 16.04

  1. Jak nastavit a nainstalovat Squid Proxy Server na Ubuntu 18.04

  2. Jak nastavit server a klienta NFS na Ubuntu 20.04

  3. Ubuntu – Jak nastavit statickou IP v Ubuntu?