Cómo crear una VPN en Ubuntu 20.04 Uso de WireGuard

Cómo crear una VPN en Ubuntu 20.04 Uso de WireGuard

WireGuard es una VPN moderna y muy fácil de configurar en un sistema operativo múltiple. La aplicación está disponible en el Ubuntu 20.04 repositorios oficiales, por lo que también es muy fácil de instalar. A diferencia de otro software como OpenVPN, que se basa en el uso de certificados SSL, WireGuard se basa en el uso de pares de claves. En este tutorial veremos cómo configurar, en pocos pasos sencillos, un servidor VPN y un compañero de cliente en la última versión estable de Ubuntu.

En este tutorial aprenderás:

  • Cómo instalar WireGuard en Ubuntu 20.04 fosa focal
  • Cómo crear pares de claves públicas y privadas
  • Cómo configurar el servidor y un compañero de cliente
  • Cómo redirigir todo el tráfico entrante a la VPN
WireGuard VPN en Ubuntu 20.04

Requisitos y convenciones de software utilizados

Requisitos de software y convenciones de línea de comandos de Linux
Categoría Requisitos, convenciones o versión de software utilizada
Sistema Ubuntu 20.04 fosa focal
Software guardaespaldas
Otro Privilegios de raíz
Convenciones # - requiere que los comandos de Linux dados se ejecuten con privilegios raíz directamente como un usuario raíz o mediante el uso de sudo dominio
ps - Requiere que los comandos de Linux dados se ejecuten como un usuario regular no privilegiado

Instalación

WireGuard está oficialmente disponible en el repositorio "universo" de Ubuntu 20.04, por lo tanto, podemos instalarlo a través de apto. La versión disponible, en el momento de la escritura, es 1.0.20200319-1ubuntu1:

$ sudo apt install wireguard 

El sistema nos pedirá que confirmemos que queremos instalar el programa y sus dependencias, y completará la operación en cuestión de segundos.

Generación de llaves

Debemos generar una clave pública y privada para cada máquina que queremos usar en nuestra VPN. La clave privada debe mantenerse en secreto en la máquina, la pública se usa para acceder a la máquina desde los otros pares.

Para generar las teclas podemos usar el WG utilidad. Dentro del archivo de configuración de WireGuard deberemos hacer referencia a la clave privada de la máquina, mientras que la pública se utilizará en los otros pares. Tenga en cuenta que haremos referencia a las claves directamente, por lo que en teoría no necesitamos almacenarlas en archivos. Sin embargo, lo haremos de todos modos, solo por conveniencia.

Para generar la clave privada para nuestro servidor, debemos usar el género subcomando de WG. El comando emite la tecla creada a stdout; Para escribir la clave en un archivo, podemos usar la potencia de las redirecciones de shell:

$ wg genkey> server_private_key 

El comando generará la clave y la almacenará en el server_private_key Archivo, pero aumentará la siguiente advertencia:

ADVERTENCIA: Escribir al archivo accesible para el mundo. Considere establecer el Umask al 077 e intentarlo de nuevo. 

Esto se debe a que con el usuario predeterminado Umask (002) Los archivos se crean con el modo 664, también lo son legibles al mundo, que no se recomienda. Para resolver este problema, podemos cambiar el Umask utilizado en la sesión de shell actual antes de crear los archivos:

$ Umask 077 

O cambiar los permisos de archivos a 600 Después de la creación. Aquí iremos por la última solución.

Una vez que nuestra clave privada está lista, podemos generar el público uno que se basa en ello. Para lograr la tarea usamos el pubey subcomando de WG. Al igual que antes usamos redirecciones de shell: primero para pasar el contenido del server_private_key archivo al stdin del comando, y luego y para redirigir la tecla generada a la server_public_key archivo:

$ WG PUBKEY SERVER_Public_Key 

Para ahorrar algo de mecanografía, podemos generar ambas claves, con solo un comando, que implica el uso de la carcasa | (tubería) operador y el tee dominio:

$ wg genkey | Tee Server_Private_Key | WG PUBKEY> server_public_key 

La salida del comando en el lado izquierdo del operador de tubería (|) se pasa a la entrada estándar del programa en su lado derecho. El tee Comando, en su lugar, nos permite redirigir la salida de un comando a un archivo y a la salida estándar (más sobre las redirecciones de shell aquí).

Una vez que nuestras claves están listas, podemos crear el archivo de configuración del servidor.

Archivo de configuración del servidor

Para configurar nuestra instalación de WireGuard, podemos crear un archivo de configuración llamado WG0.confusión Con el siguiente contenido:

[Interfaz] privateKey = dirección = 10.0.0.1/24 ListenPort = 51820 

Observe que el nombre del archivo es arbitrario, pero debe basarse en el nombre que utilizaremos para nuestra interfaz, WG0 en este caso. Este nombre será referenciado al comenzar el servicio, como veremos a continuación.

En nuestro ejemplo. el [interfaz] La sección del archivo de configuración contiene los siguientes campos:

  • Llave privada
  • DIRECCIÓN
  • Escucha

El Llave privada El valor del campo no es más que la clave privada del servidor que generamos anteriormente.

En el DIRECCIÓN campo especificamos la dirección para asignar a la interfaz en la VPN junto con la máscara de subred usando el CIDR notación. En este caso usamos 10.0.0.1/24, Entonces, nuestra dirección de "servidor" de WireGuard dentro de la VPN será 10.0.0.1, que se encuentra en la gama disponible de direcciones que van desde 10.0.0.1 a 10.0.0.254.

Finalmente, en el Escucha Campo, especificamos en qué puerto WireGuard escuchará el tráfico entrante. Una regla para permitir dicho tráfico también debe agregarse a nuestro firewall. Haremos esto en la siguiente sección.

Ahora podemos cambiar los permisos de los archivos y moverlos al /etc/cableguard directorio:

$ chmod 600 server_public_key server_private_key wg0.conf $ sudo mv server_private_key server_public_key wg0.conf /etc /cableguard 

Ahora podemos comenzar el wg-cick Servicio que especifica el nombre de la interfaz WireGuard después de @ En el nombre de la unidad. ¿Qué es esta notación?? Es una característica de Systemd: con él podemos generar múltiples archivos unitarios en la base de una "plantilla", pasando el valor que se sustituirá en la plantilla, después de la @ símbolo en nombre de la unidad. Este es el contenido del [email protected] unidad:

[Unidad] Descripción = WireGuard a través de WG-Quick (8) para %I After = Network-Online.Target NSS-Lookup.Target wants = network-online.Target NSS-Lookup.Documentación de destino = hombre: wg-quick (8) documentación = hombre: wg (8) documentación = https: // www.guardaespaldas.com/documentación = https: // www.guardaespaldas.com/QuickStart/Documation = https: // git.zx2c4.com/cableguard-tools/About/src/man/wg-quick.8 documentación = https: // git.zx2c4.com/cableguard-tools/About/src/man/wg.8 [servicio] type = oneShot RESTAFTEREXIT = YES EXECStart =/usr/bin/wg-quick up %i EXECSTOP =/usr/bin/wg-quick down %i ambiente = wg_endpoint_resolution_retries = infinity [install] WantedBy = Multi-user = User.objetivo 

El valor que especificaremos después del @ En el nombre de la unidad al comenzar o detenerlo, reemplazará %i en el Exectard y Execstop líneas. En este caso usaremos WG0:

$ sudo SystemCtl Enable--Now wg-quick@wg0 

Con el comando anterior, comenzamos el servicio y también hacemos para que se inicie automáticamente en el arranque. Para verificar que se haya aplicado nuestra configuración, podemos ejecutar el WG dominio. La salida producida debe mostrar información sobre el WG0 interfaz:

$ sudo wg interfaz: wg0 clave pública: nnx3zpcv9d2dtghdsoygbnr64zg5jtj4z4t2se759v4 = clave privada: (oculto) Puerto de escucha: 51820 

Ahora, continuemos y configuremos nuestro firewall y reenvío de paquetes.

Configuración de firewall y red

En este tutorial asumiré el uso de UFW. Como dijimos antes, debemos agregar una regla para permitir el tráfico entrante a través del puerto que especificamos en el archivo de configuración, 51820. Lo hacemos ejecutando un comando muy simple:

$ sudo UFW Permitir 51820/UDP 

También necesitamos permitir el reenvío de paquetes en nuestro sistema. Para lograr la tarea, eliminamos el comentario de la línea 28 del /etc/sysctl.confusión Archivo, para que se vea así:

# Descomment La siguiente línea para habilitar el reenvío de paquetes para la red IPv4.IPv4.ip_forward = 1 

Para hacer que los cambios sean efectivos sin reiniciar el sistema, necesitamos ejecutar el siguiente comando:

$ sudo sysctl -p 

En el siguiente paso configuraremos el cliente.

Generación de claves del cliente

Ahora pasemos al sistema que queremos usar como cliente. Necesitamos instalar WireGuard en él; Una vez hecho esto, podemos generar un par de claves tal como lo hicimos en el servidor:

$ wg genkey | Tee Client_Private_Key | WG PUBKEY> Client_public_key 

Al igual que hicimos el lado del servidor, creamos el WG0.confusión archivo de configuración. Esta vez con este contenido:

[Interfaz] privateKey = dirección = 10.0.0.24/24 [Peer] PublicKey = Endpoint =: 51820 PERMEDERS = 0.0.0.0/0 

Ya vimos el significado de los campos contenidos en el Interfaz Sección, cuando generamos la configuración del servidor. Aquí acabamos de adaptar los valores a nuestro cliente (tendrá el 10.0.0.2 dirección en la VPN).

En esta configuración, utilizamos una nueva sección, [Par]. En él, podemos especificar la información relativa a un par, en este caso la que usamos como "servidor". Los campos que usamos son:

  • Llave pública
  • Punto final
  • Permitido

En el Llave pública campo, especificamos el público Clave del par, entonces, en este caso, la clave pública que generamos en el servidor.

El Punto final es la dirección IP pública o el nombre de host del par seguido de un colon y el número de puerto en el que el par de los pares escucha (en nuestro caso 51820).

Finalmente, el valor pasó al Permitido campo, es una lista separada por comas de direcciones IP y máscara de subred con notación CIDR. Solo se permitirá el tráfico dirigido al par que proviene de las direcciones especificadas. En este caso usamos 0.0.0.0/0 Como valor: funciona como un valor de "atrapar todo", por lo que todo el tráfico se enviará al par VPN (el servidor).

Al igual que hicimos el lado del servidor, establecemos los permisos apropiados y movemos las claves y el archivo de configuración al /etc/cableguard directorio:

$ chmod 600 client_public_key client_private_key wg0.conf $ sudo mv client_public_key client_private_key wg0.conf /etc /cableguard 

Con el archivo de configuración en su lugar, podemos iniciar el servicio:

$ sudo SystemCtl Enable--Now wg-quick@wg0 

Finalmente, el [Par] Sección en relación con nuestro cliente, debe agregarse al archivo de configuración que creamos anteriormente en el servidor. Nosotros adjuntar el siguiente contenido:

[Peer] PublicKey = PERMEDERS = 10.0.0.2/32 

En este punto reiniciamos el servicio:

$ sudo systemctl reiniciar wg-quick@wg0 

La información sobre el par asociado ahora debe informarse en la salida del WG dominio:

$ sudo wg interfaz: wg0 clave pública: nnx3zpcv9d2dtghdsoygbnr64zg5jtj4z4t2se759v4 = privado clave: (hidden) Puerto de escucha: 51820 Peser: T5PKKG5/9fjkiu0lrntahv6gvabcmcjqq5gf3gf3wf3w.0.0.2/32 

En este punto, desde el sistema "cliente", deberíamos poder hacer ping al servidor en el 10.0.0.1 DIRECCIÓN:

$ ping -c 3 10.0.0.1 ping 10.0.0.1 (10.0.0.1) 56 (84) bytes de datos. 64 bytes de 10.0.0.1: icmp_seq = 1 ttl = 64 time = 2.82 ms 64 bytes de 10.0.0.1: icmp_seq = 2 ttl = 64 time = 38.0 ms 64 bytes de 10.0.0.1: icmp_seq = 3 ttl = 64 time = 3.02 MS --- 10.0.0.1 estadísticas de ping --- 3 paquetes transmitidos, 3 recibidos, 0% de pérdida de paquetes, tiempo 2003 ms rtt min/avg/max/mdev = 2.819/14.613/37.999/16.536 ms 

Conclusiones

En este tutorial vimos cómo crear una VPN usando WireGuard en la última versión estable de Ubuntu: 20.04 fosa focal. El software es realmente simple de instalar y configurar, especialmente si se compara con otras soluciones, como por ejemplo OpenVPN.

Vimos cómo generar las claves públicas y privadas utilizadas para nuestra configuración y cómo configurar tanto el servidor como el cliente para que todo el tráfico se redirle a la VPN. Después de la instrucción dada, tendrá una configuración de trabajo. Para obtener más información, eche un vistazo a la página del proyecto.

Tutoriales de Linux relacionados:

  • Cosas para instalar en Ubuntu 20.04
  • Cosas que hacer después de instalar Ubuntu 20.04 fossa focal Linux
  • Cómo configurar un servidor OpenVPN en Ubuntu 20.04
  • Ubuntu básico 22.04 Configuración de conexión de cliente/servidor OpenVPN
  • Ubuntu 20.04 trucos y cosas que quizás no sepas
  • Ubuntu 20.04 Guía
  • Cosas para instalar en Ubuntu 22.04
  • Lista e instalación de clientes FTP en Ubuntu 20.04 Linux ..
  • Ubuntu 20.04: WordPress con instalación de Nginx
  • Los 8 mejores entornos de escritorio de Ubuntu (20.04 fosa focal ..