Aangezien WireGuard de toekomstige kernel van Linux 5.6, heb ik besloten om te kijken hoe ik deze VPN het beste kan integreren met mijn .
Apparatuur
- Raspberry Pi 3 met een LTE-module en een openbaar IP-adres. Hier zal de VPN-server staan (hierna aangeduid als edgewalker)
- Een Android-telefoon die VPN voor alle communicatie moet gebruiken
- Een Linux-laptop die VPN alleen binnen het netwerk moet gebruiken
Elk apparaat dat met de VPN verbindt, moet in staat zijn om met alle andere apparaten te communiceren. De telefoon moet bijvoorbeeld toegang kunnen krijgen tot de webserver op de laptop, als beide apparaten deel uitmaken van het VPN-netwerk. Als de configuratie eenvoudig genoeg is, kan ik overwegen om ook een desktop aan de VPN te verbinden (via Ethernet).
Gegeven dat zowel bedrade als draadloze verbindingen in de loop van de tijd steeds minder veilig worden (, en ), overweeg ik serieus om WireGuard voor al mijn apparaten te gebruiken, ongeacht de omgeving waarin ze zich bevinden.
Software-installatie
WireGuard biedt voor de meeste Linux-distributies, Windows en macOS. Apps voor Android en iOS zijn beschikbaar via de appcatalogi.
Ik heb de laatste Fedora Linux 31 en voor de installatie had ik geen zin om de handleiding te lezen. Ik vond gewoon de pakketten wireguard-tools, installeerde deze, maar kon niet begrijpen waarom niets werkte. Verdere onderzoeken toonden aan dat ik het pakket wireguard-dkms (met de netwerkdriver) niet had geïnstalleerd, en dit was niet in de repository van mijn distributie.
Als ik de instructies had gelezen, had ik de juiste stappen genomen:
$ sudo dnf copr enable jdoss/wireguard
$ sudo dnf install wireguard-dkms wireguard-tools Op de Raspberry Pi heb ik de Raspbian Buster-distributie geïnstalleerd, daar is al een pakket aanwezig wireguard, we installeren het:
$ sudo apt install wireguardOp mijn Android-telefoon heb ik de applicatie uit de officiële Google App Store geïnstalleerd.
Sleutelinstallatie
Voor de authenticatie van knooppunten gebruikt WireGuard een eenvoudige privé/open sleutel-systeem voor de authenticatie van VPN-knooppunten. U kunt eenvoudig VPN-sleutels maken met het volgende commando:
$ 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.keyDit geeft ons drie paren sleutels (zes bestanden). Laten we niet naar bestanden in de configuraties verwijzen, maar de inhoud hier kopiëren: elke sleutel is één regel in base64.
Het creëren van een configuratiebestand 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 =
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]
# mobiele telefoon
PublicKey =
AllowedIPs = 10.200.200.3/32Een paar opmerkingen:
- De betreffende regels uit de bestanden met sleutels moeten op de juiste plaatsen worden ingevoerd
- Mijn VPN-netwerk gebruikt een intern bereik
10.200.200.0/24 - Voor de opdrachten
PostUp/PostDownik heb de externe netwerkinterface wwan0 opgegeven, u heeft mogelijk een andere (bijv. eth0)
Het VPN-netwerk kan eenvoudig worden gestart met de volgende opdracht:
$ sudo wg-quick up wg0 Één klein detail: als DNS-server heb ik gebruikt dnsmasq met de binding aan de netwerkinterface br0, ik heb ook apparaten wg0 aan de lijst met toegestane apparaten toegevoegd. In dnsmasq gebeurt dit door een nieuwe regel met de netwerkinterface in het configuratiebestand toe te voegen /etc/dnsmasq.conf, bijvoorbeeld:
interface=br0
interface=wg0Daarnaast heb ik een iptable-regel toegevoegd om verkeer naar de luisterende UDP-poort (51280) toe te staan:
$ sudo iptables -I INPUT -p udp --dport 51820 -j ACCEPTNu alles werkt, kunnen we de automatische opstart van de VPN-tunnel configureren:
$ sudo systemctl enable wg-quick@wg0.serviceClientconfiguratie op de laptop
Op de laptop maken we een configuratiebestand aan /etc/wireguard/wg0.conf met dezelfde instellingen:
[Interface]
Address = 10.200.200.2/24
PrivateKey =
[Peer]
PublicKey =
AllowedIPs = 10.200.200.0/24
Endpoint = edgewalker:51820Aantekeningen:
- In plaats van edgewalker moet het publieke IP of de host van de VPN-server worden opgegeven
- Door
AllowedIPsen een werkende opdracht krijgen.10.200.200.0/24, gebruiken we VPN alleen voor toegang tot het interne netwerk. Verkeer naar alle andere IP-adressen/serveren gaat nog steeds via "gewone" open kanalen. Ook wordt de vooraf ingestelde DNS-server op de laptop gebruikt.
Voor testen en automatische opstart gebruiken we dezelfde opdrachten wg-quick en systemd:
$ sudo wg-quick up wg0
$ sudo systemctl enable wg-quick@wg0.serviceInstelling van de client op de Android-telefoon
Voor de Android-telefoon maken we een zeer vergelijkbaar configuratiebestand aan (laten we het noemen 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 In tegenstelling tot de configuratie op de laptop, moet de telefoon onze VPN-server gebruiken als DNS-server (regel DNS), en ook al het verkeer door de VPN-tunnel leiden (AllowedIPs = 0.0.0.0/0).
In plaats van het bestand naar het mobiele apparaat te kopiëren, kan het in een QR-code worden omgezet:
$ sudo apt install qrencode
$ qrencode -t ansiutf8 < mobile.confDe QR-code verschijnt in de console als ASCII. Deze kan vanuit de Android VPN-app worden gescand en de VPN-tunnel automatisch configureren.
Uitslag
De configuratie van WireGuard is ronduit magisch in vergelijking met OpenVPN.
Bron: habr.com
