
Quiero tener la siguiente configuración. Hay dos interfaces: wlan0
y wg0
. wlan0
es el valor predeterminado, wg0
es una interfaz de protección de cables, configuradaa mano.
De forma predeterminada, el tráfico va a wlan0
. Pero si un proceso se coloca dentro de un cgroup, digamos wgcgrp
(classid es 1), el tráfico debe pasar por el wg0
.
No tengo absolutamente ninguna idea de cómo hacer esto. Lo que intenté es esto. Seré muy detallado porque estoy muy frustrado.
[Configuración de protección de cables]
Esto es bastante simple, primero ip l a wg0 name wg0 type wireguard
. Luego, tengo un archivo w.conf, que contiene datos enviados a wg setconf wg0
. Establece la clave privada, la clave pública, las IP permitidas (0.0.0.0/0, ::0/0) y el punto final.Nadamás. Luego también configuro la dirección IP de la interfaz wg0, que conozco de antemano: ip ad a $ip dev wg0; ip -6 ad a $ip6 dev wg0
. Ahora agrego la ruta:ip l s wg0 up; ip r a default dev wg0 t wg
[cortafuegos]
Hasta donde tengo entendido, debo hacer que el tráfico de cgroup llegue de alguna manera a la wg
tabla de enrutamiento. Yo sé cómo hacer esto. Debo marcar el tráfico de cgroup dentro de una cadena del tipo route
y luego enmascararlo. Estas son las reglas.
table inet t {
chain post {
type route hook output priority mangle; policy accept
meta cgroup 1 counter meta mark set meta cgroup
}
chain masq {
type nat hook postrouting priority srcnat; policy accept
meta cgroup 1 oifname "wg0" counter masquerade
}
}
Hayno másreglas en mi firewall.
[Configuración de rutas]
El tráfico marcado debe entrar en la wg
mesa, así que corroip ru a fwmark 1 lookup wg
[Resultado]
cgexec -g net_cls:wg ping 8.8.8.8
y no consigo nada. ¿¿¿Por qué??? Ni siquiera sé cómo empezar a depurar. Esto debería ser simple, pero ni siquiera estoy cerca de lograrlo.
Respuesta1
Parece que necesitas ip r a "$endpoint_ip" dev wlan0 via "$wlan0_gateway" t wg
hacer que esta configuración funcione. Fue muy inesperado para mí, porque openVPN funciona sin esta ruta adicional. Estaría muy agradecido si alguien supiera y explicara por qué es así. ¿Quizás porque openVPN es un proceso de espacio de usuario, mientras que Wireguard se ejecuta en el kernel y realiza el enrutamiento de manera diferente?