Squid HTTPS Tunneling menggunakan CONNECT sangat lambat

12

Saya menggunakan squid di jaringan saya untuk menyimpan konten. Saya meluncurkan chrome dengan saklar baris perintah yang memberitahukannya untuk menggunakan proxy.

Sebagian besar ini berfungsi dengan baik karena squid menyimpan banyak konten dan dengan jumlah pengguna yang terbatas, kinerjanya baik.

ketika saya mengunjungi situs web yang menggunakan HTTPS chrome, halaman pertama memuat sangat lambat. Bilah status di chrome mengatakan "Menunggu terowongan proxy ...". Chrome menggunakan kata kerja CONNECT untuk menggali melalui proxy dan membangun HTTPS dengan server. Halaman berikutnya cepat karena Chrome membuat koneksi tetap terbuka.

Saya memeriksa log squid3 saya. Berikut adalah beberapa entri CONNECT. Kolom kedua adalah waktu respons dalam milidetik

1416064285.231   2926 192.168.12.10 TCP_MISS/200 0 CONNECT www.google.com:443 - DIRECT/74.125.136.105 -
1416064327.076  49702 192.168.12.10 TCP_MISS/200 1373585 CONNECT r2---sn-q4f7sn7l.googlevideo.com:443 - DIRECT/173.194.141.152 -
1416064345.018  63250 192.168.12.10 TCP_MISS/200 545 CONNECT mtalk.google.com:5228 - DIRECT/74.125.136.188 -
1416064372.020  63038 192.168.12.10 TCP_MISS/200 1809 CONNECT www.facebook.com:443 - DIRECT/31.13.91.2 -
1416064393.040  64218 192.168.12.10 TCP_MISS/200 25346 CONNECT clients4.google.com:443 - DIRECT/173.194.32.196 -
1416064408.040  63021 192.168.12.10 TCP_MISS/200 545 CONNECT mtalk.google.com:5228 - DIRECT/74.125.136.188 -
1416064408.040  62515 192.168.12.10 TCP_MISS/200 619 CONNECT ssl.gstatic.com:443 - DIRECT/173.194.32.207 -
1416064427.019  90301 192.168.12.10 TCP_MISS/200 2663948 CONNECT r2---sn-q4f7sn7l.googlevideo.com:443 - DIRECT/173.194.141.152 -
1416064429.019  63395 192.168.12.10 TCP_MISS/200 1339 CONNECT clients6.google.com:443 - DIRECT/173.194.32.195 -
1416064439.015  63382 192.168.12.10 TCP_MISS/200 764 CONNECT talkgadget.google.com:443 - DIRECT/173.194.32.199 -
1416064446.896 170270 192.168.12.10 TCP_MISS/200 2352814 CONNECT r20---sn-q4f7dm7z.googlevideo.com:443 - DIRECT/208.117.252.121 -
1416064471.010  62969 192.168.12.10 TCP_MISS/200 516 CONNECT mtalk.google.com:5228 - DIRECT/74.125.136.188 -
1416064524.010  63389 192.168.12.10 TCP_MISS/200 764 CONNECT talkgadget.google.com:443 - DIRECT/173.194.32.195 -
1416064534.014  63003 192.168.12.10 TCP_MISS/200 545 CONNECT mtalk.google.com:5228 - DIRECT/74.125.136.188 -
1416064542.010  63387 192.168.12.10 TCP_MISS/200 2114 CONNECT www.facebook.com:443 - DIRECT/31.13.91.2 -
1416064553.010  63376 192.168.12.10 TCP_MISS/200 470 CONNECT clients4.google.com:443 - DIRECT/173.194.32.194 -
1416064561.010  63379 192.168.12.10 TCP_MISS/200 1807 CONNECT mail.google.com:443 - DIRECT/173.194.32.213 -
1416064597.019  63003 192.168.12.10 TCP_MISS/200 545 CONNECT mtalk.google.com:5228 - DIRECT/74.125.136.188 -
1416064600.126      0 192.168.12.10 TCP_DENIED/403 3630 CONNECT www.google-analytics.com:443 - NONE/- text/html
1416064610.122  10959 192.168.12.10 TCP_MISS/200 626 CONNECT avatars0.githubusercontent.com:443 - DIRECT/185.31.17.133 -
1416064610.129  10968 192.168.12.10 TCP_MISS/200 576 CONNECT avatars1.githubusercontent.com:443 - DIRECT/185.31.17.133 -
1416064610.130  10968 192.168.12.10 TCP_MISS/200 628 CONNECT avatars1.githubusercontent.com:443 - DIRECT/185.31.17.133 -
1416064610.130  10967 192.168.12.10 TCP_MISS/200 576 CONNECT avatars1.githubusercontent.com:443 - DIRECT/185.31.17.133 -
1416064610.133  10972 192.168.12.10 TCP_MISS/200 576 CONNECT avatars1.githubusercontent.com:443 - DIRECT/185.31.17.133 -
1416064610.133  10970 192.168.12.10 TCP_MISS/200 627 CONNECT avatars0.githubusercontent.com:443 - DIRECT/185.31.17.133 -
1416064610.135  10972 192.168.12.10 TCP_MISS/200 576 CONNECT avatars3.githubusercontent.com:443 - DIRECT/185.31.17.133 -
1416064610.135  10972 192.168.12.10 TCP_MISS/200 628 CONNECT avatars2.githubusercontent.com:443 - DIRECT/185.31.17.133 -
1416064610.260  11098 192.168.12.10 TCP_MISS/200 574 CONNECT avatars3.githubusercontent.com:443 - DIRECT/185.31.17.133 -
1416064610.316  11155 192.168.12.10 TCP_MISS/200 1063 CONNECT avatars3.githubusercontent.com:443 - DIRECT/185.31.17.133 -
1416064611.722  13327 192.168.12.10 TCP_MISS/200 17113 CONNECT github.com:443 - DIRECT/192.30.252.128 -
1416064619.130  19005 192.168.12.10 TCP_MISS/200 141 CONNECT avatars3.githubusercontent.com:443 - DIRECT/185.31.17.133 -
1416064639.016  95397 192.168.12.10 TCP_MISS/200 1037 CONNECT talkgadget.google.com:443 - DIRECT/173.194.32.194 -
1416064643.210   4739 192.168.12.10 TCP_MISS/200 4085 CONNECT dgafology.com:443 - DIRECT/198.74.52.100 -
1416064662.010  64990 192.168.12.10 TCP_MISS/200 545 CONNECT mtalk.google.com:5228 - DIRECT/74.125.136.188 -
1416064665.219  65086 192.168.12.10 TCP_MISS/200 3851 CONNECT collector.githubapp.com:443 - DIRECT/54.236.179.219 -
1416064685.276   4003 192.168.12.10 TCP_MISS/200 3956 CONNECT qa.sockets.stackexchange.com:443 - DIRECT/198.252.206.25 -
1416064689.142   3750 192.168.12.10 TCP_MISS/200 357 CONNECT qa.sockets.stackexchange.com:443 - DIRECT/198.252.206.25 -
1416064709.014  78381 192.168.12.10 TCP_MISS/200 779 CONNECT clients6.google.com:443 - DIRECT/173.194.32.193 -
1416064721.010  63396 192.168.12.10 TCP_MISS/200 764 CONNECT talkgadget.google.com:443 - DIRECT/173.194.32.193 -
1416064725.013  63001 192.168.12.10 TCP_MISS/200 545 CONNECT mtalk.google.com:5228 - DIRECT/74.125.136.188 -

Beberapa koneksi membutuhkan lebih dari 60000 milidetik!

Berikut adalah beberapa GET untuk perbandingan

1416064691.281     68 192.168.12.10 TCP_MISS/200 412 GET http://serverfault.com/questions/ticks? - DIRECT/198.252.206.16 text/plain
1416064693.492     70 192.168.12.10 TCP_MISS/200 309 GET http://serverfault.com/search/titles? - DIRECT/198.252.206.16 application/json
1416064693.548    126 192.168.12.10 TCP_MISS/200 739 GET http://serverfault.com/content/img/progress-dots.gif - DIRECT/198.252.206.16 image/gif

Kinerja cumi keseluruhan sangat baik! Tetapi untuk CONNECT sangat lambat.

Saya tahu Anda dapat menggunakan echodan ncuntuk meminta terowongan dari baris perintah.

Saya membuat dua koneksi back to back menggunakan teknik ini

ericu@ericu-desktop:~$ echo -e -n 'CONNECT russiatoday.com:443\r\n\r\n' | nc 192.168.12.95 3127
HTTP/1.0 200 Connection established

ericu@ericu-desktop:~$ echo -e -n 'CONNECT russiatoday.com:443\r\n\r\n' | nc 192.168.12.95 3127
HTTP/1.0 200 Connection established

Dalam log,

1416065033.065   3079 192.168.12.10 TCP_MISS/200 0 CONNECT russiatoday.com:443 - DIRECT/62.213.85.4 -
1416065034.090    208 192.168.12.10 TCP_MISS/200 0 CONNECT russiatoday.com:443 - DIRECT/62.213.85.4 -

Koneksi pertama membutuhkan 3079 milidetik, tetapi yang kedua hanya 208. Jadi, tampaknya Squid tidak selalu lambat.

Kemudian, saya melakukan hal yang sama lagi tetapi digunakan tcpdumpuntuk menangkap lalu lintas dari squidke server.

1416070989.180    732 192.168.12.10 TCP_MISS/200 0 CONNECT russiatoday.com:443 - DIRECT/62.213.85.4 -

Seperti yang Anda lihat, latensi yang dilaporkan adalah 732ms.

Ini adalah output dari tcpdump capture dari 3 paket pertama, SYNdari kotak saya, SYN ACKdari jarak jauh dan ACK dari kotak saya. Pemahaman saya adalah bahwa ini adalah jabat tangan 3 arah yang diperlukan untuk membangun koneksi

11:03:08.973995 IP 192.168.12.95.34778 > 62.213.85.4.443: Flags [S], seq 1280719736, win 14600, options [mss 1460,sackOK,TS val 605181173 ecr 0,nop,wscale 7], length 0
11:03:09.180753 IP 62.213.85.4.443 > 192.168.12.95.34778: Flags [S.], seq 614920595, ack 1280719737, win 14480, options [mss 1460,sackOK,TS val 1284340103 ecr 605181173,nop,wscale 7], length 0
11:03:09.180781 IP 192.168.12.95.34778 > 62.213.85.4.443: Flags [.], ack 1, win 115, options [nop,nop,TS val 605181225 ecr 1284340103], length 0

Waktu yang berlalu adalah 206,8 ms dalam pertukaran itu. Jadi dalam contoh ini squidmemiliki latency 526 ms jika analisis saya benar. Ekstra ~ 500 ms latensi sangat besar.

Tapi analisis saya mungkin cacat, saya pikir karena "waktu respons" untuk CONNECTcumi-cumi hanya mengukur total waktu terowongan itu tetap terbuka.

Saya mengedit logformatarahan saya untuk squidmenambahkan waktu resolusi DNS dalam milidetik.

1416072432.918 580 776 192.168.12.10 TCP_MISS/200 0 CONNECT russiatoday.com:443 - DIRECT/62.213.85.4 -
1416072446.823 - 185 192.168.12.10 TCP_MISS/200 0 CONNECT russiatoday.com:443 - DIRECT/62.213.85.4 -

Kolom kedua adalah waktu pencarian DNS, yang ketiga adalah "waktu respons" yang mungkin tidak terlalu berarti CONNECT. Kolom muncul -karena squidmemiliki caching DNS internal. Ini berarti bahwa squid menggunakan cache DNS internal untuk koneksi selanjutnya. Ini menjelaskan bahwa tampilan halaman pertama menjadi lambat dan yang berikutnya relatif cepat. Ini juga menjelaskan latensi tambahan ~ 500 ms. Saya menggunakan bind9 berjalan pada penerusan host lokal ke DNS Google di ipv4. Bagaimana saya mendapatkan latensi ~ 500 ms untuk pencarian DNS sederhana?

Berjalan nslookupmenggunakan 8.8.8.8 secara langsung dan mem-bypass server lokal saya:

ericu@katz:~$ time nslookup russiatoday.com 8.8.8.8
Server:     8.8.8.8
Address:    8.8.8.8#53

Non-authoritative answer:
Name:   russiatoday.com
Address: 62.213.85.4


real    0m0.056s
user    0m0.004s
sys 0m0.008s

Ini menunjukkan 56 ms latensi untuk seluruh pencarian. Ping server itu memberikan latensi sekitar 50 ms, jadi ini masuk akal.

Jadi sesuatu tentang squiddan bind9tidak setuju satu sama lain?

Eric Urban
sumber
Apakah Anda menjalankan beberapa firewall di suatu tempat antara proxy dan jangkauan jaringan publik atau antara rig desktop dan proxy?
Xavier Lucas
Ya, saya menggunakan mesin lain yang digunakan iptablesuntuk bertindak sebagai firewall NAT + untuk koneksi internet saya.
Eric Urban
Pastikan aturan Anda menggunakan status netfilter (BARU, ESTABLISHED) untuk memungkinkan lalu lintas dan tidak hanya ip: pasangan port. Sedikit tcpdump untuk melihat apa yang memakan waktu pasti akan membantu (misalnya memeriksa permintaan DNS).
Xavier Lucas
bagaimana itu berbeda dengan hanya memiliki aturan iptables -A chain_name -j ACCEPT. Maksudku yakin, aku bisa menambahkannya, tapi aku tidak mengerti mengapa itu penting.
Eric Urban
1
Ini pasti lebih cepat untuk memeriksa keadaan koneksi yang ada daripada menguji sekelompok aturan untuk setiap paket. Dalam pengalaman saya, saya melihat kehilangan kinerja yang dramatis tanpa pengaturan seperti itu. Cara terbaik untuk menganalisis masalah Anda: tcpdump.
Xavier Lucas

Jawaban:

12

Saya tahu ini adalah pertanyaan lama tetapi saya memiliki masalah yang sama dan diselesaikan menggunakan ini di squid.conf

dns_v4_first aktif

Salam

Juliano Piassa
sumber
Luar biasa, terima kasih banyak! Saya menyalahkan Chrome selama saya mengalami masalah yang menjengkelkan ini. Seharusnya memikirkan ini karena saya memiliki masalah dengan jaringan IPv6 pada vm saya.
piit79
Ke titik! Terima kasih.
Marinos An
1

Memposting ini karena saya pikir akan sangat membantu bagi siapa saja yang menjalankan cumi-cumi dengan kotak pfSense. Terima kasih kepada Juliano atas jawaban mereka! Pengaturan yang sama dapat ditemukan di bawah (dalam kotak pfSense Anda) Layanan> Squid Proxy Server> General as Resolve DNS IPv4 First. Di bawah ini adalah tangkapan layar.

pengaturan proxy squid pfSense

darshanags
sumber
-1

Saya harus mengatur "connect_timeout 2.0" karena ia mencoba resolusi ipv6 dns terlebih dahulu dan kemudian beralih ke ipv4 setelah batas waktu 60 detik default.

HawtDogFlvrWtr
sumber