O comando a seguir examinará as conexões tcp abertas e listará os destinos fora da rede local:
$ netstat -4ntu | tail -n +3 | cut -c45-65 | cut -d: -f1 | grep -v '192.168.99' | grep -v '192.168.1'
214.236.220.101
63.171.235.16
174.63.61.132
159.47.216.178
62.59.197.29
139.47.218.150
56.4.17.22
204.63.49.5
155.9.79.196
144.31.207.66
Portanto, precisamos apenas percorrer essa lista e colocar rotas específicas em direção ao roteador principal antes de alterar a rota padrão:
for i in $(netstat -4nt | tail -n +3 | cut -c45-65 | cut -d: -f1 |grep -v '192\.168\.99' | grep -v '192\.168\.1') ; do echo route add -host $i gw 192.168.1.99; done
(Eu deixei o comando "echo" lá para que você possa ver o que ele faz, você pode remover isso quando quiser realmente fazê-lo.
Em seguida, altere sua rota padrão:
$ route add -net 0.0.0.0 gw 192.168.1.1 dev tap0
Como as rotas adicionadas são mais específicas, elas serão escolhidas de preferência para a rota padrão. Obviamente, você pode colocar isso em um script para facilitar.