OpeVPN WireGuard: Servidor y cliente en unos minutos (Ubuntu 20.04)
VPN WireGuard, como VPN
WireGuard es un protocolo de comunicación open source que implementa un sistema de creación de redes virtuales privadas (vpn) con gran facilidad de uso y un perfil bajo de susceptibilidad a ataques.
En este doc cómo instalar una vpn en un pequeño VPS con Ubuntu 20.04, y como instalar tu cliente en linux y en android
Instalación del servidor
Existe un instalador muy simpático llamado wireguard-install que funciona a la perfección
Existe una versión del mismo para OpenVPN
# wget https://git.io/vpn -O openvpn-install.sh && bash openvpn-install.sh
Welcome to this WireGuard road warrior installer!
What port should WireGuard listen to?
Port [51820]:
Enter a name for the first client:
Name [client]: castris
Select a DNS server for the client:
1) Current system resolvers
2) Google
3) 1.1.1.1
4) OpenDNS
5) Quad9
6) AdGuard
DNS server [1]: 1
….
suggested packages:
openresolv | resolvconf
The following NEW packages will be installed:
wireguard wireguard-tools
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/86.6 kB of archives.
After this operation, 344 kB of additional disk space will be used.
Selecting previously unselected package wireguard-tools.
(Reading database ... 76796 files and directories currently installed.)
Preparing to unpack .../wireguard-tools_1.0.20200513-1~20.04.2_amd64.deb ...
Unpacking wireguard-tools (1.0.20200513-1~20.04.2) ...
Selecting previously unselected package wireguard.
Preparing to unpack .../wireguard_1.0.20200513-1~20.04.2_all.deb ...
Unpacking wireguard (1.0.20200513-1~20.04.2) ...
Setting up wireguard-tools (1.0.20200513-1~20.04.2) ...
wg-quick.target is a disabled or a static unit, not starting it.
Setting up wireguard (1.0.20200513-1~20.04.2) ...
Processing triggers for man-db (2.9.1-1) ...
Created symlink /etc/systemd/system/multi-user.target.wants/wg-iptables.service → /etc/systemd/system/wg-iptables.service.
Created symlink /etc/systemd/system/multi-user.target.wants/wg-quick@wg0.service → /lib/systemd/system/wg-quick@.service.
Al final verás un código QR que puedes guardar (a buen seguro) que te permite con la aplicación de Android, configurar con simple escaneo de la imagen tu conexión VPN en Android.
También verás el fichero de configuración del cliente que has creado.
Si quieres crear más clientes, desinstalar el servidor, etc, solo tienes que volver a ejecutar
bash openvpn-install.sh
Cliente Ubuntu 20.04
Instalar
Sencillo. Los comandos de abajo instalar wireguard y wireguard-tools
$ sudo apt update
$ sudo apt install wireguard
Configurar
Copiar el contenido del fichero que la pantalla de instalación nombre_de_cliente.conf en el fichero de tu equipo local.
sudoedit /etc/wireguard/wg0.conf
Arranque de la VPN
sudo wg-quick up wg0
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.7.0.2/24 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] resolvconf -a tun.wg0 -m 0 -x
[#] wg set wg0 fwmark 51820
[#] ip -6 route add ::/0 dev wg0 table 51820
[#] ip -6 rule add not fwmark 51820 table 51820
[#] ip -6 rule add table main suppress_prefixlength 0
[#] ip6tables-restore -n
[#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820
[#] ip -4 rule add not fwmark 51820 table 51820
[#] ip -4 rule add table main suppress_prefixlength 0
[#] sysctl -q net.ipv4.conf.all.src_valid_mark=1
[#] iptables-restore -n
Apagado de la conexión
sudo wg-quick down wg0
[#] ip -4 rule delete table 51820
[#] ip -4 rule delete table main suppress_prefixlength 0
[#] ip -6 rule delete table 51820
[#] ip -6 rule delete table main suppress_prefixlength 0
[#] ip link delete dev wg0
[#] resolvconf -d tun.wg0 -f
[#] iptables-restore -n
[#] ip6tables-restore -n
Arranque automático
Si deseas que cuando se cargue el sistema, se conecte por defecto a la VPN puedes habilitar el arranque automático de la VPN con systemctl
$ sudo systemctl enable wg-quick@wg0
O deshabilitar el arranque automático.
$ sudo systemctl disable wg-quick@wg0
Bonus
Si tu servidor Wireguard quieres proteger, y CSF Firewall quieres usar, un truco tendrás que cocinar.
Editar /usr/local/csf/bin/csfpre.sh
IP En la última línea es la red que tiene tu wireguard configurada en la interface en el fichero de configuración /etc/wireguard/wg0.conf
eth0 Es la interface de red de tu servidor. Puede ser esa, ens18, u otra.
sudo tee -a /usr/local/csf/bin/csfpre.sh > /dev/null <<EOT
iptables -A INPUT -i wg0 -j ACCEPT
iptables -A OUTPUT -o wg0 -j ACCEPT
iptables -A FORWARD -i wg0 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o wg0 -j ACCEPT
iptables -t nat -A POSTROUTING -s IP/24 -o eth0 -j MASQUERADE
EOT
Puertos abiertos
Wireguard necesita el puerto que indica el fichero de configuración del servidor, por lo general 51820
Bien debes ponerlo en TCP_IN, UDP_IN
En cuanto al OUT, deberías abrir todos. (o los que quieras, es tu lio)
TCP_OUT = "1:65535"
UDP_OUT = "1:65535"
Ya está. Reinicia tu firewall.
Enlaces
Aviso
Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de Castris
Si necesitas soporte profesional puedes contratar con Castris soporte profesional.
Durante mucho tiempo use Squid para ciertas cosas, pero bueno, la verdad es que una VPN cumple muchas más expectativas de uso para la administración de sistemas. En particular, que puedo tener un punto de acceso a los sistemas como administrador (root) sin tener que usar un host dinámico, para cuando salgo fuera de la oficina y tener que andar con frikadas en el móvil.