Cómo configurar Wireguard VPN en CentOS 8

Cómo configurar Wireguard VPN en CentOS 8

Wireguard es una implementaci√≥n de VPN multiplataforma de c√≥digo abierto que utiliza criptograf√≠a de √ļltima generaci√≥n. Es m√°s r√°pido, m√°s simple y m√°s funcional que los protocolos IPSec y OpenVPN. Est√° dise√Īado como una VPN de uso general para ejecutarse en interfaces integradas y supercomputadoras y se ejecuta en Linux, Windows, macOS, iOS, Android, BSD y varias otras plataformas.

Este tutorial cubrirá cómo instalar Wireguard VPN en un servidor basado en CentOS 8 y conectarse a él usando un cliente Linux (CentOS/Fedora/Ubuntu).

Paso 1 РSistema de actualización

Antes de continuar, es imperativo actualizar su sistema para instalar las √ļltimas actualizaciones.

$ sudo dnf update

Paso 2: instalar y habilitar el repositorio EPEL

Los paquetes necesarios de Wireguard se pueden encontrar en el repositorio de EPEL, por lo que debemos instalarlos y habilitarlos.

$ sudo dnf install epel-release
$ sudo dnf config-manager --set-enabled PowerTools

También habilitamos el repositorio de PowerTools ya que los paquetes EPEL dependen de él.

Paso 3: instale Wireguard

Habilite el repositorio de Wireguard.

$ sudo dnf copr enable jdoss/wireguard

Instale Wireguard.

$ sudo dnf install wireguard-dkms wireguard-tools

Este paso también instala el compilador GNU GCC necesario para compilar los módulos del kernel de Linux.

Paso 4: configurar el servidor Wireguard

Cree un archivo de configuración vacío en el servidor para la configuración de Wireguard con los permisos adecuados.

$ sudo mkdir /etc/wireguard
$ sudo sh -c 'umask 077; touch /etc/wireguard/wg0.conf'

El comando Touch crea el archivo wg0-server.conf en el directorio /etc/wireguard.

A continuaci√≥n, cree un par de claves p√ļblica/privada para el servidor Wireguard.

$ cd /etc/wireguard
$ sudo sh -c 'umask 077; wg genkey | tee privatekey | wg pubkey > publickey'

Esto crea una clave p√ļblica y privada para Wireguard y las escribe en los archivos respectivos.

Ver la clave privada que acabamos de crear.

$ sudo cat privatekey

Anote la clave y cópiela porque la necesitaremos para configurar Wireguard.

A continuación, edite el archivo de configuración.

$ sudo nano /etc/wireguard/wg0.conf

Agrega el siguiente código.

[Interface]
## VPN server private IP address ##
Address = 192.168.10.1/24
 
## VPN server port - You can choose any port ##
ListenPort = 37822
 
## VPN server's private key i.e. /etc/wireguard/privatekey - the one from above ##
PrivateKey = GCEXafeZKqSsuLfvuHE+zLzMYwoH4qQyBh7MZ4f/3kM=
 
## Save and update this config file when a new peer (vpn client) added ##
SaveConfig = true

Cada configuración tiene una sección llamada [Interface] donde se define la parte del servidor.

Contiene la clave privada del servidor WireGuard local, el puerto UDP en el que debe escuchar las conexiones entrantes y sus propias direcciones IP de VPN.

También establecemos SaveConfig en verdadero. Esto le indicará al servicio Wireguard que guarde automáticamente su configuración activa en este archivo al cerrar.

Prensa Control + W para cerrar el archivo y entrar Y cuando se le solicite guardar el archivo.

Paso 5: configurar el cortafuegos

Necesitamos abrir el puerto que elegimos para Wireguard.

Primero, necesitamos definir el servicio Wireguard para el firewall. Para ello, cree un archivo wireguard.xml con el editor Nano.

$ sudo nano /etc/firewalld/services/wireguard.xml

Pegue el siguiente código en el archivo.

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>wireguard</short>
  <description>WireGuard open UDP port 37822 for client connections</description>
  <port protocol="udp" port="37822"/>
</service>

Prensa Control + W para cerrar el archivo y entrar Y cuando se le solicite guardar el archivo.

Luego, habilite el servicio Wireguard en el firewall.

$ sudo firewall-cmd --permanent --add-service=wireguard

Active el enmascaramiento para que todo el tr√°fico que entra y salga de 192.168.10.0/24 enrutado a trav√©s de nuestra direcci√≥n IP p√ļblica del servidor 203.1.114.98/24.

$ sudo firewall-cmd --permanent --add-masquerade

Finalmente, recarga el firewall para activar las reglas.

$ sudo firewall-cmd --reload

Enumere las reglas de firewall actuales para confirmar.

$ sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: wireguard ssh
  ports: 
  protocols: 
  masquerade: yes
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

Paso 6: active el reenvío de IPv4

Cree el archivo /etc/sysctl.d/99-custom.conf.

$ sudo nano /etc/sysctl.d/99-custom.conf

Pegue el siguiente código en el archivo.

## Turn on bbr ##
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
 
## for IPv4 ##
net.ipv4.ip_forward = 1
 
## Turn on basic protection/security ##
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.tcp_syncookies = 1

## for IPv6 ##
net.ipv6.conf.all.forwarding = 1

Prensa Control + W para cerrar el archivo y entrar Y cuando se le solicite guardar el archivo.

El alcance del código en el archivo anterior está fuera del alcance de este tutorial, así que por ahora, utilícelo tal como está.

Vuelva a cargar los cambios.

$ sudo sysctl -p /etc/sysctl.d/99-custom.conf

De manera predeterminada, el firewall no permitirá que las interfaces wg0 y eth0 se comuniquen entre sí. Por lo tanto, debemos agregar la interfaz Wireguard a la red interna y activar el enmascaramiento.

$ sudo firewall-cmd --add-interface=wg0 --zone=internal
$ sudo firewall-cmd --permanent --zone=internal --add-masquerade

Paso 7: habilite e inicie el servicio Wireguard

A continuación, debemos habilitar e iniciar el servicio Wireguard.

$ sudo systemctl enable [email protected]
$ sudo systemctl start [email protected]

Puede verificar si la interfaz Wireguard, wg0 est√° activa y funcionando mediante el siguiente comando.

$ sudo wg
interface: wg0
  public key: VWndJ4oB7ZJwC/7UOm++OLDrbAxMPsR2yd0cl3sEkUI=
  private key: (hidden)
  listening port: 37822

$ sudo ip a show wg0
3: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none
    inet 192.168.10.1/24 scope global wg0
       valid_lft forever preferred_lft forever

Paso 8: instalar y configurar el cliente WireGuard

Puede encontrar las instrucciones de instalación del cliente Wireguard para su distribución de Linux en su instalación oficial página.

Una vez que instale el cliente, debe crear el archivo de configuración del cliente.

$ sudo mkdir /etc/wireguard
$ sudo sh -c 'umask 077; touch /etc/wireguard/wg0.conf'
$ cd /etc/wireguard/
$ sudo sh -c 'umask 077; wg genkey | tee privatekey | wg pubkey > publickey'
$ sudo cat privatekey

Tenga en cuenta la clave privada que obtiene al final. A continuación, debemos editar el archivo de configuración que acabamos de crear.

$ sudo nano /etc/wireguard/wg0.conf

Agregue las siguientes directivas al archivo.

[Interface]
## client private key ##
PrivateKey = OEM6D/zt2fVWOepVv3iEDD430V0gAshKp4+5oVVt5EE=
 
## client ip address ##
Address = 192.168.10.2/24
 
[Peer]
## CentOS 8 server public key ##
PublicKey = VWndJ4oB7ZJwC/7UOm++OLDrbAxMPsR2yd0cl3sEkUI=
 
## set ACL ##
AllowedIPs = 192.168.10.0/24
 
## Your CentOS 8 server's public IPv4/IPv6 address and port ##
Endpoint = 203.1.114.98:37822
 
##  Key connection alive ##
PersistentKeepalive = 15

Tenga en cuenta que le asignamos la IP privada 192.168.10.1 al servidor y 192.168.10.2 al cliente. También agregamos la clave privada del cliente al archivo.

los [Peer] La secci√≥n es donde ingresa la configuraci√≥n del servidor al que se conectar√° el cliente. Aqu√≠ hemos agregado la clave p√ļblica, la IP p√ļblica y un conjunto de IP permitidas que contiene la IP privada de nuestro servidor. PersistentKeepalive le dice a WireGuard que env√≠e un paquete UDP cada 15 segundos, esto es √ļtil si est√° detr√°s de un NAT y desea mantener viva la conexi√≥n.

Prensa Control + W para cerrar el archivo y entrar Y cuando se le solicite guardar el archivo.

Ahora es el momento de habilitar e iniciar el cliente VPN.

$ sudo systemctl enable [email protected]
$ sudo systemctl start [email protected]
$ sudo systemctl status [email protected]

Paso 9: configurar el servidor para agregar el cliente

Ahora, debemos agregar la configuración del cliente al servidor nuevamente para informarle sobre el cliente.

Primero detenga el servicio Wireguard.

$ sudo systemctl stop [email protected]

Abra el archivo wg0.conf para editarlo.

$ sudo nano /etc/wireguard/wg0.conf

Agregue el siguiente código al final del archivo.

[Peer] 
## client VPN public key ## 
PublicKey = dmfO9pirB315slXOgxXtmrBwAqPy07C57EvPks1IKzA=  

## client VPN IP address (note /32 subnet) ## 
AllowedIPs = 192.168.10.2/32

Prensa Control + W para cerrar el archivo y entrar Y cuando se le solicite guardar el archivo.

los [Peer] Las secciones definen los otros miembros de la red VPN. Puede agregar tantos como necesite.

Contienen su clave p√ļblica, que debe coincidir con la clave privada del par en su [Interface] secci√≥n.

Tenga en cuenta que cualquier conexi√≥n entrante se autentica primero con una de las claves p√ļblicas. Si la conexi√≥n no es de un par verificado, los paquetes entrantes simplemente se ignoran en silencio. Dado que las conexiones de hosts que no poseen una clave privada coincidente no se responden en absoluto, una VPN WireGuard no solo proporciona comunicaci√≥n cifrada, sino que tambi√©n permanece oculta para los extra√Īos.

Vuelva a iniciar el servicio Wireguard.

$ sudo systemctl start [email protected]

Paso 10 – Prueba

Verifiquemos si tanto el cliente como el servidor están conectados de forma segura mediante VPN. Para probar la conexión, ejecute los siguientes comandos en su cliente.

$ ping -c 192.168.10.1
PING 192.168.10.1 (192.168.10.1) 56(84) bytes of data.
64 bytes from 192.168.10.1: icmp_seq=1 ttl=64 time=44.2 ms
64 bytes from 192.168.10.1: icmp_seq=2 ttl=64 time=45.8 ms
64 bytes from 192.168.10.1: icmp_seq=3 ttl=64 time=46.7 ms
64 bytes from 192.168.10.1: icmp_seq=4 ttl=64 time=44.1 ms

--- 192.168.10.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2800ms
rtt min/avg/max/mdev = 41.729/47.829/48.953/5.046 ms

$ sudo wg
interface: wg0
  public key: dmfO9pirB315slXOgxXtmrBwAqPy07C57EvPks1IKzA= 
  private key: (hidden)
  listening port: 
 
peer: VWndJ4oB7ZJwC/7UOm++OLDrbAxMPsR2yd0cl3sEkUI=
  endpoint: 203.1.114.98:37822
  allowed ips: 192.168.10.0/24
  latest handshake: 1 minute, 40 seconds ago
  transfer: 938 B received, 45.67 KiB sent
  persistent: keepalive: every 15 seconds

Conclusión

Eso es todo lo que hay en este tutorial. Ahora debería tener un servidor VPN basado en Wireguard basado en un servidor CentOS 8. Si tiene alguna pregunta, hágala en los comentarios a continuación.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *