แแแแแ แฏแแแ แฐแแแ , แแ แแแแ แแฅแแแ แแ Exness-แแก แแแแขแคแแ แแแก แแฃแแแจแ แแแฃแจแแแ. แฉแแแ แแแแแแแ แแแ แแ แแแแ แแแแ แฉแแแแ แแ แแแฃแฅแขแแก แแแแแแแแ แแแแก แแฃแแแแแแก แแแแ แแแแแงแแแแแฃแ แแแคแ แแกแขแ แฃแฅแขแฃแ แแก แซแแ แแแแ แแแแแแแแแขแแแก.
แแ แกแขแแขแแแจแ แแกแฃแ แก แแแแแแแแ แแ แฉแแแ แแแแแชแแแแแแ แกแแฏแแ แ แแแแกแแแขแแแแก แแแคแ แแกแขแ แฃแฅแขแฃแ แแจแ แแแจแแคแ แฃแแ SNI (ESNI) แขแแฅแแแแแแแแก แแแแแ แแแแกแแแ แแแแแแจแแ แแแแ.

แแ แขแแฅแแแแแแแแก แแแแแงแแแแแ แแแแฃแแฏแแแแกแแแก แฃแกแแคแ แแฎแแแแแก แแแแแก แกแแฏแแ แ แแแแกแแแขแแแ แแฃแจแแแแแกแแก แแ แแแแแแแงแแคแแแแแก แแแแแแแแแก แแแแ แแแฆแแแฃแ แจแแแ แฃแกแแคแ แแฎแแแแแก แกแขแแแแแ แขแแแก.
แแแ แแแ แ แแแจแ, แแแแแ แแฆแแแแจแแ, แ แแ แขแแฅแแแแแแแ แแ แแ แแก แกแขแแแแแ แขแแแแแฃแแ แแ แฏแแ แแแแแ แแ แแแฅแขแแก แแขแแแแแ, แแฃแแชแ CloudFlare แแ Mozilla แฃแแแ แฃแญแแ แแ แแฎแแ แก แแแก (... ). แกแฌแแ แแ แแแแ แแแแแชแ แแแขแแแแชแแ, แฉแแแแแขแแ แแแแแ แแกแแแ แแฅแกแแแ แแแแแขแ.
แชแแขแ แแแแ แแ
ESNI โ แฌแแ แแแแแแแแก TLS 1.3 แแ แแขแแแแแแก แแแคแแ แแแแแแก, แ แแแแแแช แกแแจแฃแแแแแแก แแซแแแแ SNI-แแก แแแจแแคแแ แ โClient Helloโ TLS handshake แจแแขแงแแแแแแแแจแ. แแ, แ แแแแ แแแแแแงแฃแ แแแ ESNI แแฎแแ แแแญแแ แแก แแฅแแแ Client Hello (แฉแแแฃแแแแ แแแ SNI-แก แแแชแแแแ, แฉแแแ แแฎแแแแแ ESNI-แก):

ESNI-แแก แแแแแกแแงแแแแแแแ แกแแญแแ แแ แกแแแ แแแแแแแแแขแ:
- DNS;
- แแแแฎแแแ แแแแแแ แแฎแแ แแแญแแ แ;
- แกแแ แแแ แแก แแฎแแ แแก แแฎแแ แแแญแแ แ.
DNS
แแฅแแแ แฃแแแ แแแแแแขแแ แแ แ DNS แฉแแแแฌแแ แ - Aแแ TXT (TXT แฉแแแแฌแแ แ แจแแแชแแแก แกแแฏแแ แ แแแกแแฆแแแก, แ แแแแแแแช แแแแแแขแก แจแแฃแซแแแ SNI-แแก แแแจแแคแแ แ) โ แแฎแแแแ แฅแแแแแ. แแแ แแ แแแแกแ, แฃแแแ แแ แกแแแแแแแก แแฎแแ แแแญแแ แ แแแฐ (DNS HTTPS-แแก แกแแจแฃแแแแแแ), แ แแแแแ แฎแแแแแกแแฌแแแแแ แแแแแแขแแแ (แแฎแแแแ แฅแแแแแ) แแ แ แแแแแ ESNI แแฎแแ แแแญแแ แแก DoH-แแก แแแ แแจแ. แแก แแแแแแฃแ แแ, แ แแแแแ ESNI แแแแแฎแแแก แแ แ แแกแฃแ แกแแก แกแแฎแแแแก แแแจแแคแแ แแก, แ แแแแแแแช แฉแแแ แแฌแแแแแแ, แ แแช แแแแก แแแจแแแแก, แ แแ DNS-แแ แฌแแแแแแก UDP-แแก แกแแจแฃแแแแแแ แแแ แ แแ แแฅแแก. แฃแคแ แ แแแขแแช, แแแแแงแแแแแ แกแแจแฃแแแแแแก แแแซแแแแ แแแแชแแแ แแแแ แฅแแจแแก แแแฌแแแแแแก แจแแขแแแแแแกแแแ แแ แกแชแแแแ แจแ.
แแแแแแแ แฎแแแแแกแแฌแแแแแแ , แแแ แจแแ แแก:
CloudFlare (แจแแแแแฌแแแ แฉแแแ แแ แแฃแแแ แ โ แแแจแแคแ แฃแแ SNI โ แจแแแขแงแแแ แแแขแ) แ แแ แแแแ แกแแ แแแ แแแ แฃแแแ แแฎแแ แก แฃแญแแ แแ ESNI-แก, แ แแช แแแจแแแแก, แ แแ CloudFlare-แแก แกแแ แแแ แแแก แแฅแแ แแแแแแฃแ แแ แ DNS แฉแแแแฌแแ แ - A แแ TXT. แฅแแแแแ แแแชแแแฃแ แแแแแแแแจแ แฉแแแ แแแแฎแแแ Google DNS-แก (HTTPS-แแก แกแแจแฃแแแแแแ):
ะ แฉแแแแฌแแ แ:
curl 'https://dns.google.com/resolve?name=www.cloudflare.com&type=A'
-s -H 'accept: application/dns+json'
{
"Status": 0,
"TC": false,
"RD": true,
"RA": true,
"AD": true,
"CD": false,
"Question": [
{
"name": "www.cloudflare.com.",
"type": 1
}
],
"Answer": [
{
"name": "www.cloudflare.com.",
"type": 1,
"TTL": 257,
"data": "104.17.210.9"
},
{
"name": "www.cloudflare.com.",
"type": 1,
"TTL": 257,
"data": "104.17.209.9"
}
]
}
TXT แฉแแแแฌแแ แ, แแแแฎแแแแ แแแแแ แแ แแแแ แจแแแแแแแก แแแฎแแแแแ _esni.FQDN:
curl 'https://dns.google.com/resolve?name=_esni.www.cloudflare.com&type=TXT'
-s -H 'accept: application/dns+json'
{
"Status": 0,
"TC": false,
"RD": true,
"RA": true,
"AD": true,
"CD": false,
"Question": [
{
"name": "_esni.www.cloudflare.com.",
"type": 16
}
],
"Answer": [
{
"name": "_esni.www.cloudflare.com.",
"type": 16,
"TTL": 1799,
"data": ""/wEUgUKlACQAHQAg9SiAYQ9aUseUZr47HYHvF5jkt3aZ5802eAMJPhRz1QgAAhMBAQQAAAAAXtUmAAAAAABe3Q8AAAA=""
}
],
"Comment": "Response from 2400:cb00:2049:1::a29f:209."
}
แแกแ แ แแ, DNS แแแ แกแแแฅแขแแแแแแ, แฉแแแ แฃแแแ แแแแแแแงแแแแ DoH (แกแแกแฃแ แแแแแ DNSSEC-แแ) แแ แแแแแแแขแแ แแ แ แฉแแแแฌแแ แ.
แแแแฎแแแ แแแแแแ แแฎแแ แแแญแแ แ
แแฃ แแ แแฃแแแ แแแแ แแกแแฃแแ แแแ, แแแจแแ แแ แแขแแแแ . แแฅ แแแชแแแฃแแแ แแแกแขแ แฃแฅแชแแแแ, แแฃ แ แแแแ แฉแแ แแแ ESNI แแ DoH แแฎแแ แแแญแแ แ Firefox-แจแ. แแ แแฃแแแ แแก แแแแคแแแฃแ แแชแแแก แจแแแแแ, แแฅแแแ แฃแแแ แแแฎแแ แแกแแแแกแ แ แแ:

แแ แแฃแแแ แแก แจแแกแแแแฌแแแแแแ.
แ แ แแฅแแ แฃแแแ, ESNI-แแก แแฎแแ แแแกแแญแแ แแ แฃแแแ แแฅแแแก แแแแแงแแแแแฃแแ TLS 1.3, แ แแแแแ ESNI TLS 1.3-แแก แแแคแแ แแแแแแ.
ESNI แแฎแแ แแแญแแ แแ แแแฅแแแแแก แขแแกแขแแ แแแแก แแแแแแ, แฉแแแ แแแแแแแ แแแ แแแแแแขแ go, แแแแ แแ แแแแก แจแแกแแฎแแ แแแแแแแแแแแ.
แกแแ แแแ แแก แแฎแแ แแก แแฎแแ แแแญแแ แ
แแแแแแแ, ESNI-แก แแ แฃแญแแ แก แแฎแแ แก แแแ แกแแ แแแ แแแ, แ แแแแ แแชแแ nginx/apache แแ แ.แจ., แ แแแแแ แแกแแแ แแฃแจแแแแแ TLS-แแแ OpenSSL/BoringSSL-แแก แกแแจแฃแแแแแแ, แ แแแแแแแช แแคแแชแแแแฃแ แแ แแ แฃแญแแ แแ แแฎแแ แก ESNI-แก.
แแแแขแแ, แฉแแแ แแแแแแฌแงแแแขแแ แจแแแแแฅแแแ แฉแแแแ แกแแแฃแแแ แ แฌแแแ แแแฌแแแแก แแแแแแแแแขแ (ESNI reverse proxy), แ แแแแแแช แแฎแแ แก แแแฃแญแแ แแ TLS 1.3 แขแแ แแแแแชแแแก ESNI-แแ แแ แแ แแฅแกแ HTTP(S) แขแ แแคแแแก แแแแแกแชแแแแ แแแแ แแแแแแแก แกแแ แแแ แแแแ, แ แแแแแแแช แแ แฃแญแแ แแ แแฎแแ แก ESNI-แก. แแก แกแแจแฃแแแแแแก แแแแซแแแแก แแแแแแแงแแแแ แขแแฅแแแแแแแ แแ แกแแแฃแ แแแคแ แแกแขแ แฃแฅแขแฃแ แแจแ แซแแ แแแแแ แแแแแแแแแขแแแแก แจแแชแแแแก แแแ แแจแ โ แแแฃ แแแแแแแงแแแแ แแ แกแแแฃแแ แแแ แกแแ แแแ แแแ, แ แแแแแแแช แแ แฃแญแแ แแ แแฎแแ แก ESNI-แก.
แกแแชแฎแแแแกแแแแก, แแฅ แแแชแแแฃแแแ แแแแแ แแแ:

แแฆแกแแแแจแแแแแ, แ แแ แแ แแฅแกแ แจแแฅแแแแแแ ESNI-แแก แแแ แแจแ TLS แแแแจแแ แแแแก แแแกแ แฃแแแแแก แจแแกแแซแแแแแแแแ, แ แแแ แแฎแแ แ แแแฃแญแแ แแก ESNI-แแก แแ แแฅแแแ แแแแแแขแแแก. แแกแแแ, แแแแแ แแแแฃแแแแแชแแแก แแ แแขแแแแแ แจแแแซแแแแ แแงแแก HTTP แแ HTTPS 1.3-แแ แแแแแแ TLS แแแ แกแแแ (แแฃ แแแแแ แแแแฃแแแแแชแแแก แแ แแขแแแแแ แแ แฃแญแแ แก แแฎแแ แก 1.3-แก). แแก แแแแแแแ แฃแแ แฃแแแแแงแแคแก แแแฅแกแแแแแฃแ แแแฅแแแแแแแก.
ESNI-แแก แแฎแแ แแแญแแ แแก แแแแฎแแ แชแแแแแแ go แฉแแแ แแแกแแกแฎแแ แแแจแแแแ แแฆแแแแจแแแ, แ แแ แแแแแ แแแแแแแแแขแแชแแ แกแแแแแแ แแ แแขแ แแแแแแฃแ แแ, แ แแแแแ แแก แกแขแแแแแ แขแฃแ แแแแแแแแแแแจแ แชแแแแแแแแแก แแฃแแแกแฎแแแแก. แแ แแแขแ/แขแ แแ แแแแขแแ แกแแญแแ แแแแก โแจแแแแแแแแกโ แแแ แแขแ แจแแแ แแแแแแ.
ESNI แแแกแแฆแแแแแแก แแแแแ แแ แแแแกแแแแก แฉแแแ แแแแแแแงแแแแ (แแกแแแ CloudFlare-แแก แแแแฃแจแแแแ แ). แแก แแแกแแฆแแแแแ แแแแแแงแแแแแ SNI-แแก แแแจแแคแแ แแกแแแแก/แแแจแแคแแ แแกแแแแก.
แฉแแแ แแแแแแชแแแแ แแแแแ go 1.13-แแก แแแแแงแแแแแแ Linux (Debian, Alpine) แแ MacOS.
แ แแแแแแแแ แกแแขแงแแ แแแแ แแชแแฃแแ แแแฎแแกแแแแแแแแแแก แจแแกแแฎแแ
ESNI แฃแแฃ แแ แแฅแกแ แแ แแแแแแก แคแแ แแแขแจแ แแแแฌแแแแก แแแขแ แแแแแก, แ แแแแ แแชแแ RPS, แแแแ แแแแแแแก แจแแงแแแแแแ แแ แ แแแแแ แแแแก แแแแแแ, แฌแแ แฃแแแขแแแแแ/แฌแแ แแแขแแแฃแแ TLS แแแแแแจแแ แแแแก แแแแแชแแแแแ แแ TLS แแแแแแจแแ แแแแก แฎแแแแ แซแแแแแแ. แแ แแ แจแแฎแแแแแ, แแก แกแแแแแ แแกแ แฉแแแแ แแแแก แจแแกแแคแแกแแแแแ, แแฃ แ แแแแ แแแฃแจแแแแแก แแ แแฅแกแ แขแ แแคแแแก.
แแแแแงแแแแแแแแ แแกแแแ แฉแแแแขแแ แแ แแแขแแแ แแแแก แขแแกแขแแ แแแ. แจแแแแแแแ แฅแแแแแ แแแชแแแฃแแแ:
wrk -t50 -c1000 -d360s 'https://esni-rev-proxy.npw:443' --timeout 15s
Running 6m test @ https://esni-rev-proxy.npw:443
50 threads and 1000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 1.77s 1.21s 7.20s 65.43%
Req/Sec 13.78 8.84 140.00 83.70%
206357 requests in 6.00m, 6.08GB read
Requests/sec: 573.07
Transfer/sec: 17.28MB
แฉแแแ แฉแแแแขแแ แแ แแฎแแแแ แแแแกแแแ แแแ แแแขแแแ แแแแก แขแแกแขแแ แแแ, แ แแแ แจแแแแแแ แแ ESNI แฃแแฃ แแ แแฅแกแแก แแฅแแแ แแ แแแก แแแ แแจแ แแ แกแแแฃแแ แแแ แแแแขแ แแแ. แจแฃแแแแแฃแ แ แแแแแแแแแขแแแแแแ แฉแแ แแแแก แแฆแแแกแแคแฎแแ แแแแ, แขแ แแคแแแ แแแแแแฃแ แแ แจแแแแขแแแแ.
แแแแแแ แแ, ESNI-แแก แแฎแแ แแแญแแ แแ แแ HTTP-แแ แแแแแ แแ แแฅแกแแ แแแแ, แแ แแ แแแแแแแแแ แแแแ แแแแฎแแแแแแ ~550 rps แแแแแฆแแ, ESNI แฃแแฃ แแ แแฅแกแแก แกแแจแฃแแแ CPU/RAM แแแฎแแแ แแแแ:
- 80% CPU-แก แแแแแงแแแแแ (4 vCPU, 4 GB RAM แฐแแกแขแ, Linux)
- 130 แแ แแแแแ แแแแฃแแ RSS

แจแแแแ แแแแกแแแแก, แแแแแ แแแแแ แแแแแแแก nginx-แแกแแแแก RPS TLS แจแแฌแงแแแขแแก (HTTP แแ แแขแแแแแ) แแแ แแจแ แแ แแก ~ 1100:
wrk -t50 -c1000 -d360s 'http://lb.npw:80' โ-timeout 15s
Running 6m test @ http://lb.npw:80
50 threads and 1000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 1.11s 2.30s 15.00s 90.94%
Req/Sec 23.25 13.55 282.00 79.25%
393093 requests in 6.00m, 11.35GB read
Socket errors: connect 0, read 0, write 0, timeout 9555
Non-2xx or 3xx responses: 8111
Requests/sec: 1091.62
Transfer/sec: 32.27MB
แขแแแ-แแฃแขแแแแก แแ แกแแแแแ แแแฃแแแแแแก แ แแกแฃแ แกแแแแก แแแแแแแแแแแ (แฉแแแ แแแแแแแงแแแแ 4 vCPU, 4 GB แแแแ แแขแแฃแแ แแแฎแกแแแ แแแ, Linux), แแ แกแแแแแแแแแแจแ แแแขแแแชแแฃแ แ RPS แฃแคแ แ แแแฆแแแแ (แฃแคแ แ แแซแแแแ แ แแกแฃแ แกแแแแ 2700 RPS-แแแ แแแฉแแแแแแแแแ แแแแแฆแแ).
แแแกแแกแ แฃแ, แแแแแ แแฆแแแแจแแ, แ แแ ESNI แขแแฅแแแแแแแ แกแแแแแแ แแแ แกแแแฅแขแแฃแแแ แแแแแแงแฃแ แแแ. แฏแแ แแแแแ แแแแ แ แฆแแ แแแแฎแแแ, แ แแแแ แแชแแ แกแแฏแแ แ ESNI แแแกแแฆแแแแก DNS-แจแ แจแแแแฎแแ แแ ESNI แแแกแแฆแแแแแแก แ แแขแแชแแ - แแก แกแแแแแฎแแแ แแฅแขแแฃแ แแ แแแแแฎแแแแแ แแ ESNI-แแก แฃแแฎแแแกแ แแ แแแฅแขแ (แแ แกแขแแขแแแก แแแฌแแ แแก แแแแแแขแแกแแแแก) แฃแแแ แแแแแแ. .
แฌแงแแ แ: www.habr.com
