ΠΡΠΈΠ²Π΅Ρ Π₯Π°Π±Ρ, ΠΌΠ΅Π½Ρ Π·ΠΎΠ²ΡΡ ΠΠ»ΡΡ, Ρ ΡΠ°Π±ΠΎΡΠ°Ρ Π² ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ 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. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ,Β ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅
ΠΠ° ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π΄ΠΎΡΡΡΠΏΠ½ΠΎ
CloudFlare
Π Π·Π°ΠΏΠΈΡΡ:
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 Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ TLS 1.3, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ESNI β ΡΡΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΠΊ TLS 1.3.
ΠΠ»Ρ ΡΠ΅Π»Π΅ΠΉ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π±ΡΠΊΠ΅Π½Π΄Π° Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ ESNI ΠΌΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π½Π° go, Π½ΠΎ ΠΎΠ± ΡΡΠΎΠΌ ΡΡΡΡ ΠΏΠΎΠ·ΠΆΠ΅.
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠΎ ΡΡΠΎΡΠΎΠ½Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°
ΠΠ° ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ESNI Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ web-ΡΠ΅ΡΠ²Π΅ΡΠ°ΠΌΠΈ ΡΠΈΠΏΠ° nginx/apache ΠΈ Ρ.Π΄., ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ TLS ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ OpenSSL/BoringSSL, Π² ΠΊΠΎΡΠΎΡΡΡ ESNI ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ.
ΠΠΎΡΡΠΎΠΌΡ ΠΌΡ ΡΠ΅ΡΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ²ΠΎΠΉ front-end ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ (ESNI reverse proxy), ΠΊΠΎΡΠΎΡΡΠΉ Π±Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π» ΡΠ΅ΡΠΌΠΈΠ½Π°ΡΠΈΡ TLS 1.3 Ρ ESNI ΠΈ ΠΏΡΠΎΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ HTTP(S) ΡΡΠ°ΡΡΠΈΠΊΠ° Π½Π° Π°ΠΏΡΡΡΠΈΠΌ, Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠΈΠΉ ESNI. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ Π² ΡΠΆΠ΅ ΡΠ»ΠΎΠΆΠΈΠ²ΡΠ΅ΠΉΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ΅, Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² β ΡΠΎ Π΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ΠΊΡΡΠΈΠ΅ web-ΡΠ΅ΡΠ²Π΅ΡΡ, Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠΈΠ΅ ESNI.Β
ΠΠ»Ρ Π½Π°Π³Π»ΡΠ΄Π½ΠΎΡΡΠΈ ΠΏΡΠΈΠ²Π΅Π΄Π΅ΠΌ ΡΡ Π΅ΠΌΡ:
ΠΡΠΌΠ΅ΡΡ, ΡΡΠΎ ΠΏΡΠΎΠΊΡΠΈ Π·Π°Π΄ΡΠΌΡΠ²Π°Π»ΡΡ Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°ΡΡ TLS ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π±Π΅Π· ESNI, Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² Π±Π΅Π· ESNI. Π’Π°ΠΊΠΆΠ΅, ΠΏΡΠΎΡΠΎΠΊΠΎΠ» ΠΎΠ±ΡΠ΅Π½ΠΈΡ Ρ Π°ΠΏΡΡΡΠΈΠΌΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΊΠ°ΠΊ HTTP, ΡΠ°ΠΊ ΠΈ HTTPS c Π²Π΅ΡΡΠΈΠ΅ΠΉ TLS Π½ΠΈΠΆΠ΅ 1.3 (Π΅ΡΠ»ΠΈ Π°ΠΏΡΡΡΠΈΠΌ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ 1.3). Π’Π°ΠΊΠ°Ρ ΡΡ
Π΅ΠΌΠ° Π΄Π°Π΅Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΡ Π³ΠΈΠ±ΠΊΠΎΡΡΡ.
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ESNI Π½Π° go ΠΌΡ ΠΏΠΎΠ·Π°ΠΈΠΌΡΡΠ²ΠΎΠ²Π°Π»ΠΈ Ρ
ΠΠ»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ESNI ΠΊΠ»ΡΡΠ΅ΠΉ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ
ΠΡ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π»ΠΈ ΡΠ±ΠΎΡΠΊΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ go 1.13 Π½Π° Linux (Debian, Alpine) ΠΈ MacOS.Β
ΠΠ°ΡΠ° ΡΠ»ΠΎΠ² ΠΎΠ± ΡΠΊΡΠΏΠ»ΡΠ°ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡΡ
ESNI reverse proxy ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΌΠ΅ΡΡΠΈΠΊΠΈ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ Prometheus, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ rps, upstream latency & response codes, failed/successful TLS handshakes & TLS handshake duration. ΠΠ° ΠΏΠ΅ΡΠ²ΡΠΉ Π²Π·Π³Π»ΡΠ΄ ΡΡΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΡΠΌ Π΄Π»Ρ ΠΎΡΠ΅Π½ΠΊΠΈ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΡΠΎΠΊΡΠΈ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ Ρ ΡΡΠ°ΡΠΈΠΊΠΎΠΌ.Β
Π’Π°ΠΊΠΆΠ΅ ΠΏΠ΅ΡΠ΅Π΄ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΌΡ ΠΏΡΠΎΠ²Π΅Π»ΠΈ Π½Π°Π³ΡΡΠ·ΠΎΡΠ½ΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅. Π Π΅Π·ΡΠ»ΡΡΠ°ΡΡ Π½ΠΈΠΆΠ΅:
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 reverse proxy ΠΈ Π±Π΅Π·. ΠΡ Β«Π½Π°Π»ΠΈΠ²Π°Π»ΠΈΒ» ΡΡΠ°ΡΠΈΠΊ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΈΡΠΊΠ»ΡΡΠΈΡΡ Β«ΠΏΠΎΠΌΠ΅Ρ ΠΈΒ» Π² ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°Ρ .
ΠΡΠ°ΠΊ, Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ ESNI ΠΈ ΠΏΡΠΎΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌΒ Π½Π° Π°ΠΏΡΡΡΠΈΠΌ Ρ HTTP,Β ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ Π² ΡΠ°ΠΉΠΎΠ½Π΅ ~ 550 rps Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ½ΡΡΠ°Π½ΡΠ°, ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΡΠ΅Π΄Π½Π΅Π΅ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ CPU/RAM ESNI reverse proxy:
- 80% CPU Usage (4 vCPU, 4 GB RAM Ρ ΠΎΡΡΡ, Linux)
- 130 MB Mem RSS
ΠΠ»Ρ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ, RPS Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΠΆΠ΅ Π°ΠΏΡΡΡΠΈΠΌΠ° nginx Π±Π΅Π· ΡΠ΅ΡΠΌΠΈΠ½Π°ΡΠΈΠΈ 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 RAM Ρ ΠΎΡΡΡ, Linux), ΠΈ ΠΏΠΎ ΡΠ°ΠΊΡΡ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΠΉ RPS Π²ΡΡΠ΅ (ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π»ΠΈ ΡΠΈΡΡΡ Π΄ΠΎΒ 2700 RPS Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡΠ½ΡΡ ΡΠ΅ΡΡΡΡΠ°Ρ ).
Π Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠΌΠ΅ΡΡ, ΡΡΠΎ ΡΠ΅Ρ
Π½ΠΎΠ»ΠΎΠ³ΠΈΡ ESNI Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π½ΠΎ. ΠΡΡΡ Π΅ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡΠΊΡΡΡΡΡ
Π²ΠΎΠΏΡΠΎΡΠΎΠ², Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΎΠΏΡΠΎΡΡ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ ΠΏΡΠ±Π»ΠΈΡΠ½ΠΎΠ³ΠΎ ESNI ΠΊΠ»ΡΡΠ° Π² DNS ΠΈΒ ΡΠΎΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ESNI-ΠΊΠ»ΡΡΠ΅ΠΉ β ΡΡΠΈ Π²ΠΎΠΏΡΠΎΡΡ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΎΠ±ΡΡΠΆΠ΄Π°ΡΡΡΡ, Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ Π²Π΅ΡΡΠΈΡ Π΄ΡΠ°ΡΡΠ° (Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ) ESNI ΡΠΆΠ΅
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com