GNU/Linux >> Tutoriales Linux >  >> Cent OS

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 propósito 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 cómo conectarse usando un cliente Linux (CentOS/Fedora/Ubuntu).

Paso 1 - Actualizar sistema

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:instalar 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 táctil crea el archivo wg0-server.conf archivo en el /etc/wireguard directorio.

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 tanto pública como 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 configuramos SaveConfig a true . Esto le indicará al servicio Wireguard que guarde automáticamente su configuración activa en este archivo al cerrar.

Presiona Ctrl + W para cerrar el archivo e ingrese 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>

Presiona Ctrl + W para cerrar el archivo e ingrese Y cuando se le solicite guardar el archivo.

Luego, habilite el servicio Wireguard en el firewall.

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

Activa 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:activar el reenvío de IPv4

Crear /etc/sysctl.d/99-custom.conf archivo.

$ 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

Presiona Ctrl + W para cerrar el archivo e ingrese 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 forma predeterminada, el cortafuegos no permitirá que wg0 y eth0 Las interfaces hablan 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á en funcionamiento con 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 página de instalación oficial.

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.

El [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.

Presiona Ctrl + W para cerrar el archivo e ingrese 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, necesitamos 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

Presiona Ctrl + W para cerrar el archivo e ingrese Y cuando se le solicite guardar el archivo.

El [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.


Cent OS
  1. Cómo configurar/cambiar un nombre de host en CentOS 7 Linux

  2. Cómo configurar WireGuard VPN en Ubuntu 20.04

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

  4. Configurar el servidor DHCP en CentOS 8:¿cómo hacerlo?

  5. Cómo configurar WireGuard VPN en CentOS 8

Cómo instalar VPN PPTP en CentOS 6

Cómo configurar el servidor DHCP en CentOS 8

Cómo instalar Wireguard en CentOS 8

Cómo configurar una VPN basada en IPsec con Strongswan en CentOS/RHEL 8

Cómo configurar WireGuard VPN en Debian 11

Cómo configurar WireGuard VPN en Linux