Estoy desarrollando una aplicación en la que confío mucho en iptables para enrutar el tráfico. Estoy configurando las tablas simplemente llamando a iptables como un proceso externo desde mi aplicación.
Me gustaría saber si hay una manera de hablar directamente con los módulos del kernel (Netfilter) en los que se basa iptables y evitar la sobrecarga de ejecutar un nuevo proceso solo por eso.
Las recomendaciones para otras soluciones de enrutamiento son bienvenidas.
Si mi entendimiento es correcto, está solicitando una interfaz programática para la configuración de iptables. Desafortunadamente, iptables (libiptc) no brinda una interfaz API para configurarlos o consultarlos, es demasiado bajo en la pila.
Una alternativa que puedo sugerir son los conjuntos de IP del kernel. ipset es en realidad una extensión de iptables que permite crear reglas que coincidan con todo el conjunto de direcciones a la vez. Las tablas de IP se recorren de forma lineal, mientras que los conjuntos de direcciones IP se almacenan en estructuras de datos indexadas. Esto lo hace muy eficiente.
https://packages.debian.org/sid/net/ipsetPuede que esta no sea una respuesta directa a su pregunta, pero espero que ayude.
No veo ningún problema con netfilter. Puede vincular su devolución de llamada en cualquier gancho de netfilter y el kernel invocará su devolución de llamada en el evento de gancho. Estás haciendo esto a través de nf_register_hook . Incluso puedes rastrear conexiones con conntrack
Ejemplo para esto está aquí .
Más información sobre cómo hackear netfilter enla documentación oficial