Quiero tener la siguiente configuración. Hay dos interfaces: wlan0y wg0. wlan0es el valor predeterminado, wg0es 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 wgtabla de enrutamiento. Yo sé cómo hacer esto. Debo marcar el tráfico de cgroup dentro de una cadena del tipo routey 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 wgmesa, 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 wghacer 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?

información relacionada