Skip to main content

Redes Privadas Virtuales

A) VPN de acceso remoto con OpenVPN y certificados x509 (5 puntos)

Configura una conexión VPN de acceso remoto entre dos equipos del cloud:

• Uno de los dos equipos (el que actuará como servidor) estará conectado a dos redes • Para la autenticación de los extremos se usarán obligatoriamente certificados digitales, que se generarán utilizando openssl y se almacenarán en el directorio /etc/openvpn, junto con los parámetros Diffie-Helman y el certificado de la propia Autoridad de Certificación. • Se utilizarán direcciones de la red 10.99.99.0/24 para las direcciones virtuales de la VPN. La dirección 10.99.99.1 se asignará al servidor VPN. • Los ficheros de configuración del servidor y del client se crearán en el directorio /etc/openvpn de cada máquina, y se llamarán servidor.conf y client.conf respectivamente. • Tras el establecimiento de la VPN, la máquina client debe ser capaz de acceder a una máquina que esté en la otra red a la que está conectado el servidor. Documenta el proceso detalladamente.

B) VPN sitio a sitio con OpenVPN y certificados x509 (10 puntos)

Configura una conexión VPN sitio a sitio entre dos equipos del cloud:

• Cada equipo estará conectado a dos redes, una de ellas en común • Para la autenticación de los extremos se usarán obligatoriamente certificados digitales, que se generarán utilizando openssl y se almacenarán en el directorio /etc/openvpn, junto con con los parámetros Diffie-Helman y el certificado de la propia Autoridad de Certificación. • Se utilizarán direcciones de la red 10.99.99.0/24 para las direcciones virtuales de la VPN. • Tras el establecimiento de la VPN, una máquina de cada red detrás de cada servidor VPN debe ser capaz de acceder a una máquina del otro extremo. Documenta el proceso detalladamente.

C) VPN de acceso remoto con WireGuard (5 puntos)

Monta una VPN de acceso remoto usando Wireguard. Intenta probarla con clients Windows, Linux y Android. Documenta el proceso adecuadamente y compáralo con el del apartado A.

D) VPN sitio a sitio con WireGuard (10 puntos)

Configura una VPN sitio a sitio usando WireGuard. Documenta el proceso adecuadamente y compáralo con el del apartado B.

Extra 1) VPN de acceso remoto con Ipsec (5 puntos)

Elige una aplicación por software (por ejemplo, FreeS/Wan) y monta la configuración. Documenta el proceso detalladamente.

Extra 2) VPN sitio a sitio con IPsec (10 puntos)

Montando el escenario en GNS3 usando routers CISCO o con una aplicación por software (por ejemplo, FreeS/Wan) despliega la configuración solicitada. Documenta el proceso detalladamente.

VPN de acceso remoto con OpenVPN y certificados x509

Escenario

Vagrant.configure("2") do |config|

config.vm.synced_folder ".", "/vagrant", disabled: true

config.vm.provider :libvirt do |libvirt|
libvirt.cpus = 1
libvirt.memory = 512
end

config.vm.define :client do |client|
client.vm.box = "debian/bullseye64"
client.vm.hostname = "client"
client.vm.network :private_network,
:libvirt__network_name => "externa",
:libvirt__dhcp_enabled => false,
:ip => "192.168.22.15",
:libvirt__netmask => '255.255.255.0',
:libvirt__forward_mode => "veryisolated"
end

config.vm.define :server do |server|
server.vm.box = "debian/bullseye64"
server.vm.hostname = "server"
server.vm.network :private_network,
:libvirt__network_name => "externa",
:libvirt__dhcp_enabled => false,
:ip => "192.168.22.17",
:libvirt__netmask => '255.255.255.0',
:libvirt__forward_mode => "veryisolated"
server.vm.network :private_network,
:libvirt__network_name => "interna-vpn",
:libvirt__dhcp_enabled => false,
:ip => "172.22.0.5",
:libvirt__netmask => '255.255.255.0',
:libvirt__forward_mode => "veryisolated"
end

config.vm.define :maquina1 do |maquina1|
maquina1.vm.box = "debian/bullseye64"
maquina1.vm.hostname = "maquina1"
maquina1.vm.network :private_network,
:libvirt__network_name => "interna-vpn",
:libvirt__dhcp_enabled => false,
:ip => "172.22.0.7",
:libvirt__netmask => '255.255.255.0',
:libvirt__forward_mode => "veryisolated"
end

end

server

Instalamos openvpn:

apt install openvpn

Y habilitamos el bit de forwarding:

echo 1 > /proc/sys/net/ipv4/ip_forward

A continuación, copiamos el fichero de configuración del servidor de /usr/share/easy-rsa a /etc/openvpn, ya que es el directorio donde se van a guardar los ficheros de configuración de openvpn y de esta manera se convierte en el directorio por defecto en el que se buscan los ficheros de configuración:

sudo cp -r /usr/share/easy-rsa /etc/openvpn
root@server:/etc/openvpn# ls

client easy-rsa server update-resolv-conf

Después, inicializamos el PKI de openvpn, que es el sistema de certificados que vamos a utilizar para generar la clave pública y privada del servidor:

sudo ./easyrsa init-pki
root@server:/etc/openvpn/easy-rsa# ./easyrsa init-pki

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /etc/openvpn/easy-rsa/pki

Lo siguiente será la creación de la CA, que es el certificado que va a firmar los certificados de los clientes y del servidor:

sudo ./easyrsa build-ca

Al ejecutarlo obtenemos la siguiente salida en la que pide un passphrase para la CA(nazareth) y un Common Name (CN) para la CA(nazarethCA):

root@server:/etc/openvpn/easy-rsa# ./easyrsa build-ca
Using SSL: openssl OpenSSL 1.1.1n 15 Mar 2022

Enter New CA Key Passphrase:
Re-Enter New CA Key Passphrase:
Generating RSA private key, 2048 bit long modulus (2 primes)
.......................................+++++
........+++++
e is 65537 (0x010001)
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:nazarethCA

CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/etc/openvpn/easy-rsa/pki/ca.crt

La clave generada se guarda en /etc/openvpn/easy-rsa/pki/private/ca.key y el certificado en /etc/openvpn/easy-rsa/pki/ca.crt.

Generamos el certificado y la clave privada del servidor:

sudo ./easyrsa build-server-full server nopass

Con salida:

vagrant@server:/etc/openvpn/easy-rsa$ sudo ./easyrsa build-server-full server nopass

Using SSL: openssl OpenSSL 1.1.1n 15 Mar 2022
Generating a RSA private key
.................+++++
.........................................................................................................................+++++
writing new private key to '/etc/openvpn/easy-rsa/pki/easy-rsa-2724.zCddHx/tmp.2fDdSl'
-----
Using configuration from /etc/openvpn/easy-rsa/pki/easy-rsa-2724.zCddHx/tmp.2k2v1j
Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :ASN.1 12:'server'
Certificate is to be certified until Apr 30 01:11:14 2025 GMT (825 days)

Write out database with 1 new entries
Data Base Updated

La clave generada se guarda en /etc/openvpn/easy-rsa/pki/private/server.key y el certificado en /etc/openvpn/easy-rsa/pki/issued/server.crt.

Generamos el certificado y la clave del servidor diffie-hellman, que es un algoritmo que se utiliza para generar claves de cifrado de forma segura:

sudo ./easyrsa gen-dh

Con salida similar a la siguiente:

root@server:/etc/openvpn/easy-rsa# ./easyrsa gen-dh
Using SSL: openssl OpenSSL 1.1.1n 15 Mar 2022
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
........................................................................+....................................................................................................................................................+...............................+.................................................+....................+......................................................................................................................................................................................+..........................................................................................+...............................................................+............................................................................................................................................................................+.........................................................................................................................................................................+...........................................................................................................................................................................................................+...........................................................................................................................................................................................................................................................................................+.....................................................................................+..................+..............................................+.......+.................................................................................................................................................................................................................+......+..............................................................................................++*++*++*++*

DH parameters of size 2048 created at /etc/openvpn/easy-rsa/pki/dh.pem

Generamos el certificado y la clave del cliente VPN:

sudo ./easyrsa build-client-full client nopass

Obtenemos la siguiente salida:

root@server:/etc/openvpn/easy-rsa# ./easyrsa build-client-full client nopass

Using SSL: openssl OpenSSL 1.1.1n 15 Mar 2022
Generating a RSA private key
..........+++++
..................................+++++
writing new private key to '/etc/openvpn/easy-rsa/pki/easy-rsa-2143.TYQit1/tmp.C8dJPm'
-----
Using configuration from /etc/openvpn/easy-rsa/pki/easy-rsa-2143.TYQit1/tmp.Btnfcu
Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :ASN.1 12:'client'
Certificate is to be certified until Apr 29 22:36:37 2025 GMT (825 days)

Write out database with 1 new entries
Data Base Updated

Se almacenará el certificado en /etc/openvpn/easy-rsa/pki/issued/client.crt y la clave en /etc/openvpn/easy-rsa/pki/private/client.key.

Pasamos los ficheros al cliente VPN para que pueda conectarse al servidor:

sudo cp -rp /etc/openvpn/easy-rsa/pki/ca.crt ~
sudo cp -rp /etc/openvpn/easy-rsa/pki/issued/client.crt ~
sudo cp -rp /etc/openvpn/easy-rsa/pki/private/client.key ~

Y cambiamos el propietario de los ficheros para que el usuario cliente pueda acceder a ellos al hacer scp:

sudo chown vagrant: ~/ca.crt
sudo chown vagrant: ~/client.crt
sudo chown vagrant: ~/client.key

Generamos una clave ssh en el servidor para que el cliente pueda conectarse por ssh:

ssh-keygen

Y la copiamos al cliente:

cat ~/.ssh/id_rsa.pub

Pasamos al cliente los ficheros:

scp ~/ca.crt vagrant@192.168.22.15:/home/vagrant
scp ~/client.crt vagrant@192.168.22.15:/home/vagrant
scp ~/client.key vagrant@192.168.22.15:/home/vagrant

Configuramos el servidor VPN copiando el fichero de configuración de ejemplo de openvpn:

sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/server/servidor.conf

Modificamos el fichero de configuración del servidor para que quede de la siguiente forma:

port 1194
proto udp
dev tun

ca /etc/openvpn/easy-rsa/pki/ca.crt
cert /etc/openvpn/easy-rsa/pki/issued/server.crt
key /etc/openvpn/easy-rsa/pki/private/server.key
dh /etc/openvpn/easy-rsa/pki/dh.pem

topology subnet

# Configure server mode and supply a VPN subnet
# for OpenVPN to draw client addresses from.
# The server will take 10.8.0.1 for itself,
# the rest will be made available to clients.
# Each client will be able to reach the server
# on 10.8.0.1. Comment this line out if you are
# ethernet bridging. See the man page for more info.
#Configuración del tunel donde la ip del servidor: 10.99.99.1
server 10.99.99.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt

push "route 172.22.0.0 255.255.255.0" #IP de la red interna

keepalive 10 120
cipher AES-256-CBC
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
verb 3
explicit-exit-notify 1

Inicializamos el servicio de openvpn:

sudo systemctl enable --now openvpn-server@servidor

Obteniendo de resultado:

vagrant@server:~$ sudo systemctl enable --now openvpn-server@servidor

Created symlink /etc/systemd/system/multi-user.target.wants/openvpn-server@servidor.service → /lib/systemd/system/openvpn-server@.service.

Y comprobamos que el servicio está activo:

sudo systemctl status openvpn-server@servidor

vpn

client

Instalamos openvpn en el cliente:

sudo apt install openvpn

Y movemos los ficheros de configuración a la carpeta /etc/openvpn/client para que el cliente pueda conectarse al servidor y cambiamos el propietario de los ficheros:

sudo mv ~/ca.crt /etc/openvpn/client
sudo mv ~/client.crt /etc/openvpn/client
sudo mv ~/client.key /etc/openvpn/client

sudo chown root: /etc/openvpn/client/*

Configuramos el cliente VPN copiando el fichero de configuración de ejemplo de openvpn:

sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/client/cliente.conf

Modificamos el fichero de configuración del cliente para que quede de la siguiente forma:

client
dev tun
proto udp

remote 192.168.22.17 1194 #IP del servidor
resolv-retry infinite
nobind

persist-key
persist-tun

ca /etc/openvpn/client/ca.crt
cert /etc/openvpn/client/client.crt
key /etc/openvpn/client/client.key

remote-cert-tls server
cipher AES-256-CBC
verb 3

Habilitamos el servicio de openvpn:

sudo systemctl enable --now openvpn-client@cliente

Obteniendo de resultado:

vagrant@client:~$ sudo systemctl enable --now openvpn-client@cliente

Created symlink /etc/systemd/system/multi-user.target.wants/openvpn-client@cliente.service → /lib/systemd/system/openvpn-client@.service.

Y comprobamos que el servicio está activo:

sudo systemctl status openvpn-client@cliente

vpn

maquina1

En esta máquina cambiamos las rutas por defecto para que todas las peticiones que se hagan por la red interna pasen por el servidor VPN y no por el router, colocando la ip de la red interna del servidor VPN como puerta de enlace:

sudo ip route del default
sudo ip route add default via 172.22.0.5

Comprobación

Desde la máquina client hacemos una petición a la máquina1:

traceroute 172.22.0.7

vpn

También a la maquina server:

traceroute 10.99.99.1

vpn

VPN sitio a sitio con OpenVPN y certificados x509

Escenario

Vagrant.configure("2") do |config|

config.vm.synced_folder ".", "/vagrant", disabled: true

config.vm.provider :libvirt do |libvirt|
libvirt.cpus = 1
libvirt.memory = 512
end

config.vm.define :maquina1 do |maquina1|
maquina1.vm.box = "debian/bullseye64"
maquina1.vm.hostname = "maquina1"
maquina1.vm.network :private_network,
:libvirt__network_name => "privada1",
:libvirt__dhcp_enabled => false,
:ip => "192.168.22.2",
:libvirt__netmask => '255.255.255.0',
:libvirt__forward_mode => "veryisolated"
end

config.vm.define :client do |client|
client.vm.box = "debian/bullseye64"
client.vm.hostname = "client"
client.vm.network :private_network,
:libvirt__network_name => "privada1",
:libvirt__dhcp_enabled => false,
:ip => "192.168.22.1",
:libvirt__netmask => '255.255.255.0',
:libvirt__forward_mode => "veryisolated"
client.vm.network :private_network,
:libvirt__network_name => "internet",
:libvirt__dhcp_enabled => false,
:ip => "172.22.0.11",
:libvirt__netmask => '255.255.255.0',
:libvirt__forward_mode => "veryisolated"
end

config.vm.define :server do |server|
server.vm.box = "debian/bullseye64"
server.vm.hostname = "server"
server.vm.network :private_network,
:libvirt__network_name => "internet",
:libvirt__dhcp_enabled => false,
:ip => "172.22.0.10",
:libvirt__netmask => '255.255.255.0',
:libvirt__forward_mode => "veryisolated"
server.vm.network :private_network,
:libvirt__network_name => "privada2",
:libvirt__dhcp_enabled => false,
:ip => "192.168.20.1",
:libvirt__netmask => '255.255.255.0',
:libvirt__forward_mode => "veryisolated"
end

config.vm.define :maquina2 do |maquina2|
maquina2.vm.box = "debian/bullseye64"
maquina2.vm.hostname = "maquina2"
maquina2.vm.network :private_network,
:libvirt__network_name => "privada2",
:libvirt__dhcp_enabled => false,
:ip => "192.168.20.2",
:libvirt__netmask => '255.255.255.0',
:libvirt__forward_mode => "veryisolated"
end

end

server

Instalamos y generamos los mismos certificados que en el caso anterior:

  • Instalamos openvpn:
sudo apt install openvpn
  • Habilitamos forwarding:
echo 1 > /proc/sys/net/ipv4/ip_forward
  • Creamos PKI que sirve para generar los certificados:
sudo cp -r /usr/share/easy-rsa /etc/openvpn
cd /etc/openvpn/easy-rsa
sudo ./easyrsa init-pki
  • Generamos el certificado de la CA:
sudo ./easyrsa build-ca 

Donde se le da de password a la CA: nazareth y de nombre a la CA: nazarethCA

  • Generamos el certificado del servidor y la clave privada:
sudo ./easyrsa build-server-full server nopass

Se almacenan en /etc/openvpn/easy-rsa/pki/issued/server.crt y /etc/openvpn/easy-rsa/pki/private/server.key

  • Generamos los parámetros Diffie-Hellman:
sudo ./easyrsa gen-dh

Se almacena en /etc/openvpn/easy-rsa/pki/dh.pem

  • Generamos el certificado del cliente y la clave privada:
sudo ./easyrsa build-client-full client nopass

Se almacenan en /etc/openvpn/easy-rsa/pki/issued/client.crt y /etc/openvpn/easy-rsa/pki/private/client.key

  • Generamos la clave ssh:
ssh-keygen

La pasamos al cliente:

nano ~/.ssh/authorized_keys
  • Pasamos los ficheros al cliente:
sudo cp -rp /etc/openvpn/easy-rsa/pki/ca.crt ~
sudo cp -rp /etc/openvpn/easy-rsa/pki/issued/client.crt ~
sudo cp -rp /etc/openvpn/easy-rsa/pki/private/client.key ~

sudo chown vagrant: ~/ca.crt
sudo chown vagrant: ~/client.crt
sudo chown vagrant: ~/client.key

scp ~/ca.crt vagrant@172.22.0.11:/home/vagrant/
scp ~/client.crt vagrant@172.22.0.11:/home/vagrant/
scp ~/client.key vagrant@172.22.0.11:/home/vagrant/
  • Configuramos el servidor creando el fichero /etc/openvpn/server/server.conf:
dev tun
ifconfig 10.99.99.1 10.99.99.2
route 192.168.22.0 255.255.255.0 #red interna de client compartida con maquina1
tls-server #habilita tls

dh /etc/openvpn/easy-rsa/pki/dh.pem
ca /etc/openvpn/easy-rsa/pki/ca.crt
cert /etc/openvpn/easy-rsa/pki/issued/server.crt
key /etc/openvpn/easy-rsa/pki/private/server.key

comp-lzo
keepalive 10 60
log /var/log/openvpn/openvpn-status.log

verb 3
  • Arrancamos el servidor:
sudo systemctl enable --now openvpn-server@server
  • Comprobamos que funciona:
sudo systemctl status openvpn-server@servidor

client

  • Instalamos openvpn:
sudo apt install openvpn
  • Activamos forwarding:
echo 1 > /proc/sys/net/ipv4/ip_forward
  • Movemos los ficheros y cambiamos el propietario:
sudo mv ~/ca.crt /etc/openvpn/client/
sudo mv ~/client.crt /etc/openvpn/client/
sudo mv ~/client.key /etc/openvpn/client/

sudo chown root: /etc/openvpn/client/ca.crt
sudo chown root: /etc/openvpn/client/client.crt
sudo chown root: /etc/openvpn/client/client.key
  • Creamos el fichero de configuración /etc/openvpn/client/client.conf y lo configuramos:
dev tun
remote 172.22.0.10 #ip del servidor server
ifconfig 10.99.99.2 10.99.99.1
route 192.168.20.0 255.255.255.0 #red interna de server compartida con maquina2
tls-client
ca /etc/openvpn/client/ca.crt
cert /etc/openvpn/client/client.crt
key /etc/openvpn/client/client.key
comp-lzo
keepalive 10 60
log /var/log/openvpn/cliente.log

verb 3
  • Arrancamos el cliente:
sudo systemctl enable --now openvpn-client@client
  • Comprobamos que funciona:
sudo systemctl status openvpn-client@client

maquina1

  • Configuramos las rutas:
sudo ip route del default
sudo ip route add default via 192.168.22.1

maquina2

  • Configuramos las rutas:
sudo ip route del default
sudo ip route add default via 192.168.20.1

Comprobación

  • Comprobamos que podemos acceder a la maquina1 desde la maquina2:
traceroute 192.168.20.2

vpn

  • Comprobamos que podemos acceder a la maquina2 desde la maquina1:
traceroute 192.168.22.2

vpn

VPN de acceso remoto con WireGuard

Escenario

Vagrant.configure("2") do |config|

config.vm.synced_folder ".", "/vagrant", disabled: true

config.vm.provider :libvirt do |libvirt|
libvirt.cpus = 1
libvirt.memory = 512
end

config.vm.define :client do |client|
client.vm.box = "debian/bullseye64"
client.vm.hostname = "client"
client.vm.network :private_network,
:libvirt__network_name => "internet",
:libvirt__dhcp_enabled => false,
:ip => "192.168.122.11",
:libvirt__netmask => '255.255.255.0',
:libvirt__forward_mode => "veryisolated"
end

config.vm.define :server do |server|
server.vm.box = "debian/bullseye64"
server.vm.hostname = "server"
server.vm.network :private_network,
:libvirt__network_name => "internet",
:libvirt__dhcp_enabled => false,
:ip => "192.168.122.10",
:libvirt__netmask => '255.255.255.0',
:libvirt__forward_mode => "veryisolated"
server.vm.network :private_network,
:libvirt__network_name => "privada3",
:libvirt__dhcp_enabled => false,
:ip => "192.168.0.1",
:libvirt__netmask => '255.255.255.0',
:libvirt__forward_mode => "veryisolated"
end

config.vm.define :maquina1 do |maquina1|
maquina1.vm.box = "debian/bullseye64"
maquina1.vm.hostname = "maquina1"
maquina1.vm.network :private_network,
:libvirt__network_name => "privada3",
:libvirt__dhcp_enabled => false,
:ip => "192.168.0.2",
:libvirt__netmask => '255.255.255.0',
:libvirt__forward_mode => "veryisolated"
end

end

Procedimiento

  • Instalamos wireguard en el servidor y el cliente:
sudo apt install wireguard
  • En el servidor generamos el par de claves como root:
wg genkey | tee /etc/wireguard/privatekey | wg pubkey | tee /etc/wireguard/publickey

Clave privada: AMetqK+E79IlJEPCi05Ct8JllBdihArqQiNAS6k9kEU= Clave pública: qxa6n/ypAvfWZ+kfc2WhCylzKAz1Q06k1aDuxl5Z+SY=

  • En el cliente generamos el par de claves como root:
wg genkey | tee /etc/wireguard/privatekey | wg pubkey | tee /etc/wireguard/publickey

Clave privada: 8HsTgRemwrz/JZDOJ4vdd/K4ANyR5bz8ootdu2vhF2Q= Clave pública: OWYfOUY+s1IiDAs9WJAy7MF23Z+QyiB5U/3CYKRhZF4=

  • Creamos el fichero de configuración /etc/wireguard/wg0.conf y lo configuramos:

Servidor

[Interface]
Address = 10.99.99.1/24
ListenPort = 51820
PrivateKey = AMetqK+E79IlJEPCi05Ct8JllBdihArqQiNAS6k9kEU=

[Peer]
PublicKey = OWYfOUY+s1IiDAs9WJAy7MF23Z+QyiB5U/3CYKRhZF4=
AllowedIPs = 10.99.99.2/32

Cliente

[Interface]
Address = 10.99.99.2/24
PrivateKey = 8HsTgRemwrz/JZDOJ4vdd/K4ANyR5bz8ootdu2vhF2Q=

[Peer]
PublicKey = qxa6n/ypAvfWZ+kfc2WhCylzKAz1Q06k1aDuxl5Z+SY=
AllowedIPs = 0.0.0.0/0
Endpoint = 192.168.122.10:51820 #ip externa del servidor
PersistentKeepalive = 25

Siendo [interface] la configuración del servidor y [peer] la configuración del cliente. ListenPort es el puerto por el que escucha el servidor y PrivateKey es la clave privada del servidor. En [peer] PublicKey es la clave pública del cliente y AllowedIPs es la IP que se le asignará al cliente.

  • Activamos el bit de forwarding en el servidor:
echo 1 > /proc/sys/net/ipv4/ip_forward
  • Modificamos los permisos del fichero de configuración para que solo root pueda modificarlo:
sudo chmod 600 /etc/wireguard/ -R
  • Iniciamos el servicio en el servidor y en el cliente:
sudo wg-quick up /etc/wireguard/wg0.conf

Obtenemos la siguiente salida:

  • Servidor
root@server:~# wg-quick up /etc/wireguard/wg0.conf

[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.99.99.1/24 dev wg0
[#] ip link set mtu 1420 up dev wg0
  • Cliente
root@client:~# wg-quick up /etc/wireguard/wg0.conf

[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.99.99.2/24 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] wg set wg0 fwmark 51820
[#] 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
[#] nft -f /dev/fd/63
  • Si realizamos un ip a en el servidor y en el cliente, obtenemos la siguiente salida:

Servidor

6: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
link/none
inet 10.99.99.1/24 scope global wg0
valid_lft forever preferred_lft forever

Cliente

4: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
link/none
inet 10.99.99.2/24 scope global wg0
valid_lft forever preferred_lft forever

  • Si realizamos un ip route en el servidor y en el cliente, obtenemos la siguiente salida:

Servidor

10.99.99.0/24 dev wg0 proto kernel scope link src 10.99.99.1 

Cliente

10.99.99.0/24 dev wg0 proto kernel scope link src 10.99.99.2 
  • En la maquina1 cambiaremos la configuración de red para que tenga una IP de la red modificando la red por defecto:
sudo ip route del default
sudo ip route add default via 192.168.0.1
  • Para comprobar que funciona correctamente, realizamos un traceroute del cliente al servidor:
traceroute 192.168.0.1

vpn