Ey! Buenas agradezco la respuesta,
He estado indagando con route y netsh como alternativas, y haciendo ingeniería inversa a intercepter-ng (que hace la NAT que estoy buscando).
Expongo mi problema más detalladamente para que me podáis ayudar:
Tengo hosts en la red mandandome paquetes pensando que soy su gateway, yo los hago fordward al router y tienen conexión (mediante código y con winpcap), también puedo hacerles fordward activando el registro etc.. Sin embargo quiero hacer de proxy para el tráfico HTTP es decir no hacer un simple fordward en la capa 1 y pasar a manipular todo el contenido de la capa de aplicación (un proxy de toda vida con sockets).
Yo con el código puedo detectar paquetes entrantes de los hosts de tipo TCP a puerto 80 (HTTP), esos paquetes de tipo IP apuntan a la IP destino y cuando los redirijo a mi proxy para que puedan llegar tengo que cambiar la IP destino por la de mi servidor proxy y actualizar el checksum eso sí es ineficiente puesto que tengo que esperar a que me llegue todo el paquete lo tengo que leer, manipularle el campo IP y volverlo a reenviar a la red igual para que lo reciba mi máquina.
Luego cuando mi proxy recibe el paquete lo quiere responder, para que se produzca conexión debe de haber el 3-Handshake, y aún no lo he conseguido hacer, porque hago el fordward a medias.
Cuando el proxy responde manda su paquete con destino IP del host que solicito el paquete, PERO de nuevo debo de cambiarle el campo checksum por la IP que solicito el host (y ojo aqui que IP pongo pues un host puede tener conexión con varias IPs..),y mandarlo de nuevo a la red, es decir con este método cada paquete es enviado y recibido 2 veces, el doble de tráfico para mi máquina. ¿No se puede hacer el IP fordward de otra manera?, pensaba en algo a nivel de SO, que me lea hasta la capa IP y la modificara y reenviara, no que tenga que hacerlo yo, puesto que yo tengo que trabajar con todo el paquete que ya tiene todas las capas hechas.
Mirando intercepter-ng me fijé si hacía algún route o netsh, y usando "route print" pude ver que no añadia nuevos encaminamientos, respecto al netsh se puede hacer algo parecido con:
BOOLEAN CoreUser::EnablePortFordwarding(std::string ip, std::string sourcePort, std::string destinationPort)
{//Filtrando por distintas versiones de windows.
std::string command;
command = "netsh interface portproxy add v4tov4 listenport=" +
sourcePort + " listenaddress=" + ip + " connectport=" +
destinationPort + " connectaddress=" + ip;
system(command.c_str());
return TRUE;
}
Esto por ejemplo hace que el tráfico de una IP que vaya con destino el puerto X vaya también al puerto Y de esa misma IP, útil para redirigir el tráfico al puerto del servidor proxy, sin embargo, no encuentro manera de extrapolarlo para darlo productividad en la NAT de una manera eficiente al menos. Todo parece apuntar a que intercepter-ng hace la NAT mediante código y eso se traduce a código puro y duro con winpcap.
Saludos y gracias, a ver si me podéis dar más ideas

Pero el problema haciendolo con código además de que es ineficiente