Vienkārša VPN iestatīšana ar WireGuard un Raspberry Pi kā serveri

Tā kā WireGuard kļūs par daļu no gaidāmā Linux kodola 5.6, es nolēmu noskaidrot, kā vislabāk integrēt šo VPN ar savu LTE maršrutētājs/piekļuves punkts Raspberry Pi.

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

  • Raspberry Pi 3 ar LTE moduli un publisko IP adresi. Šeit būs VPN serveris (turpmāk tekstā tas tiek saukts edgewalker)
  • Android tālrunis, kuram visiem sakariem jāizmanto VPN
  • Linux klēpjdators, kuram tīklā jāizmanto tikai VPN

Katrai ierīcei, kas izveido savienojumu ar VPN, jāspēj izveidot savienojumu ar visām pārējām ierīcēm. Piemēram, tālrunim ir jāspēj izveidot savienojumu ar klēpjdatora tīmekļa serveri, ja abas ierīces ir daļa no VPN tīkla. Ja iestatīšana izrādās diezgan vienkārša, varat padomāt par darbvirsmas savienošanu ar VPN (izmantojot Ethernet).

Ņemot vērā, ka vadu un bezvadu savienojumi laika gaitā kļūst arvien mazāk droši (mērķtiecīgi uzbrukumi, KRACK WPA2 krekinga uzbrukums и Dragonblood uzbrukums pret WPA3), es nopietni apsveru iespēju izmantot WireGuard visām savām ierīcēm neatkarīgi no tā, kādā vidē tās atrodas.

Programmatūras instalēšana

WireGuard nodrošina iepriekš sastādītas paketes lielākajai daļai Linux, Windows un macOS izplatījumu. Android un iOS lietotnes tiek piegādātas, izmantojot lietotņu direktorijus.

Man ir jaunākā Fedora Linux 31, un es biju pārāk slinks, lai pirms instalēšanas izlasītu rokasgrāmatu. Tikko atradu pakas wireguard-tools, instalēja tos un pēc tam nevarēja saprast, kāpēc nekas nedarbojas. Turpmākā izmeklēšana atklāja, ka man nav instalēta pakotne wireguard-dkms (ar tīkla draiveri), bet tas nebija mana izplatīšanas repozitorijā.

Ja es būtu izlasījis instrukcijas, es būtu veicis pareizās darbības:

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

Manā Raspberry Pi ir instalēta Raspbian Buster izplatīšana, tur jau ir pakotne wireguard, instalējiet to:

$ sudo apt install wireguard

Savā Android tālrunī es instalēju lietojumprogrammu WireGuardVPN no oficiālā Google App Store kataloga.

Atslēgu uzstādīšana

Vienādranga autentifikācijai Wireguard izmanto vienkāršu privātās/publiskās atslēgas shēmu, lai autentificētu VPN vienaudžus. Varat viegli izveidot VPN atslēgas, izmantojot šo komandu:

$ 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

Tādējādi tiek iegūti trīs atslēgu pāri (seši faili). Mēs neatsaucīsimies uz failiem konfigurācijās, bet kopēsim saturu šeit: katra atslēga ir viena rindiņa base64.

Konfigurācijas faila izveide VPN serverim (Raspberry Pi)

Konfigurācija ir diezgan vienkārša, es izveidoju šādu failu /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āris piezīmes:

  • Atbilstošās vietās ar taustiņiem jāievieto rindas no failiem
  • Mans VPN izmanto iekšējo joslu 10.200.200.0/24
  • Komandām PostUp/PostDown Man ir ārējā tīkla saskarne wwan0, jums var būt cita (piemēram, eth0)

VPN tīklu var viegli izveidot, izmantojot šādu komandu:

$ sudo wg-quick up wg0

Viena maza detaļa: kā DNS serveris, kuru izmantoju dnsmasq piesaistīts tīkla interfeisam br0, pievienoju arī ierīces wg0 uz atļauto ierīču sarakstu. Programmā dnsmasq tas tiek darīts, konfigurācijas failam pievienojot jaunu tīkla interfeisa līniju /etc/dnsmasq.conf, piemēram:

interface=br0
interface=wg0

Turklāt es pievienoju iptable noteikumu, lai atļautu trafiku uz UDP klausīšanās portu (51280):

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

Tagad, kad viss darbojas, mēs varam iestatīt automātisku VPN tuneļa palaišanu:

$ sudo systemctl enable [email protected]

Klienta konfigurācija klēpjdatorā

Izveidojiet konfigurācijas failu klēpjdatorā /etc/wireguard/wg0.conf ar tiem pašiem iestatījumiem:

[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

Piezīmes:

  • Edgewalker vietā ir jānorāda publiskais IP vai VPN servera resursdators
  • Iestatot AllowedIPs par 10.200.200.0/24, mēs izmantojam tikai VPN, lai piekļūtu iekšējam tīklam. Satiksme uz visām pārējām IP adresēm/serveriem turpinās iet caur “parastajiem” atvērtajiem kanāliem. Tas izmantos arī klēpjdatora iepriekš konfigurēto DNS serveri.

Testēšanai un automātiskai palaišanai mēs izmantojam tās pašas komandas wg-quick и systemd:

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

Klienta iestatīšana Android tālrunī

Android tālrunim mēs izveidojam ļoti līdzīgu konfigurācijas failu (sauksim to 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

Atšķirībā no klēpjdatora konfigurācijas, tālrunim kā DNS serverim ir jāizmanto mūsu VPN serveris (rinda DNS), kā arī nodot visu trafiku caur VPN tuneli (AllowedIPs = 0.0.0.0/0).

Tā vietā, lai kopētu failu savā mobilajā ierīcē, varat to pārveidot par QR kodu:

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

QR kods tiks izvadīts konsolē kā ASCII. To var skenēt no Android VPN lietotnes, un tas automātiski iestatīs VPN tuneli.

secinājums

WireGuard iestatīšana ir vienkārši maģiska salīdzinājumā ar OpenVPN.

Avots: www.habr.com

Pievieno komentāru