Jak działają wyszukiwania DNS podczas korzystania z proxy HTTP (lub nie) w IE

20

Niedawno uczestniczyłem w dyskusji na temat tego, co się dzieje, gdy klient żąda strony z serwera proxy. Chciałem tylko upewnić się, że moje rozumienie tej sekwencji zdarzeń jest prawidłowe w ogólnym przypadku:

  1. Witryna z żądaniami użytkowników
  2. Żądanie DNS jest wysyłane przez klienta do skonfigurowanego serwera DNS w celu rozwiązania docelowego adresu IP (odbywa się to najpierw w celu uwzględnienia żądań HTTP skonfigurowanych do ominięcia serwera proxy)
  3. Po otrzymaniu docelowego adresu IP z DNS i tuż przed wysłaniem żądania HTTP żądanie jest sprawdzane na liście wyjątków
  4. Jeśli serwer docelowy nie znajduje się na liście wyjątków, żądanie jest przekazywane do serwera proxy.
  5. Jeśli serwer docelowy znajduje się na liście wyjątków, żądanie jest przekazywane zgodnie z tabelą routingu komputera klienta.

Wszelkie opinie będą mile widziane.

pomarańczowy_uretan
źródło

Odpowiedzi:

21

Niezupełnie: zależy to od konfiguracji klienta. Użyjmy IE jako podstawowego przykładu.

Jeśli skonfigurujesz IE z jawnym proxy: np. Nie zaznaczono żadnych innych opcji, proxy ustawione na coś: 8080.

  1. Użytkownik wpisuje adres

  2. IE sprawdza adres pod kątem zgodności ciągu z listą wyjątków proxy IE (tzn. „Pomiń proxy dla tych adresów:”)

    za. Jeśli pasuje do wpisu na liście Bypass , klient używa własnego DNS do rozpoznania nazwy, a następnie klient łączy się bezpośrednio z docelowym adresem IP na porcie 80 (zakładany), a następnie wysyła żądanie takie jak:

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

    b. Jeśli żadne wpisy listy pomijania nie są zgodne , kontynuuj:

  3. IE łączy się ze skonfigurowanym proxy i wysyła żądanie formularza:

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

    Faktoid bonusowy: to użycie nazwy FQDN w adresie URL jest jednym ze sposobów, dzięki którym można powiedzieć, że klient myśli, że rozmawia z serwerem proxy zamiast z prawdziwym serwerem WWW

  4. Serwer proxy rozpoznaje nazwę hosta za pomocą własnego DNS, a następnie łączy się z witryną docelową (działa jak klient w kroku 2 powyżej) itp.

Podczas korzystania z WPAD / PAC:

W przypadku korzystania ze skryptu Web Proxy Auto Discovery (WPAD) lub Proxy Auto Configuration (PAC lub Autoconfig), takiego jak te dostarczone przez ISA / TMG, gdy włączona jest automatyczna konfiguracja, jest inaczej:

  1. Użytkownik wpisuje adres

  2. Klient pobiera bieżący plik wpad.dat / autoproxy.js / .pac ze skonfigurowanej lokalizacji

  3. Klient wyszukuje funkcję „ FindProxyForUrl ” w pliku js i wykonuje ją

  4. Skrypt Autoproxy przetwarza nazwę hosta i adres URL . Jest to plik javascript o ograniczonej funkcji, ale wciąż jest wiele rzeczy:

    za. może to obejmować rozpoznawanie nazw (IsInNet, DnsResolve)

    b. może to obejmować dopasowanie ciągów (ShExpMatch)

    do. może to obejmować zliczanie do miliona (i ++)

    re. może to obejmować wyskakujące komunikaty ostrzegawcze narkozy, jeśli administrator jest palantem

    • (lub po prostu śmieszne)
    • ((lub debugowanie))
  5. Funkcja FindProxyForUrl zwraca co najmniej jeden ciąg : uporządkowaną listę najlepszych serwerów proxy do użycia (oddzielone średnikami)

    za. albo „BEZPOŚREDNIE” , w którym to przypadku klient musi rozwiązać samą nazwę i połączyć się bezpośrednio, jak w powyższym przypadku Bypass

    b. lub „PROXY proxyname: 8080” lub podobny, w którym to przypadku klient łączy się z tym portem na tym serwerze proxy, każe mu uzyskać pełny adres URL , a serwer proxy rozpoznaje nazwę .

    • Na przykład : jeśli funkcja skryptu zwróciła „PROXY yourProxy: 8080; DIRECT”, która mówi klientowi, aby połączyć się z twoją serwerem proxy na porcie TCP 8080, aby zażądać tego adresu URL, a jeśli tego połączenia nie można nawiązać, spróbuj przejść bezpośrednio. Pamiętaj, że niepowodzenie konfiguracji sesji TCP nie jest zbyt szybkie, więc prawdopodobnie nie będzie to przyjemne przełączanie awaryjne dla użytkownika, ale nic nie przebije. Może.

Czasami zdarzają się usterki, subtelności i niewyjaśnione zachowania, ale w większości przypadków, gdy rzeczy nie są zepsute w dziwny i interesujący sposób, powyższe wygląda jak działało przez wiele lat. Nowsze przeglądarki optymalizują zachowanie, równolegle działają i próbują ciekawych rzeczy przez cały czas, więc zapoznaj się z najnowszymi dokumentami dla danej przeglądarki, aby zrozumieć szczegóły.

WinSock Proxy / ISA Firewall Client / TMG Client :

Jeśli interesuje Cię klient proxy Winsock (z TMG / ISA Server), to inna historia, z większą elastycznością i ruchomymi częściami. Zbyt wiele do zrobienia tutaj, ale istnieją dokumenty, które opisują jak to działa. W skrócie: podłącza się do Windows Sockets i może przechwytywać zarówno ruch oparty na TCP / UDP, jak i żądania rozpoznawania nazw w zależności od aplikacji i użytkownika. Bardzo potężny, ale teraz przestarzały i nie był aktualizowany od kilku lat.

Klienci mogą być naprawdę Clingy:

Jedna końcowa uwaga : Gdy klient HTTP postanowił porozmawiać pełnomocnika na danym terenie / URL, nie ma mowy o proxy, aby poinformować go, aby nie .

Nie ma kodu stanu HTTP ani nagłówka dla „Nie obsługuję tego, powinieneś po prostu przejść bezpośrednio do niego” ...

Gdy klient zdecyduje, że dany adres URL jest obsługiwany przez serwer proxy , następuje chwytanie proxy-śmierci .

Jedynym sposobem na uniknięcie tego jest uzyskanie logiki wyboru tuż przed nawiązaniem połączenia przez klienta, na liście PAC lub Bypass.

Ostatnia uwaga na temat stref i plików PAC

IE traktuje witryny, które są połączone BEZPOŚREDNIO - nawet jeśli mają kropki w adresie URL - będące częścią Strefy Lokalnego Intranetu (domyślnie - ustawialne we właściwościach Strefy), a więc będzie działać na rzecz umożliwienia zintegrowanego uwierzytelniania systemu Windows na tych stronach (tj. Uwierzytelnianie Kerberos i / lub NTLM, transparentnie). Tak więc kontrola, czy coś znajduje się w strefie lokalnego intranetu, określa stopień zaufania w zakresie automatycznego uwierzytelniania. Znowu przynajmniej domyślnie.

TristanK
źródło
Czy istnieje standard lub część specyfikacji RFC, która stwierdza, że ​​klienci nie powinni wykonywać rozpoznawania DNS przed połączeniem przez proxy?
kołodziej
Po prostu konwencja i / lub wydajność, o ile rozumiem. Stary klient proxy Microsoft Winsock używany do grania z opcjami rozpoznawania nazw. I nic nie stoi na przeszkodzie, abyś napisał PAC, który rozpoznaje nazwy, a następnie korzysta z serwera proxy ... to po prostu nie tak jak na początku.
TristanK
0

Nie jestem pewien, czy twoja część DNS ma rację. Widziałem maszynę bez prawidłowych serwerów DNS, która pobiera strony w IE w porządku za pomocą proxy.

JamesRyan
źródło
Wiem, że klient serwera proxy sieci Web serwera ISA korzysta z DNS serwera ISA do rozpoznawania adresów docelowych, ale jestem pewien, że podstawowy serwer proxy HTTP ustawiony w
opcjach
... i ups. Właśnie zrobiłem test, który udowodnił, że się mylę, przynajmniej w IE. Myślę, że moje następne pytanie brzmi: w jaki sposób DNS jest rozwiązywany w przypadku adresów znajdujących się na liście wyjątków serwera proxy? Może czas wyjść z sniffera.
orange_aurelius
0

Próbuję w Ubuntu 10.04, wine, IE 6.0 i squid 2.7 (system ma jeden dns, a squid ma inny serwer dns)

  1. Użytkownik wysyła żądania do proxy
  2. Squid wysyła żądanie DNS do serwera DNS
  3. Squid otrzymuje odpowiedź DNS. Jeśli nxdomain lub inny błąd, wyślij stronę błędu do IE. Jeśli nazwa rozwiązuje, pobierz stronę i przekaż ją IE.

IE 6.0 nie rozpoznaje nazwy DNS.

bindbn
źródło
0

Nie sądzę, że tak - jeśli wpiszesz adres IP i domenę na liście wyjątków lub domenę, a adres IP znajduje się na liście wyjątków, prawdopodobnie nadal będzie działał przez serwer proxy.

Możliwe, że proxy.pac / wpad.dat umożliwi ci wymuszenie wyjścia z tego zachowania.

Tom Newton
źródło