Skip to main content

Routing en Wireguard

Configuración con varias interfaces

En esta sección configuraremos un wireguard que nos sirva de router para varias redes internas y /o externas

Para ello necesitamos que nuestro servidor Wireguard disponga de varias tarjetas de red

Supongamos que nuestras tarjetas de red son las ens18 (la tarjeta asociada a nuestra IP pública), la wg0, que como hemos visto es la interfaz de nuestro Wireguard, y varias tarjetas o VLANs adicionales. en nuestro caso serán por ejemplo en este primer caso tarjetas (ens19,ens20,ens21, ens22)

Editaremos la configuración de red de nuestro servidor Wireguard en Debian

Aparecerá como sigue:

allow-hotplug ens18
iface ens18 inet static
	address A.B.C.D/24
	gateway A.B.C.X
	# dns-* options are implemented by the resolvconf package, if installed
	dns-nameservers 1.1.1.1 9.9.9.9 8.8.8.8
	dns-search ateinco.net

Agregaremos las interfaces que tenemos creadas, con lo que nuestro fichero quedará como sigue,

allow-hotplug ens18 ens19 ens20 ens21 ens22
iface ens18 inet static
	address A.B.C.D/24
	gateway A.B.C.X
	# dns-* options are implemented by the resolvconf package, if installed
	dns-nameservers 1.1.1.1 9.9.9.9 8.8.8.8
	dns-search ateinco.net

iface ens19 inet static
	address E.F.G.H/24

iface ens20 inet static
	address I.J.K.L/24

iface ens21 inet static
	address 192.168.30.254/24

iface ens22 inet static
	address 192.168.40.254/24

En nuestra interfaz wg0, ahora, veremos que en la parte de PostUP, aparece asi

[Interface]
Address = 10.9.0.1/24,fd86:ea04:1115::1/64
ListenPort = 51820
PrivateKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens18 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o ens18 -j MASQUERADE; iptables -A INPUT -s 10.9.0.0/24 -p udp -m udp --dport 53 -m conntrack --ctstate NEW -

Comentaremos la parte de PostUp, e insertaremos un enlace a un script

#PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens18 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o ens18 -j MASQUERADE; iptables -A INPUT -s 10.9.0.0/24 -p udp -m udp --dport 53 -m conntrack --ctstate NEW -
PostUp = /etc/wireguard/iptables/ipup.sh

Crearemos el fichero

nano /etc/wireguard/iptables/ipup.sh

Y escribiremos lo siguiente

iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens18 -j MASQUERADE
iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens19 -j MASQUERADE
iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens20 -j MASQUERADE
iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens21 -j MASQUERADE
iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens22 -j MASQUERADE

iptables -A INPUT -s 10.9.0.0/24 -p udp -m udp --dport 53 -m conntrack --ctstate NEW -j ACCEPT
ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o ens18 -j MASQUERADE;
ip6tables -A INPUT -s fd86:ea04:1115::0/64 -p udp -m udp --dport 53 -m conntrack --ctstate NEW -j ACCEPT;

Como podemos ver, ahora las interfaces ens18, ens19, ens20, ens21 y ens22, están en masquerade Ejecutamos un chmod +755 a ipup.sh

chmod +755 ipup.sh

Comentaremos el PostDown y agregaremos lo siguiente:

#PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens18 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o ens18 -j MASQUERADE; iptables -D INPUT -s 10.9.0.0/24 -p udp -m udp --dport 53 -m conntrack --ctstate NEW -
PostDown = /etc/wireguard/iptables/ipdown.sh

Ahora crearemos el fichero para el PostDown

nano /etc/wireguard/iptables/ipdown.sh

E insertaremos el siguiente contenido

iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens18 -j MASQUERADE
iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens19 -j MASQUERADE
iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens20 -j MASQUERADE
iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens21 -j MASQUERADE
iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens22 -j MASQUERADE

iptables -D INPUT -s 10.9.0.0/24 -p udp -m udp --dport 53 -m conntrack --ctstate NEW -j ACCEPT
ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o ens18 -j MASQUERADE;
ip6tables -D INPUT -s fd86:ea04:1115::0/64 -p udp -m udp --dport 53 -m conntrack --ctstate NEW -j ACCEPT;

Y procederemos a cambiar los permisos en dicho fichero

chmod +755 ipdown.sh

Configuración con otras conexiones

Ahora vamos a suponer que tenemos redes detrás de nuestras ip 192.168.30.0 y 192.168.40.0 que serán respectivamente las redes 192.168.31.0/24 y 192.168.41.0/24

En primer lugar modificaremos las interfaces de red, para ello modificaremos el archivo interfaces

nano /etc/network/interfaces

Y agregaremos las rutas detrás de las interfaces correspondientes

allow-hotplug ens18 ens19 ens20 ens21 ens22
iface ens18 inet static
	address A.B.C.D/24
	gateway A.B.C.X
	# dns-* options are implemented by the resolvconf package, if installed
	dns-nameservers 1.1.1.1 9.9.9.9 8.8.8.8
	dns-search ateinco.net

iface ens19 inet static
	address E.F.G.H/24

iface ens20 inet static
	address I.J.K.L/24

iface ens21 inet static
	address 192.168.30.254/24
up /bin/ip route add 192.168.31.0/24 via 192.168.30.1


iface ens22 inet static
	address 192.168.40.254/24
up /bin/ip route add 192.168.41.0/24 via 192.168.40.1

Suponiendo que las redes se encuentren detrás de un router o un firewall en las ip 192.168.30.1 y 192.168.40.1 respectivamente.