Ú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:
- sudo apt update
- 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ů:
- wg genkey | sudo tee /etc/wireguard/private.key
- 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:
- 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
na10.255.255.255
(předpona 10/8)172.16.0.0
na172.31.255.255
(předpona 172,16/12)192.168.0.0
na192.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.1
až 10.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:
- 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.
- 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:
- 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:
- 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:
-
Ujistěte se, že máte k dispozici soukromý klíč z kroku 1 — Instalace WireGuard a vygenerování páru klíčů.
-
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
. -
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:
- 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:
- sudo nano /etc/sysctl.conf
Pokud používáte IPv4 s WireGuard, přidejte na konec souboru následující řádek:
/etc/sysctl.confnet.ipv4.ip_forward=1
Pokud používáte IPv6 s WireGuard, přidejte tento řádek na konec souboru:
/etc/sysctl.confnet.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:
- 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:
- 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.
- 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í nawg0
rozhraní VPN naeth0
síťové rozhraní na serveru. Funguje ve spojení snet.ipv4.ip_forward
anet.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í nawg0
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í nawg0
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:
- sudo ufw allow 51820/udp
- 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:
- sudo ufw disable
- 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í:
- 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
:
- 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:
- 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:
- 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:
- sudo apt update
- 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ů:
- wg genkey | sudo tee /etc/wireguard/private.key
- 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:
- 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:
- 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:
- 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:
- 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.
- 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 numbered200
when the IP matches the system’s public203.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 the200
table will use the203.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:
- 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:
- 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:
- sudo cat /etc/wireguard/public.key
OutputPeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=
Now log into the WireGuard server, and run the following command:
- 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:
- 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:
- 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:
- sudo apt install resolvconf
To start the tunnel, run the following on the WireGuard Peer:
- 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:
- 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
.
- 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:
- 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:
- 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:
- 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.