É possível definir diferentes servidores DNS para usuários diferentes?

2

É possível definir diferentes servidores DNS para diferentes usuários?

Digamos que o usuário test1 use o DNS do Google ( 8.8.8.8 e 8.8.8.8 ), test2 usaria 0.0.0.0 e ambos test3 e test4 usariam 127.0.0.1 .

Isso é possível?

    
por William Edwards 21.08.2015 / 17:41

3 respostas

4

"É ..." Bem, sim.

"Como" é onde fica complicado.

Basicamente, você tem duas opções reais em que posso pensar. Assumindo que você está usando o Gnu libc, e você tem suporte ao nsswitch (eu me lembro vagamente de que algumas distribuições podem ter desativado isso?), Uma opção poderia ser substituir o módulo DNS normal do NSS (por exemplo, /lib64/libnss_dns* ) com uma versão personalizada que verificaria, talvez ~/.config/resolv.conf ou mais.

Note, por "substituir" quero dizer para adicionar outro módulo, com um nome único, que você se refere a partir de /etc/nsswitch.conf . Pode-se "simplesmente" separar o código usado para construir a versão "normal" e adicionar algo para construir uma versão por usuário a partir dele.

A outra opção pode ser usar namespaces do kernel para “montar” um substituto resolv.conf da perspectiva dos processos de cada usuário. (Veja um tratamento muito completo da IBM nos comentários.)

Não tenho conhecimento de nenhuma ferramenta existente para facilitar, no entanto.

Uma terceira opção que ocorre para mim é construir cada usuário com uma chroot jail, com a maioria dos arquivos com hard-link ou bind-mounted, e alguns arquivos selecionados como resolv.conf alterados no local.

    
por 21.08.2015 / 18:16
1

As configurações do servidor DNS são definidas para a máquina , não para o usuário.

A família gethostbyname*() syscall tenta procurar um determinado nome de host e retornar um endereço IP. O primeiro lugar é normalmente o arquivo /etc/hosts . Em seguida, eles fazem uma pesquisa por meio dos servidores DNS definidos em /etc/resolv.conf .

    
por 21.08.2015 / 18:15
-1

Não, o DNS não foi projetado para isso. No entanto, se você estiver testando, poderá usar /etc/hosts e codificar vários nomes de domínio de teste para endereços IP específicos e, em seguida, fornecer a cada usuário os nomes de domínio de teste que você deseja usar.

por exemplo. /etc/hosts

IP address1 hosta.test2 
IP address2 hostb.test2

IP address3 hosta.test3
IP address4 hostb.test3

...
    
por 21.08.2015 / 18:25