Essencialmente, você tem dois problemas:
- comportamento do resolvedor padrão
- roteamento de pacotes
O primeiro é relativamente fácil de resolver se você desenvolver seu próprio código de teste. Os programas de usuário final quase sempre acabam usando libresolv
e é a função res_init()
que é responsável pela leitura de /etc/resolv.conf
e pela configuração dos servidores DNS para consultas subsequentes por esse programa. É muito fácil redefinir explicitamente os servidores DNS em uma instância por programa em seu próprio código.
O segundo problema requer alterações no nível da rede. É provável que você tenha três rotas padrão e nenhuma entrada de tabela de roteamento específica para cada ISP. Você precisa descobrir em qual sub-rede estão os servidores de nomes de seus três ISPs e, em seguida, adicionar uma rota a essa sub-rede que force o tráfego a sair pelo provedor certo.
Por exemplo, se um ISP estiver usando 192.168.1.1 como um servidor DNS, será necessário:
# route add -net 192.168.1.0/24 gw w.x.y.z
em que w.x.y.z é o endereço do próximo salto voltado para esse ISP em particular.
Note que tudo isso seria um lote mais simples se você não tentasse testar três ISPs ao mesmo tempo da mesma máquina!
Eu fiz testes em massa de servidores DNS e os rejeitei tentando fazer isso com eles todos conectados de uma só vez - é muito mais fácil fazer um de cada vez.