Cara kerja pencarian DNS saat menggunakan proxy HTTP (atau tidak) di IE

20

Baru-baru ini saya berpartisipasi dalam diskusi mengenai apa yang terjadi ketika klien meminta halaman dari server proxy. Saya hanya ingin memastikan bahwa pemahaman saya tentang urutan kejadian ini benar dalam kasus umum:

  1. Situs permintaan pengguna
  2. Permintaan DNS dikirim oleh klien, ke server DNS yang dikonfigurasi untuk menyelesaikan alamat IP tujuan (ini dilakukan terlebih dahulu untuk mengakomodasi permintaan HTTP yang dikonfigurasi untuk memotong proxy)
  3. Setelah IP tujuan diterima dari DNS, dan tepat sebelum permintaan HTTP dikirim, permintaan diperiksa terhadap daftar pengecualian
  4. Jika server tujuan tidak ada dalam daftar pengecualian, permintaan diteruskan ke server proxy.
  5. Jika server tujuan ada di daftar pengecualian, permintaan diteruskan sesuai dengan tabel perutean mesin klien.

Umpan balik akan sangat dihargai.

orange_aurelius
sumber

Jawaban:

21

Tidak persis: itu tergantung pada bagaimana klien dikonfigurasi. Mari kita gunakan IE sebagai contoh dasar.

Jika Anda mengkonfigurasi IE dengan proksi eksplisit : mis. Tidak ada opsi lain yang dicentang, proksi disetel ke sesuatu: 8080.

  1. Pengguna mengetik alamat

  2. IE memeriksa alamat untuk kecocokan string dengan daftar pengecualian proxy IE (yaitu "Bypass proxy untuk alamat ini:")

    Sebuah. Jika cocok dengan entri dalam daftar Bypass , klien menggunakan DNS-nya sendiri untuk menyelesaikan nama, dan kemudian klien terhubung langsung ke alamat IP target pada port 80 (diasumsikan), kemudian mengirimkan permintaan seperti:

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

    b. Jika tidak ada entri pintasan daftar yang cocok , lanjutkan:

  3. IE terhubung ke proxy yang dikonfigurasikan , dan mengirimkan permintaan formulir:

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

    Bonus factoid: penggunaan FQDN dalam URL ini adalah salah satu cara Anda dapat mengatakan bahwa klien menganggapnya berbicara dengan proxy alih-alih server web asli

  4. Proxy menyelesaikan nama host menggunakan DNS sendiri , dan kemudian menghubungkan ke situs target (bertindak seperti klien pada langkah 2 di atas), dll, dll.

Saat menggunakan WPAD / PAC:

Dalam kasus menggunakan script Web Proxy Auto Discovery (WPAD) atau Proxy Auto Configuration (PAC atau Autoconfig), seperti yang disediakan oleh ISA / TMG ketika konfigurasi otomatis diaktifkan, itu berbeda:

  1. Pengguna mengetik alamat

  2. Klien download saat wpad.dat / autoproxy.js / pac file dari lokasi dikonfigurasi

  3. Klien mencari fungsi " FindProxyForUrl " di file js, dan menjalankannya

  4. Script Autoproxy memproses nama host dan URL . Ini adalah file javascript fungsi terbatas, tetapi banyak hal masih mungkin:

    Sebuah. ini mungkin termasuk resolusi nama (IsInNet, DnsResolve)

    b. ini mungkin termasuk pencocokan string (ShExpMatch)

    c. ini mungkin termasuk menghitung hingga sejuta (i ++)

    d. ini mungkin termasuk pesan popup waspada narkotika jika admin brengsek

    • (atau hanya lucu)
    • ((atau debugging))
  5. Fungsi FindProxyForUrl mengembalikan setidaknya satu string : daftar proxy yang terbaik untuk digunakan (dipisahkan dengan titik koma)

    Sebuah. baik "LANGSUNG" , dalam hal ini klien kemudian perlu untuk menyelesaikan nama itu sendiri dan terhubung langsung, sesuai dengan kasus Bypass di atas

    b. atau "PROXY proxyname: 8080" atau serupa, dalam hal ini klien terhubung ke port pada proxy itu, memberitahukannya untuk MENDAPATKAN URL lengkap , dan proxy melakukan resolusi nama .

    • Sebagai contoh : jika fungsi skrip kembali "PROXY yourProxy: 8080; LANGSUNG" yang memberitahu klien untuk terhubung ke yourproxy pada TCP port 8080 untuk meminta URL ini, dan jika itu koneksi tidak dapat dibangun, cobalah pergi langsung. Perhatikan bahwa kegagalan penyiapan sesi TCP tidak terlalu cepat, jadi ini kemungkinan bukan pengalaman kegagalan yang menyenangkan bagi pengguna, tetapi tidak mengalahkan apa pun. Mungkin.

Kadang-kadang ada gangguan, kehalusan dan perilaku yang tidak dapat dijelaskan, tetapi sebagian besar ketika hal-hal tidak rusak dengan cara yang aneh dan menarik, di atas adalah bagaimana saya melihatnya bekerja selama bertahun-tahun. Peramban yang lebih baru mengoptimalkan perilaku, dan menyejajarkan hal-hal, dan mencoba hal-hal menarik setiap saat, jadi periksalah dokumen terbaru untuk peramban Anda untuk memahami detail yang bagus.

WinSock Proxy / ISA Firewall Client / TMG Client :

Jika Anda tertarik dengan Winsock Proxy Client (dari TMG / ISA Server), itu cerita yang berbeda, dengan lebih banyak fleksibilitas dan komponen yang bergerak. Terlalu banyak untuk masuk ke sini, tetapi ada dokumen di sekitar yang menggambarkan cara kerjanya. Singkatnya: plugs ke Windows Sockets, dan dapat mencegat lalu lintas berbasis TCP / UDP dan permintaan resolusi nama berdasarkan per-aplikasi dan per-pengguna. Sangat kuat, tetapi juga sudah usang sekarang, dan belum diperbarui dalam beberapa tahun.

Klien dapat benar-benar lengket:

Satu catatan terakhir : Setelah klien HTTP memutuskan untuk berbicara dengan proksi untuk situs / url yang diberikan, tidak ada cara bagi proxy untuk mengatakannya .

Tidak ada kode status HTTP atau tajuk untuk "Saya tidak melayani itu, Anda harus langsung menuju ke sana" ...

Setelah klien memutuskan URL tertentu dilayani proxy , cengkeraman proksi kematian terjadi kemudian.

Satu-satunya cara untuk menghindarinya adalah dengan membuat logika pemilihan tepat sebelum klien membuat koneksinya, dalam daftar PAC atau Bypass.

Catatan akhir tentang Zona dan file PAC

IE memperlakukan situs yang DIRECT terhubung - bahkan jika mereka memiliki titik-titik di URL - untuk menjadi bagian dari Intranet Zona lokal (secara default - settable sifat Zone), dan begitu akan melakukan hal-hal seperti memungkinkan Integrated Windows Authentication ke situs tersebut (yaitu Kerberos dan / atau otentikasi NTLM, secara transparan). Jadi mengendalikan apakah ada sesuatu di Zona Intranet Lokal menentukan seberapa tepercayainya dalam hal autentikasi otomatis. Sekali lagi, setidaknya, secara default.

TristanK
sumber
Apakah ada standar atau bagian dari RFC yang menyatakan bahwa klien tidak boleh melakukan resolusi DNS sebelum menghubungkan melalui proxy?
kendaraan roda
Hanya konvensi dan / atau efisiensi, sejauh yang saya mengerti. Microsoft Winsock Proxy Client lama digunakan untuk memungkinkan Anda bermain dengan opsi resolusi nama. Dan tidak ada yang menghentikan Anda menulis PAC yang melakukan resolusi nama dan kemudian menggunakan proxy ... hanya saja bukan bagaimana hal itu dilakukan pada awalnya.
TristanK
0

Saya tidak yakin bagian DNS Anda benar. Saya telah melihat mesin tanpa server DNS yang valid mengambil halaman di IE dengan baik menggunakan proxy.

JamesRyan
sumber
Saya tahu bahwa Klien Proksi Web Server ISA menggunakan DNS server ISA untuk menyelesaikan alamat tujuan, tapi saya cukup yakin proxy HTTP dasar yang diatur dalam Opsi Internet mesin XP / Win7 menyelesaikan seperti yang disebutkan di atas ...
orange_aurelius
... dan oops. Saya baru saja melakukan tes yang membuktikan diri saya salah, setidaknya di IE. Jadi, saya kira pertanyaan saya berikutnya adalah, bagaimana DNS diselesaikan kemudian untuk alamat yang ada dalam daftar pengecualian proxy? Mungkin sudah waktunya untuk keluar dari sniffer.
orange_aurelius
0

Saya coba di ubuntu 10.04, wine, IE 6.0 dan squid 2.7 (sistem punya satu dns dan squid punya server dns lainnya)

  1. Pengguna mengirim permintaan ke proxy
  2. Squid mengirim permintaan DNS ke server DNS
  3. Squid menerima jawaban DNS. Jika nxdomain atau kesalahan lainnya, kirim halaman kesalahan ke IE. Jika nama menyelesaikan, ambil halaman dan berikan ke IE.

IE 6.0 tidak menyelesaikan nama DNS.

bindbn
sumber
0

Saya tidak berpikir itu - jika Anda mengetikkan IP dan domain ada di daftar pengecualian, atau domain, dan IP ada di daftar pengecualian, mungkin masih akan melalui proxy.

Mungkin saja proxy.pac / wpad.dat memungkinkan Anda untuk memaksa Anda keluar dari perilaku ini.

Tom Newton
sumber