GNU/Linux >> Znalost Linux >  >> Ubuntu

Jak vytvořit VPN na Ubuntu 20.04 pomocí Wireguard

Wireguard je moderní a velmi snadno nastavitelná VPN dostupná na více operačních systémech. Aplikace je dostupná v oficiálních repozitářích Ubuntu 20.04, takže je také velmi snadná instalace. Na rozdíl od jiného softwaru, jako je OpenVPN, který je založen na použití certifikátů ssl, je Wireguard založen na použití párů klíčů. V tomto tutoriálu uvidíme, jak v několika jednoduchých krocích nakonfigurovat server VPN a klientského partnera na nejnovější stabilní verzi Ubuntu.

V tomto tutoriálu se naučíte:

  • Jak nainstalovat Wireguard na Ubuntu 20.04 Focal Fossa
  • Jak vytvořit pár veřejného a soukromého klíče
  • Jak nakonfigurovat server a klientského partnera
  • Jak přesměrovat veškerý příchozí provoz na VPN

Wireguard VPN na Ubuntu 20.04

Požadavky na software a použité konvence

Softwarové požadavky a konvence příkazového řádku systému Linux
Kategorie Požadavky, konvence nebo použitá verze softwaru
Systém Ubuntu 20.04 Focal Fossa
Software wireguard
Jiné Oprávnění uživatele root
Konvence # – vyžaduje, aby dané linuxové příkazy byly spouštěny s právy root buď přímo jako uživatel root, nebo pomocí sudo příkaz
$ – vyžaduje, aby dané linuxové příkazy byly spouštěny jako běžný neprivilegovaný uživatel

Instalace

Wireguard je oficiálně dostupný v repozitáři „universe“ Ubuntu 20.04, takže jej můžeme nainstalovat přes apt . Dostupná verze je v době psaní článku 1.0.20200319-1ubuntu1 :

$ sudo apt install wireguard

Systém nás požádá o potvrzení, že chceme nainstalovat program a jeho závislosti, a operaci dokončí během několika sekund.

Generování klíčů

Pro každý počítač, který chceme používat v naší VPN, musíme vygenerovat veřejný a soukromý klíč. Soukromý klíč by měl být na počítači uchováván v tajnosti, veřejný klíč se používá pro přístup k počítači od ostatních kolegů.

Pro vygenerování klíčů můžeme použít wg užitečnost. V konfiguračním souboru Wireguard budeme muset odkázat na soukromý klíč počítače, zatímco veřejný klíč bude použit na ostatních peerech. Všimněte si, že budeme odkazovat přímo na klíče, takže je teoreticky nemusíme ukládat do souborů. Uděláme to však stejně, jen pro pohodlí.

Pro vygenerování soukromého klíče pro náš server musíme použít genkey dílčí příkaz wg . Příkaz odešle vytvořený klíč do stdout; k zápisu klíče do souboru můžeme využít sílu přesměrování shellu:

$ wg genkey> server_private_key

Příkaz vygeneruje klíč a uloží jej do server_private_key soubor, ale zobrazí následující varování:

Upozornění:zápis do souboru přístupného světu. Zvažte nastavení umask na 077 a zkuste to znovu.

Je to proto, že s výchozím uživatelem umask (002 ) soubory jsou vytvářeny v režimu 664 , takže jsou světově čitelné, což se nedoporučuje. K vyřešení tohoto problému můžeme buď změnit umask použitou v aktuální relaci shellu před vytvořením souborů:

$ umask 077

Nebo změňte oprávnění souborů na 600 po vytvoření. Zde se podíváme na druhé řešení.

Jakmile bude náš soukromý klíč připraven, můžeme vygenerovat veřejný ten, který je na něm založen. Ke splnění úkolu používáme pubkey dílčí příkaz wg . Stejně jako předtím, než použijeme přesměrování shellu:nejprve předejte obsah server_private_key soubor do stdin příkazu a poté a k přesměrování vygenerovaného klíče na server_public_key soubor:

$ wg pubkey  server_public_key

Abychom si ušetřili psaní, můžeme vygenerovat oba klíče pouze jedním příkazem, který zahrnuje použití shellu | (potrubí) operátor a tee příkaz:

$ wg genkey | tee server_private_key | wg pubkey> server_public_key

Výstup příkazu na levé straně operátoru roury (| ) je předán standardnímu vstupu programu na jeho pravé straně. tee příkaz, místo toho nám umožňují přesměrovat výstup příkazu jak do souboru, tak na standardní výstup ( více o přesměrování shellu zde).

Jakmile jsou naše klíče připraveny, můžeme vytvořit konfigurační soubor serveru.

Konfigurační soubor serveru

Pro konfiguraci naší instalace Wireguard můžeme vytvořit konfigurační soubor s názvem wg0.conf s následujícím obsahem:

[Rozhraní]PrivateKey =Adresa =10.0.0.1/24ListenPort =51820

Všimněte si, že název souboru je libovolný, ale měl by vycházet z názvu, který použijeme pro naše rozhraní, wg0 v tomto případě. Na tento název se bude odkazovat při spuštění služby, jak uvidíme níže.

V našem příkladu. [interface] část konfiguračního souboru obsahuje následující pole:

  • Soukromý klíč
  • Adresa
  • ListenPort

Soukromý klíč hodnota pole není nic jiného než soukromý klíč serveru, který jsme vygenerovali dříve.

V části Adresa v poli jsme zadali adresu, která má být přiřazena rozhraní ve VPN spolu s maskou podsítě pomocí CIDR notový zápis. V tomto případě jsme použili 10.0.0.1/24 , takže adresa našeho „serveru“ Wireguard uvnitř VPN bude 10.0.0.1 , což je v dostupném rozsahu adres od 10.0.0.1 na 10.0.0.254 .

Nakonec v ListenPort jsme specifikovali, na jakém portu bude Wireguard naslouchat příchozímu provozu. Do našeho firewallu musí být přidáno také pravidlo povolující uvedený provoz. Uděláme to v další části.

Nyní můžeme změnit oprávnění souborů a přesunout je do /etc/wireguard adresář:

$ chmod 600 server_public_key server_private_key wg0.conf$ sudo mv server_private_key server_public_key wg0.conf /etc/wireguard

Nyní můžeme spustit wg-quick služba specifikující název rozhraní Wireguard za @ v názvu jednotky. Co je to za zápis? Je to vlastnost systemd:s ní můžeme generovat více souborů jednotek na základě „šablony“ a předat hodnotu, která bude nahrazena v šabloně, za @ symbol v názvu jednotky. Toto je obsah [email protected] jednotka:

[Unit]Description=WireGuard přes wg-quick(8) pro %IAfter=network-online.target nss-lookup.targetWants=network-online.target nss-lookup.targetDocumentation=man:wg-quick(8) Documentation=man:wg(8)Documentation=https://www.wireguard.com/Documentation=https://www.wireguard.com/quickstart/Documentation=https://git.zx2c4.com/wireguard-tools/ about/src/man/wg-quick.8Documentation=https://git.zx2c4.com/wireguard-tools/about/src/man/wg.8[Service]Type=oneshotRemainAfterExit=yesExecStart=/usr/bin/wg -rychle nahoru %iExecStop=/usr/bin/wg-rychle dolů %iEnvironment=WG_ENDPOINT_RESOLUTION_RETRIES=infinity[Install]WantedBy=multi-user.target

Hodnota, kterou uvedeme za @ v názvu jednotky při jejím spouštění nebo zastavování nahradí %i v ExecStart a ExecStop linky. V tomto případě použijeme wg0 :

$ sudo systemctl enable --now wg-quick@wg0

Pomocí výše uvedeného příkazu jsme službu spustili a také provedli tak, že se automaticky spustí při bootování. Pro ověření, že naše konfigurace byla použita, můžeme spustit wg příkaz. Vytvořený výstup by měl zobrazovat informace o wg0 rozhraní:

$ sudo wginterface:wg0 veřejný klíč:nNx3Zpcv9D2dtgHDsoYGBNr64zG5jTJ4Z4T2sE759V4=soukromý klíč:(skrytý) naslouchací port:51820

Nyní pokračujte a nakonfigurujte náš firewall a předávání paketů.

Nastavení brány firewall a sítě

V tomto tutoriálu budu předpokládat použití ufw . Jak jsme řekli dříve, musíme přidat pravidlo, které povolí příchozí provoz přes port, který jsme zadali v konfiguračním souboru, 51820 . Provedeme to spuštěním velmi jednoduchého příkazu:

$ sudo ufw allow 51820/udp

Musíme také povolit předávání paketů v našem systému. Abychom splnili úkol, odstraníme komentář z řádku 28 z /etc/sysctl.conf soubor, takže to vypadá takto:

# Odkomentováním dalšího řádku povolíte předávání paketů pro IPv4net.ipv4.ip_forward=1

Aby se změny projevily bez restartování systému, musíme spustit následující příkaz:

$ sudo sysctl -p

V dalším kroku nakonfigurujeme klienta.

Vygenerování klientského klíče

Pojďme nyní k systému, který chceme používat jako klient. Musíme na něj nainstalovat Wireguard; jakmile to uděláme, můžeme vygenerovat pár klíčů stejně jako na serveru:

$ wg genkey | tričko client_private_key | wg pubkey> client_public_key

Stejně jako na straně serveru vytváříme wg0.conf konfigurační soubor. Tentokrát s tímto obsahem:

[Interface]PrivateKey =Adresa =10.0.0.2/24[Peer]PublicKey =Koncový bod =
:51820AllowedIPs =0.0.0.0/0 

Význam polí obsažených v Interface jsme již viděli když jsme vygenerovali konfiguraci serveru. Zde jsme právě přizpůsobili hodnoty našemu klientovi (bude mít 10.0.0.2 adresu ve VPN).

V této konfiguraci jsme použili novou sekci [Peer] . V něm můžeme specifikovat informace vztahující se k peerovi, v tomto případě k tomu, který používáme jako „server“. Pole, která jsme použili, jsou:

  • PublicKey
  • Koncový bod
  • Povolené adresy IP

V PublicKey pole, uvedeme veřejné klíč partnera, tedy v tomto případě veřejný klíč, který jsme vygenerovali na serveru.

Koncový bod je veřejná IP adresa nebo název hostitele partnera následovaného dvojtečkou a číslem portu, na kterém peer naslouchá (v našem případě 51820 ).

Nakonec byla hodnota předána do AllowedIPs pole, je čárkami oddělený seznam IP adres a masky podsítě s notací CIDR. Povolen bude pouze provoz směrovaný na peer, který pochází ze zadaných adres. V tomto případě jsme použili 0.0.0.0/0 jako hodnota:funguje jako „catch-all“ hodnota, takže veškerý provoz bude odeslán na VPN peer (server).

Stejně jako na straně serveru jsme nastavili příslušná oprávnění a přesunuli klíče a konfigurační soubor do /etc/wireguard adresář:

$ chmod 600 client_public_key client_private_key wg0.conf$ sudo mv client_public_key client_private_key wg0.conf /etc/wireguard

S konfiguračním souborem na místě můžeme spustit službu:

$ sudo systemctl enable --now wg-quick@wg0

Nakonec [Peer] sekce týkající se našeho klienta, musí být přidán do konfiguračního souboru, který jsme dříve vytvořili na serveru . Přikládáme následující obsah:

[Peer]PublicKey =Povolené IP =10.0.0.2/32

V tomto okamžiku restartujeme službu:

$ sudo systemctl restart wg-quick@wg0

Informace o přidruženém peeru by nyní měly být uvedeny ve výstupu wg příkaz:

$ sudo wginterface:wg0 veřejný klíč:nNx3Zpcv9D2dtgHDsoYGBNr64zG5jTJ4Z4T2sE759V4=soukromý klíč:(skrytý) naslouchací port:51820peer:t5pKKg5/9fJKiU60lxC2000:00.0 

V tuto chvíli bychom měli být z „klientského“ systému schopni pingnout server na 10.0.0.1 adresa:

$ ping -c 3 10.0.0.1PING 10.0.0.1 (10.0.0.1) 56(84) bajtů dat.64 bajtů od 10.0.0.1:icmp_seq=1 ttl=64 čas=2,82 ms0.01 bajtů od 1.01. :icmp_seq=2 ttl=64 čas=38,0 ms64 bajtů od 10.0.0.1:icmp_seq=3 ttl=64 čas=3,02 ms--- 10.0.0.1 statistika ping ---3 odeslané pakety, 3 přijaté, 0 % ztráta paketů, čas 2003 msrtt min/avg/max/mdev =2,819/14,613/37,999/16,536 ms

Závěry

V tomto tutoriálu jsme viděli, jak vytvořit VPN pomocí Wireguard na nejnovější stabilní verzi Ubuntu:20.04 Focal Fossa. Software se opravdu snadno instaluje a konfiguruje, zvláště ve srovnání s jinými řešeními, jako je například OpenVpn.

Viděli jsme, jak vygenerovat veřejné a soukromé klíče použité pro naše nastavení a jak nakonfigurovat server i klienta tak, aby veškerý provoz byl přesměrován na VPN. Podle zadaných pokynů budete mít funkční nastavení. Pro více informací se prosím podívejte na stránku projektu.


Ubuntu
  1. Jak nastavit WireGuard VPN na Ubuntu 20.04

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

  3. Jak vytvořit pole RAID pomocí MDADM na Ubuntu

  1. Jak vytvořit zásobník LAMP založený na dockeru pomocí dockeru na Ubuntu 20.04

  2. Jak nastavit WireGuard VPN na Ubuntu 18.04

  3. Jak nastavit WireGuard VPN na Ubuntu 20.04

  1. Jak vytvořit webovou kancelář pomocí ONLYOFFICE Enterprise Edition na Ubuntu 14.04

  2. Jak nastavit VPN server pomocí Pritunl na Ubuntu 18.04 LTS

  3. Jak vytvořit VPC pomocí Pythonu Boto3 na Ubuntu