A resposta curta é: em 95% dos casos, isso não pode ser feito, e o seu se enquadra nesses 95%.
Primeiro, deixe-me dizer que faz pouco sentido falar sobre roteamento de upload e download separadamente, porque mesmo tarefas de download intensas exigem que alguns pacotes fluam de volta para a fonte, ou seja , qualquer download requer algum fluxo de upload (isso é menos verdade para UDP do que para TCP, mas não importa).
Se canalizarmos o upload de uma conexão principalmente de download por meio de uma NIC diferente daquela usada para a parte de download, a origem do download verá as respostas aos pacotes originadas de um endereço IP diferente daquele em que ele está. enviando pacotes; é um recurso de segurança básico desconsiderar pacotes que supostamente estejam relacionados a uma determinada conexão, mas originados de um endereço de terceiros. Portanto, a parte de upload da conversa seria interrompida e a conexão seria interrompida. Isso tem pouco a ver com os ISPs e seus serviços: ocorre mesmo entre dois computadores na mesma LAN, se um dos dois está tentando se conectar a um endereço IP usando na mesma conexão dois NICS diferentes (portanto, dois IPs diferentes) .
Essa é a razão pela qual falamos sobre conexões, não de upload / download. Mas, em seguida, é possível reformular sua pergunta da seguinte maneira: posso ter um PC com duas placas de rede conectadas à rede? conexões, digamos a conexão lenta para um trabalho lento e tedioso como email, e a conexão rápida para um processo rápido como o download de páginas da Web?
A resposta curta a essa pergunta bem formulada é: no Windows, * Nix (incluindo MacOS) e Android no. No Linux, sim, você pode.
A razão pela qual você não pode fazer isso no Windows (qualquer versão), * Nix e Android, é que qualquer tabela de roteamento pode ter apenas um gateway padrão (* ou seja, * o endereço para o qual você envia todos os pacotes não destinados à sua LAN), e estes Os sistemas operacionais podem lidar apenas com uma tabela de roteamento: portanto, um único gateway.
Em vez disso, para atribuir aplicativos diferentes a interfaces diferentes, você precisa de duas funcionalidades distintas: uma, a capacidade de executar duas tabelas de roteamento simultaneamente e a capacidade de vincular aplicativos a uma das tabelas de roteamento. Somente o kernel do Linux (anos-luz à frente da concorrência) possui esses recursos, até o momento. O kernel * Nix compensa parcialmente isso através do uso criterioso de seu firewall, pfsense, sem, no entanto, alcançar o resultado completo.
A capacidade de executar duas tabelas de roteamento ao mesmo tempo (chamadas de roteamento de política ou roteamento baseado em origem ) significa que os pacotes são roteados de maneira diferente, dependendo do endereço IP. Este é um recurso extremamente útil se você estiver construindo um roteador.
No entanto, para usar NICs diferentes (e, portanto, o IPS), dependendo do aplicativo, você precisa de namespaces de rede , um recurso do kernel Linux que permite criar um shell separado com sua própria pilha de rede. Agora, os processos em execução nesse shell separado serão todos roteados de acordo com a tabela de roteamento do namespace da rede, e não do PC principal.
É claro que essa é uma forma de virtualização, embora uma forma mais fraca do que, digamos, um contêiner Linux, sem mencionar uma máquina virtual. Mas é o caminho real, com um único PC, para rotear processos diferentes através de interfaces diferentes.
Para resumir, no Linux (e somente no Linux) você pode executar um espaço para nome de rede separado, que é, por exemplo, conectado por meio de uma VPN ao seu local de trabalho, para acessar seus recursos de trabalho e, se você executar o Firefox, você parece estar no seu local de trabalho e, ao mesmo tempo, executar o Google Chrome fora do namespace da rede e, assim, parecer (no Chrome) estar baseado em casa.