Pagse-set up ng isang simpleng VPN gamit ang WireGuard at Raspberry Pi bilang isang server

Dahil WireGuard magiging bahagi ng paparating na Linux kernel 5.6, nagpasya akong makita kung paano pinakamahusay na isama ang VPN na ito sa aking LTE router/access point sa Raspberry Pi.

ΠžΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅

  • Raspberry Pi 3 na may LTE module at pampublikong IP address. Magkakaroon ng VPN server dito (simula dito sa text na ito ay tinatawag edgewalker)
  • Isang Android phone na dapat gumamit ng VPN para sa lahat ng komunikasyon
  • Linux laptop na dapat lang gumamit ng VPN sa loob ng network

Ang bawat device na kumokonekta sa VPN ay dapat na makakonekta sa lahat ng iba pang device. Halimbawa, ang isang telepono ay dapat na makakonekta sa isang web server sa isang laptop kung ang parehong mga aparato ay bahagi ng isang VPN network. Kung ang pag-setup ay naging medyo simple, maaari mong isipin ang tungkol sa pagkonekta sa desktop sa VPN (sa pamamagitan ng Ethernet).

Isinasaalang-alang na ang mga wired at wireless na koneksyon ay nagiging mas ligtas sa paglipas ng panahon (mga target na pag-atake, KRACK WPA2 cracking attack ΠΈ Pag-atake ng Dragonblood laban sa WPA3), Seryoso kong isasaalang-alang ang paggamit ng WireGuard para sa lahat ng aking device, anuman ang kanilang kapaligiran.

Pag-install ng software

Nagbibigay ang WireGuard precompiled na mga pakete para sa karamihan ng mga pamamahagi ng Linux, Windows at macOS. Ang mga Android at iOS app ay inihahatid sa pamamagitan ng mga direktoryo ng app.

Mayroon akong pinakabagong Fedora Linux 31, at tinatamad akong basahin ang manual bago i-install. Kakahanap lang ng packages wireguard-tools, na-install ang mga ito, at pagkatapos ay hindi malaman kung bakit walang gumagana. Ang karagdagang pagsisiyasat ay nagsiwalat na hindi ko naka-install ang package wireguard-dkms (na may isang driver ng network), ngunit wala ito sa imbakan ng aking pamamahagi.

Kung nabasa ko ang mga tagubilin, ginawa ko ang mga tamang hakbang:

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

Mayroon akong pamamahagi ng Raspbian Buster na naka-install sa aking Raspberry Pi, mayroon nang isang pakete doon wireguard, i-install ito:

$ sudo apt install wireguard

Sa aking Android phone na-install ko ang application WireGuardVPN mula sa opisyal na katalogo ng Google App Store.

Pag-install ng mga susi

Para sa pagpapatotoo ng peer, ang Wireguard ay gumagamit ng isang simpleng pribado/pampublikong key scheme upang patotohanan ang mga kapantay ng VPN. Madali kang makakagawa ng mga VPN key gamit ang sumusunod na command:

$ 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

Nagbibigay ito sa amin ng tatlong key pares (anim na file). Hindi kami magre-refer sa mga file sa mga config, ngunit kopyahin ang mga nilalaman dito: bawat key ay isang linya sa base64.

Paglikha ng configuration file para sa VPN server (Raspberry Pi)

Ang pagsasaayos ay medyo simple, nilikha ko ang sumusunod na file /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

Isang pares ng mga tala:

  • Sa naaangkop na mga lugar kailangan mong magpasok ng mga linya mula sa mga file na may mga susi
  • Ang aking VPN ay gumagamit ng panloob na banda 10.200.200.0/24
  • Para sa mga koponan PostUp/PostDown Mayroon akong panlabas na interface ng network na wwan0, maaaring mayroon kang iba (halimbawa, eth0)

Ang VPN network ay madaling itataas gamit ang sumusunod na command:

$ sudo wg-quick up wg0

Isang maliit na detalye: bilang DNS server na ginamit ko dnsmasq nakatali sa isang interface ng network br0, nagdagdag din ako ng mga device wg0 sa listahan ng mga pinapayagang device. Sa dnsmasq ito ay ginagawa sa pamamagitan ng pagdaragdag ng bagong network interface line sa configuration file /etc/dnsmasq.conf, halimbawa:

interface=br0
interface=wg0

Bukod pa rito, nagdagdag ako ng iptable na panuntunan upang payagan ang trapiko sa UDP listening port (51280):

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

Ngayon na gumagana na ang lahat, maaari naming i-set up ang awtomatikong paglulunsad ng VPN tunnel:

$ sudo systemctl enable [email protected]

Configuration ng kliyente sa laptop

Gumawa ng configuration file sa isang laptop /etc/wireguard/wg0.conf na may parehong mga setting:

[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

remarks:

  • Sa halip na edgewalker kailangan mong tukuyin ang pampublikong IP o VPN server host
  • Sa pamamagitan ng pagtatakda AllowedIPs sa 10.200.200.0/24, gumagamit lang kami ng VPN para ma-access ang panloob na network. Ang trapiko sa lahat ng iba pang mga IP address/server ay patuloy na dadaan sa "normal" na mga bukas na channel. Gagamitin din nito ang paunang na-configure na DNS server sa laptop.

Para sa pagsubok at awtomatikong paglulunsad, ginagamit namin ang parehong mga utos wg-quick ΠΈ systemd:

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

Pagse-set up ng kliyente sa isang Android phone

Para sa isang Android phone, gumawa kami ng halos kaparehong configuration file (tawagan natin ito 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

Hindi tulad ng configuration sa laptop, dapat gamitin ng telepono ang aming VPN server bilang DNS server (line DNS), at ipasa din ang lahat ng trapiko sa VPN tunnel (AllowedIPs = 0.0.0.0/0).

Sa halip na kopyahin ang file sa iyong mobile device, maaari mo itong i-convert sa isang QR code:

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

Ang QR code ay maglalabas sa console bilang ASCII. Maaari itong ma-scan mula sa Android VPN app at awtomatikong magse-set up ng VPN tunnel.

Pagbubuhos

Ang pag-set up ng WireGuard ay simpleng mahiwagang kumpara sa OpenVPN.

Pinagmulan: www.habr.com

Magdagdag ng komento