Configure una VPN autohospedada usando Wireguard
A VPN (red privada virtual) permite al usuario conectarse a una red privada de forma remota como si la computadora del usuario estuviera conectada directamente a la red privada. La tecnología se desarrolló inicialmente para permitir el acceso remoto a la red privada interna de una empresa, para los empleados que no están realmente presentes en la ubicación de la red interna.
Se implementa un servidor VPN en la ubicación de la red interna. Este servidor está en la red pública y el empleado puede acceder mediante un cliente VPN. Se necesita autenticación para conectarse al servidor VPN. La comunicación entre el servidor VPN y el cliente VPN se protege mediante un protocolo de túnel. Tenga en cuenta que esta comunicación puede estar cifrada o no, pero generalmente en la mayoría de los protocolos VPN está cifrada.
Otro uso de VPN es ganar el anonimato al acceder a Internet o para eludir las restricciones geográficas impuestas al acceder a algunos sitios web. En tales casos, la red a la que el usuario desea conectarse no es una red privada, sino Internet.
Se han desarrollado muchos protocolos VPN a lo largo de los años. Estos protocolos utilizan diferentes protocolos de tunelización y algoritmos de cifrado para la comunicación entre el servidor y el cliente.
Uno de estos protocolos, que está ganando un amplio uso recientemente, es Wireguard. Wireguard es más ligero, más simple y más eficaz que los conocidos protocolos VPN utilizados tradicionalmente, como OpenVPN, IPSec. Ya está implementado para Windows, Mac OS y una gran cantidad de distribuciones de Linux. En Linux, se implementa como un módulo de kernel. Está disponible en los repositorios oficiales de Ubuntu 20.04.
En este artículo, veremos cómo configurar un servidor y cliente Wireguard VPN en Ubuntu 20.04.
Instalación
Para este artículo, estoy configurando un servidor Wireguard en Ubuntu 20.04 Linode y Wireguard Client en mi máquina local con Ubuntu 20.04.
El paquete guarda alambre
instala Wireguard Server y Client. Ejecute el siguiente comando tanto en la máquina servidor como en la máquina cliente.
sudo apt instalar protector de alambre
Configuración del servidor
Llaves de seguridad
Necesitamos generar un conjunto de pares de claves públicas / privadas para autenticar y asegurar la conexión Wireguard. Esto se puede hacer usando los siguientes comandos:
sudo su cd / etc / wireguard umask 077 wg genkey | tee clave_privada | wg pubkey> public_key
Tenga en cuenta que estamos haciendo todas las tareas de configuración como superusuario. El motivo es que el acceso al directorio / etc / wireguard
está impedido para los usuarios normales, y el acceso al directorio no se puede obtener con solo privilegios sudo para un usuario normal.
A continuación, configuramos la máscara de creación de archivos en 077
. Esto significa que cada vez que un proceso crea un nuevo archivo en esta carpeta, sus permisos se enmascararán automáticamente con 077. Ej. si se crea un archivo en esta carpeta con los permisos 777, se enmascara automáticamente y los permisos se convierten efectivamente en 700. Esto se hace para que solo el propietario del archivo tenga todos los permisos sobre el archivo y todos los demás no tengan permisos.
En la siguiente línea generamos el par de claves pública / privada para el servidor. Se guardan en archivos llave privada
y Llave pública
. Para ver las claves, ejecute:
gato llave_privada gato llave_ publica
Copie la clave privada, la necesitamos en el siguiente paso.
Nota: ¡Nunca comparta su clave privada públicamente!
Archivo de configuración
Creemos un archivo de configuración para Wireguard Server. Puede elegir cualquier nombre para el archivo. Crearemos un archivo wg0.conf
en este ejemplo.
vim wg0.conf
Agregue lo siguiente al archivo.
[Interfaz] Dirección = 10.20.43.1/24 SaveConfig = true ListenPort = 51190 PrivateKey = PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o -j MASQUERADE; ip6tables -A ADELANTE -i wg0 -j ACEPTAR; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i wg0 -j ACEPTAR; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACEPTAR; ip6tables -t nat -D POSTROUTING -o -j MASQUERADE
Pegue la clave privada que copiamos previamente en la línea 5 del código anterior.
Tenemos que configurar Wireguard en una subred diferente (virtual) que la dirección IP del servidor. Aquí, he usado 10.20.43.1 para el servidor y usaré 10.20.43.2 para el cliente. Aquí se puede utilizar cualquier subred. Para obtener la dirección IP del servidor y la interfaz, ejecute:
ifconfig
Anote la dirección IP del servidor. Esto es necesario durante la configuración del cliente.
La interfaz utilizada por el servidor, como se ve en la imagen de arriba, es eth0
. El nombre de la interfaz puede diferir según la red del usuario, puede ser wlan0
o wlp2s0
en caso de que el usuario esté conectado a una red WiFi mediante una tarjeta inalámbrica.
Reemplace la en
PostUp
y PostDown
con su interfaz; en este ejemplo es eth0
.PostUp
y PostDown
Las directivas se utilizan para especificar qué comandos deben ejecutarse cuando el servidor se inicia y se detiene, respectivamente. En nuestro ejemplo, usamos el iptables
comando para establecer reglas de IP de modo que los clientes compartan la dirección IP del servidor. Las reglas desaparecerán una vez que el servidor se detenga.
Guardar y salir del archivo. Cuando use vim, presione Esc, luego escriba : wq
y presione Ingresar para guardar y salir.
Si está utilizando un ufw
firewall en el servidor, necesitamos permitir conexiones UDP al puerto para el servidor VPN, 51190.
ufw permite 51190 / udp
Iniciar el servicio
Ahora que se realiza la configuración, podemos iniciar el servicio Wireguard VPN.
Para permitir para que el servicio se inicie en el momento del arranque, ejecute:
systemctl habilitar wg-quick @ wg0
Tenga en cuenta que aquí wg0
es el nombre del archivo de configuración.
Para comenzar el servicio, ejecute:
servicio wg-quick @ wg0 start
Verificar que el servicio se ha iniciado correctamente:
servicio wg-quick @ wg0 status
Verifique que la interfaz que creamos en el archivo de configuración ha comenzado, usando el comando IP.
ip un show wg0
El servidor VPN Wireguard ahora está configurado y funcionando. Configuremos el cliente ahora.
Configuración del cliente
La configuración del cliente para Wireguard es más o menos la misma que la configuración del servidor. Generamos las claves para el cliente y luego creamos un archivo de configuración.
Llaves de seguridad
Para generar la clave pública / privada emparejar para el cliente, ejecute:
sudo su cd / etc / wireguard umask 077 wg genkey | tee client_private_key | wg pubkey> client_public_key
Las claves públicas y privadas para el cliente ahora se generan respectivamente en archivos client_private_key
y client_public_key
.
Compruebe que se hayan creado utilizando gato
mando.
cat clave_cliente_privada cat clave_publica_cliente_cliente
Copie la clave privada mostrada ya que necesitamos agregarla al archivo de configuración para el cliente.
Archivo de configuración
Crea el archivo de configuración con el nombre que desee. Lo crearemos con el nombre wg0-cliente
para este ejemplo.
vim wg0-client.conf
Agregue la siguiente configuración.
[Interfaz] # Dirección IP y clave privada del cliente Dirección = 10.20.43.2/24 PrivateKey = [Peer] # Clave pública, dirección IP y puerto del servidor PublicKey = Endpoint =: 51190 AllowIPs = 0.0.0.0/0,: : / 0
Ingrese la dirección de subred del cliente. Como se describió anteriormente, usamos 10.20.43.2
para el cliente en este ejemplo.
Agregar la clave privada del cliente generado en el paso anterior en la línea 4 en el código de configuración anterior.
En "Peer", agregamos información sobre el servidor VPN Wireguard queremos conectarnos.
Ingrese la clave pública del servidor. Introducir el dirección IP del servidor, que notamos anteriormente, y el puerto en el formato dado contra Punto final. Este es el puerto que especificamos en el archivo de configuración del servidor y en el que se inició el servicio VPN en el servidor.
Las IP permitidas deben ingresarse como se indica (0.0.0.0/0) para que cualquier solicitud en una IP pública dinámica utilizada por el cliente siempre se reenvíe al servidor VPN.
Guardar y salir del archivo. Cuando use vim, presione Esc, luego escriba : wq
y presione Ingresar para guardar y salir.
Habilitar el servicio al cliente para que se ejecute con cada arranque e inícielo.
systemctl enable wg-quick @ wg-client service wg-quick @ wg-client start
Verificar si el servicio ha comenzado.
servicio wg-quick @ wg-client status
Agregar par al servidor
Ahora tenemos el servidor y el cliente VPN en funcionamiento. Sin embargo, no se establece un túnel seguro entre los dos a menos que establezcamos una conexión de igual a igual entre el servidor y el cliente.
Regresa al servidor. Primero, detener el servicio VPN.
servicio wg-quick @ wg0 stop
A continuación, abra el archivo de configuración para agregar configuración para el par (cliente).
vim /etc/wireguard/wg0.conf
Adjuntar las siguientes líneas al archivo.
[Peer] PublicKey = AllowIPs = 10.20.43.2/32
Ahora, iniciar el servicio VPN de nuevo.
servicio wg-quick @ wg0 start
¡Eso es! Esta es toda la configuración necesaria para la configuración del servidor y el cliente de Wireguard VPN. Probemos ahora nuestra VPN.
Probando la VPN
Primero, hagamos un simple ping del cliente al servidor, para asegurarnos de que la comunicación del túnel VPN funcione. Ejecute lo siguiente en el cliente:
ping 10.20.43.1
Próximo, abre un navegador web y abre cualquier sitio web para comprobar si puede conectarse a Internet desde la máquina cliente. También puede verificar su conectividad a Internet desde la línea de comando usando wget
.
wget
Ahora, hemos comprobado la conectividad del túnel y la conectividad a Internet. Si ambos funcionan, ahora debemos asegurarnos de que todo el tráfico de Internet que llega al cliente pasa por el servidor.
Para esto, simplemente necesitamos verificar la dirección IP del cliente tal como la ve Internet. Una forma de hacerlo es ir a whatsmyip.org. O bien, desde la línea de comandos, podemos consultar otro servicio similar llamado información de IP, usando Curl.
Ejecute lo siguiente en la máquina cliente
curl //ipinfo.io/ip
Si. Es la dirección IP pública del Linode donde está alojado el servidor VPN. Así es como se logra el anonimato usando VPN, ya que en todo Internet ahora se ve la IP del servidor VPN y no de tu computadora.
Conclusión
La facilidad de configuración es una de las ventajas más importantes de Wireguard sobre el software VPN tradicional como OpenVPN, que necesita un mayor nivel de conocimientos de redes y enrutamiento para su configuración. Sin embargo, hay una falta de documentación oficial detallada para Wireguard que podría causar problemas si su configuración de Wireguard arroja errores o no funciona como se esperaba.
Sin embargo, Wireguard es una excelente opción si desea una VPN autohospedada para una comunicación segura a través de Internet. Para obtener más información sobre Wireguard y los protocolos y tecnologías que utiliza, puede consultar el sitio oficial.