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.