Cómo instalar Wireguard en Ubuntu 18

Un Túnel VPN Rápido, Moderno y Seguro

Objetivo

En este tutorial, aprenderemos qué es Wireguard, para qué se usa, cómo instalarlo y configurarlo y, por último, cómo usarlo sabiamente.

¿Qué es Wireguard?

Wireguard es un software de túnel VPN avanzado, confiable y de código abierto que puede instalar y usar ahora mismo para crear una conexión segura punto a punto a un servidor.

Nota: Actualización: los creadores de Ubuntu 20.04 han decidido incluir un kernel personalizado en la versión más reciente de Ubuntu que incluye funcionalidad para el servicio WireGuard VPN. ¡WireGuard ahora es parte del repositorio de Universe, por lo que ya no se necesita un repositorio de terceros para instalar wireguard! Puede agregar este software usando el siguiente comando: “apt-get install wireguard-dkms -y”

requisitos previos

  • Debe iniciar sesión como usuario con sudo privilegios, o como usuario raíz para instalar el software Wireguard en su sistema.
  • El software Wireguard se está instalando en un servidor Ubuntu 18.04.

Instalación del servidor

Primero, agregaremos el repositorio ppa:wireguard/wireguard.

  [email protected]:~# add-apt-repository ppa:wireguard/wireguard  WireGuard is a novel VPN that runs inside the Linux Kernel. This is the Ubuntu packaging for WireGuard. More info may be found at its website, listed below.
 More info: https://www.wireguard.com/ Packages: wireguard wireguard-tools wireguard-dkms
 Install with: $ apt install wireguard  More info: https://launchpad.net/~wireguard/+archive/ubuntu/wireguard
 Press [ENTER] to continue or Ctrl-c to cancel adding it.
 Get:1 https://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
 Hit:2 https://us.archive.ubuntu.com/ubuntu bionic InRelease
 Get:3 https://us.archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]
 Get:4 https://repo.saltstack.com/py3/ubuntu/18.04/amd64/latest bionic InRelease [2126 B]
 Hit:5 https://deb.nodesource.com/node_10.x bionic InRelease
 Get:6 https://ppa.launchpad.net/wireguard/wireguard/ubuntu bionic InRelease [15.9 kB]
 Get:7 https://us.archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]
 Get:9 https://repo.saltstack.com/py3/ubuntu/18.04/amd64/latest bionic/main amd64 Packages [3202 B]
 Hit:8 https://packages.cloud.google.com/apt kubernetes-xenial InRelease
 Get:10 https://us.archive.ubuntu.com/ubuntu bionic-updates/main i386 Packages [662 kB]
 Get:11 https://us.archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages [897 kB]
 Get:12 https://us.archive.ubuntu.com/ubuntu bionic-updates/universe i386 Packages [1012 kB]
 Get:13 https://us.archive.ubuntu.com/ubuntu bionic-updates/universe amd64 Packages [1061 kB]
 Get:14 https://ppa.launchpad.net/wireguard/wireguard/ubuntu bionic/main i386 Packages [984 B]
 Hit:15 https://packages.cisofy.com/community/lynis/deb stable InRelease
 Get:16 https://ppa.launchpad.net/wireguard/wireguard/ubuntu bionic/main amd64 Packages [984 B]
 Get:17 https://ppa.launchpad.net/wireguard/wireguard/ubuntu bionic/main Translation-en [764 B]
 Fetched 3909 kB in 2s (1978 kB/s)
 Reading package lists... Done
 [email protected]:~# 

A continuación, debemos ejecutar una actualización para garantizar que nuestro nuevo repositorio sea reconocido y agregado a la base de datos.

[email protected]:~# apt-get update
Hit:2 https://repo.saltstack.com/py3/ubuntu/18.04/amd64/latest bionic InRelease
Hit:3 https://security.ubuntu.com/ubuntu bionic-security InRelease
Hit:4 https://us.archive.ubuntu.com/ubuntu bionic InRelease
Hit:5 https://ppa.launchpad.net/wireguard/wireguard/ubuntu bionic InRelease
Hit:6 https://us.archive.ubuntu.com/ubuntu bionic-updates InRelease
Hit:7 https://us.archive.ubuntu.com/ubuntu bionic-backports InRelease
Hit:1 https://packages.cloud.google.com/apt kubernetes-xenial InRelease
Hit:8 https://deb.nodesource.com/node_10.x bionic InRelease
Hit:9 https://packages.cisofy.com/community/lynis/deb stable InRelease
Reading package lists... Done
[email protected]:~#

Finalmente, instalaremos Wireguard usando apt-get.

[email protected]:~# apt-get install wireguard
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  dkms wireguard-dkms wireguard-tools
Suggested packages:
  menu
The following NEW packages will be installed:
  dkms wireguard wireguard-dkms wireguard-tools
0 upgraded, 4 newly installed, 0 to remove and 129 not upgraded.
Need to get 417 kB of archives.
After this operation, 2388 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 https://us.archive.ubuntu.com/ubuntu bionic-updates/main amd64 dkms all 2.3-3ubuntu9.7 [68.1 kB] 
Get:2 https://ppa.launchpad.net/wireguard/wireguard/ubuntu bionic/main amd64 wireguard-dkms all 1.0.20200330-1ubuntu1~18.04 [253 kB]
Get:3 https://ppa.launchpad.net/wireguard/wireguard/ubuntu bionic/main amd64 wireguard-tools amd64 1.0.20200319-0ppa1~18.04 [88.2 kB]
Get:4 https://ppa.launchpad.net/wireguard/wireguard/ubuntu bionic/main amd64 wireguard all 1.0.20200319-0ppa1~18.04 [7980 B]
Fetched 417 kB in 1s (325 kB/s)
Selecting previously unselected package dkms.
(Reading database ... 115256 files and directories currently installed.)
Preparing to unpack .../dkms_2.3-3ubuntu9.7_all.deb ...
Unpacking dkms (2.3-3ubuntu9.7) ...
Selecting previously unselected package wireguard-dkms.
Preparing to unpack .../wireguard-dkms_1.0.20200330-1ubuntu1~18.04_all.deb ...
Unpacking wireguard-dkms (1.0.20200330-1ubuntu1~18.04) ...
Selecting previously unselected package wireguard-tools.
Preparing to unpack .../wireguard-tools_1.0.20200319-0ppa1~18.04_amd64.deb ...
Unpacking wireguard-tools (1.0.20200319-0ppa1~18.04) ...
Selecting previously unselected package wireguard.
Preparing to unpack .../wireguard_1.0.20200319-0ppa1~18.04_all.deb ...
Unpacking wireguard (1.0.20200319-0ppa1~18.04) ...
Setting up wireguard-tools (1.0.20200319-0ppa1~18.04) ...
Setting up dkms (2.3-3ubuntu9.7) ...
Setting up wireguard-dkms (1.0.20200330-1ubuntu1~18.04) ...
Loading new wireguard-1.0.20200330 DKMS files...
Building for 4.15.0-72-generic
Building initial module for 4.15.0-72-generic
Building initial module for 4.15.0-72-generic
Done.
wireguard:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/4.15.0-72-generic/updates/dkms/
depmod...
DKMS: install completed.
Setting up wireguard (1.0.20200319-0ppa1~18.04) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
[email protected]:~#

Configuración del servidor

Habilitar el módulo del núcleo

Luego, debido a que Wireguard funciona como un módulo del kernel, debemos habilitarlo usando el comando modprobe. Esto permitirá que el módulo del núcleo Wireguard se actualice cada vez que se compile un nuevo núcleo.

[email protected]:~# modprobe wireguard
[email protected]:~# 

Ahora podemos verificar que el módulo del kernel esté activo ejecutando el siguiente comando.

[email protected]:~# lsmod | grep wireguard
wireguard             221184 0
ip6_udp_tunnel         16384 1 wireguard
udp_tunnel             16384 1 wireguard
[email protected]:~#

Creación de claves

Ahora, necesitamos crear un par de claves pública y privada para asegurar la conexión. Comenzaremos usando el comando umask para establecer la configuración de permisos predeterminada de los archivos clave.

Aparte, aquí hay información adicional sobre el comando umask. El comando umask (o máscara de modo de creación de archivos de usuario) se utiliza para determinar la configuración de permisos de archivo para los archivos recién creados. También se puede usar para controlar el conjunto de permisos de archivo básico o predeterminado en archivos nuevos. Por lo general, se expresa en valores octales o simbólicos de cuatro dígitos. Dado que vamos a utilizar umask para establecer los permisos en 077 en un nuevo archivo, queremos describir cómo se pueden calcular los ajustes de permisos.

Ver tabla

PocoDirigido apermiso de archivo
0 Dueño leer, escribir y ejecutar
7 Grupo no permisos
7 Otros no permisos

Wireguard también crea una interfaz de red estándar llamada wg0 y wg1 que funcionan de manera similar a eth0 o eth1. Esto nos permite trabajar con esas interfaces de la misma manera que trabajamos con las interfaces de red estándar usando los comandos ipconfig e ip.

Establecer permisos

Primero, para establecer los permisos en las nuevas claves, usaremos el siguiente comando umask 077.

[email protected]:~  # umask 077  
[email protected]:~  #  

A continuación, generaremos las claves públicas y privadas necesarias para cifrar la transmisión de datos.

 [email protected]:~  # wg genkey | tee privatekey | wg pubkey > publickey 

Esto creará y guardará las nuevas claves en el directorio actual. En nuestro caso, dado que ejecutamos el comando mientras estábamos en la carpeta /root, nuestras claves se almacenan allí. Para ver las claves, podemos usar el comando cat. (Tenga en cuenta: NO comparta estas claves con nadie como nosotros estamos aquí. Estas son solo example teclas.)

[email protected]:~  # cat privatekey  
YMJHJqjyQIuro9uVVp3rPoSvD9i92Dw2r2mAt121q3A=  
[email protected]:~  # cat publickey  
Y5HkgP1jRSM9+Ti9CfpKfF/ZSZlQ0GFrRo3tlv+35gc=  
[email protected]:~  #

Crear archivo de configuración

Ahora, necesitamos crear un archivo de configuración para la interfaz wg0. Inicialmente ingresaremos a la carpeta /etc/wireguard y luego tocaremos el archivo usando el siguiente comando.

[email protected]:~# cd /etc/wireguard/  
[email protected]:/etc/wireguard# ll  
total 8  
drwx------   2 root root 4096 Mar 20 07:00 ./  
drwxr-xr-x 102 root root 4096 Apr  1 14:08 ../  
[email protected]:/etc/wireguard# touch wg0.conf  
[email protected]:/etc/wireguard#  

El siguiente paso es usar vim para editar el archivo wg0.conf.

[email protected]:/etc/wireguard# vim wg0.conf 

Ahora, necesitamos copiar los siguientes ajustes de configuración básicos y copiarlos en nuestro archivo conf. Luego, agregaremos las direcciones IP seleccionadas que usará nuestra interfaz y las colocaremos en el archivo de configuración.

[Interface]  
  PrivateKey = YMJHJqjyQIuro9uVVp3rPoSvD9i92Dw2r2mAt121q3A  
 Address = 10.10.0.1/24 
 Address = fd86:ea04:1111::1/64 
  SaveConfig = true  
  PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o ens3 -j MASQUERADE  
  PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o ens3 -j MASQUERADE  
  ListenPort = 51820 

Los términos anteriores del archivo wg0.conf se definen a continuación.

  • Llave privada: Este campo contiene la clave privada generada anteriormente.
  • Habla a : Los dos valores de dirección IP definen las direcciones IPv4 e IPv6 privadas para el servidor WireGuard. Todos los pares en la red VPN deben tener un valor único para esta configuración.
  • Guardar configuración : este valor, a diferencia de otros servidores VPN, indica que Wireguard no necesita reiniciarse o recargarse para que los clientes se conecten a él. Simplemente necesitamos usar el comando wg para agregar a nuestros pares, y podrán conectarse directamente. Debido a que esta configuración es una operación “en memoria”, si reiniciamos el servidor, se eliminarán nuestros pares que se agregaron. Aquí es donde entra en juego la configuración SaveConfig. Este valor le dice al comando wg-quick que guarde automáticamente cualquier nuevo par que se agregue a nuestro archivo de configuración.
  • Método / PostDown: Esta configuración define los pasos adicionales que deben ejecutarse cuando la interfaz wg0 está habilitada o deshabilitada. En este caso, el comando iptables se utiliza para indicar las reglas de IP que se plantean para permitir que los clientes compartan la dirección IPv4 o IPv6 principal del servidor. Estas reglas se borrarán tan pronto como se caiga el túnel.
  • puerto de escucha : Esta configuración especifica en qué puerto WireGuard escuchará las conexiones entrantes.

Si elegimos no incluir las reglas del firewall en nuestro archivo conf, podemos ejecutar el siguiente comando sysctl para habilitar el reenvío de puertos.

[email protected]:~# sysctl -w net.ipv4.ip_forward=1 

Ahora, necesitamos modificar la configuración de permisos en el archivo wg0.conf.

[email protected]:~# chmod -v 600 /etc/wireguard/wg0.conf  
  mode of '/etc/wireguard/wg0.conf' changed from 0644 (rw-r--r--) to 0600 (rw-------)  
[email protected]:~# 

Actualizar reglas de cortafuegos

A continuación, debemos permitir las conexiones SSH, abrir el puerto VPN de WireGuard y, finalmente, habilitar el firewall en el servidor.

[email protected]:/etc/wireguard# ufw allow 22/tcp  
 Rules updated 
 Rules updated (v6) 
 [email protected]:/etc/wireguard# ufw allow 51820/udp 
 Rules updated 
 Rules updated (v6) 
 [email protected]:/etc/wireguard# ufw enable 
 Command may disrupt existing ssh connections. Proceed with operation (y|n)? y 
 Firewall is active and enabled on system startup 
[email protected]:/etc/wireguard# 

Para verificar nuestra configuración, podemos ejecutar el comando ufw status.

[email protected]:/etc/wireguard# ufw status verbose 
 Status: active 
 Logging: on (low) 
 Default: deny (incoming), allow (outgoing), deny (routed) 
 New profiles: skip 
 To                         Action From 
 --                         ------ ---- 
 80,443/tcp (Nginx Full)    ALLOW IN Anywhere 
 22/tcp                     ALLOW IN Anywhere 
 51820/udp                  ALLOW IN Anywhere 
 80,443/tcp (Nginx Full (v6)) ALLOW IN    Anywhere (v6) 
 22/tcp (v6)                ALLOW IN Anywhere (v6) 
 51820/udp (v6)             ALLOW IN Anywhere (v6) 
[email protected]:/etc/wireguard#

Inicie el servicio Wireguard

Ahora, podemos iniciar el servicio Wireguard usando el siguiente comando.

[email protected]:/etc/wireguard# cd 
[email protected]:~# wg-quick up wg0 
 [#] ip link add wg0 type wireguard 
 [#] wg setconf wg0 /dev/fd/63 
 [#] ip -4 address add 10.10.0.1/24 dev wg0 
 [#] ip -6 address add fd86:ea04:1111::1/64 dev wg0 
 [#] ip link set mtu 1420 up dev wg0 
 [#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o ens3 -j MASQUERADE 
[email protected]:~#  

Nota: El comando “wg-quick” es un práctico contenedor de comandos para varias de las tareas estándar que se utilizan junto con el comando “wg”. Para examplepodemos habilitar o deshabilitar la interfaz wg0 usando los siguientes comandos.

[email protected]:~#  wg-quick down wg0  
[email protected]:~#  wg-quick up wg0 

A continuación, habilitaremos el servicio Wireguard para que se reinicie automáticamente cuando se inicie el servidor.

[email protected]:~# systemctl enable [email protected] 
 Created symlink /etc/systemd/system/multi-user.target.wants/[email protected] → /lib/systemd/system/[email protected] 
[email protected]:~#  

Ahora, podemos verificar si el servicio Wireguard se está ejecutando.

[email protected]:~# wg show  
  interface: wg0  
    public key: Y5HkgP1jRSM9+Ti9CfpKfF/ZSZlQ0GFrRo3tlv+35gc=  
    private key: (hidden)  
    listening port: 51820  
[email protected]:~# 

Además, podemos verificar usando nuestro comando ifconfig.

[email protected]:~# ifconfig wg0  
wg0: flags=209<UP,POINTOPOINT,RUNNING,NOARP>  mtu 1420  
inet 10.10.0.1  netmask 255.255.255.0  destination 10.10.0.1  
inet6 fd86:ea04:1111::1  prefixlen 64 scopeid 0x0<global>  
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 1000 (UNSPEC)  
RX packets 0  bytes 0 (0.0 B)  
RX errors 0  dropped 0 overruns 0  frame 0  
TX packets 0  bytes 0 (0.0 B)  
TX errors 0  dropped 0 overruns 0  carrier 0 collisions 0  
[email protected]:~# 

Instalación del cliente

La configuración del cliente de Wireguard es muy similar a la configuración del servidor en que la única diferencia está en el archivo de configuración. Hay varias formas de agregar un par (cliente) en Wireguard.

Instalación del cliente de Ubuntu

Primero, necesitaremos establecer permisos y luego generar un par de claves en el cliente.

[email protected]:~  # cd /etc/wireguard 
[email protected]:~  # umask 077  
[email protected]:~  # wg genkey | tee privatekey | wg pubkey > publickey  

Crear archivo de configuración

Ahora, necesitamos crear un archivo de configuración para la interfaz wg0. Primero ingresaremos a la carpeta /etc/wireguard y luego tocaremos el archivo usando el siguiente comando.

[email protected]:/etc/wireguard# ll  
  total 8  
  drwx------   2 root root 4096 Mar 20 07:00 ./  
  drwxr-xr-x 102 root root 4096 Apr  1 14:08 ../  
[email protected]:/etc/wireguard# touch wg0-client.conf  
[email protected]:/etc/wireguard# 

El siguiente paso es usar vim para editar nuestro archivo local wg0-client.conf.

[email protected]:/etc/wireguard# vim wg0-client.conf 

Una vez que tengamos el archivo abierto en vim, debemos copiar los siguientes ajustes de configuración básicos y pegarlos en nuestro nuevo archivo wg0-client.conf. Luego, agregaremos nuestras direcciones IP seleccionadas que usará nuestra interfaz. La configuración debe contener la dirección IP del servidor, así como el valor DNS y no contiene los valores ListenPort, PostUp, PostDown y SaveConfig.

[Interface] 
 Address = 10.200.200.2/32 
 PrivateKey = <insert client_private_key> 
 DNS = 10.200.200.1 

[Peer] 
 PublicKey = <insert server_public_key> 
 Endpoint = <insert vpn_server_address>:51820 
 AllowedIPs = 0.0.0.0/0 
 PersistentKeepalive = 21 

Finalmente, queremos asegurar el archivo, por lo que modificamos los permisos en el archivo usando chmod.

[email protected]:/etc/wireguard  #   chmod 600 /etc/wireguard/wg0-client.conf 

A continuación, debemos habilitar el servicio Wireguard en la computadora del cliente

[email protected]:/etc/wireguard# systemctl enable [email protected] 
 wg-quick up wg0 
 [#] ip link add wg0 type wireguard 
 [#] wg setconf wg0 /dev/fd/63 
 [#] ip address add 10.10.0.2/32 dev wg0 
 [#] ip address add fd86:ea04:1111::2/128 dev wg0 
 [#] ip link set mtu 1420 up dev wg0 
 [#] ip -6 route add ::/0 dev wg0 table 51820 
 [#] ip -6 rule add not fwmark 51820 table 51820 
 [#] ip -6 rule add table main suppress_prefixlength 0 
 [#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820 
 [#] ip -4 rule add not fwmark 51820 table 51820 
 [#] ip -4 rule add table main suppress_prefixlength 0

Verifica la conexión

Para verificar los detalles de nuestra conexión, ejecutaremos el comando wg y luego el comando wg-quick save wg0 para guardar la configuración en nuestro archivo de configuración.

[email protected]:/etc/wireguard# wg 
 interface: wg0 
   public key: YMJHJqjyQIuro9uVVp3rPoSvD9i92Dw2r2mAt121q3A= 
   private key: (hidden) 
   listening port: 51820 
 peer: Y5HkgP1jRSM9+Ti9CfpKfF/ZSZlQ0GFrRo3tlv+35gc= 
   endpoint: 10.0.0.2:51820 
   allowed ips: 10.0.0.2/24, fd86:ea04:1115::/64 
[email protected]:/etc/wireguard# wg-quick save wg0 

Luego, podemos probar la conexión haciendo ping al servidor.

ping 10.0.0.1 
    latest handshake: 1 minute, 37 seconds ago 
    transfer: 192.66 KiB received, 143.08 KiB sent 

Por último, debemos permitir que Wireguard se ejecute en el arranque. Para agregar esto a nuestros servicios, ejecutaremos el siguiente comando.

 [email protected]:/etc/wireguard  # systemctl enable [email protected] 

Una nota final; Podemos verificar la conexión en cualquier momento usando el siguiente comando.

[email protected]:/etc/wireguard# wg show  

Instalación del cliente de Windows

Aquí está el enlace para el Wireguard instalador msi para Windows.

Precaución: los desarrolladores de Wireguard recomiendan usar solo el cliente de Windows aprobado, ya que no garantizan la seguridad de las conexiones si se usan otros clientes.

Otras opciones de instalación

Wireguard también ofrece más opciones para instalar el software en varias plataformas. Podemos ver el otro Opciones de instalación de Wireguard aquí.

Conclusión

En general, Wireguard es una herramienta eficaz, estable y útil para asegurar una conexión de un cliente local a su servidor VPN. Aprendimos a instalar y configurar Wireguard en el servidor, así como a instalar y configurar el cliente en su computadora local.

¿Cómo podemos ayudar?

Nuestros equipos de soporte están llenos de personas talentosas con un conocimiento profundo de las tecnologías de alojamiento web, especialmente las que se analizan en este artículo. Si no se siente cómodo siguiendo los pasos descritos aquí, estamos a solo una llamada telefónica, un chat o una multa para ayudarlo en el proceso. Llámanos al 800.580.4985 o abre una chat o solicite un boleto con nosotros para hablar con uno de nuestros asesores expertos en Soluciones o Hosting experimentado para aprender cómo puede aprovechar estas técnicas hoy.

Related Posts