Een eenvoudige VPN-verbinding instellen met WireGuard en een Raspberry Pi als server

Sinds WireGuard onderdeel zal worden toekomstige kern Linux 5.6 Ik besloot te kijken hoe ik deze VPN het beste kon integreren met mijn LTE-router/accesspoint op Raspberry Pi.

Uitrusting

  • Raspberry Pi 3 met LTE-module en openbaar IP-adres. Er zal hier een VPN-server aanwezig zijn (hierna in de tekst genoemd). randloper)
  • Telefoon aan Android, die voor alle communicatie een VPN moet gebruiken
  • notitieboekje Linux, die alleen VPN binnen het netwerk zou moeten gebruiken.

Elk apparaat dat verbinding maakt met de VPN moet verbinding kunnen maken met alle andere apparaten. Een telefoon moet bijvoorbeeld verbinding kunnen maken met een webserver op een laptop als beide apparaten deel uitmaken van een VPN-netwerk. Als de installatie vrij eenvoudig blijkt te zijn, kun je overwegen om de desktop op de VPN aan te sluiten (via Ethernet).

Gezien het feit dat bekabelde en draadloze verbindingen in de loop van de tijd steeds minder veilig worden (gerichte aanvallen, KRACK WPA2-kraakaanval и Dragonblood-aanval tegen WPA3), overweeg ik serieus om te gebruiken WireGuard voor al mijn apparaten, ongeacht in welke omgeving ze draaien.

Software installatie

WireGuard biedt voorgecompileerde pakketten voor de meeste verdelingen Linux, Windows и macOSAanvragen voor Android iOS en iOS worden via appwinkels aangeboden.

Ik heb de nieuwste versie van Fedora. Linux 31, en voordat ik het installeerde, was ik te lui om de handleiding te lezen. Ik heb de pakketten gewoon gevonden. wireguard-tools, installeerde ze en kon toen niet achterhalen waarom niets werkte. Nader onderzoek wees uit dat ik het pakket niet geïnstalleerd heb wireguard-dkms (met een netwerkstuurprogramma), maar het stond niet in de repository van mijn distributie.

Als ik de instructies had gelezen, had ik de juiste stappen ondernomen:

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

Ik heb de Raspbian Buster-distributie op mijn Raspberry Pi geïnstalleerd, daar staat al een pakket wireguard, installeer het:

$ sudo apt install wireguard

Aan de telefoon Android Ik heb de applicatie geïnstalleerd. WireGuard VPN uit de officiële Google App Store-catalogus.

Installatie van sleutels

Om knooppunten te authenticeren Wireguard Maakt gebruik van een eenvoudig schema met privé- en publieke sleutels om VPN-nodes te authenticeren. U kunt eenvoudig VPN-sleutels genereren met de volgende opdracht:

$ 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

Dit geeft ons drie sleutelparen (zes bestanden). We zullen niet verwijzen naar de bestanden in de configuraties, maar kopiëren de inhoud hier: elke sleutel is één regel in base64.

Een configuratiebestand maken voor de VPN-server (Raspberry Pi)

De configuratie is vrij eenvoudig, ik heb het volgende bestand gemaakt /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

Een paar opmerkingen:

  • Op de juiste plaatsen moet u met de toetsen regels uit de bestanden invoegen
  • Mijn VPN gebruikt de interne band 10.200.200.0/24
  • Voor teams PostUp/PostDown Ik heb de externe netwerkinterface wwan0, het kan zijn dat u een andere heeft (bijvoorbeeld eth0)

Het VPN-netwerk is eenvoudig op te zetten met het volgende commando:

$ sudo wg-quick up wg0

Een klein detail: als de DNS-server die ik gebruikte dnsmasq gekoppeld aan een netwerkinterface br0, Ik heb ook apparaten toegevoegd wg0 naar de lijst met toegestane apparaten. In dnsmasq wordt dit gedaan door een nieuwe netwerkinterfaceregel aan het configuratiebestand toe te voegen /etc/dnsmasq.conf, bijvoorbeeld:

interface=br0
interface=wg0

Daarnaast heb ik een iptable-regel toegevoegd om verkeer naar de UDP-luisterpoort (51280) toe te staan:

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

Nu alles werkt, kunnen we de automatische lancering van de VPN-tunnel instellen:

$ sudo systemctl enable wg-quick@wg0.service

Clientconfiguratie op laptop

Maak een configuratiebestand op een laptop /etc/wireguard/wg0.conf met dezelfde instellingen:

[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

Opmerkingen:

  • In plaats van edgewalker moet u de openbare IP- of VPN-serverhost opgeven
  • Door instelling AllowedIPs op 10.200.200.0/24, gebruiken we alleen VPN om toegang te krijgen tot het interne netwerk. Verkeer naar alle andere IP-adressen/servers blijft via “normale” open kanalen lopen. Het maakt ook gebruik van de vooraf geconfigureerde DNS-server op de laptop.

Voor testen en automatisch starten gebruiken we dezelfde commando's wg-quick и systemd:

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

De client instellen voor Android-telefoon

Voor telefoon Android We maken een vergelijkbaar configuratiebestand aan (laten we het noemen...). 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

In tegenstelling tot de configuratie op de laptop moet de telefoon onze VPN-server als DNS-server gebruiken (line DNS), en laat ook al het verkeer door de VPN-tunnel (AllowedIPs = 0.0.0.0/0).

In plaats van het bestand naar uw mobiele apparaat te kopiëren, kunt u het naar een QR-code converteren:

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

De QR-code wordt als ASCII-teken op de console weergegeven. Deze kan vanuit de app worden gescand. Android VPN en configureer de VPN-tunnel automatisch.

Uitgang

afstelling WireGuard gewoonweg magisch vergeleken met OpenVPN.

Bron: www.habr.com

Koop betrouwbare hosting voor sites met DDoS-bescherming, VPS VDS-servers 🔥 Koop betrouwbare websitehosting met DDoS-bescherming, VPS- en VDS-servers | ProHoster