Agordu simplan VPN kun WireGuard kaj Raspberry Pi kiel servilo

Ekde WireGuard fariĝi parto de de la estonta Linukso 5.6-kerno, mi decidis vidi kiel plej bone integri ĉi tiun VPN kun mia LTE-Enkursigilo/Alirpunkto sur Raspberry Pi.

Ekipaĵo

  • Raspberry Pi 3 kun LTE-modulo kaj publika IP. Estos VPN-servilo (ĉi-poste nomata kiel edgewalker)
  • Android-telefono, kiu devas uzi VPN por ĉiuj komunikadoj
  • Linuksa tekkomputilo, kiu bezonas uzi VPN nur ene de la reto

Ĉiu aparato, kiu konektas al VPN, devas povi konektiĝi al ĉiu alia aparato. Ekzemple, telefono devus povi konekti al retservilo sur tekkomputilo se ambaŭ aparatoj estas parto de VPN-reto. Se la aranĝo estas sufiĉe simpla, tiam vi povas pensi pri konekti al VPN kaj labortablo (per Ethernet).

Konsiderante ke kablaj kaj sendrataj konektoj fariĝas malpli sekuraj kun la tempo (celitaj atakoj, KRACK WPA2-haka atako и Dragonblood-atako kontraŭ WPA3), mi serioze pripensas uzi WireGuard por ĉiuj miaj aparatoj, negrave en kia medio ili funkcias.

Programaro

WireGuard provizas antaŭkompilitaj pakaĵoj por plej multaj Linukso, Vindozo kaj macOS-distribuoj. Aplikoj por Android kaj iOS estas liveritaj per aplikaj katalogoj.

Mi havas la plej novan Fedora Linukso 31 kaj mi estis tro mallaborema legi la manlibron antaŭ ol instali. Ĵus trovis la pakaĵojn wireguard-tools, instalis ilin, kaj tiam ne povis eltrovi kial nenio funkcias. Plia esploro malkaŝis, ke mi ne havis la pakaĵon instalita wireguard-dkms (kun retpelilo), kaj ĝi ne estis en la deponejo de mia distribuo.

Se mi estus leginta la instrukciojn, mi estus farinta la ĝustajn paŝojn:

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

Mi havas la Raspbian Buster-distribuon instalitan sur mia Raspberry Pi, jam ekzistas pako wireguard, instalu ĝin:

$ sudo apt install wireguard

Mi instalis la apon sur mia androida telefono WireGuardVPN el la oficiala katalogo de la Google App Store.

Instalante ŝlosilojn

Por aŭtentikigi nodojn, Wireguard uzas simplan privatan/publikan ŝlosilskemon por aŭtentikigi VPN-nodojn. Vi povas facile krei VPN-ŝlosilojn per la sekva komando:

$ 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

Ĉi tio donas al ni tri ŝlosilparojn (ses dosieroj). Ni ne raportos al dosieroj en agordoj, sed kopios la enhavon ĉi tie: ĉiu ŝlosilo estas unu linio en base64.

Krei Agordan Dosieron por VPN-Servilo (Raspberry Pi)

La agordo estas sufiĉe simpla, mi kreis la sekvan dosieron /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

Kelkaj notoj:

  • En la taŭgaj lokoj vi devas enmeti la liniojn de la dosieroj per la klavoj
  • Mia VPN uzas internan gamon 10.200.200.0/24
  • Por teamoj PostUp/PostDown Mi havas eksteran retan interfacon wwan0, vi eble havas alian (ekzemple, eth0)

La VPN-reto facile aperas per la sekva komando:

$ sudo wg-quick up wg0

Unu malgranda detalo: kiel DNS-servilon, mi uzis dnsmasq konektita al reto-interfaco br0, mi ankaŭ aldonis aparatojn wg0 al la listo de permesitaj aparatoj. En dnsmasq, tio estas farita aldonante novan linion kun la reto-interfaco al la agorda dosiero /etc/dnsmasq.confekzemple:

interface=br0
interface=wg0

Ankaŭ mi aldonis iptable-regulon por permesi trafikon al la aŭskultanta UDP-haveno (51280):

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

Nun kiam ĉio funkcias, ni povas registri la aŭtomatan lanĉon de la VPN-tunelo:

$ sudo systemctl enable [email protected]

Agordo de tekkomputila kliento

Sur la tekkomputilo, kreu agordan dosieron /etc/wireguard/wg0.conf kun la samaj agordoj:

[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

Notoj:

  • Anstataŭ edgewalker, vi devas specifi publikan IP aŭ VPN-servilan gastiganton
  • Per agordo AllowedIPs sur 10.200.200.0/24, ni nur uzas la VPN por aliri la internan reton. Trafiko al ĉiuj aliaj IP-adresoj/serviloj daŭre trairos "regulajn" malfermitajn kanalojn. La antaŭ-agordita DNS-servilo sur la tekkomputilo ankaŭ estos uzata.

Por testado kaj aŭtomata lanĉo, ni uzas la samajn komandojn wg-quick и systemd:

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

Agordi klienton sur Android-telefono

Por Android-telefono, ni kreas tre similan agordan dosieron (ni nomu ĝin 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

Male al la tekkomputila agordo, la telefono devus uzi nian VPN-servilon kiel sian DNS-servilon (ŝnuro DNS), kaj ankaŭ trapasi la tutan trafikon tra la VPN-tunelo (AllowedIPs = 0.0.0.0/0).

Anstataŭ kopii la dosieron al via poŝtelefono, vi povas konverti ĝin al QR-kodo:

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

La QR-kodo estos eligita al la konzolo kiel ASCII. Ĝi povas esti skanita de la Android VPN-aplikaĵo kaj agordi VPN-tunelon aŭtomate.

konkludo

Agordo de WireGuard estas nur magia kompare kun OpenVPN.

fonto: www.habr.com

Aldoni komenton