Configurar VPN WireGuard con NetworkManager

Las redes privadas virtuales (VPN) se utilizan ampliamente. Hoy en día existen diferentes soluciones disponibles que permiten a los usuarios acceder a cualquier tipo de recurso manteniendo su confidencialidad y privacidad.

Últimamente, uno de los protocolos VPN más utilizados es WireGuard por su sencillez, rapidez y seguridad que ofrece. La implementación de WireGuard comenzó en el kernel de Linux pero actualmente está disponible en otras plataformas como iOS y Android, entre otras.

WireGuard utiliza UDP como protocolo de transporte y basa la comunicación entre pares en Critokey Routing (CKR). Cada par, ya sea servidor o cliente, tiene un par de claves (pública y privada) y existe un vínculo entre las claves públicas y las IP permitidas para comunicarse. Para obtener más información sobre WireGuard, visite su página .

Este artículo describe cómo configurar WireGuard entre dos pares: PeerA y PeerB. Ambos nodos se están ejecutando Fedora Linux y ambos usan NetworkManager para una configuración persistente.

Instalación de WireGuard y configuración de red

Está a solo tres pasos de tener una conexión VPN persistente entre PeerA y PeerB:

  1. Instale los paquetes necesarios.
  2. Genera pares de claves.
  3. Configure las interfaces de WireGuard.

Instalación

Instale el paquete de herramientas de protección de cables en ambos pares (PeerA y PeerB):

                      $ sudo -i
# dnf -y install wireguard-tools
                    

Este paquete está disponible en el Fedora Repositorio de actualizaciones de Linux. Crea un directorio de configuración en /etc/wireguard/. Aquí es donde creará las claves y el archivo de configuración de la interfaz.

Generar los pares de claves

A continuación, use la utilidad wg para generar claves públicas y privadas en cada nodo:

                      # cd /etc/wireguard
# wg genkey | tee privatekey | wg pubkey > publickey
                    

Configurar la interfaz WireGuard en PeerA

Las interfaces WireGuard usan los nombres: wg0, wg1, etc. Cree la configuración para la interfaz WireGuard. Para esto, necesita los siguientes elementos:

  • La dirección IP y la MÁSCARA que desea configurar en el nodo PeerA.
  • El puerto UDP donde escucha este par.
  • Clave privada de PeerA.
                      # cat << EOF > /etc/wireguard/wg0.conf
[Interface]
Address = 172.16.1.254/24
SaveConfig = true
ListenPort = 60001
PrivateKey = mAoO2RxlqRvCZZoHhUDiW3+zAazcZoELrYbgl+TpPEc=

[Peer]
PublicKey = IOePXA9igeRqzCSzw4dhpl4+6l/NiQvkDSAnj5LtShw=
AllowedIPs = 172.16.1.2/32
EOF
                    

Permita el tráfico UDP a través del puerto en el que escuchará este par:

                      # firewall-cmd --add-port=60001/udp --permanent --zone=public
# firewall-cmd --reload
success
                    

Finalmente, importe el perfil de interfaz en NetworkManager. Como resultado, la interfaz de WireGuard persistirá después de reiniciar.

                      # nmcli con import type wireguard file /etc/wireguard/wg0.conf
Connection 'wg0' (21d939af-9e55-4df2-bacf-a13a4a488377) successfully added.
                    

Verifique el estado del dispositivo wg0:

                      # wg
interface: wg0
  public key: FEPcisOjLaZsJbYSxb0CI5pvbXwIB3BCjMUPxuaLrH8=
  private key: (hidden)
  listening port: 60001

peer: IOePXA9igeRqzCSzw4dhpl4+6l/NiQvkDSAnj5LtShw=
  allowed ips: 172.16.1.2/32

# nmcli -p device show wg0

===============================================================================
                             Device details (wg0)
===============================================================================
GENERAL.DEVICE:                         wg0
-------------------------------------------------------------------------------
GENERAL.TYPE:                           wireguard
-------------------------------------------------------------------------------
GENERAL.HWADDR:                         (unknown)
-------------------------------------------------------------------------------
GENERAL.MTU:                            1420
-------------------------------------------------------------------------------
GENERAL.STATE:                          100 (connected)
-------------------------------------------------------------------------------
GENERAL.CONNECTION:                     wg0
-------------------------------------------------------------------------------
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveC>
-------------------------------------------------------------------------------
IP4.ADDRESS[1]:                         172.16.1.254/24
IP4.GATEWAY:                            --
IP4.ROUTE[1]:                           dst = 172.16.1.0/24, nh = 0.0.0.0, mt =>
-------------------------------------------------------------------------------
IP6.GATEWAY:                            --
-------------------------------------------------------------------------------
                    

El resultado anterior muestra que la interfaz wg0 está conectada. Ahora puede comunicarse con un compañero cuya dirección IP de VPN es 172.16.1.2.

Configurar la interfaz WireGuard en PeerB

Es hora de crear el archivo de configuración para la interfaz wg0 en el segundo par. Asegúrate de tener lo siguiente:

  • La dirección IP y la MÁSCARA para establecer en PeerB.
  • La clave privada de PeerB.
  • La clave pública de PeerA.
  • La dirección IP o el nombre de host de PeerA y el puerto UDP en el que escucha el tráfico de WireGuard.
                      # cat << EOF > /etc/wireguard/wg0.conf
[Interface]
Address = 172.16.1.2
SaveConfig = true
PrivateKey = UBiF85o7937fBK84c2qLFQwEr6eDhLSJsb5SAq1lF3c=

[Peer]
PublicKey = FEPcisOjLaZsJbYSxb0CI5pvbXwIB3BCjMUPxuaLrH8=
AllowedIPs = 172.16.1.254/32
Endpoint = peera.googlesyndication.com:60001
EOF
                    

El último paso consiste en importar el perfil de la interfaz a NetworkManager. Como mencioné antes, esto permite que la interfaz de WireGuard tenga una configuración persistente después de reiniciar.

                      # nmcli con import type wireguard file /etc/wireguard/wg0.conf
Connection 'wg0' (39bdaba7-8d91-4334-bc8f-85fa978777d8) successfully added.
                    

Verifique el estado del dispositivo wg0:

                      # wg
interface: wg0
  public key: IOePXA9igeRqzCSzw4dhpl4+6l/NiQvkDSAnj5LtShw=
  private key: (hidden)
  listening port: 47749

peer: FEPcisOjLaZsJbYSxb0CI5pvbXwIB3BCjMUPxuaLrH8=
  endpoint: 192.168.124.230:60001
  allowed ips: 172.16.1.254/32

# nmcli -p device show wg0

===============================================================================
                             Device details (wg0)
===============================================================================
GENERAL.DEVICE:                         wg0
-------------------------------------------------------------------------------
GENERAL.TYPE:                           wireguard
-------------------------------------------------------------------------------
GENERAL.HWADDR:                         (unknown)
-------------------------------------------------------------------------------
GENERAL.MTU:                            1420
-------------------------------------------------------------------------------
GENERAL.STATE:                          100 (connected)
-------------------------------------------------------------------------------
GENERAL.CONNECTION:                     wg0
-------------------------------------------------------------------------------
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveC>
-------------------------------------------------------------------------------
IP4.ADDRESS[1]:                         172.16.1.2/32
IP4.GATEWAY:                            --
-------------------------------------------------------------------------------
IP6.GATEWAY:                            --
-------------------------------------------------------------------------------
                    

El resultado anterior muestra que la interfaz wg0 está conectada. Ahora puede comunicarse con un compañero cuya dirección IP de VPN es 172.16.1.254.

Verificar la conectividad entre pares

Después de ejecutar el procedimiento descrito anteriormente, ambos pares pueden comunicarse entre sí a través de la conexión VPN, como se demuestra en la siguiente prueba ICMP:

                      [[email protected] ~]# ping 172.16.1.254 -c 4
PING 172.16.1.254 (172.16.1.254) 56(84) bytes of data.
64 bytes from 172.16.1.254: icmp_seq=1 ttl=64 time=0.566 ms
64 bytes from 172.16.1.254: icmp_seq=2 ttl=64 time=1.33 ms
64 bytes from 172.16.1.254: icmp_seq=3 ttl=64 time=1.67 ms
64 bytes from 172.16.1.254: icmp_seq=4 ttl=64 time=1.47 ms
                    

En este escenario, si captura el tráfico UDP en el puerto 60001 en PeerA, verá que la comunicación se basa en el protocolo WireGuard y los datos cifrados:

Captura de tráfico UDP entre pares que se basan en el protocolo WireGuard

Conclusión

Las redes privadas virtuales (VPN) son muy comunes. Entre una amplia variedad de protocolos y herramientas para implementar una VPN, WireGuard es una opción simple, liviana y segura. Permite conexiones seguras punto a punto entre pares basadas en el enrutamiento CryptoKey y el procedimiento es muy sencillo. Además, NetworkManager admite interfaces WireGuard que permiten configuraciones persistentes después de reiniciar.

Related Posts