La respuesta corta es: en el 95% de los casos no se puede hacer, y la suya cae dentro de ese 95%.
Primero, permítanme decir que tiene poco sentido hablar de enrutamiento de carga y descarga por separado, porque incluso las tareas de descarga intensas requieren que algunos paquetes fluyan hacia atrás a la fuente, es decir , cualquier descarga requiere un flujo de carga (esto es menos cierto para UDP que para TCP, pero no importa eso).
Si tuviéramos que canalizar la carga de una conexión mayormente de descarga a través de una NIC diferente a la utilizada para la parte de descarga, la fuente de la descarga vería que las respuestas a sus paquetes se originan desde una dirección IP diferente a la que está enviando paquetes; Es una característica de seguridad básica para ignorar los paquetes que pretenden estar relacionados con una conexión determinada, pero que se originan en una dirección de terceros. Por lo tanto, la parte de carga de la conversación se interrumpiría y la conexión se detendría. Esto tiene poco que ver con los ISP y sus servicios: ocurre incluso entre dos PC en la misma LAN, si uno de los dos está intentando conectarse a una dirección IP utilizando en la misma conexión dos NICS diferentes (por lo tanto, dos IP diferentes) .
Esta es la razón por la que hablamos de conexiones, no de carga / descarga. Pero entonces uno podría reformular su pregunta de la siguiente manera: ¿puedo tener una PC, que tiene dos NIC conectadas a la red? Utilice las dos NIC para dos conexiones, digamos la conexión lenta para un trabajo lento y tedioso como el correo electrónico, y la conexión rápida para un proceso rápido como la descarga de páginas web.
La respuesta corta a esta pregunta bien planteada es: en Windows, * Nix (incluido MacOS) y Android no. En Linux sí, puede hacerlo.
La razón por la que no puede hacer esto en Windows (cualquier versión), * Nix y Android es que cualquier tabla de enrutamiento puede tener solo una puerta de enlace predeterminada (* es decir, * la dirección a la que envía todos los paquetes no destinados a su LAN), y estos Los sistemas operativos solo pueden manejar una tabla de enrutamiento: por lo tanto, una sola puerta de enlace.
En cambio, para asignar diferentes aplicaciones a diferentes interfaces, necesita dos funcionalidades distintas: una, la capacidad dos ejecutar dos tablas de enrutamiento simultáneamente, y dos, la capacidad de vincular aplicaciones a cualquiera de las tablas de enrutamiento. Solo el kernel de Linux (años luz por delante de la competencia) tiene estas capacidades, a partir de este escrito. El kernel * Nix lo compensa parcialmente mediante el uso juicioso de su firewall, pfsense, sin lograr el resultado completo.
La capacidad de ejecutar dos tablas de enrutamiento al mismo tiempo (denominado enrutamiento de políticas o enrutamiento basado en la fuente ) significa que los paquetes se enrutan de manera diferente según su dirección IP. Esta es una característica extremadamente útil si está construyendo un enrutador.
Sin embargo, para usar diferentes NIC (y, por lo tanto, IPS) según la aplicación, necesita espacios de nombres de red , una característica del kernel de Linux que le permite construir un shell separado con su propia pila de red. Ahora los procesos que se ejecutan dentro de este shell separado se enrutarán de acuerdo con la tabla de enrutamiento del espacio de nombres de la red, no la de la PC principal.
Por supuesto, esta es una forma de virtualización, aunque una forma más débil que, por ejemplo, un contenedor de Linux, sin mencionar una máquina virtual. Pero es la forma real, con una sola PC, enrutar diferentes procesos a través de diferentes interfaces.
En resumen, en Linux (y solo en Linux) puede ejecutar un espacio de nombre de red separado, que, por ejemplo, está conectado a través de una VPN a su lugar de trabajo, para acceder a sus recursos de trabajo y, si ejecuta Firefox, parece estar basado en su lugar de trabajo, al mismo tiempo que ejecuta Google Chrome fuera del espacio de nombres de la red y, por lo tanto, parece (en Chrome) estar basado en su hogar.