ΠΠ΄ΡΠ°Π²Π΅ΠΉΡΠ΅ Π₯Π°Π±Ρ, ΠΊΠ°Π·Π²Π°ΠΌ ΡΠ΅ ΠΠ»Ρ ΠΈ ΡΠ°Π±ΠΎΡΡ Π² ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½ΠΈΡ Π΅ΠΊΠΈΠΏ Π½Π° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΡΠ° Exness. ΠΠΈΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π°ΠΌΠ΅ ΠΈ Π²Π½Π΅Π΄ΡΡΠ²Π°ΠΌΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΈ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ½ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π½Π°ΡΠΈΡΠ΅ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ²ΠΈ Π΅ΠΊΠΈΠΏΠΈ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°.
Π ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ Π±ΠΈΡ ΠΈΡΠΊΠ°Π» Π΄Π° ΡΠΏΠΎΠ΄Π΅Π»Ρ ΠΎΠΏΠΈΡΠ° ΡΠΈ ΠΎΡ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΡΠ° encrypted SNI (ESNI) Π² ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°ΡΠ° Π½Π° ΠΏΡΠ±Π»ΠΈΡΠ½ΠΈ ΡΠ΅Π±ΡΠ°ΠΉΡΠΎΠ²Π΅.

ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ°Π·ΠΈ ΡΠ΅Ρ
Π½ΠΎΠ»ΠΎΠ³ΠΈΡ ΡΠ΅ ΠΏΠΎΠ²ΠΈΡΠΈ Π½ΠΈΠ²ΠΎΡΠΎ Π½Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ° Ρ ΠΏΡΠ±Π»ΠΈΡΠ΅Π½ ΡΠ΅Π±ΡΠ°ΠΉΡ ΠΈ ΡΠ΅ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈ Π½Π° Π²ΡΡΡΠ΅ΡΠ½ΠΈΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠΈ Π·Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ, ΠΏΡΠΈΠ΅ΡΠΈ Π² ΠΠΎΠΌΠΏΠ°Π½ΠΈΡΡΠ°.
ΠΡΠ΅Π΄ΠΈ Π²ΡΠΈΡΠΊΠΎ ΠΈΡΠΊΠ°ΠΌ Π΄Π° ΠΏΠΎΠ΄ΡΠ΅ΡΡΠ°Ρ, ΡΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΡΠ° Π½Π΅ Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΠΈΡΠ°Π½Π° ΠΈ Π²ΡΠ΅ ΠΎΡΠ΅ ΡΠ΅ Π½Π°ΠΌΠΈΡΠ° Π² ΡΠ΅ΡΠ½ΠΎΠ²Π°, Π½ΠΎ CloudFlare ΠΈ Mozilla Π²Π΅ΡΠ΅ Ρ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ (Π² ). Π’ΠΎΠ²Π° Π½ΠΈ ΠΌΠΎΡΠΈΠ²ΠΈΡΠ° Π΄Π° ΠΈΠ·Π²ΡΡΡΠΈΠΌ ΡΠΎΠ·ΠΈ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½Ρ.
ΠΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ΅ΠΎΡΠΈΠΈ
ESNI Π΅ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° TLS 1.3, ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΡΠΈΡΡΠΎΠ²Π°Π½Π΅ Π½Π° SNI Π² ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΡΠΎ βClient Helloβ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° TLS handshake. ΠΡΠΎ ΠΊΠ°ΠΊ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Client Hello Ρ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ESNI (Π²ΠΌΠ΅ΡΡΠΎ ΠΎΠ±ΠΈΡΠ°ΠΉΠ½ΠΎΡΠΎ SNI Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ ESNI):

Β ΠΠ° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ESNI, ΡΠ° Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΈ ΡΡΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°:
- DNS;Β
- ΠΠΎΠ΄ΠΊΡΠ΅ΠΏΠ° ΠΎΡ ΡΡΡΠ°Π½Π° Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ°;
- ΠΠΎΠ΄ΠΊΡΠ΅ΠΏΠ° ΠΎΡ ΡΡΡΠ°Π½Π° Π½Π° ΡΡΡΠ²Π΅ΡΠ°.
DNS
ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ Π΄Π²Π΅ DNS Π·Π°ΠΏΠΈΡΠ° β A, ΠΈ TXT (TXT Π·Π°ΠΏΠΈΡΡΡ ΡΡΠ΄ΡΡΠΆΠ° ΠΏΡΠ±Π»ΠΈΡΠ½ΠΈΡ ΠΊΠ»ΡΡ, Ρ ΠΊΠΎΠΉΡΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠΈΡΡΠΎΠ²Π° SNI) β Π²ΠΈΠΆΡΠ΅ ΠΏΠΎ-Π΄ΠΎΠ»Ρ. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠΌΠ° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° DoH (DNS over HTTPS), ΡΡΠΉ ΠΊΠ°ΡΠΎ Π½Π°Π»ΠΈΡΠ½ΠΈΡΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠΈ (Π²ΠΈΠΆΡΠ΅ ΠΏΠΎ-Π΄ΠΎΠ»Ρ) Π½Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Ρ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° ESNI Π±Π΅Π· DoH. Π’ΠΎΠ²Π° Π΅ Π»ΠΎΠ³ΠΈΡΠ½ΠΎ, ΡΡΠΉ ΠΊΠ°ΡΠΎ ESNI ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π° ΡΠΈΡΡΠΎΠ²Π°Π½Π΅ Π½Π° ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΡΠ΅ΡΡΡΡΠ°, ΠΊΡΠΌ ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΎΠ±ΡΡΡΠ°ΠΌΠ΅, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ Π΅ Π±Π΅Π·ΡΠΌΠΈΡΠ»Π΅Π½ΠΎ Π΄Π° ΡΠ΅ ΡΠ²ΡΡΠ·Π²Π°ΡΠ΅ Ρ DNS ΠΏΠΎ UDP. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π΄Π°Π²Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π΄Π° ΡΠ΅ Π·Π°ΡΠΈΡΠΈΡΠ΅ ΠΎΡ Π°ΡΠ°ΠΊΠΈ Π½Π° βcache poisoningβ Π² ΡΠΎΠ·ΠΈ ΡΡΠ΅Π½Π°ΡΠΈΠΉ.
Π ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΈΠΌΠ° Π΄ΠΎΡΡΡΠΏΠ½ΠΈ , ΡΡΠ΅Π΄ ΠΊΠΎΠΈΡΠΎ:
CloudFlare (Check My Browser β Encrypted SNI β Learn More), ΡΠ΅ ΡΠ΅Ρ Π½ΠΈΡΠ΅ ΡΡΡΠ²ΡΡΠΈ Π²Π΅ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ 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": "ΠΡΠ³ΠΎΠ²ΠΎΡ ΠΎΡ 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 ΠΎΡΠΈΡΠΈΠ°Π»Π½ΠΎ Π½Π΅ ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°.
ΠΠ°ΡΠΎΠ²Π° ΡΠ΅ΡΠΈΡ ΠΌΠ΅ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΡΠ²ΠΎΠΉ front-end ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ (ESNI reverse proxy), ΠΊΠΎΠΉΡΠΎ Π΄Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° TLS 1.3 Ρ ESNI ΠΈ ΠΏΡΠΎΠΊΡΠΈΡΠ²Π°Π½Π΅ Π½Π° HTTP(S) ΡΡΠ°ΡΠΈΠΊ ΠΊΡΠΌ Π°ΠΏΡΡΡΠΈΠΉΠΌ, ΠΊΠΎΠΉΡΠΎ Π½Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ESNI. Π’ΠΎΠ²Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΡΠ° Π² Π²Π΅ΡΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠ° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°, Π±Π΅Π· Π΄Π° ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ β Ρ.Π΅. Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΠ΅ΠΊΡΡΠΈΡΠ΅ ΡΠ΅Π± ΡΡΡΠ²ΡΡΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ ESNI.Β
ΠΠ° Π½Π°Π³Π»Π΅Π΄Π½ΠΎΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠΌΠ΅ ΡΡ Π΅ΠΌΠ°:

ΠΡΠΊΠ°ΠΌ Π΄Π° ΠΎΡΠ±Π΅Π»Π΅ΠΆΠ°, ΡΠ΅ ΠΏΡΠΎΠΊΡΠΈΡΠΎ Π΅ Π·Π°ΠΌΠΈΡΠ»Π΅Π½ΠΎ Ρ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° TLS Π²ΡΡΠ·ΠΊΠ° Π±Π΅Π· ESNI, Π·Π° ΠΏΠΎΠ΄ΠΊΡΠ΅ΠΏΠ° Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠΈ Π±Π΅Π· ESNI. Π‘ΡΡΠΎ ΡΠ°ΠΊΠ°, ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΡΡ Π·Π° ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΡ Ρ Π°ΠΏΡΡΡΠΈΠΉΠΌ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΊΠ°ΠΊΡΠΎ HTTP, ΡΠ°ΠΊΠ° ΠΈ HTTPS Ρ Π²Π΅ΡΡΠΈΡ Π½Π° TLS ΠΏΠΎΠ΄ 1.3 (Π°ΠΊΠΎ Π°ΠΏΡΡΡΠΈΠΉΠΌΡΡ Π½Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° 1.3). Π’Π°Π·ΠΈ ΡΡ
Π΅ΠΌΠ° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»Π½Π° Π³ΡΠ²ΠΊΠ°Π²ΠΎΡΡ.
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° ΠΏΠΎΠ΄ΠΊΡΠ΅ΠΏΠ°ΡΠ° Π·Π° ESNI Π½Π° go Π·Π°Π΅ΠΌΠ°Ρ ΠΌΠ΅ ΠΎΡ . ΠΠ΅Π΄Π½Π°Π³Π° ΠΎΡΠ±Π΅Π»ΡΠ·Π²Π°ΠΌ, ΡΠ΅ ΡΠ°ΠΌΠ°ΡΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π΅ Π΄ΠΎΡΡΠ° Π½Π΅ΡΡΠΈΠ²ΠΈΠ°Π»Π½Π°, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° crypto/tls ΠΈ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ ΠΈΠ·ΠΈΡΠΊΠ²Π° "ΠΏΠ°ΡΠΈΠ½Π³" GOROOT ΠΏΡΠ΅Π΄ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅.
ΠΠ° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ESNI ΠΊΠ»ΡΡΠΎΠ²Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ
ΠΌΠ΅ (ΡΡΡΠΎ ΡΠ²ΠΎΡΠ΅Π½ΠΈΠ΅ Π½Π° CloudFlare). Π’Π΅Π·ΠΈ ΠΊΠ»ΡΡΠΎΠ²Π΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π·Π° ΠΊΡΠΈΠΏΡΠΈΡΠ°Π½Π΅/Π΄Π΅ΠΊΡΠΈΠΏΡΠΈΡΠ°Π½Π΅ Π½Π° SNI.
Π’Π΅ΡΡΠ²Π°Ρ
ΠΌΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ° Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° go 1.13 Π½Π° Linux (Debian, Alpine) ΠΈ MacOS.Β
ΠΡΠΊΠΎΠ»ΠΊΠΎ Π΄ΡΠΌΠΈ Π·Π° Π΅ΠΊΡΠΏΠ»ΠΎΠ°ΡΠ°ΡΠΈΠΎΠ½Π½ΠΈΡΠ΅ ΠΎΡΠΎΠ±Π΅Π½ΠΎΡΡΠΈ
ESNI ΠΎΠ±ΡΠ°ΡΠ½ΠΈΡΡ ΠΏΡΠΎΠΊΡΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ ΠΌΠ΅ΡΡΠΈΠΊΠΈ Π² ΡΠΎΡΠΌΠ°Ρ Prometheus, ΠΊΠ°ΡΠΎ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ rps, Π»Π°ΡΠ΅Π½ΡΠ½ΠΎΡΡ Π½Π° upstream ΠΈ ΠΊΠΎΠ΄ΠΎΠ²Π΅ Π·Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡ, Π±ΡΠΎΠΉ Π½Π΅ΡΡΠΏΠ΅ΡΠ½ΠΈ/ΡΡΠΏΠ΅ΡΠ½ΠΈ TLS handshake ΠΈ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΎΡΡ Π½Π° TLS handshake. ΠΠ° ΠΏΡΡΠ² ΠΏΠΎΠ³Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°ΡΠ΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ, Π·Π° Π΄Π° ΡΠ΅ ΠΎΡΠ΅Π½ΡΡ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠΊΡΠΈΡΠΎ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Ρ ΡΡΠ°ΡΠΈΠΊΠ°.Β
Π‘ΡΡΠΎ ΡΠ°ΠΊΠ°, ΠΏΡΠ΅Π΄ΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅, ΠΈΠ·Π²ΡΡΡΠΈΡ ΠΌΠ΅ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°ΡΠΎ ΡΠ΅ΡΡΠ²Π°Π½Π΅. Π Π΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΡΠ° ΠΏΠΎ-Π΄ΠΎΠ»Ρ:
wrk -t50 -c1000 -d360s 'https://esni-rev-proxy.npw:443' --timeout 15s
ΠΠ·ΠΏΡΠ»Π½ΡΠ²Π°Π½Π΅ Π½Π° ΡΠ΅ΡΡ Π·Π° 6m @ https://esni-rev-proxy.npw:443
50 Π½ΠΈΡΠΊΠΈ ΠΈ 1000 Π²ΡΡΠ·ΠΊΠΈ
Π‘ΡΠ°ΡΠΈΡΡΠΈΠΊΠ° Π½Π° Π½ΠΈΡΠΊΠΈΡΠ΅ Avg Stdev Max +/- Stdev
ΠΠ°ΡΠ΅Π½ΡΠ½ΠΎΡΡ 1.77Ρ 1.21Ρ 7.20Ρ 65.43%
Req/Sec 13.78 8.84 140.00 83.70%
206357 Π·Π°ΡΠ²ΠΊΠΈ Π·Π° 6.00m, 6.08GB ΠΏΡΠΎΡΠ΅ΡΠ΅Π½ΠΈ
ΠΠ°ΡΠ²ΠΊΠΈ/ΡΠ΅ΠΊ: 573.07
ΠΡΠ΅Ρ
Π²ΡΡΠ»ΡΠ½Π΅/ΡΠ΅ΠΊ: 17.28MBΒ ΠΠ°ΡΠΎΠ²Π°ΡΠ²Π°ΡΠΎΡΠΎ ΡΠ΅ΡΡΠ²Π°Π½Π΅, ΠΊΠΎΠ΅ΡΠΎ ΠΏΡΠΎΠ²Π΅Π΄ΠΎΡ ΠΌΠ΅, Π±Π΅ΡΠ΅ ΡΠΈΡΡΠΎ ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Π½ΠΎ, Π·Π° Π΄Π° ΡΡΠ°Π²Π½ΠΈΠΌ ΡΡ Π΅ΠΌΠΈΡΠ΅ Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ESNI ΠΎΠ±ΡΠ°ΡΠ΅Π½ ΠΏΡΠΎΠΊΡΠΈ ΠΈ Π±Π΅Π· Π½Π΅Π³ΠΎ. ΠΠΈΠ΅ βΠ½Π°Π»ΠΈΠ²Π°ΠΌΠ΅β ΡΡΠ°ΡΠΈΠΊ Π»ΠΎΠΊΠ°Π»Π½ΠΎ, Π·Π° Π΄Π° ΠΈΠ·ΠΊΠ»ΡΡΠΈΠΌ βΡΠΈΡΡΠΎΠ²ΠΊΠΈΡΠ΅β Π² ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ.
Π’Π°ΠΊΠ°, Ρ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ESNI ΠΈ ΠΏΡΠΎΠΊΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° upstream Ρ HTTP, ΠΏΠΎΠ»ΡΡΠΈΡ ΠΌΠ΅ ΠΎΠΊΠΎΠ»ΠΎ ~ 550 rps ΠΎΡ Π΅Π΄ΠΈΠ½ ΠΈΠ½ΡΡΠ°Π½Ρ, ΠΊΠ°ΡΠΎ ΡΡΠ΅Π΄Π½ΠΎΡΠΎ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ Π½Π° CPU/RAM Π½Π° ESNI ΠΎΠ±ΡΠ°ΡΠ½ΠΈΡ ΠΏΡΠΎΠΊΡΠΈ:
- 80% Π£ΠΏΠΎΡΡΠ΅Π±Π° Π½Π° CPU (4 vCPU, 4 GB RAM Ρ ΠΎΡΡΠΎΠ²Π΅, Linux)
- 130 MB Mem RSS

ΠΠ° ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅, RPS Π·Π° ΡΡΡΠΈΡ upstream nginx Π±Π΅Π· ΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° TLS (HTTP ΠΏΡΠΎΡΠΎΠΊΠΎΠ») ~ 1100:
wrk -t50 -c1000 -d360s 'http://lb.npw:80' --timeout 15s
ΠΠ·ΠΏΡΠ»Π½ΡΠ²Π°Π½Π΅ Π½Π° ΡΠ΅ΡΡ Π·Π° 6m @ http://lb.npw:80
50 Π½ΠΈΡΠΊΠΈ ΠΈ 1000 Π²ΡΡΠ·ΠΊΠΈ
Π‘ΡΠ°ΡΠΈΡΡΠΈΠΊΠ° Π½Π° Π½ΠΈΡΠΊΠΈΡΠ΅ Avg Stdev Max +/- Stdev
ΠΠ°ΡΠ΅Π½ΡΠ½ΠΎΡΡ 1.11Ρ 2.30Ρ 15.00Ρ 90.94%
Req/Sec 23.25 13.55 282.00 79.25%
393093 Π·Π°ΡΠ²ΠΊΠΈ Π·Π° 6.00m, 11.35GB ΠΏΡΠΎΡΠ΅ΡΠ΅Π½ΠΈ
ΠΡΠ΅ΡΠΊΠΈ Π² ΡΠΎΠΊΠ΅ΡΠΈΡΠ΅: ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ 0, ΡΠ΅ΡΠ΅Π½Π΅ 0, Π·Π°ΠΏΠΈΡ 0, ΡΠ°ΠΉΠΌ-Π°ΡΡ 9555
ΠΡΠ³ΠΎΠ²ΠΎΡΠΈ, ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΎΡ 2xx ΠΈΠ»ΠΈ 3xx: 8111
ΠΠ°ΡΠ²ΠΊΠΈ/ΡΠ΅ΠΊ: 1091.62
ΠΡΠ΅Ρ
Π²ΡΡΠ»ΡΠ½Π΅/ΡΠ΅ΠΊ: 32.27MBΒ ΠΡΠΈΡΡΡΡΠ²ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ°ΠΉΠΌ-Π°ΡΡΠΈΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π²Π°, ΡΠ΅ ΠΈΠΌΠ° Π½Π΅Π΄ΠΎΡΡΠΈΠ³ Π½Π° ΡΠ΅ΡΡΡΡΠΈ (ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΌΠ΅ 4 vCPU, 4 GB RAM Ρ ΠΎΡΡΠΎΠ²Π΅, Linux), ΠΈ Π²ΡΡΡΠ½ΠΎΡΡ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»Π½ΠΈΡΡ RPS Π΅ ΠΏΠΎ-Π²ΠΈΡΠΎΠΊ (ΡΡΠ΅Π΄ ΡΠΈΡΡΠΈΡΠ΅ Π΄ΠΎΡΡΠΈΠ³Π½Π°Ρ ΠΌΠ΅ Π΄ΠΎ 2700 RPS Π½Π° ΠΏΠΎ-ΠΌΠΎΡΠ½ΠΈ ΡΠ΅ΡΡΡΡΠΈ).
Π Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΡΠ΅ ΠΎΡΠ±Π΅Π»Π΅ΠΆΠ°, ΡΠ΅ ΡΠ΅Ρ
Π½ΠΎΠ»ΠΎΠ³ΠΈΡΡΠ° ESNI ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π΄ΠΎΡΡΠ° ΠΎΠ±Π΅ΡΠ°Π²Π°ΡΠ°. ΠΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠΏΡΠΎΡΠΈ ΠΎΡΡΠ°Π²Π°Ρ ΠΎΡΠ²ΠΎΡΠ΅Π½ΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΡΠΏΡΠΎΡΠΈΡΠ΅ Π·Π° ΡΡΡ
ΡΠ°Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΡΠ±Π»ΠΈΡΠ½ΠΈΡ ESNI ΠΊΠ»ΡΡ Π² DNS ΠΈ ΡΠΎΡΠ°ΡΠΈΡΡΠ° Π½Π° ESNI ΠΊΠ»ΡΡΠΎΠ²Π΅ΡΠ΅ β ΡΠ΅Π·ΠΈ Π²ΡΠΏΡΠΎΡΠΈ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΡΠ΅ ΠΎΠ±ΡΡΠΆΠ΄Π°Ρ, Π° ΠΏΠΎΡΠ»Π΅Π΄Π½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° (Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½Π° Π½Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ) ESNI Π²Π΅ΡΠ΅ .
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
