Porque WireGuard
Оборудование
- 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 (
Instalación de software
WireGuard ofrece
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
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
en10.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