Como as pesquisas de DNS funcionam ao usar um proxy HTTP (ou não) no IE

20

Recentemente, participei de uma discussão sobre o que acontece quando um cliente solicita uma página de um servidor proxy. Eu só queria ter certeza de que meu entendimento dessa sequência de eventos estava correto no caso geral:

  1. Site de solicitações do usuário
  2. Uma solicitação DNS é enviada pelo cliente ao servidor DNS configurado para resolver o endereço IP de destino (isso é feito primeiro para acomodar as solicitações HTTP configuradas para ignorar o proxy)
  3. Depois que o IP de destino é recebido do DNS e imediatamente antes do envio da solicitação HTTP, a solicitação é verificada na lista de exceções
  4. Se o servidor de destino não estiver na lista de exceções, a solicitação será encaminhada ao servidor proxy.
  5. Se o servidor de destino estiver na lista de exceções, a solicitação será encaminhada de acordo com a tabela de roteamento da máquina cliente.

Qualquer feedback seria muito apreciado.

orange_aurelius
fonte

Respostas:

21

Não exatamente: depende de como o cliente está configurado. Vamos usar o IE como exemplo básico.

Se você configurar o IE com um proxy explícito : por exemplo, nenhuma outra opção marcada, proxy definido como algo: 8080.

  1. O usuário digita um endereço

  2. O IE verifica o endereço para uma correspondência de seqüência de caracteres na lista de exceções do proxy do IE (por exemplo, "Ignorar proxy para esses endereços:")

    uma. Se corresponder a uma entrada na lista Ignorar , o cliente usará seu próprio DNS para resolver o nome e, em seguida, o cliente se conectará diretamente ao endereço IP de destino na porta 80 (suposta) e enviará uma solicitação como:

    GET /something.htm HTTP/1.1
    Host: fulldomainame.example.com

    b. Se nenhuma entrada da lista de derivações corresponder , continue:

  3. O IE se conecta ao seu proxy configurado e envia uma solicitação do formulário:

    GET http://fulldomainname.example.com/something.htm HTTP/1.1

    Fact factoid bônus: esse uso do FQDN na URL é uma maneira de dizer que um cliente pensa que está falando com um proxy em vez de um servidor da Web real

  4. O proxy resolve esse nome de host usando seu próprio DNS e se conecta ao site de destino (age como o cliente na etapa 2 acima), etc., etc.

Ao usar o WPAD / PAC:

No caso de usar um script WPAD (Web Proxy Auto Discovery) ou Proxy Auto Configuration (PAC ou Autoconfig), como os fornecidos pelo ISA / TMG quando a configuração automática está ativada, é diferente:

  1. O usuário digita um endereço

  2. O cliente baixa o arquivo wpad.dat / autoproxy.js / .pac atual a partir do local configurado

  3. O cliente procura a função " FindProxyForUrl " no arquivo js e a executa

  4. O script Autoproxy processa o nome do host e a URL . Este é um arquivo javascript de função limitada, mas muitas coisas ainda são possíveis:

    uma. isso pode incluir resolução de nomes (IsInNet, DnsResolve)

    b. isso pode incluir correspondência de sequência (ShExpMatch)

    c. isso pode incluir contar até um milhão (i ++)

    d. isso pode incluir mensagens pop-up de alerta narky se o administrador for um idiota

    • (ou apenas engraçado)
    • ((ou depuração))
  5. A função FindProxyForUrl retorna pelo menos uma sequência : uma lista ordenada dos melhores proxies a serem usados ​​(separados por ponto e vírgula)

    uma. quer "DIRECT" , caso em que o cliente, então, precisa resolver o nome em si e se conectar diretamente, conforme o caso Bypass acima

    b. ou "PROXY proxyname: 8080" ou similar; nesse caso, o cliente se conecta a essa porta nesse proxy, informa para OBTER a URL completa e o proxy executa a resolução de nomes .

    • Como exemplo : se a função de script retornou "PROXY yourProxy: 8080; DIRECT" que informa ao cliente para conectar-se ao seu proxy na porta TCP 8080 para solicitar esse URL, e se essa conexão não puder ser estabelecida, tente ir direto. Observe que a falha na configuração da sessão TCP não é exatamente rápida, portanto, não é provável que seja uma experiência agradável de failover para um usuário, mas não supera nada. Talvez.

Ocasionalmente, existem falhas, sutilezas e comportamentos inexplicáveis, mas, na maioria das vezes, quando as coisas não são quebradas de maneiras estranhas e interessantes, o que foi exposto acima é como eu a vi funcionar por muitos anos. Os navegadores mais recentes estão otimizando o comportamento, paralelizando coisas e tentando coisas interessantes o tempo todo. Portanto, consulte os documentos mais recentes do seu navegador para entender os detalhes.

Cliente de firewall WinSock Proxy / ISA / cliente TMG :

Se você está interessado no Winsock Proxy Client (do TMG / ISA Server), essa é uma história diferente, com mais flexibilidade e partes móveis. Há muito a ser abordado aqui, mas existem documentos que descrevem como ele funciona. Em resumo: conecta-se ao Windows Sockets e pode interceptar solicitações de tráfego e resolução de nomes baseadas em TCP / UDP por aplicativo e por usuário. Muito poderoso, mas também obsoleto agora e não é atualizado há vários anos.

Os clientes podem ser realmente pegajosos:

Uma observação final : depois que um cliente HTTP decide conversar com um proxy para um determinado site / URL, não há como o proxy dizer para não .

Não há código ou cabeçalho de status HTTP para "Não sirvo a isso, você deve ir diretamente a ele" ...

Depois que o cliente decide que um URL específico é veiculado por proxy , proxy-death-grip segue .

A única maneira de evitá-lo é obter a lógica de seleção antes que o cliente faça sua conexão, na lista PAC ou Bypass.

Uma nota final sobre arquivos de zonas e PAC

O IE trata sites que estão conectados DIRETAMENTE - mesmo que possuam pontos no URL - para fazer parte da Zona da Intranet Local (por padrão - configurável nas propriedades da Zona), e assim fará coisas como permitir a Autenticação Integrada do Windows para esses sites (por exemplo, Autenticação Kerberos e / ou NTLM, de forma transparente). Portanto, controlar se algo está na zona da intranet local define o quão confiável é em termos de autenticação automática. Novamente, pelo menos, por padrão.

TristanK
fonte
Existe um padrão ou parte de uma RFC que declara que os clientes não devem executar a resolução DNS antes de se conectar através de um proxy?
wheeler
Apenas convenção e / ou eficiência, até onde eu entendo. O antigo Microsoft Winsock Proxy Client usado para permitir que você jogue com opções de resolução de nome. E não há nada que o impeça de escrever um PAC que faça a resolução de nomes e use um proxy ... simplesmente não é como foi feito no começo.
TristanK
0

Não tenho certeza de que sua parte do DNS esteja correta. Eu vi uma máquina sem servidores DNS válidos buscar páginas no IE usando um proxy.

JamesRyan
fonte
Eu sei que um Cliente Proxy da Web do ISA Server usa o DNS do servidor ISA para resolver endereços de destino, mas tenho certeza de que um proxy HTTP básico definido nas Opções da Internet de uma máquina XP / Win7 é resolvido conforme indicado acima ...
orange_aurelius
... e opa. Acabei de fazer um teste que me provou errado, pelo menos no IE. Então, acho que minha próxima pergunta seria: como o DNS é resolvido para os endereços que estão na lista de exceções de proxy? Talvez seja hora de sair do farejador.
121310 orange_aurelius
0

Eu tento no ubuntu 10.04, wine, IE 6.0 e squid 2.7 (o sistema tem um dns e o squid tem outro servidor dns)

  1. Usuário envia solicitações para proxy
  2. Squid envia solicitação de DNS ao servidor DNS
  3. Squid recebe resposta DNS. Se nxdomain ou outro erro, envie a página de erro para o IE. Se o nome resolver, busque a página e entregue-a ao IE.

O IE 6.0 não resolve o nome DNS.

bindbn
fonte
0

Eu não acho que sim - se você digitar o IP e o domínio na lista de exceções, ou o domínio, e o IP estiver na lista de exceções, provavelmente ainda continuará pelo proxy.

É possível que um proxy.pac / wpad.dat permita que você saia desse comportamento.

Tom Newton
fonte