La risposta breve è: nel 95% dei casi non può essere fatto e il tuo rientra in quel 95%.
Innanzitutto, lasciatemi dire che ha poco senso parlare del routing di upload e download separati, perché anche attività di download intense richiedono che alcuni pacchetti scorrano all'indietro verso la sorgente, vale a dire qualsiasi download richiede un flusso di upload (questo è meno vero per UDP che per TCP, ma non importa).
Se dovessimo canalizzare l'upload di una connessione per lo più download tramite una scheda NIC diversa da quella utilizzata per la parte di download, l'origine del download vedrebbe le risposte ai suoi pacchetti originate da un indirizzo IP diverso da quello a cui si trova invio di pacchetti; è una funzionalità di sicurezza di base ignorare i pacchetti che pretendono di essere correlati a una determinata connessione, ma che provengono da un indirizzo di terze parti. Quindi la parte di caricamento della conversazione verrebbe eliminata e la connessione si interromperebbe. Questo ha poco a che fare con gli ISP e i loro servizi: si verifica anche tra due PC sulla stessa LAN, se uno dei due sta cercando di connettersi a un indirizzo IP utilizzando nella stessa connessione due NICS diversi (quindi due IP diversi) .
Questo è il motivo per cui parliamo di connessioni, non di upload / download. Ma allora si potrebbe riformulare la tua domanda come segue: posso avere un pc, che ha due schede di rete collegate entrambe alla rete, usare le due schede di rete per due distinti connessioni, ad esempio la connessione lenta per un lavoro lento e noioso come la posta elettronica e la connessione veloce per un processo rapido come il download di pagine Web?
La risposta breve a questa domanda ben formulata è: in Windows, * Nix (incluso MacOS) e Android no. In Linux sì, puoi.
Il motivo per cui non è possibile farlo in Windows (qualsiasi versione), * Nix e Android è che qualsiasi tabella di routing può avere un solo gateway predefinito (* cioè * l'indirizzo a cui si inviano tutti i pacchetti non destinati alla propria LAN), e questi I sistemi operativi possono gestire solo una tabella di routing: quindi un singolo gateway.
Invece, per assegnare applicazioni diverse a interfacce diverse, sono necessarie due funzionalità distinte: una, la possibilità due di eseguire simultaneamente due tabelle di routing e due, la capacità di legare le applicazioni a una delle tabelle di routing. Solo il kernel Linux (anni luce avanti rispetto alla concorrenza) ha queste capacità, al momento della stesura di questo documento. Il kernel * Nix compensa parzialmente ciò attraverso un uso giudizioso del suo firewall, pfsense, senza tuttavia raggiungere il risultato completo.
La possibilità di eseguire due tabelle di routing contemporaneamente (chiamate routing delle politiche o routing basato sull'origine ) significa che i pacchetti vengono instradati in modo diverso a seconda del loro indirizzo IP. Questa è una funzione estremamente utile se stai costruendo un router.
Tuttavia, per usare NIC diverse (e quindi IPS) a seconda dell'applicazione, sono necessari spazi dei nomi di rete , una funzionalità del kernel Linux che consente di creare una shell separata con il proprio stack di rete. Ora i processi in esecuzione all'interno di questa shell separata saranno tutti instradati secondo la tabella di routing dello spazio dei nomi di rete, non quella del PC principale.
Questa è ovviamente una forma di virtualizzazione, sebbene una forma più debole di, per esempio, un contenitore Linux, per non parlare di una macchina virtuale. Ma è il vero modo, con un solo PC, di instradare processi diversi attraverso interfacce diverse.
Per riassumere, in Linux (e solo in Linux) è possibile eseguire uno spazio dei nomi di rete separato, che è, ad esempio, collegato tramite una VPN al posto di lavoro, in modo da accedere alle risorse di lavoro e, se si esegue Firefox, sembri essere basato sul tuo posto di lavoro, mentre allo stesso tempo corri su Google Chrome al di fuori dello spazio dei nomi di rete e quindi sembra (su Chrome) di essere basato a casa.