Nastavujeme jednoduchý VPN s WireGuard a Raspberry Pi jako server

Jelikož se WireGuard stane součástí budoucího jádra Linux 5.6, rozhodl jsem se podívat, jak nejlépe integrovat tuto VPN s mým LTE routerem/přístupovým bodem na Raspberry Pi.

Hardware

  • Raspberry Pi 3 s LTE modulem a veřejnou IP adresou. Zde bude VPN server (dále v textu nazýván edgewalker)
  • Telefon s Androidem, který by měl používat VPN pro veškerou komunikaci
  • Notebook s Linuxem, který by měl používat VPN pouze v rámci sítě

Každé zařízení, které se připojuje k VPN, by mělo mít možnost připojit se ke všem ostatním zařízením. Například telefon by se měl moci připojit k webovému serveru na notebooku, pokud jsou obě zařízení součástí sítě VPN. Pokud bude nastavení dostatečně jednoduché, možná zvážím připojení k VPN i desktopu (přes Ethernet).

Vzhledem k tomu, že drátová a bezdrátová připojení se s časem stávají stále méně bezpečnými (cílené útoky, útok KRACK na prolomení WPA2 a útok Dragonblood proti WPA3), vážně zvažuji možnost použití WireGuard pro všechna má zařízení, bez ohledu na to, v jakém prostředí pracují.

Instalace softwaru

WireGuard poskytuje předkompilované balíčky pro většinu distribucí Linuxu, Windows a macOS. Aplikace pro Android a iOS jsou k dispozici prostřednictvím aplikačních obchodů.

Mám poslední Fedora Linux 31, a před instalací jsem si lenivě nepřečetl příručku. Jen jsem našel balíčky wireguard-tools, nainstaloval je a pak jsem nechápal, proč nic nefunguje. Další výzkum ukázal, že nemám nainstalovaný balíček wireguard-dkms (s síťovým ovladačem), a ten nebyl v repozitáři mé distribuce.

Kdybych si přečetl pokyny, udělal bych správné kroky:

$ sudo dnf copr enable jdoss/wireguard
$ sudo dnf install wireguard-dkms wireguard-tools

Na Raspberry Pi mám nainstalovanou distribuci Raspbian Buster, tam už je balíček wireguard, nainstalujeme ho:

$ sudo apt install wireguard

Na telefonu Android jsem nainstaloval aplikaci WireGuard VPN z oficiálního katalogu Google App Store.

Instalace klíčů

Pro autentizaci uzlů WireGuard používá jednoduchý systém privátního/publicního klíče pro autentizaci uzlů VPN. Můžete snadno vytvořit VPN klíče pomocí následujícího příkazu:

$ wg genkey | tee wg-laptop-private.key | wg pubkey > wg-laptop-public.key
$ wg genkey | tee wg-server-private.key | wg pubkey > wg-server-public.key
$ wg genkey | tee wg-mobile-private.key | wg pubkey > wg-mobile-public.key

Tohoto získáváme tři páry klíčů (šest souborů). Nebudeme odkazovat na soubory v konfiguracích, ale zkopírujeme sem obsah: každý klíč je jedna řádka v base64.

Vytvoření konfiguračního souboru pro VPN server (Raspberry Pi)

Konfigurace je docela jednoduchá, vytvořil jsem následující soubor /etc/wireguard/wg0.conf:

[Interface]
Address = 10.200.200.1/24
ListenPort = 51820
PrivateKey = 
PostUp   = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o wwan0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o wwan0 -j MASQUERADE

[Peer]
# laptop
PublicKey = 
AllowedIPs = 10.200.200.2/32

[Peer]
# mobilní telefon
PublicKey = 
AllowedIPs = 10.200.200.3/32

Několik poznámek:

  • Do příslušných míst je nutné vložit řádky ze souborů s klíči.
  • Moje VPN používá interní rozsah. 10.200.200.0/24
  • Pro příkazy PostUp/PostDown mám uvedený externí síťový rozhraní wwan0, u vás to může být jiné (např. eth0).

VPN síť se snadno spouští následujícím příkazem:

$ sudo wg-quick up wg0

Jedna maličkost: jako DNS server jsem použil dnsmasq s vázáním na síťové rozhraní br0, také jsem přidal zařízení wg0 na seznam povolených zařízení. V dnsmasq se to provádí přidáním nového řádku se síťovým rozhraním do konfiguračního souboru. /etc/dnsmasq.conf, například:

interface=br0
interface=wg0

Kromě toho jsem přidal pravidlo iptable, aby povolil provoz na naslouchajícím UDP portu (51280):

$ sudo iptables -I INPUT -p udp --dport 51820 -j ACCEPT

Nyní, když vše funguje, můžeme nastavit automatické spuštění VPN tunelu:

$ sudo systemctl enable wg-quick@wg0.service

Konfigurace klienta na notebooku

Na notebooku vytvoříme konfigurační soubor /etc/wireguard/wg0.conf s těmito stejnými nastaveními:

[Interface]
Address = 10.200.200.2/24
PrivateKey = 

[Peer]
PublicKey = 
AllowedIPs = 10.200.200.0/24
Endpoint = edgewalker:51820

Poznámky:

  • Místo edgewalker je nutné uvést veřejnou IP nebo hostitele VPN serveru.
  • Pokud jsme nainstalovali AllowedIPs na 10.200.200.0/24, používáme VPN pouze pro přístup k interní síti. Provoz na všechny ostatní IP adresy/serverů poputuje stále přes "běžné" otevřené kanály. Také bude použit přednastavený DNS server na notebooku.

Pro testování a automatické spuštění použijeme stejné příkazy. wg-quick a systemd:

$ sudo wg-quick up wg0
$ sudo systemctl enable wg-quick@wg0.service

Nastavení klienta na Android telefonu

Pro telefon Android vytvoříme velmi podobný konfigurační soubor (pojmenujme ho mobile.conf):

[Interface]
Address = 10.200.200.3/24
PrivateKey = 
DNS = 10.200.200.1
        
[Peer]
PublicKey = 
AllowedIPs = 0.0.0.0/0
Endpoint = edgewalker:51820

Na rozdíl od konfigurace na notebooku by měl telefon používat náš VPN server jako DNS server (řádek . Vytvořte A-záznam blog a určete pro něj nějakou fiktivní IP (to je oficiální), a také přesměrovávat veškerý provoz přes VPN tunel (AllowedIPs = 0.0.0.0/0).

Místo kopírování souboru na mobilní zařízení jej lze převést na QR kód:

$ sudo apt install qrencode
$ qrencode -t ansiutf8 < mobile.conf

QR kód se zobrazí v konzoli jako ASCII. Lze jej naskenovat z aplikace Android VPN a automaticky nastavit VPN tunel.

Výstup

Nastavení WireGuard je ve srovnání s OpenVPN prostě kouzelné.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster