Nastavte si jednoduchou VPN s WireGuard a Raspberry Pi jako serverem

Od WireGuard stát se součástí budoucího jádra Linuxu 5.6 jsem se rozhodl zjistit, jak nejlépe integrovat tuto VPN s mojí LTE router/přístupový bod na Raspberry Pi.

Оборудование

  • Raspberry Pi 3 s LTE modulem a veřejnou IP. K dispozici bude VPN server (dále jen edgewalker)
  • Telefon Android, který musí používat VPN pro veškerou komunikaci
  • Linuxový notebook, který potřebuje používat VPN pouze uvnitř sítě

Každé zařízení, které se připojuje k síti VPN, se musí umět připojit ke každému jinému zařízení. Například telefon by měl být schopen se připojit k webovému serveru na notebooku, pokud jsou obě zařízení součástí sítě VPN. Pokud je nastavení dostatečně jednoduché, můžete přemýšlet o připojení k VPN a desktopu (přes Ethernet).

Vzhledem k tomu, že kabelová a bezdrátová připojení jsou postupem času méně bezpečná (cílené útoky, Hackerský útok KRACK WPA2 и Útok Dragonblood proti WPA3), vážně uvažuji o použití WireGuard pro všechna svá zařízení, bez ohledu na to, v jakém prostředí se nacházejí.

Instalace softwaru

WireGuard poskytuje předkompilované balíčky pro většinu distribucí Linuxu, Windows a macOS. Aplikace pro Android a iOS jsou dodávány prostřednictvím katalogů aplikací.

Mám nejnovější Fedora Linux 31 a byl jsem líný číst manuál před instalací. Právě jsem našel balíčky wireguard-tools, nainstaloval je a pak nemohl přijít na to, proč nic nefunguje. Další šetření odhalilo, že balíček nemám nainstalovaný wireguard-dkms (se síťovým ovladačem) a nebyl v úložišti mé distribuce.

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

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

Na svém Raspberry Pi mám nainstalovanou distribuci Raspbian Buster, je tam již balíček wireguard, nainstalujte to:

$ sudo apt install wireguard

Nainstaloval jsem si aplikaci do telefonu s Androidem WireGuardVPN z oficiálního katalogu Google App Store.

Instalace klíčů

K ověřování uzlů používá Wireguard jednoduché schéma soukromého/veřejného klíče k ověřování uzlů VPN. Klíče VPN můžete snadno vytvořit 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

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

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

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

[Interface]
Address = 10.200.200.1/24
ListenPort = 51820
PrivateKey = <copy private key from wg-server-private.key>
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 = <copy public key from wg-laptop-public.key>
AllowedIPs = 10.200.200.2/32

[Peer]
# mobile phone
PublicKey = <copy public key from wg-mobile-public.key>
AllowedIPs = 10.200.200.3/32

Pár poznámek:

  • Na příslušná místa je třeba vložit řádky ze souborů s klíči
  • Moje VPN používá vnitřní rozsah 10.200.200.0/24
  • Pro týmy PostUp/PostDown Mám externí síťové rozhraní wwan0, můžete mít jiné (například eth0)

Síť VPN se snadno vyvolá pomocí následujícího příkazu:

$ sudo wg-quick up wg0

Jeden malý detail: jako DNS server jsem použil dnsmasq připojený k síťovému rozhraní br0, přidal jsem i zařízení wg0 do seznamu povolených zařízení. V dnsmasq se to dělá 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

Také jsem přidal pravidlo iptable pro povolení provozu na naslouchajícím portu UDP (51280):

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

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

$ sudo systemctl enable [email protected]

Konfigurace klienta notebooku

Na notebooku vytvořte konfigurační soubor /etc/wireguard/wg0.conf se stejným nastavením:

[Interface]
Address = 10.200.200.2/24
PrivateKey = <copy private key from wg-laptop-private.key>

[Peer]
PublicKey = <copy public key from wg-server-public.key>
AllowedIPs = 10.200.200.0/24
Endpoint = edgewalker:51820

Poznámky:

  • Místo edgewalker musíte zadat veřejnou IP nebo hostitele serveru VPN
  • Nastavením AllowedIPs na 10.200.200.0/24VPN používáme pouze pro přístup do vnitřní sítě. Provoz na všechny ostatní IP adresy/servery bude nadále procházet „běžnými“ otevřenými kanály. Použije se také předkonfigurovaný server DNS na notebooku.

Pro testování a automatické spouštění používáme stejné příkazy wg-quick и systemd:

$ sudo wg-quick up wg0
$ sudo systemctl enable [email protected]

Nastavení klienta na telefonu Android

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

[Interface]
Address = 10.200.200.3/24
PrivateKey = <copy private key from wg-mobile-private.key>
DNS = 10.200.200.1
        
[Peer]
PublicKey = <copy public key from wg-server-public.key>
AllowedIPs = 0.0.0.0/0
Endpoint = edgewalker:51820

Na rozdíl od konfigurace notebooku by měl telefon používat náš server VPN jako svůj DNS server (řetězec DNS), jakož i předat veškerý provoz tunelem VPN (AllowedIPs = 0.0.0.0/0).

Místo kopírování souboru do mobilního zařízení jej můžete převést na QR kód:

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

QR kód bude odeslán do konzole jako ASCII. Lze jej naskenovat z aplikace Android VPN a automaticky nastavit VPN tunel.

Výkon

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

Zdroj: www.habr.com

Přidat komentář