ืืืื
ืืืขืจืืืช ืกืื ืื ืชืืื ืืจืืื ืืืช ืืืืจื ืืืช ืืืฆืจื ืื ืืืืขืื ืืื Cisco, BlueCoat, FireEye ืืฉ ืื ืืขื ืืืฉืืชืฃ ืขื ืขืืืชืืื ืืืืงืืช ืืืชืจ - ืืขืจืืืช DPI, ืืฉืจ ืืืืฉืืืช ืืืืคื ืคืขืื ืืจืื ืืืืืืืช. ืืืืช ืืขืืืื ืฉื ืฉื ืืื ืืื ืืืืงืช ืชืขืืืจืช ืืื ืืจื ื ื ืื ืกืช ืืืืฆืืช ืืืืชืืกืก ืขื ืจืฉืืืืช ืฉืืืจืืช/ืืื ืืช, ืงืืืช ืืืืื ืืืกืืจ ืืช ืืืืืืจ ืืืื ืืจื ื. ืืืืืืื ืฉืฉื ืืื ืืกืชืืืื ืขื ืขืงืจืื ืืช ืืืืื ืืืกืืืืช ืขืืืืชื, ืื ืืฉืืืืช ืขืงืืคืชื ืืืื ืืจืื ืื ืืืฉืืชืฃ.
ืืืช ืืืื ืืืืืืืช ืฉืืืคืฉืจืืช ืื ืืขืงืืฃ ืืฆืืจื ืื ืืขืืื ืื DPI ืืื ืืขืจืืืช ืืจืืื ืืืช ืืื ืืื ืืืืืื ืืืืชืืช ืืชืืื. ืืืืืช ืฉืื ืืื ืฉืื ืื ื ืืืืืื ืืืฉืื ืืกืื, ืืกืชืชืจืื ืืืืืจื ืชืืื ืฆืืืืจื ืืืจ ืขื ืืื ืืืื ืืื, ืฉืืืืื ืื ืืืืกื ืขื ืืื ืืฃ ืืขืจืืช, ืืืฉื google.com.
ืื ืืขื ืืืืจืื ืืืจ ื ืืชืื ืขื ืืืื ืืืืืื ืืื ืื ืืชื ื ืืืืืืืช ืจืืืช. ืขื ืืืช, ืืื ืืืืืืืช ื-DNS-over-HTTPS ืื-SNI ืืคืืคืืืจืืืช ืืื ืืื ืืช ืืืืจืื ื, ืืื ืื ืืืจืกื ืืืืฉื ืฉื ืคืจืืืืงืื TLS 1.3, ืืืคืฉืจืื ืืฉืงืื ืืคืฉืจืืช ื ืืกืคืช ืืืืืช ืืืืืื.
ืืื ืช ืืืื ืืืืืื
ืจืืฉืืช, ืืืื ื ืืืืจ ืืขื ืืืฉืืื ืืกืืกืืื ืื ืฉืืื ืืื ืชืืื ืืื ื ืื ืืื ืื ืืืื ืื ืื ื ืืืฅ. ืืืืจื ื ืืช ืื ืื ืื ื-eSNI, ืฉืชืคืขืืื ืืืืื ืืืืฉื. ืื ืื ืื eSNI (ืืื ืืืงืฆืืืช ืฉื ืฉืจืช ืืืฆืคื ืช) ืืื ืืจืกื ืืืืืืืช ืฉื SNI, ืืืื ื ืจืง ืขืืืจ ืคืจืืืืงืื TLS 1.3. ืืจืขืืื ืืืจืืื ืืื ืืืฆืคืื, ืืื ืืืชืจ, ืืืืข ืืืืื ืืืืืื ื ืฉืืืช ืืืงืฉื.
ืืขืช ื ืกืชืื ืืืฆื ืคืืขื ืื ืื ืื ื-eSNI ืืคืืขื.
ื ื ืื ืฉืืฉ ืื ื ืืฉืื ืืื ืืจื ื ืฉื ืืกื ืขื ืืื ืคืชืจืื DPI ืืืืจื ื (ืืื ื ืืงื, ืืืฉื, ืืช ืืขืงื ืืืืจื ืืื ืืืคืืจืกื rutracker.nl). ืืืฉืจ ืื ื ืื ืกืื ืืืฉืช ืืืชืจ ืฉื ืขืืงื ืืืจื ืืื, ืื ื ืจืืืื ืืช ืืกืื ืืกืื ืืจืื ืฉื ืืกืคืง ืืืฆืืื ืฉืืืฉืื ืืกืื:
ืืืชืจ RKN ืืืืืืื ืืื ืจืฉืื ืืืขืฉื ืืจืฉืืืืช ืืขืฆืืจื:
ืืืฉืจ ืืชื ืฉืืื whois, ืืชื ืืืื ืืจืืืช ืฉืืืืืืื ืขืฆืื "ืืืกืชืจ" ืืืืืจื ืกืคืง ืืขื ื Cloudflare.
ืืื ืื ืืืื ื"ืืืืืื" ื-RKN, ืขืืืืื ืืขืื ืืืข ืืื ื ืืืชืจ ื-Beeline (ืื ืืืืื ืขื ืืื ืื ืืกืืื ืืืจ ืฉื ืืจืืืืืืจ ืืืคืืจืกื ืฉืื ื) ืื ืืกืจื ืืืืคืฉืืช ืืช ืืืชืจ ืืคื ืืชืืืช IP, ืืื ืืืกืืคื ืืช ืฉื ืืืืืืื ืืจืฉืืืช ืืขืฆืืจื. ืืชื ืืืื ืืืืช ืืืช ืืงืืืช ืื ืืชื ืืกืชืื ืืืื ืืืืืื ืื ืืืจืื ืืกืชืชืจืื ืืืืืจื ืืืชื ืืชืืืช IP, ืืงืจ ืืืื ืืื ืืชืจืื ืฉืืืืฉื ืืื ื ืืกืืื:
ืืื ืื ืงืืจื? ืืื ื-DPI ืฉื ืืกืคืง ืืืืข ืืืืื ืืืืืื ื ืืฆื ืืืคืืคื ืฉืื, ืืืืจ ืฉืื ืืชืงืฉืืจืช ืืชืจืืฉืช ืืืืฆืขืืช ืคืจืืืืงืื https, ืืขืืืื ืื ืฉืื ื ืื ืืืืืคื ืฉื ืชืขืืืืช https ื-Beeline? ืืื ืืื ืืขื ืจืืืืช ืจืื ืื ืฉืขืืงืืื ืืืจืื?
ืืืื ื ื ืกื ืืขื ืืช ืขื ืฉืืื ืื ืขื ืืื ืืชืืื ื ืืช ืืชื ืืขื ืืจื wireshark
ืฆืืืื ืืืกื ืืจืื ืฉืชืืืื ืืืคืืคื ืืงืื ืืช ืืชืืืช ื-IP ืฉื ืืฉืจืช ืืืืฆืขืืช DNS, ืืืืจ ืืื ืืชืจืืฉืช ืืืืฆืช ืื ืจืืืื ืฉื TCP ืขื ืฉืจืช ืืืขื, ืืืืืจ ืืื ืืืคืืคื ืื ืกื ืืืฆืืจ ืืืืืจ SSL ืขื ืืฉืจืช. ืืฉื ืื, ืืื ืฉืืื ืืืืืช SSL Client Hello, ืืืืืื ืืช ืฉื ืชืืื ืืืงืืจ ืืืงืกื ืืจืืจ. ืฉืื ืื ื ืืจืฉ ืขื ืืื ืฉืจืช ืืืืืช Cloudflare ืขื ืื ืช ืื ืชื ื ืืื ืืช ืืืืืืจ. ืื ืืืงืื ืฉืื ืืกืคืง DPI ืชืืคืก ืืืชื ื, ืฉืืืจ ืืช ืืงืฉืจ ืฉืื ื. ืืื ืขื ืืืช, ืื ืื ื ืื ืืงืืืื ืฉืื ืืื ืืืกืคืง, ืืื ื ืจืืืื ืืช ืฉืืืืช ืืืคืืคื ืืจืืืื ืืืืื ืืืชืจ ืืืฉืืช ืื ืคืฉืื ืื ืขืืื:
ืืขืช ื ืคืขืื ืืช ืื ืื ืื eSNI ืืืคืืคื, ืืคื ืฉื ืืชื ืืืืจืืืช ืขืืืจ
ืืฉื ืื ืื ื ืคืืชืืื ืืช ืืฃ ืืชืฆืืจื ืฉื Firefox about: config ืืืคืขื ืืช ืืืืืจืืช ืืืืืช:
network.trr.mode = 2;
network.trr.uri = https://mozilla.cloudflare-dns.com/dns-query
network.security.esni.enabled = true
ืืืืจ ืืื, ื ืืืืง ืฉืืืืืจืืช ืคืืขืืืช ืืืืื ืืืชืจ cloudflare.
ืืืืื. ืืืฉืฉ ืืืืื ืขืืื ื ื ืคืชื ืืื ืฉืื ืฉืจืชื VPN ืื ืคืจืืงืกื. ืืืื ื ืกืชืื ืืขืช ืขื ืืืืื ื-wireshark ืืื ืืจืืืช ืื ืงืจื.
ืืคืขื, ืืืืืช ssl client hello ืืื ื ืืืืื ืืืคืืจืฉ ืืช ืืืืืื ืืืขื, ืืื ืืืงืื ืืืช ืืืคืืข ืฉืื ืืืฉ ืืืืืื - encrypted_server_name - ืืื ื ืืฆื ืืขืจื ืฉื rutracker.nl, ืืจืง ืฉืจืช ืืืืืช ืฉื cloudflare ืืืื ืืคืขื ื ืืช ืื ืฉืื. ืืื ืื, ืื ืืกืคืง DPI ืืื ืืจืืจื ืืื ืืฉืืืฃ ืืืืื ืืืืคืฉืจ ืชืขืืืจื ืืื. ืืื ืืคืฉืจืืืืช ืืืจืืช ืขื ืืฆืคื ื.
ืื, ืืืงื ื ืืื ืืืื ืืืืืื ืขืืืืช ืืืคืืคื. ืขืืฉืื ืืืื ื ื ืกื ืืืืฉื ืืช ืื ืขื ืืืจืื ืกืคืฆืืคืืื ืืืขื ืืื ืื ืืืชืจ. ืืงืืื ืื, ื ืืื ืืช ืืืชื ืชืืชื ืืืฉืชืืฉ ื-eSNI ืืขืืืื ืขื TLS 1.3, ืืืืงืืื ื ืจืื ืืืฆื ืคืืขื ืคืจืื ื ืืชืืื ืืืืกืก eSNI ืขืฆืื.
ืืืืช ืืืืืื ืขื eSNI
ืืฉื ืืขืืืื ืฉ-curl ืืฉืชืืฉ ืืกืคืจืืืช openssl ืืจืืืื ืืื ืืืชืืืจ ืืืืฆืขืืช ืคืจืืืืงืื https, ืงืืื ืื ืขืืื ื ืืกืคืง ืฉื ืชืืืื ื-eSNI. ืืื ืขืืืื ืชืืืื ื-eSNI ืืกื ืืคื ืืืืกืืจ ืฉื openssl, ืื ืขืืื ื ืืืืจืื ืกื ืืฃ ืืืืื ืฉื openssl, ืืงืืคื ืืืืชืงืื ืืืชื.
ืื ื ืืฉืืคืืื ืืช ืืืืืจ ื-GitHub ืืืจืืืืื ืืจืืื:
$ git clone https://github.com/sftcd/openssl
$ cd openssl
$ ./config
$ make
$ cd esnistuff
$ make
ืืืืจ ืืื, ืื ื ืืฉืืคืืื ืืช ืืืืืจ ืขื curl ืืืืืืจืื ืืช ืืืืืืจ ืฉืื ืืืืฆืขืืช ืกืคืจืืืช openssl ืืืืืืืจ ืฉืื ื:
$ cd $HOME/code
$ git clone https://github.com/niallor/curl.git curl-esni
$ cd curl-esni
$ export LD_LIBRARY_PATH=/opt/openssl
$ ./buildconf
$ LDFLAGS="-L/opt/openssl" ./configure --with-ssl=/opt/openssl --enable-esni --enable-debug
ืืื ืืฉืื ืืฆืืื ื ืืื ืืช ืื ืืกืคืจืืืช ืฉืืื ื ืืฆื openssl (ืืืงืจื ืฉืื ื, ืื /opt/openssl/) ืืืืืื ืฉืชืืืื ืืืืืจื ืืขืืืจ ืืื ืฉืืืืืช.
ืื ืืืืืจื ืชืฆืืื, ื ืจืื ืืช ืืฉืืจื:
ืืืืจื: esni ESNI ืืืคืขื ืื ืืกืืื ื ืืกืืื ื. ืืฉืชืืฉ ืืืืืจืืช!
$ make
ืืืืจ ืื ืืืช ืืืืืื ืืืฆืืื, ื ืฉืชืืฉ ืืงืืืฅ bash ืืืืื ื-openssl ืืื ืืืืืืจ ืืืืคืขืื ืืช curl. ืืืื ื ืขืชืืง ืืืชื ืืกืคืจืืื ืขื ืกืืกืื ืื ืืืืช:
cp /opt/openssl/esnistuff/curl-esni
ืืืืฆืข ืืงืฉืช https ืืืืืงื ืืฉืจืช cloudflare, ืชืื ืืงืืืช ืื ืืช DNS ื-TLS ืื-ืืื ืืช ื-Wireshark.
$ ESNI_COVER="www.hello-rkn.ru" ./curl-esni https://cloudflare.com/
ืืชืืืืช ืืฉืจืช, ืื ืืกืฃ ืืืืืข ืจื ืขื ื ืืคืื ืืืืื ื-openssl ื-curl, ื ืงืื ืชืืืืช HTTP ืขื ืงืื 301 ื-cloudflare.
HTTP/1.1 301 Moved Permanently
< Date: Sun, 03 Nov 2019 13:12:55 GMT
< Transfer-Encoding: chunked
< Connection: keep-alive
< Cache-Control: max-age=3600
< Expires: Sun, 03 Nov 2019 14:12:55 GMT
< Location: https://www.cloudflare.com/
ืื ืฉืืฆืืืข ืขื ืื ืฉืืืงืฉื ืฉืื ื ื ืืกืจื ืืืฆืืื ืืฉืจืช ืืืขื, ื ืฉืืขื ืืขืืืื.
ืขืืฉืื ืืืื ื ืกืชืื ืขื ืืืืื ืืชื ืืขื ื-wireshark, ืืืืืจ. ืื ืฉืจืื ืืกืคืง DPI ืืืงืจื ืื.
ื ืืชื ืืจืืืช ืฉ-curl ืคื ื ืชืืืื ืืฉืจืช ื-DNS ืืงืืืช ืืคืชื eSNI ืฆืืืืจื ืขืืืจ ืฉืจืช cloudflare - ืืงืฉืช TXT DNS ื-_esni.cloudflare.com (ืืืืื ืืก' 13). ืืืืจ ืืื, ืืืืฆืขืืช ืกืคืจืืืช openssl, curl ืฉืื ืืงืฉืช TLS 1.3 ืืฉืจืช cloudflare ืื ืืืฆืคื ืฉืื ื-SNI ืขื ืืืคืชื ืืฆืืืืจื ืฉืืืฉื ืืฉืื ืืงืืื (ืืืืื ืืก' 22). ืืื, ืื ืืกืฃ ืืฉืื eSNI, ืืืืืช SSL-hello ืืืื ืื ืฉืื ืขื ื-SNI ืืจืืื - ืคืชืื, ืืืชื ื ืืื ืืฆืืื ืืื ืกืืจ (ืืืงืจื ืื -
ืฉืื SNI ืคืชืื ืื ืื ื ืืงื ืืืฉืืื ืืฉืื ืฆืืจื ืืขืช ืขืืืื ืขื ืืื ืฉืจืชื cloudflare ืืจืง ืฉืืืฉ ืืืกืืื ืขืืืจ ืืกืคืง DPI. ืฉืจืช cloudflare ืงืืื ืืช ืืืืืช ื-ssl-hello ืฉืื ื, ืคืขื ื ืืช ื-eSNI, ืืืืฅ ืืฉื ืืช ื-SNI ืืืงืืจื ืืขืืื ืืืชื ืืืืื ืืืื ืื ืงืจื (ืืื ืขืฉื ืืื ืืืืืง ืืคื ืฉืชืืื ื ืืขืช โโืคืืชืื eSNI).
ืืืืจ ืืืืื ืฉื ืืชื ืืชืคืืก ืืืงืจื ืื ืื ืงืืืช ืืื ืฉื DPI ืืื ืืงืฉืช ื-DNS ืืขืืงืจืืช ืื _esni.cloudflare.com. ืืื ืืคืื ื ืืช ืืงืฉืช ื-DNS ืจืง ืืื ืืืจืืืช ืืื ืืื ืื ืื ืืื ืคืืขื ืืืคื ืื.
ืืื ืืฉืืืฃ ืกืืฃ ืกืืฃ ืืช ืืฉืืื ืืชืืช ื-DPI, ืื ื ืืฉืชืืฉืื ืืื ืื ืื DNS-over-HTTPS ืฉืืืืืจ ืืืจ. ืืกืืจ ืงืื - DOH ืืื ืคืจืืืืงืื ืืืืคืฉืจ ืืืื ืืคื ื ืืชืงืคื ืฉื man-in-the-middle ืขื ืืื ืฉืืืืช ืืงืฉืช DNS ืืจื HTTPS.
ืืื ื ืืฆืข ืืช ืืืงืฉื ืฉืื, ืืื ืืคืขื ื ืงืื ืืคืชืืืช eSNI ืฆืืืืจืืื ืืืืฆืขืืช ืคืจืืืืงืื https, ืื DNS:
ESNI_COVER="www.hello-rkn.ru" DOH_URL=https://mozilla.cloudflare-dns.com/dns-query ./curl-esni https://cloudflare.com/
dump ืชืขืืืจืช ืืืงืฉื ืืืฆื ืืฆืืืื ืืืกื ืืืื:
ื ืืชื ืืจืืืช ืื curl ื ืืืฉ ืชืืืื ืืฉืจืช mozilla.cloudflare-dns.com ืืืืฆืขืืช ืคืจืืืืงืื DoH (ืืืืืจ https ืืฉืจืช 104.16.249.249) ืืื ืืงืื ืืื ืืช ืขืจืื ืืืคืชืืืช ืืฆืืืืจืืื ืืืฆืคื ืช SNI, ืืืืืจ ืืื ืื ืืืขื ืฉืจืช, ืืกืชืชืจ ืืืืืจื ืืืืืืื
ืื ืืกืฃ ืืคืชืจืื DoH ืื "ื mozilla.cloudflare-dns.com, ืื ื ืืืืืื ืืืฉืชืืฉ ืืฉืืจืืชื DoH ืคืืคืืืจืืื ืืืจืื, ืืืฉื, ืืชืืืื ืืจืฉืข ืืืคืืจืกื.
ืืื ื ืจืืฅ ืืช ืืฉืืืืชื ืืืื:
ESNI_COVER="www.kremlin.ru" DOH_URL=https://dns.google/dns-query ./curl-esni https://rutracker.nl/
ืื ืงืื ืืช ืืชืฉืืื:
< HTTP/1.1 301 Moved Permanently
< Date: Sun, 03 Nov 2019 14:10:22 GMT
< Content-Type: text/html
< Transfer-Encoding: chunked
< Connection: keep-alive
< Set-Cookie: __cfduid=da0144d982437e77b0b37af7d00438b1a1572790222; expires=Mon, 02-Nov-20 14:10:22 GMT; path=/; domain=.rutracker.nl; HttpOnly; Secure
< Location: https://rutracker.nl/forum/index.php
< CF-Cache-Status: DYNAMIC
< Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
< Server: cloudflare
< CF-RAY: 52feee696f42d891-CPH
ืืืงืจื ืื, ืคื ืื ื ืืฉืจืช rutracker.nl ืืืกืื, ืืืืฆืขืืช ื-DoH resolver dns.google (ืืื ืืื ืฉืืืืช ืืงืืื, ืืขืช ืืชืืืื ืืืคืืจืกื ืืฉ ืืืืืื ืืจืื ืจืืฉืื ื ืืฉืื) ืืืืกืื ื ืืช ืขืฆืื ื ืืืืืืื ืืืจ, ืฉืืื ืืืืื ืืกืืจ ืืื DPI ืืืกืื ืชืืช ืืื ืืืืช. ืืืชืืกืก ืขื ืืชืืืื ืฉืืชืงืืื, ืืชื ืืืื ืืืืื ืฉืืืงืฉื ืฉืื ื ืืืคืื ืืืฆืืื.
ืืืืืงื ื ืืกืคืช ืืื ืฉื-DPI ืฉื ืืกืคืง ืืืื ื-SNI ืืคืชืื, ืฉืื ื ืืฉืืจืื ืืืืกืื, ืื ื ืืืืืื ืืืืืฉ ืืงืฉื ื-rutracker.nl ืืืกืืื ืฉื ืืฉืื ืืกืืจ ืืืจ, ืืืฉื, ืขืืงื ืืืจ ืืืจื ืืื "ืืื":
$ ESNI_COVER="rutor.info" DOH_URL=https://dns.google/dns-query ./curl-esni https://rutracker.nl/
ืื ื ืงืื ืชืืืื ืืืฉืจืช, ืื... ืืืงืฉื ืฉืื ื ืชืืืกื ืขื ืืื ืืขืจืืช DPI.
ืกืืืื ืงืฆืจ ืืืืง ืืจืืฉืื
ืื ืืฆืืื ื ืืืืืื ืืช ืืคืื ืงืฆืืื ืืืืช ืฉื eSNI ืืืืฆืขืืช openssl ื-curl ืืืืืืง ืืช ืคืขืืืช ืืืืืช ืืืืืืื ืขื ืืกืืก eSNI. ืืืืชื ืืืคื, ืื ื ืืืืืื ืืืชืืื ืืช ืืืืื ืืืืืืื ืขืืื ื ืืืฉืชืืฉืื ืืกืคืจืืืช openssl ืืขืืื "ืืืกืืื" ืฉื ืชืืืืื ืืืจืื. ืคืจืืื ื ืืกืคืื ืขื ืื ืืืืืจืื ืืืืื ืฉืื ื.
ืืงืืจ: www.habr.com