Como aplicar o dnsmasq para usar um servidor DNS upstream apenas para alguns nomes de domínio especificados?

15

No momento, tenho a seguinte linha no dnsmasq.conf, que lida bem com todas as solicitações ( /#/corresponde a qualquer domínio; isso é necessário):

address=/#/127.0.0.1

No entanto, existem alguns domínios que precisam ser resolvidos para endereços IP diferentes 127.0.0.1.

Como solução temporária, eles foram adicionados a /etc/hosts:

209.85.148.95   ajax.googleapis.com
207.97.227.245  underscorejs.org
72.21.194.31    s3.amazonaws.com

Infelizmente, essa é uma solução muito temporária: ela deixará de funcionar assim que o endereço IP de qualquer domínio de destino for alterado.

Minha pergunta é: como aplicar o dnsmasq para usar um servidor DNS upstream para resolver os endereços IP de alguns nomes de domínio (especificados)?

nrph
fonte

Respostas:

28

Você pode fazer isso usando a server=diretiva, por exemplo

server=/ajax.googleapis.com/8.8.8.8

consultaria o servidor DNS público do Google sobre o domínio ajax.googleapis.com, da mesma forma

server=/amazonaws.com/209.244.0.3

consultaria o servidor DNS público da Level3 sobre o domínio amazonaws.com.

Você pode agrupar vários domínios

server=/co.uk/com/8.8.4.4

Envia os domínios .co.uk e .com para o servidor DNS em 8.8.4.4

Você também pode ter várias server=diretivas

−S, --server = [/ [<domínio>] / [domínio /]] [<ipaddr> [# <port>] [@ <source> [# <port>]]]

Especifique o endereço IP dos servidores upstream diretamente. Definir este sinalizador não suprime a leitura do /etc/resolv.conf, use -R para fazer isso. Se um ou mais domínios opcionais forem fornecidos, esse servidor será usado apenas para esses domínios e eles serão consultados apenas usando o servidor especificado. Isto é destinado a servidores de nomes privados: se você tiver um servidor de nomes em sua rede que lide com nomes no formato xxx.internal.thekelleys.org.uk em 192.168.1.1, em seguida, dê a bandeira -S /internal.thekelleys.org.uk/ 192.168.1.1 enviará todas as consultas para máquinas internas para esse servidor de nomes, todo o resto irá para os servidores em /etc/resolv.conf. Uma especificação de domínio vazio, // tem o significado especial de "somente nomes não qualificados", isto é, nomes sem pontos. Uma porta não padrão pode ser especificada como parte do endereço IP usando um caractere #.

Também é permitido um sinalizador -S que fornece um domínio, mas nenhum endereço IP; isso informa ao dnsmasq que um domínio é local e pode responder a consultas de / etc / hosts ou DHCP, mas nunca deve encaminhar consultas nesse domínio para nenhum servidor upstream. local é sinônimo de servidor para tornar os arquivos de configuração mais claros nesse caso.

O segundo endereço IP opcional após o caractere @ informa ao dnsmasq como definir o endereço de origem das consultas para este servidor de nomes. Deve ser um endereço pertencente à máquina na qual o dnsmasq está sendo executado, caso contrário, essa linha do servidor será registrada e depois ignorada. O sinalizador de porta de consulta é ignorado para todos os servidores que possuem um endereço de origem especificado, mas a porta pode ser especificada diretamente como parte do endereço de origem.

user9517
fonte
Não acho que ele precise de várias serverlinhas: quaisquer endereços que ele queira deixar de resolver (127.0.0.1), ele pode adicioná-los com addresslinhas; qualquer outra coisa, o DNSMasq consultará o server. Tenho certeza que é assim que a minha é configurada.
Gravyface 24/08/12
1
@gravyace: Eu li a pergunta como se quisesse resolver tudo para 127.0.0.1, com algumas exceções que ele deseja usar o DNS para resolver caso eles mudem de endereço.
user9517
Ah, talvez. Quem sabe. De qualquer maneira, isso deve fazê-lo ir.
Gravyface
Funciona como um encanto!
Nrph 24/08/12