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

Configure su propio servidor VPN WireGuard en CentOS/RHEL

Este tutorial le mostrará cómo configurar su propio servidor VPN WireGuard en CentOS/RHEL. WireGuard está hecho específicamente para el kernel de Linux. Se ejecuta dentro del kernel de Linux y le permite crear un túnel VPN rápido, moderno y seguro.

Características de WireGuard VPN

  • Velocidad ultrarrápida y liviana, saca a OpenVPN del agua.
  • Multiplataforma. WireGuard puede ejecutarse en Linux, BSD, macOS, Windows, Android, iOS y OpenWRT.
  • La autenticación del usuario se realiza mediante el intercambio de claves públicas, similar a las claves SSH.
  • Asigna direcciones IP de túnel estáticas a clientes VPN. Puede que a algunas personas no les guste, pero puede ser útil en algunos casos.
  • Los dispositivos móviles pueden cambiar entre Wi-Fi y la red móvil sin problemas y sin perder la conectividad.
  • Su objetivo es reemplazar OpenVPN e IPSec en la mayoría de los casos de uso.

Requisitos

Para seguir este tutorial, necesitará un VPS (servidor privado virtual) que pueda acceder libremente a sitios web bloqueados (fuera de su país o sistema de filtrado de Internet). Recomiendo Kamatera VPS, que incluye:

  • Prueba gratuita de 30 días.
  • Desde $4/mes (1 GB de RAM)
  • VPS basado en KVM de alto rendimiento
  • 9 centros de datos en todo el mundo, incluidos Estados Unidos, Canadá, Reino Unido, Alemania, Países Bajos, Hong Kong e Israel.

Siga el tutorial vinculado a continuación para crear su servidor Linux VPS en Kamatera.

  • Cómo crear un servidor VPS Linux en Kamatera

Una vez que tenga un VPS con CentOS/Alma Linux/Rocky Linux, siga las instrucciones a continuación.

Este tutorial asume que tanto el servidor VPN como el cliente VPN ejecutan CentOS/RHEL sistema operativo.

Paso 1:Instale WireGuard en el servidor y escritorio CentOS/RHEL

Inicie sesión en su servidor CentOS/RHEL, luego ejecute los siguientes comandos para instalar WireGuard.

Cent OS 8

sudo dnf install elrepo-release epel-release -y
sudo dnf install kmod-wireguard wireguard-tools -y

RHEL 8

sudo dnf install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm
sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
sudo dnf install kmod-wireguard wireguard-tools -y

CentOS/RHEL 7

sudo yum install epel-release https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
sudo yum install yum-plugin-elrepo
sudo yum install kmod-wireguard wireguard-tools -y

Luego use los mismos comandos para instalar WireGuard en su computadora local CentOS/RHEL (el cliente VPN).

Paso 2:generar un par de claves pública/privada

Servidor

Cree un directorio para WireGuard.

sudo mkdir -p /etc/wireguard/

Ejecute el siguiente comando en el servidor CentOS/RHEL para crear un par de claves pública/privada, que se guardará en /etc/wireguard/ directorio.

wg genkey | sudo tee /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.key

Cliente

Cree un directorio para WireGuard.

sudo mkdir -p /etc/wireguard/

Ejecute el siguiente comando para crear un par de claves pública/privada en la computadora local CentOS/RHEL (el cliente VPN).

wg genkey | sudo tee /etc/wireguard/client_private.key | wg pubkey | sudo tee /etc/wireguard/client_public.key

Paso 3:Crear archivo de configuración de WireGuard

Servidor

Utilice un editor de texto de línea de comandos como Nano para crear un archivo de configuración de WireGuard en el servidor CentOS/RHEL. wg0 será el nombre de la interfaz de red.

sudo dnf install nano
sudo nano /etc/wireguard/wg0.conf

Copie el siguiente texto y péguelo en su archivo de configuración. Debe usar su propia clave privada del servidor y la clave pública del cliente.

[Interface]
Address = 10.10.10.1/24
ListenPort = 51820
PrivateKey = cD+ZjXiVIX+0iSX1PNijl4a+88lCbDgw7kO78oXXLEc=

[Peer]
PublicKey = AYQJf6HbkQ0X0Xyt+cTMTuJe3RFwbuCMF46LKgTwzz4=
AllowedIPs = 10.10.10.2/32

donde:

  • Dirección :especifique la dirección IP privada del servidor VPN. Aquí estoy usando el rango de red 10.10.10.0/24, por lo que no entrará en conflicto con el rango de su red doméstica. (La mayoría de los enrutadores domésticos usan 192.168.0.0/24 o 192.168.1.0/24). 10.10.10.1 es la dirección IP privada del servidor VPN.
  • Clave privada :La clave privada del servidor VPN, que se puede encontrar en /etc/wireguard/server_private.key archivo en el servidor.
  • Puerto de escucha :El servidor VPN de WireGuard escuchará en el puerto UDP 51820, que es el predeterminado.
  • Clave pública :La clave pública del cliente VPN, que se puede encontrar en /etc/wireguard/client_public.key archivo en la computadora del cliente.
  • IP permitidas :direcciones IP que el cliente VPN puede usar. En este ejemplo, el cliente solo puede usar la dirección IP 10.10.10.2 dentro del túnel VPN.

Guarde y cierre el archivo. (Para guardar un archivo en el editor de texto Nano, presione Ctrl+O , luego presione Entrar para confirmar. Presiona Ctrl+X para salir.)

Cambie el modo de permiso de archivo para que solo el usuario raíz pueda leer los archivos.

sudo chmod 600 /etc/wireguard/ -R

Cliente

Utilice un editor de texto de línea de comandos como Nano para crear un archivo de configuración de WireGuard en su computadora CentOS/RHEL local. wg-client0 será el nombre de la interfaz de red.

sudo nano /etc/wireguard/wg-client0.conf

Copie el siguiente texto y péguelo en su archivo de configuración. Debe usar su propia clave privada de cliente y clave pública de servidor.

[Interface]
Address = 10.10.10.2/24
DNS = 10.10.10.1
PrivateKey = cOFA+x5UvHF+a3xJ6enLatG+DoE3I5PhMgKrMKkUyXI=

[Peer]
PublicKey = vxyo4l4I3jWK+KZquNIDJF/hzQq29DOIxSUOrfNZZCs=
AllowedIPs = 0.0.0.0/0
Endpoint = 12.34.56.78:51820
PersistentKeepalive = 25

donde:

  • Dirección :especifique la dirección IP privada del cliente VPN.
  • DNS :especifique 10.10.10.1 (el servidor VPN) como servidor DNS. Se configurará a través de resolvconf dominio. También puede especificar múltiples servidores DNS para redundancia como esta:DNS = 10.10.10.1 8.8.8.8
  • Clave privada :La clave privada del cliente, que se puede encontrar en /etc/wireguard/client_private.key archivo en la computadora del cliente.
  • Clave pública :La clave pública del servidor, que se puede encontrar en /etc/wireguard/server_public.key archivo en el servidor.
  • IP permitidas :0.0.0.0/0 representa todo Internet, lo que significa que todo el tráfico a Internet debe enrutarse a través de la VPN.
  • Punto final :la dirección IP pública y el número de puerto del servidor VPN. Reemplace 12.34.56.78 con la dirección IP pública real de su servidor.
  • Keepalive persistente :envíe un paquete vacío autenticado al par cada 25 segundos para mantener viva la conexión. Si PersistentKeepalive no está habilitado, es posible que el servidor VPN no pueda hacer ping al cliente VPN.

Guarde y cierre el archivo.

Cambie el modo de archivo para que solo el usuario raíz pueda leer los archivos.

sudo chmod 600 /etc/wireguard/ -R

Paso 4:habilite el reenvío de IP en el servidor

Para que el servidor VPN enrute paquetes entre clientes VPN e Internet, debemos habilitar el reenvío de IP. Editar sysctl.conf archivo.

sudo nano /etc/sysctl.conf

Agregue la siguiente línea al final de este archivo.

net.ipv4.ip_forward = 1

Guarde y cierre el archivo. Luego aplique los cambios con el siguiente comando. La -p La opción cargará la configuración de sysctl desde /etc/sysctl.conf expediente. Este comando conservará nuestros cambios en los reinicios del sistema.

sudo sysctl -p

Paso 5:Configure el enmascaramiento de IP en el servidor

Ejecute el siguiente comando para habilitar el enmascaramiento de IP para 10.10.10.0/24 subred en el firewall del servidor.

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.10.10.0/24" masquerade'
sudo systemctl reload firewalld

Esto ocultará su red VPN del mundo exterior. Por lo tanto, Internet solo puede ver la IP de su servidor VPN, pero no puede ver la IP de su cliente VPN, al igual que su enrutador doméstico oculta su red doméstica privada.

Si su CentOS/RHEL no puede encontrar el firewall-cmd comando, debe instalar firewalld e iniciar el servicio.

sudo dnf install firewalld

sudo systemctl start firewalld

Paso 6:Instale un solucionador de DNS en el servidor

Dado que especificamos el servidor VPN como el servidor DNS para el cliente, necesitamos ejecutar una resolución de DNS en el servidor VPN. Podemos instalar el servidor DNS bind9.

sudo dnf install bind

Inicie BIND 9 con:

sudo systemctl start named

Y habilite el inicio automático en el momento del arranque:

sudo systemctl enable named

Puede comprobar su estado con:

systemctl status named

Salida de muestra:

● named.service - Berkeley Internet Name Domain (DNS)
   Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; vendor preset: disable>
   Active: active (running) since Sun 2020-05-17 11:07:34 EDT; 9s ago
  Process: 7203 ExecStop=/bin/sh -c /usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TE>
  Process: 7218 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS (code=exited,>
  Process: 7215 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; the>
 Main PID: 7220 (named)
    Tasks: 4 (limit: 5045)
   Memory: 55.5M
   CGroup: /system.slice/named.service
           └─7220 /usr/sbin/named -u named -c /etc/named.conf -4

Sugerencia:si el comando anterior no se cierra de inmediato, presione Q.

Edite el archivo de configuración principal de BIND /etc/named.conf .

sudo nano /etc/named.conf

En las options cláusula, puede encontrar las siguientes dos líneas.

listen-on port 53 { 127.0.0.1; };
listen-on-v6 port 53 { ::1; };

Esto hace que named escucha solo en localhost. Si desea permitir que los clientes de la misma red consulten los nombres de dominio, comente estas dos líneas. (agregue barras dobles al principio de cada línea)

// listen-on port 53 { 127.0.0.1; };
// listen-on-v6 port 53 { ::1; };

Busque la siguiente línea.

allow-query { localhost; };

Agregue el rango de red 10.10.10.0/24 para que los clientes de VPN puedan enviar consultas de DNS. Tenga en cuenta que debe terminar cada rango de red con un punto y coma.

allow-query { localhost; 10.10.10.0/24; };

Guarde y cierre el archivo. Reinicie BIND9 para que los cambios surtan efecto.

sudo systemctl restart named

Luego, debe ejecutar el siguiente comando para permitir que los clientes VPN se conecten al puerto 53.

sudo firewall-cmd --zone=public --permanent --add-rich-rule='rule family="ipv4" source address="10.10.10.0/24" accept'

Paso 7:Abra el puerto WireGuard en el cortafuegos

Ejecute el siguiente comando para abrir el puerto UDP 51820 en el servidor.

sudo firewall-cmd --permanent --add-port=51820/udp
sudo systemctl reload firewalld

Paso 8:Inicie WireGuard

servidor

Ejecute el siguiente comando en el servidor para iniciar WireGuard.

sudo wg-quick up /etc/wireguard/wg0.conf

Para detenerlo, ejecuta

sudo wg-quick down /etc/wireguard/wg0.conf

También puede usar el servicio systemd para iniciar WireGuard.

sudo systemctl start [email protected]

Si el inicio falló, debe consultar el registro para averiguar qué está mal.

sudo journalctl -eu [email protected]

Habilite el inicio automático en el momento del arranque del sistema con el siguiente comando.

sudo systemctl enable [email protected]

Verifique su estado con el siguiente comando. Su estado debe ser active (exited) .

systemctl status [email protected]

Ahora el servidor WireGuard está listo para aceptar conexiones de clientes.

Cliente

Inicie WireGuard.

sudo systemctl start [email protected]

Si el inicio falló, debe consultar el registro para averiguar qué está mal.

sudo journalctl -eu [email protected]

Si ve el siguiente error en el registro, puede intentar reiniciar el sistema operativo.

RTNETLINK answers: Operation not supported

Habilite el inicio automático en el momento del arranque del sistema.

sudo systemctl enable [email protected]

Compruebe su estado:

systemctl status [email protected]

Ahora ve a este sitio web:http://icanhazip.com/ para comprobar su dirección IP pública. Si todo salió bien, debería mostrar la dirección IP pública de su servidor VPN en lugar de la dirección IP pública de su computadora cliente.

También puede ejecutar el siguiente comando para obtener la dirección IP pública actual.

curl https://icanhazip.com

Consejos para solucionar problemas

Puede hacer ping desde el servidor VPN al cliente VPN (ping 10.10.10.2 ) para ver si el túnel funciona. Si ve el siguiente mensaje de error en el ping,

ping: sendmsg: Required key not available

puede ser que las AllowedIPs el parámetro es incorrecto, como un error tipográfico.

Si el túnel VPN se establece con éxito, pero la dirección IP pública del cliente no cambia, eso se debe a que el enmascaramiento en el firewall no funciona. Una vez tuve un error tipográfico en las reglas del firewall, lo que provocó que mi computadora no pudiera navegar por Internet.

Tenga en cuenta que no recomiendo usar SaveConfig=true en el [Interface] sección del archivo de configuración de WireGuard. SaveConfig le dice a WireGuard que guarde la configuración de tiempo de ejecución al apagar. Entonces, si agrega [Peer] adicional en el archivo de configuración y luego reinicie WireGuard, sus configuraciones recién agregadas se sobrescribirán.

Si su VPN aún no funciona, intente reiniciar el servidor VPN.

sudo systemctl restart [email protected]

Luego detenga el cliente VPN.

sudo systemctl stop [email protected]

Y actualice los paquetes de software en el cliente VPN.

sudo dnf update

A continuación, reinicie el cliente VPN.

sudo shutdown -r now

sudo systemctl start [email protected]

Adición de clientes VPN adicionales

WireGuard está diseñado para asociar una dirección IP con un cliente VPN. Para agregar más clientes VPN, debe crear un par de claves privadas/públicas únicas para cada cliente, luego agregar la clave pública de cada cliente VPN en el archivo de configuración del servidor (/etc/wireguard/wg0.conf ) así:

[Interface]
Address = 10.10.10.1/24
PrivateKey = UIFH+XXjJ0g0uAZJ6vPqsbb/o68SYVQdmYJpy/FlGFA=
ListenPort = 51820

[Peer]
PublicKey = 75VNV7HqFh+3QIT5OHZkcjWfbjx8tc6Ck62gZJT/KRA=
AllowedIPs = 10.10.10.2/32

[Peer]
PublicKey = YYh4/1Z/3rtl0i7cJorcinB7T4UOIzScifPNEIESFD8=
AllowedIPs = 10.10.10.3/32

[Peer]
PublicKey = EVstHZc6QamzPgefDGPLFEjGyedJk6SZbCJttpzcvC8=
AllowedIPs = 10.10.10.4/32

Cada cliente VPN tendrá una dirección IP privada estática (10.10.10.2, 10.10.10.3, 10.10.10.4, etc.). Reinicie el servidor WireGuard para que los cambios surtan efecto.

sudo systemctl restart [email protected]

Luego agregue la configuración de WireGuard en cada cliente VPN como de costumbre.

Policy Routing, Split Tunneling y VPN Kill Switch

Ahora le mostraré cómo usar ruteo de políticas , tunelización dividida y interruptor de eliminación de VPN con WireGuard VPN. Nota que no se recomienda usarlos juntos. Si usa enrutamiento de políticas, entonces no debe habilitar el túnel dividido o el interruptor de eliminación de VPN, y viceversa.

Enrutamiento de políticas

De forma predeterminada, todo el tráfico en el cliente VPN se enrutará a través del servidor VPN. A veces, es posible que desee enrutar solo un tipo específico de tráfico, según el protocolo de la capa de transporte y el puerto de destino. Esto se conoce como política de enrutamiento.

El enrutamiento de políticas está configurado en la computadora del cliente y primero debemos detener la conexión VPN.

sudo systemctl stop [email protected]

Luego edite el archivo de configuración del cliente.

sudo nano /etc/wireguard/wg-client0.conf

Por ejemplo, si agrega las siguientes 3 líneas en el [interface] WireGuard creará una tabla de enrutamiento llamada "1234" y agregará la regla ip a la tabla de enrutamiento. En este ejemplo, el tráfico se enrutará a través del servidor VPN solo cuando se use TCP como protocolo de capa de transporte y el puerto de destino sea 25, es decir, cuando la computadora cliente envíe correos electrónicos.

Table = 1234
PostUp = ip rule add ipproto tcp dport 25 table 1234
PreDown = ip rule delete ipproto tcp dport 25 table 1234

Guarde y cierre el archivo. A continuación, vuelva a iniciar el cliente WireGuard.

sudo systemctl start [email protected]

Tunelización dividida

De forma predeterminada, todo el tráfico en el cliente VPN se enrutará a través del servidor VPN. Aquí se explica cómo habilitar el túnel dividido, de modo que solo se envíe tráfico a 10.10.10.0/24 El rango de IP se canalizará a través de WireGuard VPN. Esto es útil cuando desea construir una red privada para varios servidores en la nube, porque los clientes VPN se ejecutarán en servidores en la nube y si usa un túnel VPN completo, probablemente perderá la conexión con los servidores en la nube.

Edite el archivo de configuración del cliente.

sudo nano /etc/wireguard/wg-client0.conf

Cambiar

AllowedIPs = 0.0.0.0/0

Para

AllowedIPs = 10.10.10.0/24

Por lo tanto, el tráfico se enrutará a través de VPN solo cuando la dirección de destino esté en el rango de IP 10.10.10.0/24. Guarde y cierre el archivo. Luego reinicie el cliente de WireGuard.

sudo systemctl restart [email protected]

Interruptor de eliminación de VPN

De forma predeterminada, su computadora puede acceder a Internet a través de la puerta de enlace normal cuando se interrumpe la conexión VPN. Es posible que desee habilitar la función de interrupción, que evita el flujo de paquetes sin cifrar a través de interfaces que no son de WireGuard.

Detenga el proceso del cliente de WireGuard.

sudo systemctl stop [email protected]

Edite el archivo de configuración del cliente.

sudo nano /etc/wireguard/wg-client0.conf

Agregue las siguientes dos líneas en [interface] sección.

PostUp = iptables -I OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
PreDown = iptables -D OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT

Así:

[Interface]
Address = 10.10.10.2/24
DNS = 10.10.10.1
PrivateKey = cOFA+x5UvHF+a3xJ6enLatG+DoE3I5PhMgKrMKkUyXI=
PostUp = iptables -I OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
PreDown = iptables -D OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT

[Peer]
PublicKey = RaoAdsIEIwgV9DHNSubxWVG+nZ1GP/c3OU6A/efBJ0I=
AllowedIPs = 0.0.0.0/0
Endpoint = 12.34.56.78:51820
PersistentKeepalive = 25

Guarde y cierre el archivo. Luego inicie el cliente WireGuard.

sudo systemctl start [email protected]

Cent OS
  1. Cómo configurar Wireguard VPN en CentOS 8

  2. Configurar el servidor SysLog en CentOS 6 / RHEL 6

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

  4. Cómo configurar un servidor SFTP en Rocky Linux/CentOS 8 Server

  5. Cómo configurar WireGuard VPN en CentOS 8

Configure su propio servidor VPN WireGuard en Ubuntu 20.04/18.04

Cómo instalar y configurar Gitlab CE Server en Centos 8

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 SSH en CentOS y RHEL