Supponiamo di avere due indirizzi di rete pubblici sul mio server: un NAT tramite un ISP (192.168.99.0/24) e una VPN tramite un altro ISP (192.168.1.0/24), già configurato con un percorso per host verso il Server VPN tramite il mio ISP.
Ecco la mia tabella di routing iniziale. Attualmente sto instradando attraverso il mio ISP sulla sottorete 192.168.99.0/24.
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.99.1 0.0.0.0 UG 0 0 0 eth1
55.66.77.88 192.168.99.1 255.255.255.255 UGH 0 0 0 eth1
192.168.99.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 tap0
Ora, voglio nuove connessioni TCP per passare al mio 192.168.1.0/24, quindi scrivo quanto segue:
$ route add -net 0.0.0.0 gw 192.168.1.1 dev tap0
Quando lo faccio, si blocca alcune connessioni TCP di vecchia data. Esiste un modo per modificare in modo sicuro l'interfaccia predefinita per le nuove connessioni, consentendo allo stesso tempo alle connessioni TCP esistenti di utilizzare la vecchia route (ovvero è necessario abilitare una sorta di tabella di routing con stato)?
Sto bene con una soluzione che funziona solo con connessioni TCP stabilite e non mi interessa quanto sia confusa. Ad esempio, se esiste un modo per aggiungere regole iptables temporanee per le connessioni esistenti per forzarle sul vecchio percorso. Ma ci deve essere un modo per farlo.
EDIT: solo una nota su un semplice "route add -host ..." per connessioni esistenti: questa soluzione funzionerebbe se sto bene lasciando un sottoinsieme di IP sulla vecchia interfaccia. Tuttavia, nella mia applicazione, questo in realtà non risolve il mio problema perché voglio consentire a nuove connessioni di entrare nella nuova interfaccia anche se hanno lo stesso IP di origine. Sto ora cercando di utilizzare il comando "ip route" per impostare le regole di routing basate sull'origine.