Instalación de Wireguard Server
Wireguard es un sistema de conexión VPN que consta de servidor y de cliente. Para instalar el servidor, inicie sesión en su sistema Linux y escale privilegios a root.
sudo su -
En el caso de la aplicación de Linux, puede servir para montar tanto el servidor como el cliente.
Prerequisitos
Antes de iniciar la instalación de un servidor Wireguard debe cumplir los siguientes requisitos
- Disponer de un servidor Linux (en cloud o en casa)
- En caso de ser un servidor casero, disponer de acceso al router para poder abrir el puerto a internet.
- Acceso root al servidor
Instalación de la aplicación
Debian based (Debian, Ubuntu, Kali Linux, Linux Mint)
apt update
apt install wireguard
Configuración del servidor
La primera tarea que realizaremos en la configuración es la creación de una clave privada y pública. La clave pública es la que usarán los clientes para iniciar y establecer la conexión contra el servidor. En si funciona de la misma manera que SSH. El cliente, a su vez, tendrá que generarse una clave privada y pública y enviar la clave pública al servidor para que este acepte sus conexiones, pero esto lo veremos más adelante.
Generación de clave privada publica en el servidor.
wg genkey | tee /etc/wireguard/wg0_private.key
Se visualizará en pantalla un código alfanumérico, que representará nuestra clave privada (en base64). El nombre wg0 viene por la forma en la que Wireguard creará la interfaz de red para el tunel VPN (wg0, wg1, wg2...) Se pueden tener tantos tuneles como se desee o como el hardware donde corre el servidor soporte.
A través de la clave privada, generaremos la clave pública.
cat /etc/wireguard/wg0_private.key | wg pubkey | tee /etc/wireguard/wg0_public.key
Se visualizará otro código alfanumérico que representará la clave pública del servidor. Este contenido es el que estará guardado dentro de los ficheros wg0_private.key y wg0_public.key. No useis los que veis aquí, por seguridad, generad los vuestros!!!
Elimine los permisos del fichero, de forma que solo root pueda visualizar el contenido de las claves.
chmod 600 /etc/wireguard/wg0_{private,public}.key
Ahora es momento de seleccionar que rango IP quiere que su VPN wireguard tenga como ip privada. Ya que se creará como una LAN entre los nodos que se conecten a esta VPN. Dispone de los siguientes rangos indicados en la RFC 1918.
10.0.0.0 to 10.255.255.255 (10/8 prefix)
172.16.0.0 to 172.31.255.255 (172.16/12 prefix)
192.168.0.0 to 192.168.255.255 (192.168/16 prefix)
Por lo general, la gran mayoria de los routers domésticos, suelen hacer uso de los siguientes rangos.
- 192.168.0.1/24 (192.168.0.1 - 192.168.0.255)
- 192.168.1.0/24 (192.168.1.1 - 192.168.1.255)
Esto ha provocado problemas si su red tiene este mismo rango, ya que entonces pierde el acceso a los otros equipos de la LAN de su casa mientras esté conectado a la VPN. Por lo que es recomendable hacer uso de un rango diferente. Se suele recomendar hacer uso de un rango 10.x.y.0/24
donde x, y son numeros que pueden ir desde el 0 hasta el 255. En este ejemplo se hará uso del rango 10.16.0.0/24
. También debe seleccionar un puerto donde el servidor estará disponible donde recibir las conexiones del cliente. Puede usar uno entre el número 1024 y 65535. En este ejemplo usaremos el 58270.
Finalmente, detecte que interfaz de red está usando su servidor (la IP local), le interesa quedarse con el nombre de la tarjeta de red. Ejecute el comando siguiente para saber cual es su interfaz de red default.
ip route list default
El contenido marcado en amarillo es el nombre de la interfaz de red. Dependiendo del servidor, puede variar y tener valores como (donde X, Y son números). Copie el valor que le aparezca!
- enpXsY
- ethX
Ejecute el siguiente comando en su terminal de Linux, de forma que se generarán unas variables con el contenido especificado.
wg0_priv_key=`cat /etc/wireguard/wg0_private.key`
wg0_ip="10.16.0.1/24"
wg0_port="58270"
wg0_if="enp0s3"
Ahora ejecute el siguiente comando para crear el fichero de configuración wg0.conf
cat <<endblock > /etc/wireguard/wg0.conf
[Interface]
PrivateKey = $wg0_priv_key
Address = $wg0_ip
ListenPort = $wg0_port
SaveConfig = true
PostUp = ufw route allow in on wg0 out on $wg0_if
PostUp = iptables -t nat -I POSTROUTING -o $wg0_if -j MASQUERADE
PreDown = ufw route delete allow in on wg0 out on $wg0_if
PreDown = iptables -t nat -D POSTROUTING -o $wg0_if -j MASQUERADE
endblock
Si visualiza el contenido del fichero, verá que se han asignado los valores de las variables creadas
Configuración de firewall
En el caso de que disponga de un firewall cloud, deberá realizar la misma tarea, asociando la apertura del puerto desde cualquier IP (si tiene una ip estática desde donde iniciará la conexión con el cliente... podrá acotarlo a dicho origen).
Deberá realizar la misma tarea en caso de que sea un servidor que ha montado en casa. Deberá revisar su router para ver como habilitar (abrir) el puerto hacia la IP del servidor que está montando.
Recuerde que en la máquina Linux también puede existir un firewall instalado. Existen varios firewalls en los sistemas linux.
- ufw
- iptables
- shorewall
Deberá revisar como habilitar la comunicación al puerto seleccionado y guardado como ListenPort en el fichero de configuración wg0.conf.
En este caso realizaremos la tarea con el firewall ufw. Para abrir la comunicación al puerto indicado, tan solo debe ejecutar el comando
ufw allow $wg0_if/udp
Si está conectado mediante SSH, asegurese de que también tiene habilitado el puerto de SSH, sino, perderá la comunicación... y no la podrá volver a establecer, quedandose fuera del sistema.
Reinicie el servicio del ufw
ufw disable
ufw enable
Para revisar que se ha configurado correctamente, ejecute
ufw status
Debería aparecer el puerto configurado como ListenPort en el fichero wg0.conf en el listado de puertos allow.