Configura unha VPN sinxela con WireGuard e Raspberry Pi como servidor

Porque WireGuard pasará a formar parte do próximo kernel Linux 5.6, decidín ver a mellor forma de integrar esta VPN co meu Enrutador/punto de acceso LTE en Raspberry Pi.

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

  • Raspberry Pi 3 con módulo LTE e enderezo IP público. Aquí haberá un servidor VPN (en diante no texto chámase andador de bordos)
  • Un teléfono Android que debe usar unha VPN para todas as comunicacións
  • Portátil Linux que só debería usar unha VPN dentro da rede

Todos os dispositivos que se conectan á VPN deben poder conectarse a todos os demais dispositivos. Por exemplo, un teléfono debería poder conectarse a un servidor web nun portátil se ambos os dispositivos forman parte dunha rede VPN. Se a configuración resulta ser bastante sinxela, podes pensar en conectar o escritorio á VPN (a través de Ethernet).

Tendo en conta que as conexións con cable e sen fíos son cada vez menos seguras co paso do tempo (ataques dirixidos, Ataque de cracking KRACK WPA2 и Ataque Dragonblood contra WPA3), estou considerando seriamente usar WireGuard para todos os meus dispositivos, independentemente do ambiente no que se atopen.

Instalación de software

WireGuard ofrece paquetes precompilados para a maioría das distribucións de Linux, Windows e macOS. As aplicacións de Android e iOS entréganse a través de directorios de aplicacións.

Teño a versión máis recente de Fedora Linux 31, e estaba demasiado preguiceiro para ler o manual antes de instalalo. Acabo de atopar os paquetes wireguard-tools, instaláronos e despois non puideron descubrir por que nada funcionaba. Unha investigación máis adiante revelou que non teño o paquete instalado wireguard-dkms (cun controlador de rede), pero non estaba no repositorio da miña distribución.

Se tivese lido as instrucións, tomaría os pasos correctos:

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

Teño a distribución Raspbian Buster instalada no meu Raspberry Pi, xa hai un paquete alí wireguard, instálao:

$ sudo apt install wireguard

No meu teléfono Android instalei a aplicación WireGuardVPN do catálogo oficial de Google App Store.

Instalación de chaves

Para a autenticación entre pares, Wireguard usa un esquema simple de chave pública/privada para autenticar os pares VPN. Podes crear claves VPN facilmente usando o seguinte comando:

$ 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

Isto dános tres pares de claves (seis ficheiros). Non nos referiremos aos ficheiros das configuracións, pero copiaremos aquí o contido: cada chave é unha liña en base64.

Creación dun ficheiro de configuración para o servidor VPN (Raspberry Pi)

A configuración é bastante sinxela, creei o seguinte ficheiro /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

Un par de notas:

  • Nos lugares axeitados cómpre inserir liñas dos ficheiros coas claves
  • A miña VPN está a usar a banda interna 10.200.200.0/24
  • Para equipos PostUp/PostDown Teño a interface de rede externa wwan0, pode ter outra diferente (por exemplo, eth0)

A rede VPN créase facilmente co seguinte comando:

$ sudo wg-quick up wg0

Un pequeno detalle: como o servidor DNS que usei dnsmasq ligado a unha interface de rede br0, tamén engadín dispositivos wg0 á lista de dispositivos permitidos. En dnsmasq isto faise engadindo unha nova liña de interface de rede ao ficheiro de configuración /etc/dnsmasq.conf, por exemplo:

interface=br0
interface=wg0

Ademais, engadín unha regra iptable para permitir o tráfico ao porto de escoita UDP (51280):

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

Agora que todo funciona, podemos configurar o lanzamento automático do túnel VPN:

$ sudo systemctl enable [email protected]

Configuración do cliente no portátil

Crea un ficheiro de configuración nun portátil /etc/wireguard/wg0.conf coa mesma configuración:

[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

Notas:

  • En lugar de edgewalker, cómpre especificar a IP pública ou o servidor do servidor VPN
  • Tendo instalado AllowedIPs en 10.200.200.0/24, só usamos VPN para acceder á rede interna. O tráfico a todos os demais enderezos IP/servidores seguirá pasando por canles abertas "normais". Tamén usará o servidor DNS preconfigurado no portátil.

Para probas e lanzamento automático usamos os mesmos comandos wg-quick и systemd:

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

Configurar un cliente nun teléfono Android

Para un teléfono Android creamos un ficheiro de configuración moi similar (chamémoslle 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

A diferenza da configuración do portátil, o teléfono debe usar o noso servidor VPN como servidor DNS (liña DNS), e tamén pasar todo o tráfico a través do túnel VPN (AllowedIPs = 0.0.0.0/0).

En lugar de copiar o ficheiro no teu dispositivo móbil, podes convertelo nun código QR:

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

O código QR sairá á consola como ASCII. Pódese escanear desde a aplicación VPN de Android e configurará automaticamente un túnel VPN.

Saída

Configurar WireGuard é simplemente máxico en comparación con OpenVPN.

Fonte: www.habr.com

Engadir un comentario