GNU/Linux >> Tutoriales Linux >  >> Debian

Configure su propio servidor VPN WireGuard en Debian 11 y Debian 10

Este tutorial le mostrará cómo configurar su propio servidor VPN WireGuard en Debian 11 bullseye y Debian 10 Buster. WireGuard está hecho específicamente para el kernel de Linux. Se ejecuta dentro del kernel de Linux y le permite crear un túnel VPN rápido, moderno y seguro.

Características de WireGuard VPN

  • Velocidad ultrarrápida y liviana, saca a OpenVPN del agua.
  • Multiplataforma. WireGuard puede ejecutarse en Linux, BSD, macOS, Windows, Android, iOS y OpenWRT.
  • La autenticación del usuario se realiza mediante el intercambio de claves públicas, similar a las claves SSH.
  • Asigna direcciones IP de túnel estáticas a clientes VPN. Puede que a algunas personas no les guste, pero puede ser útil en algunos casos.
  • Los dispositivos móviles pueden cambiar entre Wi-Fi y la red móvil sin problemas y sin perder la conectividad.
  • Su objetivo es reemplazar OpenVPN e IPSec en la mayoría de los casos de uso.

Requisitos

Para seguir este tutorial, necesitará un VPS (servidor privado virtual) que pueda acceder libremente a sitios web bloqueados (fuera de su país o sistema de filtrado de Internet). Recomiendo Kamatera VPS, que incluye:

  • Prueba gratuita de 30 días.
  • Desde $4/mes (1 GB de RAM)
  • VPS basado en KVM de alto rendimiento
  • 9 centros de datos en todo el mundo, incluidos Estados Unidos, Canadá, Reino Unido, Alemania, Países Bajos, Hong Kong e Israel.

Siga el tutorial vinculado a continuación para crear su servidor Linux VPS en Kamatera.

  • Cómo crear un servidor VPS Linux en Kamatera

Una vez que tenga un VPS con Debian, siga las instrucciones a continuación.

Este tutorial asume que tanto el servidor VPN como el cliente VPN ejecutan Debian sistema operativo.

Paso 1:Instale WireGuard en el servidor y escritorio Debian

Inicie sesión en su servidor Debian. WireGuard está incluido en Debian 11 (Bullseye) repositorio, por lo que puede ejecutar los siguientes comandos para instalarlo.

sudo apt update
sudo apt install wireguard wireguard-tools linux-headers-$(uname -r)

Debian 10 los usuarios deben agregar el repositorio de backport con el siguiente comando.

echo "deb http://deb.debian.org/debian buster-backports main" | sudo tee /etc/apt/sources.list.d/buster-backports.list

Luego instale WireGuard.

sudo apt update
sudo apt -t buster-backports install wireguard wireguard-tools wireguard-dkms linux-headers-$(uname -r)

Use los mismos comandos para instalar WireGuard en su computadora Debian local (el cliente VPN). Tenga en cuenta que también necesita instalar openresolv paquete en el cliente para configurar el servidor DNS.

sudo apt install openresolv

Paso 2:generar un par de claves pública/privada

Servidor

Ejecute el siguiente comando en el servidor Debian para crear un par de claves pública/privada, que se guardará en /etc/wireguard/ directorio.

wg genkey | sudo tee /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.key

Cliente

Ejecute el siguiente comando para crear un par de claves pública/privada en la computadora Debian local (el cliente VPN).

wg genkey | sudo tee /etc/wireguard/client_private.key | wg pubkey | sudo tee /etc/wireguard/client_public.key

Paso 3:Crear archivo de configuración de WireGuard

Servidor

Utilice un editor de texto de línea de comandos como Nano para crear un archivo de configuración de WireGuard en el servidor Debian. wg0 será el nombre de la interfaz de red.

sudo nano /etc/wireguard/wg0.conf

Copie el siguiente texto y péguelo en su archivo de configuración. Debe usar su propia clave privada del servidor y la clave pública del cliente.

[Interface]
Address = 10.10.10.1/24
ListenPort = 51820
PrivateKey = cD+ZjXiVIX+0iSX1PNijl4a+88lCbDgw7kO78oXXLEc=

[Peer]
PublicKey = AYQJf6HbkQ0X0Xyt+cTMTuJe3RFwbuCMF46LKgTwzz4=
AllowedIPs = 10.10.10.2/32

donde:

  • Dirección :especifique la dirección IP privada del servidor VPN. Aquí estoy usando el rango de red 10.10.10.0/24, por lo que no entrará en conflicto con el rango de su red doméstica. (La mayoría de los enrutadores domésticos usan 192.168.0.0/24 o 192.168.1.0/24). 10.10.10.1 es la dirección IP privada del servidor VPN.
  • Clave privada :La clave privada del servidor VPN, que se puede encontrar en /etc/wireguard/server_private.key archivo en el servidor.
  • Puerto de escucha :El servidor VPN de WireGuard escuchará en el puerto UDP 51820, que es el predeterminado.
  • Clave pública :La clave pública del cliente VPN, que se puede encontrar en /etc/wireguard/client_public.key archivo en la computadora del cliente.
  • IP permitidas :direcciones IP que el cliente VPN puede usar. En este ejemplo, el cliente solo puede usar la dirección IP 10.10.10.2 dentro del túnel VPN.

Guarde y cierre el archivo. (Para guardar un archivo en el editor de texto Nano, presione Ctrl+O , luego presione Entrar para confirmar. Presiona Ctrl+X para salir.)

Cambie el modo de permiso de archivo para que solo el usuario raíz pueda leer los archivos.

sudo chmod 600 /etc/wireguard/ -R

Cliente

Utilice un editor de texto de línea de comandos como Nano para crear un archivo de configuración de WireGuard en su computadora Debian local. wg-client0 será el nombre de la interfaz de red.

sudo nano /etc/wireguard/wg-client0.conf

Copie el siguiente texto y péguelo en su archivo de configuración. Debe usar su propia clave privada de cliente y clave pública de servidor.

[Interface]
Address = 10.10.10.2/24
DNS = 10.10.10.1
PrivateKey = cOFA+x5UvHF+a3xJ6enLatG+DoE3I5PhMgKrMKkUyXI=

[Peer]
PublicKey = kQvxOJI5Km4S1c7WXu2UZFpB8mHGuf3Gz8mmgTIF2U0=
AllowedIPs = 0.0.0.0/0
Endpoint = 12.34.56.78:51820
PersistentKeepalive = 25

donde:

  • Dirección :especifique la dirección IP privada del cliente VPN.
  • DNS :especifique 10.10.10.1 (el servidor VPN) como servidor DNS. Se configurará a través de resolvconf dominio. También puede especificar múltiples servidores DNS para redundancia como esta:DNS = 10.10.10.1 8.8.8.8
  • Clave privada :La clave privada del cliente, que se puede encontrar en /etc/wireguard/client_private.key archivo en la computadora del cliente.
  • Clave pública :La clave pública del servidor, que se puede encontrar en /etc/wireguard/server_public.key archivo en el servidor.
  • IP permitidas :0.0.0.0/0 representa todo Internet, lo que significa que todo el tráfico a Internet debe enrutarse a través de la VPN.
  • Punto final :la dirección IP pública y el número de puerto del servidor VPN. Reemplace 12.34.56.78 con la dirección IP pública real de su servidor.
  • Keepalive persistente :envíe un paquete vacío autenticado al par cada 25 segundos para mantener viva la conexión. Si PersistentKeepalive no está habilitado, es posible que el servidor VPN no pueda hacer ping al cliente VPN.

Guarde y cierre el archivo.

Cambie el modo de archivo para que solo el usuario raíz pueda leer los archivos.

sudo chmod 600 /etc/wireguard/ -R

Paso 4:habilite el reenvío de IP en el servidor

Para que el servidor VPN enrute paquetes entre clientes VPN e Internet, debemos habilitar el reenvío de IP. Editar sysctl.conf archivo.

sudo nano /etc/sysctl.conf

Agregue la siguiente línea al final de este archivo.

net.ipv4.ip_forward = 1

Guarde y cierre el archivo. Luego aplique los cambios con el siguiente comando. La -p La opción cargará la configuración de sysctl desde /etc/sysctl.conf expediente. Este comando conservará nuestros cambios en los reinicios del sistema.

sudo sysctl -p

Paso 5:Configure el enmascaramiento de IP en el servidor

Necesitamos configurar el enmascaramiento de IP en el firewall del servidor, de modo que el servidor se convierta en un enrutador virtual para clientes VPN. Usaré UFW, que es una parte frontal del firewall de iptables. Instale UFW en Debian con:

sudo apt install ufw

Primero, debe permitir el tráfico SSH.

sudo ufw allow 22/tcp

A continuación, busque el nombre de la interfaz de red principal de su servidor.

ip addr

Como puede ver, se llama ens3 en mi servidor Debian.

Para configurar el enmascaramiento de IP, debemos agregar el comando iptables en un archivo de configuración de UFW.

sudo nano /etc/ufw/before.rules

Por defecto, hay algunas reglas para el filter mesa. Agregue las siguientes líneas al final de este archivo. Reemplazar ens3 con su propio nombre de interfaz de red.

# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o ens3 -j MASQUERADE

# End each table with the 'COMMIT' line or these rules won't be processed
COMMIT

En el editor de texto Nano, puede ir al final del archivo presionando Ctrl+W , luego presionando Ctrl+V .

Las líneas anteriores agregarán (-A ) una regla al final de POSROUTING cadena de nat mesa. Conectará su red privada virtual con Internet. Y también oculte su red del mundo exterior. Por lo tanto, Internet solo puede ver la IP de su servidor VPN, pero no puede ver la IP de su cliente VPN, al igual que su enrutador doméstico oculta su red doméstica privada.

De forma predeterminada, UFW prohíbe el reenvío de paquetes. Podemos permitir el reenvío para nuestra red privada. Encuentra el ufw-before-forward cadena en este archivo y agregue las siguientes 3 líneas, que aceptarán el reenvío de paquetes si la IP de origen o la IP de destino están en 10.10.10.0/24 rango.

# allow forwarding for trusted network
-A ufw-before-forward -s 10.10.10.0/24 -j ACCEPT
-A ufw-before-forward -d 10.10.10.0/24 -j ACCEPT

Guarde y cierre el archivo. Luego habilite UFW.

sudo ufw enable

Si ha habilitado UFW anteriormente, puede usar systemctl para reiniciar UFW.

sudo systemctl restart ufw

Ahora, si lista las reglas en la cadena POSTROUTING de la tabla NAT usando el siguiente comando:

sudo iptables -t nat -L POSTROUTING

Puedes ver la regla Masquerade.

Paso 6:Instale un solucionador de DNS en el servidor

Dado que especificamos el servidor VPN como el servidor DNS para el cliente, necesitamos ejecutar una resolución de DNS en el servidor VPN. Podemos instalar el servidor DNS bind9.

sudo apt install bind9

Una vez que esté instalado, BIND se iniciará automáticamente. Puede comprobar su estado con:

systemctl status bind9

Salida de muestra:

● named.service - BIND Domain Name Server
     Loaded: loaded (/lib/systemd/system/named.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2020-05-17 08:11:26 UTC; 37s ago
       Docs: man:named(8)
   Main PID: 13820 (named)
      Tasks: 5 (limit: 1074)
     Memory: 14.3M
     CGroup: /system.slice/named.service
             └─13820 /usr/sbin/named -f -u bind

Si no se está ejecutando, inícielo con:

sudo systemctl start bind9

Edite el archivo de configuración del servidor BIND DNS.

sudo nano /etc/bind/named.conf.options

Agregue la siguiente línea para permitir que los clientes VPN envíen consultas DNS recursivas.

allow-recursion { 127.0.0.1; 10.10.10.0/24; };

Guarde y cierre el archivo. Reinicie BIND9 para que los cambios surtan efecto.

sudo systemctl restart bind9

Luego, debe ejecutar el siguiente comando para permitir que los clientes VPN se conecten al puerto 53.

sudo ufw insert 1 allow in from 10.10.10.0/24

Paso 7:Abra el puerto WireGuard en el cortafuegos

Ejecute el siguiente comando para abrir el puerto UDP 51820 en el servidor.

sudo ufw allow 51820/udp

Paso 8:Inicie WireGuard

servidor

Ejecute el siguiente comando en el servidor para iniciar WireGuard.

sudo wg-quick up /etc/wireguard/wg0.conf

Para detenerlo, ejecuta

sudo wg-quick down /etc/wireguard/wg0.conf

También puede usar el servicio systemd para iniciar WireGuard.

sudo systemctl start [email protected]

Habilite el inicio automático en el momento del arranque del sistema.

sudo systemctl enable [email protected]

Verifique su estado con el siguiente comando. Su estado debe ser active (exited) .

systemctl status [email protected]

Ahora el servidor WireGuard está listo para aceptar conexiones de clientes.

Cliente

Inicie WireGuard.

sudo systemctl start [email protected]

Habilite el inicio automático en el momento del arranque del sistema.

sudo systemctl enable [email protected]

Compruebe su estado:

systemctl status [email protected]

Ahora ve a este sitio web:http://icanhazip.com/ para comprobar su dirección IP pública. Si todo salió bien, debería mostrar la dirección IP pública de su servidor VPN en lugar de la dirección IP pública de su computadora cliente.

También puede ejecutar el siguiente comando para obtener la dirección IP pública actual.

curl https://icanhazip.com

Consejos para solucionar problemas

Prueba de ping

Puede hacer ping desde el servidor VPN al cliente VPN (ping 10.10.10.2 ) para ver si el túnel funciona. Si ve el siguiente mensaje de error en el ping,

ping: sendmsg: Required key not available

puede ser que las AllowedIPs el parámetro es incorrecto, como un error tipográfico.

Si el mensaje de error de ping es

ping: sendmsg: Destination address required

podría ser que la clave privada/pública esté incorrecta en sus archivos de configuración.

No puedo navegar por Internet

Si el túnel VPN se establece con éxito, pero la dirección IP pública del cliente no cambia, eso se debe a que la regla de enmascaramiento o reenvío en su archivo de configuración de UFW no funciona. Una vez tuve un error tipográfico en /etc/ufw/before.rules archivo, lo que hizo que mi computadora no pudiera navegar por Internet.

Tenga en cuenta que no recomiendo usar SaveConfig=true en el [Interface] sección del archivo de configuración de WireGuard. SaveConfig le dice a WireGuard que guarde la configuración de tiempo de ejecución al apagar. Entonces, si agrega [Peer] adicional en el archivo de configuración y luego reinicie WireGuard, sus configuraciones recién agregadas se sobrescribirán.

Habilitar el registro de depuración en el kernel de Linux

Si usa Linux kernel 5.6+, puede habilitar el registro de depuración para WireGuard con el siguiente comando.

sudo su -
echo module wireguard +p > /sys/kernel/debug/dynamic_debug/control

Luego puede ver los registros de depuración con

sudo dmesg -wH

o

sudo journalctl -kf

Reiniciar

Si su VPN aún no funciona, intente reiniciar el servidor VPN.

sudo systemctl restart [email protected]

Luego detenga el cliente VPN.

sudo systemctl stop [email protected]

Y actualice los paquetes de software en el cliente VPN.

sudo apt update; sudo apt upgrade

A continuación, reinicie el cliente VPN.

sudo shutdown -r now

sudo systemctl start [email protected]

Adición de clientes VPN adicionales

WireGuard está diseñado para asociar una dirección IP con un cliente VPN. Para agregar más clientes VPN, debe crear un par de claves privadas/públicas únicas para cada cliente, luego agregar la clave pública de cada cliente VPN en el archivo de configuración del servidor (/etc/wireguard/wg0.conf ) así:

[Interface]
Address = 10.10.10.1/24
PrivateKey = UIFH+XXjJ0g0uAZJ6vPqsbb/o68SYVQdmYJpy/FlGFA=
ListenPort = 51820

[Peer]
PublicKey = 75VNV7HqFh+3QIT5OHZkcjWfbjx8tc6Ck62gZJT/KRA=
AllowedIPs = 10.10.10.2/32

[Peer]
PublicKey = YYh4/1Z/3rtl0i7cJorcinB7T4UOIzScifPNEIESFD8=
AllowedIPs = 10.10.10.3/32

[Peer]
PublicKey = EVstHZc6QamzPgefDGPLFEjGyedJk6SZbCJttpzcvC8=
AllowedIPs = 10.10.10.4/32

Cada cliente VPN tendrá una dirección IP privada estática (10.10.10.2, 10.10.10.3, 10.10.10.4, etc.). Reinicie el servidor WireGuard para que los cambios surtan efecto.

sudo systemctl restart [email protected]

Luego agregue la configuración de WireGuard en cada cliente VPN como de costumbre.

Policy Routing, Split Tunneling y VPN Kill Switch

Ahora le mostraré cómo usar ruteo de políticas , tunelización dividida y interruptor de eliminación de VPN con WireGuard VPN. Nota que no se recomienda usarlos juntos. Si usa enrutamiento de políticas, entonces no debe habilitar el túnel dividido o el interruptor de eliminación de VPN, y viceversa.

Enrutamiento de políticas

De forma predeterminada, todo el tráfico en el cliente VPN se enrutará a través del servidor VPN. A veces, es posible que desee enrutar solo un tipo específico de tráfico, según el protocolo de la capa de transporte y el puerto de destino. Esto se conoce como política de enrutamiento.

El enrutamiento de políticas está configurado en la computadora del cliente y debemos detener el proceso del cliente de WireGuard.

sudo systemctl stop [email protected]

Luego edite el archivo de configuración del cliente.

sudo nano /etc/wireguard/wg-client0.conf

Por ejemplo, si agrega las siguientes 3 líneas en el [interface] WireGuard creará una tabla de enrutamiento llamada "1234" y agregará la regla ip a la tabla de enrutamiento. En este ejemplo, el tráfico se enrutará a través del servidor VPN solo cuando se use TCP como protocolo de capa de transporte y el puerto de destino sea 25, es decir, cuando la computadora cliente envíe correos electrónicos.

Table = 1234
PostUp = ip rule add ipproto tcp dport 25 table 1234
PreDown = ip rule delete ipproto tcp dport 25 table 1234

Guarde y cierre el archivo. A continuación, vuelva a iniciar el cliente WireGuard.

sudo systemctl start [email protected]

Tunelización dividida

De forma predeterminada, todo el tráfico en el cliente VPN se enrutará a través del servidor VPN. Aquí se explica cómo habilitar el túnel dividido, de modo que solo se envíe tráfico a 10.10.10.0/24 El rango de IP se canalizará a través de WireGuard VPN. Esto es útil cuando desea construir una red privada para varios servidores en la nube, porque los clientes VPN se ejecutarán en servidores en la nube y si usa un túnel VPN completo, probablemente perderá la conexión con los servidores en la nube.

Edite el archivo de configuración del cliente.

sudo nano /etc/wireguard/wg-client0.conf

Cambiar

AllowedIPs = 0.0.0.0/0

Para

AllowedIPs = 10.10.10.0/24

Por lo tanto, el tráfico se enrutará a través de VPN solo cuando la dirección de destino esté en el rango de IP 10.10.10.0/24. Guarde y cierre el archivo. Luego reinicie el cliente de WireGuard.

sudo systemctl restart [email protected]

Interruptor de eliminación de VPN

De forma predeterminada, su computadora puede acceder a Internet a través de la puerta de enlace normal cuando se interrumpe la conexión VPN. Es posible que desee habilitar la función de interrupción, que evita el flujo de paquetes sin cifrar a través de interfaces que no son de WireGuard.

Detenga el proceso del cliente de WireGuard.

sudo systemctl stop [email protected]

Edite el archivo de configuración del cliente.

sudo nano /etc/wireguard/wg-client0.conf

Agregue las siguientes dos líneas en [interface] sección.

PostUp = iptables -I OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
PreDown = iptables -D OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT

Así:

[Interface]
Address = 10.10.10.2/24
DNS = 10.10.10.1
PrivateKey = cOFA+x5UvHF+a3xJ6enLatG+DoE3I5PhMgKrMKkUyXI=
PostUp = iptables -I OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
PreDown = iptables -D OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT

[Peer]
PublicKey = kQvxOJI5Km4S1c7WXu2UZFpB8mHGuf3Gz8mmgTIF2U0=
AllowedIPs = 0.0.0.0/0
Endpoint = 12.34.56.78:51820
PersistentKeepalive = 25

Guarde y cierre el archivo. Luego inicie el cliente WireGuard.

sudo systemctl start [email protected]

Instalación del núcleo de Linux 5.x en Debian 10

La versión actual del kernel de Linux en Debian 10 es 4.19. En el paso 1, agregamos el repositorio de backport en Debian 10. El repositorio de backport incluye Linux kernel 5.10, en el momento de escribir este artículo. Probablemente sepa que el módulo wireguard está incluido en el kernel de Linux a partir de la versión 5.4. Si instalamos Linux kernel 5.10 en Debian 10, no necesitamos compilar el módulo wireguard cuando el sistema está actualizando el kernel de Linux. De hecho, mi servidor Debian 10 una vez tuvo un problema al construir el módulo wireguard con wireguard-dkms.

Tenga en cuenta que, cuando lea este artículo, es posible que el repositorio de backport de Debian 10 haya eliminado el kernel 5.10 e incluido el kernel 5.11. Simplemente reemplace 5.8 con 5.9 en los siguientes comandos.

Para instalar Linux kernel 5.8 en servidores en la nube Debian 10, ejecute el siguiente comando.

sudo apt install linux-image-5.10.0-0.bpo.7-cloud-amd64 linux-headers-5.10.0-0.bpo.7-cloud-amd64

Para instalar Linux kernel 5.8 en una PC con Debian 10, ejecute el siguiente comando.

 sudo apt install linux-image-5.10.0-0.bpo.7-amd64 linux-headers-5.10.0-0.bpo.7-amd64

Luego reinicie su caja Debian 10.

sudo shutdown -r now

Comprueba la versión de tu kernel de Linux.

uname -r

Salida de muestra

5.10.0-0.bpo.7-cloud-amd64

Aunque ya no necesitamos el wireguard-dkms paquete, es una dependencia para el wireguard paquete, por lo que no podemos eliminarlo del sistema. Probablemente verá el siguiente error al actualizar el wireguard paquete.

Error! The dkms.conf for this module includes a BUILD_EXCLUSIVE directive which
does not match this kernel/arch. This indicates that it should not be built

Esto indica wireguard-dkms está tratando de construir el wireguard en el kernel de Linux, pero Linux 5.10 incluye un wireguard nativo módulo, por lo que se evita la operación de compilación y puede ignorar este error.


Debian
  1. Configure un servidor VPN en su PC con Linux

  2. Cómo configurar WireGuard VPN en Ubuntu (una guía paso a paso)

  3. Cómo configurar un servidor SFTP en Debian 11 Server

  4. Cómo configurar un servidor OpenVPN en Debian 10

  5. Configurar un servidor de correo con PostfixAdmin en Debian 9

Configure su propia resolución de DNS en Debian 10 Buster con BIND9

Configure su propio servidor VPN WireGuard en CentOS/RHEL

Configure su propio servidor VPN WireGuard en Ubuntu 20.04/18.04

Cómo crear su propio servidor VPN IPsec en Linux

¿Cómo configurar un Pptp Vpn en el propio servidor Ubuntu?

Cómo configurar WireGuard VPN en Debian 11