ESNI рд╕рд╣ рддреБрдордЪреНрдпрд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯрдЪреЗ рд╕рдВрд░рдХреНрд╖рдг рдХрд╕реЗ рдХрд░рд╛рд╡реЗ

рд╣реЕрд▓реЛ рд╣реЕрдмреНрд░, рдорд╛рдЭреЗ рдирд╛рд╡ рдЗрд▓реНрдпрд╛ рдЖрд╣реЗ, рдореА Exness рдпреЗрдереЗ рдкреНрд▓реЕрдЯрдлреЙрд░реНрдо рдЯреАрдордордзреНрдпреЗ рдХрд╛рдо рдХрд░рддреЛ. рдЖрдордЪреЗ рдЙрддреНрдкрд╛рджрди рд╡рд┐рдХрд╛рд╕ рдХрд╛рд░реНрдпрд╕рдВрдШ рд╡рд╛рдкрд░рдд рдЕрд╕рд▓реЗрд▓реЗ рдореВрд▓рднреВрдд рдкрд╛рдпрд╛рднреВрдд рдШрдЯрдХ рдЖрдореНрд╣реА рд╡рд┐рдХрд╕рд┐рдд рдЖрдгрд┐ рдЕрдВрдорд▓рд╛рдд рдЖрдгрддреЛ.

рдпрд╛ рд▓реЗрдЦрд╛рдд, рдореА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯреНрд╕рдЪреНрдпрд╛ рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛рдВрдордзреНрдпреЗ рдПрдирдХреНрд░рд┐рдкреНрдЯреЗрдб SNI (ESNI) рддрдВрддреНрд░рдЬреНрдЮрд╛рди рд▓рд╛рдЧреВ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдорд╛рдЭрд╛ рдЕрдиреБрднрд╡ рд╢реЗрдЕрд░ рдХрд░реВ рдЗрдЪреНрдЫрд┐рддреЛ.

ESNI рд╕рд╣ рддреБрдордЪреНрдпрд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯрдЪреЗ рд╕рдВрд░рдХреНрд╖рдг рдХрд╕реЗ рдХрд░рд╛рд╡реЗ

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯрд╡рд░ рдХрд╛рдо рдХрд░рддрд╛рдирд╛ рдЖрдгрд┐ рдХрдВрдкрдиреАрдиреЗ рд╕реНрд╡реАрдХрд╛рд░рд▓реЗрд▓реНрдпрд╛ рдЕрдВрддрд░реНрдЧрдд рд╕реБрд░рдХреНрд╖рд╛ рдорд╛рдирдХрд╛рдВрдЪреЗ рдкрд╛рд▓рди рдХрд░рддрд╛рдирд╛ рдпрд╛ рддрдВрддреНрд░рдЬреНрдЮрд╛рдирд╛рдЪрд╛ рд╡рд╛рдкрд░ рд╕реБрд░рдХреНрд╖рд┐рддрддреЗрдЪреА рдкрд╛рддрд│реА рд╡рд╛рдврд╡реЗрд▓.

рд╕рд░реНрд╡ рдкреНрд░рдердо, рдореА рд╣реЗ рдирд┐рджрд░реНрд╢рдирд╛рд╕ рдЖрдгреВ рдЗрдЪреНрдЫрд┐рддреЛ рдХреА рддрдВрддреНрд░рдЬреНрдЮрд╛рди рдкреНрд░рдорд╛рдгрд┐рдд рдирд╛рд╣реА рдЖрдгрд┐ рдЕрджреНрдпрд╛рдк рдорд╕реБрджреНрдпрд╛рдд рдЖрд╣реЗ, рдкрд░рдВрддреБ рдХреНрд▓рд╛рдЙрдбрдлреНрд▓реЗрдЕрд░ рдЖрдгрд┐ рдореЛрдЭрд┐рд▓рд╛ рдЖрдзреАрдЪ рддреНрдпрд╛рд╕ рд╕рдорд░реНрдерди рджреЗрддрд╛рдд (рдордзреНрдпреЗ рдорд╕реБрджрд╛ 01). рдпрд╛рдореБрд│реЗ рдЖрдореНрд╣рд╛рд▓рд╛ рдЕрд╢рд╛ рдкреНрд░рдпреЛрдЧрд╛рд╕рд╛рдареА рдкреНрд░реЗрд░рдгрд╛ рдорд┐рд│рд╛рд▓реА.

рд╕рд┐рджреНрдзрд╛рдВрддрд╛рдЪрд╛ рдмрд┐рдЯ

ESNI рд╣рд╛ TLS 1.3 рдкреНрд░реЛрдЯреЛрдХреЙрд▓рдЪрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдЖрд╣реЗ рдЬреЛ TLS рд╣рдБрдбрд╢реЗрдХ "рдХреНрд▓рд╛рдпрдВрдЯ рд╣реЕрд▓реЛ" рд╕рдВрджреЗрд╢рд╛рдордзреНрдпреЗ SNI рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рдирд▓рд╛ рдЕрдиреБрдорддреА рджреЗрддреЛ. ESNI рд╕рдорд░реНрдердирд╛рд╕рд╣ рдХреНрд▓рд╛рдпрдВрдЯ рд╣реЕрд▓реЛ рдХрд╕рд╛ рджрд┐рд╕рддреЛ рддреЗ рдпреЗрдереЗ рдЖрд╣реЗ (рд╕рд╛рдорд╛рдиреНрдп SNI рдРрд╡рдЬреА рдЖрдореНрд╣реА ESNI рдкрд╛рд╣рддреЛ):

ESNI рд╕рд╣ рддреБрдордЪреНрдпрд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯрдЪреЗ рд╕рдВрд░рдХреНрд╖рдг рдХрд╕реЗ рдХрд░рд╛рд╡реЗ

 ESNI рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣рд╛рд▓рд╛ рддреАрди рдШрдЯрдХрд╛рдВрдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ:

  • DNS; 
  • рдЧреНрд░рд╛рд╣рдХ рд╕рдорд░реНрдерди;
  • рд╕рд░реНрд╡реНрд╣рд░ рд╕рд╛рдЗрдб рд╕рдорд░реНрдерди.

DNS

рддреБрдореНрд╣рд╛рд▓рд╛ рджреЛрди DNS рд░реЗрдХреЙрд░реНрдб рдЬреЛрдбрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ - AрдЖрдгрд┐ TXT (TXT рд░реЗрдХреЙрд░реНрдбрдордзреНрдпреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреА рдЕрд╕рддреЗ рдЬреНрдпрд╛рджреНрд╡рд╛рд░реЗ рдХреНрд▓рд╛рдпрдВрдЯ SNI рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░реВ рд╢рдХрддреЛ) - рдЦрд╛рд▓реА рдкрд╣рд╛. рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рд╕рдорд░реНрдерди рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ DoH (HTTPS рд╡рд░ DNS) рдХрд╛рд░рдг рдЙрдкрд▓рдмреНрдз рдХреНрд▓рд╛рдпрдВрдЯ (рдЦрд╛рд▓реА рдкрд╣рд╛) DoH рд╢рд┐рд╡рд╛рдп ESNI рд╕рдорд░реНрдерди рд╕рдХреНрд╖рдо рдХрд░рдд рдирд╛рд╣реАрдд. рд╣реЗ рддрд╛рд░реНрдХрд┐рдХ рдЖрд╣реЗ, рдХрд╛рд░рдг ESNI рдордзреНрдпреЗ рдЖрдореНрд╣реА рдкреНрд░рд╡реЗрд╢ рдХрд░рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╕реНрддреНрд░реЛрддрд╛рдЪреНрдпрд╛ рдирд╛рд╡рд╛рдЪреЗ рдХреВрдЯрдмрджреНрдзреАрдХрд░рдг рд╕реВрдЪрд┐рдд рдХрд░рддреЗ, рдореНрд╣рдгрдЬреЗрдЪ UDP рд╡рд░ DNS рдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рдгреНрдпрд╛рдд рдХрд╛рд╣реА рдЕрд░реНрде рдирд╛рд╣реА. рд╢рд┐рд╡рд╛рдп, рд╡рд╛рдкрд░ DNSSEC рджреНрд╡рд╛рд░реЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдпрд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрдд рдХреЕрд╢реЗ рд╡рд┐рд╖рдмрд╛рдзрд╛ рд╣рд▓реНрд▓реНрдпрд╛рдВрдкрд╛рд╕реВрди рд╕рдВрд░рдХреНрд╖рдг рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ.

рд╕рдзреНрдпрд╛ рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗ рдЕрдиреЗрдХ DoH рдкреНрд░рджрд╛рддрд╛, рддреНрдпрд╛рдкреИрдХреА:

CloudFlare рдЬрд╛рд╣реАрд░ рдХрд░рддреЛ (рдорд╛рдп рдмреНрд░рд╛рдЙрдЭрд░ рддрдкрд╛рд╕рд╛ тЖТ рдПрдирдХреНрд░рд┐рдкреНрдЯреЗрдб SNI тЖТ рдЕрдзрд┐рдХ рдЬрд╛рдгреВрди рдШреНрдпрд╛) рдХреА рддреНрдпрд╛рдВрдЪреЗ рд╕рд░реНрд╡реНрд╣рд░ рдЖрдзреАрдЪ ESNI рдЪреЗ рд╕рдорд░реНрдерди рдХрд░рддрд╛рдд, рдореНрд╣рдгрдЬреЗрдЪ 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 рд╕рд╣) рд╡рд╛рдкрд░рд╛рд╡реЗ рдЖрдгрд┐ рджреЛрди рдиреЛрдВрджреА рдЬреЛрдбрд▓реНрдпрд╛ рдкрд╛рд╣рд┐рдЬреЗрдд. 

рдЧреНрд░рд╛рд╣рдХ рд╕рд╣рд╛рдпреНрдпрддрд╛

рдЬрд░ рдЖрдкрдг рдмреНрд░рд╛рдЙрдЭрд░рдмрджреНрджрд▓ рдмреЛрд▓рдд рдЖрд╣реЛрдд, рддрд░ рдпрд╛рдХреНрд╖рдгреА рд╕рдорд░реНрдерди рдлрдХреНрдд FireFox рдордзреНрдпреЗ рд▓рд╛рдЧреВ рдХреЗрд▓реЗ рдЬрд╛рддреЗ. рддреЛ рдЖрд╣реЗ рдлрд╛рдпрд░рдлреЙрдХреНрд╕рдордзреНрдпреЗ ESNI рдЖрдгрд┐ DoH рд╕рдорд░реНрдерди рдХрд╕реЗ рд╕рдХреНрд░рд┐рдп рдХрд░рд╛рд╡реЗ рдпрд╛рд╡рд░реАрд▓ рд╕реВрдЪрдирд╛ рдпреЗрдереЗ рдЖрд╣реЗрдд. рдмреНрд░рд╛рдЙрдЭрд░ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рдЖрдореНрд╣рд╛рд▓рд╛ рдЕрд╕реЗ рдХрд╛рд╣реАрддрд░реА рджрд┐рд╕рд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ:

ESNI рд╕рд╣ рддреБрдордЪреНрдпрд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯрдЪреЗ рд╕рдВрд░рдХреНрд╖рдг рдХрд╕реЗ рдХрд░рд╛рд╡реЗ

рджреБрд╡рд╛ рдмреНрд░рд╛рдЙрдЭрд░ рддрдкрд╛рд╕рдгреНрдпрд╛рд╕рд╛рдареА.

рдЕрд░реНрдерд╛рдд, ESNI рд▓рд╛ рд╕рдорд░реНрдерди рджреЗрдгреНрдпрд╛рд╕рд╛рдареА TLS 1.3 рд╡рд╛рдкрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдХрд╛рд░рдг ESNI рд╣рд╛ TLS 1.3 рдЪрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдЖрд╣реЗ.

ESNI рд╕рдорд░реНрдердирд╛рд╕рд╣ рдмреЕрдХрдПрдВрдбрдЪреА рдЪрд╛рдЪрдгреА рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдЙрджреНрджреЗрд╢рд╛рдиреЗ, рдЖрдореНрд╣реА рдХреНрд▓рд╛рдпрдВрдЯ рдСрди рд▓рд╛рдЧреВ рдХреЗрд▓реЗ go, рдкрдг рддреНрдпрд╛рдмрджреНрджрд▓ рдирдВрддрд░ рдЕрдзрд┐рдХ.

рд╕рд░реНрд╡реНрд╣рд░ рд╕рд╛рдЗрдб рд╕рдорд░реНрдерди

рд╕рдзреНрдпрд╛, ESNI рд▓рд╛ nginx/apache рдЗрддреНрдпрд╛рджреА рд╡реЗрдм рд╕рд░реНрд╡реНрд╣рд░рджреНрд╡рд╛рд░реЗ рд╕рдорд░реНрдерд┐рдд рдирд╛рд╣реА, рдХрд╛рд░рдг рддреЗ TLS рд╕рд╣ OpenSSL/BoringSSL рджреНрд╡рд╛рд░реЗ рдХрд╛рд░реНрдп рдХрд░рддрд╛рдд, рдЬреЗ рдЕрдзрд┐рдХреГрддрдкрдгреЗ ESNI рд▓рд╛ рд╕рдорд░реНрдерди рджреЗрдд рдирд╛рд╣реАрдд.

рдореНрд╣рдгреВрди, рдЖрдореНрд╣реА рдЖрдордЪрд╛ рд╕реНрд╡рддрдГрдЪрд╛ рдлреНрд░рдВрдЯ-рдПрдВрдб рдШрдЯрдХ (ESNI рд░рд┐рд╡реНрд╣рд░реНрд╕ рдкреНрд░реЙрдХреНрд╕реА) рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдирд┐рд░реНрдгрдп рдШреЗрддрд▓рд╛, рдЬреЛ ESNI рд╕рд╣ TLS 1.3 рдЯрд░реНрдорд┐рдиреЗрд╢рди рдЖрдгрд┐ рдЕрдкрд╕реНрдЯреНрд░реАрдорд╡рд░ рдкреНрд░реЙрдХреНрд╕реА HTTP(S) рд░рд╣рджрд╛рд░реАрд▓рд╛ рд╕рдорд░реНрдерди рджреЗрдИрд▓, рдЬреЗ ESNI рд▓рд╛ рд╕рдорд░реНрдерди рджреЗрдд рдирд╛рд╣реА. рд╣реЗ рдореБрдЦреНрдп рдШрдЯрдХ рди рдмрджрд▓рддрд╛, рдЖрдзреАрдкрд╛рд╕реВрди рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛рдВрдордзреНрдпреЗ рддрдВрддреНрд░рдЬреНрдЮрд╛рдирд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ - рдореНрд╣рдгрдЬреЗ, ESNI рд▓рд╛ рд╕рдорд░реНрдерди рди рджреЗрдгрд╛рд░реЗ рд╡рд░реНрддрдорд╛рди рд╡реЗрдм рд╕рд░реНрд╡реНрд╣рд░ рд╡рд╛рдкрд░рдгреЗ. 

рд╕реНрдкрд╖реНрдЯрддреЗрд╕рд╛рдареА, рдпреЗрдереЗ рдПрдХ рдЖрдХреГрддреА рдЖрд╣реЗ:

ESNI рд╕рд╣ рддреБрдордЪреНрдпрд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯрдЪреЗ рд╕рдВрд░рдХреНрд╖рдг рдХрд╕реЗ рдХрд░рд╛рд╡реЗ

рдореА рд▓рдХреНрд╖рд╛рдд рдШреЗрддреЛ рдХреА рдкреНрд░реЙрдХреНрд╕реА ESNI рд╢рд┐рд╡рд╛рдп TLS рдХрдиреЗрдХреНрд╢рди рд╕рдВрдкреБрд╖реНрдЯрд╛рдд рдЖрдгрдгреНрдпрд╛рдЪреНрдпрд╛ рдХреНрд╖рдорддреЗрд╕рд╣, ESNI рд╢рд┐рд╡рд╛рдп рдХреНрд▓рд╛рдпрдВрдЯрд▓рд╛ рд╕рдорд░реНрдерди рджреЗрдгреНрдпрд╛рд╕рд╛рдареА рдбрд┐рдЭрд╛рдЗрди рдХреЗрд▓реЗ рд╣реЛрддреЗ. рддрд╕реЗрдЪ, рдЕрдкрд╕реНрдЯреНрд░реАрдорд╕рд╣ рд╕рдВрдкреНрд░реЗрд╖рдг рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдПрдХрддрд░ HTTP рдХрд┐рдВрд╡рд╛ HTTPS рдЕрд╕реВ рд╢рдХрддреЛ рдЬреНрдпрд╛рдЪреА TLS рдЖрд╡реГрддреНрддреА 1.3 рдкреЗрдХреНрд╖рд╛ рдХрдореА рдЕрд╕реЗрд▓ (рдЬрд░ рдЕрдкрд╕реНрдЯреНрд░реАрдо 1.3 рд▓рд╛ рд╕рдорд░реНрдерди рджреЗрдд рдирд╕реЗрд▓). рд╣реА рдпреЛрдЬрдирд╛ рдЬрд╛рд╕реНрддреАрдд рдЬрд╛рд╕реНрдд рд▓рд╡рдЪрд┐рдХрддрд╛ рджреЗрддреЗ.

рд╡рд░ ESNI рд╕рдорд░реНрдердирд╛рдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА go рдЖрдореНрд╣реА рдХрдбреВрди рдХрд░реНрдЬ рдШреЗрддрд▓реЗ CloudFlare. рдорд▓рд╛ рддрд╛рдмрдбрддреЛрдм рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛рдпрдЪреЗ рдЖрд╣реЗ рдХреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рд╕реНрд╡рддрдГрдЪ рдЕрдЧрджреА рдХреНрд╖реБрд▓реНрд▓рдХ рдЖрд╣реЗ, рдХрд╛рд░рдг рддреНрдпрд╛рдд рдорд╛рдирдХ рд▓рд╛рдпрдмреНрд░рд░реАрдордзреНрдпреЗ рдмрджрд▓ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗрдд crypto/tls рдЖрдгрд┐ рдореНрд╣рдгреВрди "рдкреЕрдЪрд┐рдВрдЧ" рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЧрд░реЛрдЯ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдЖрдзреА.

ESNI рдХреА рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рд╡рд╛рдкрд░рд▓реЗ esnitool (рдХреНрд▓рд╛рдЙрдбрдлреНрд▓реЗрдЕрд░рдЪрд╛рд╣реА рд╡рд┐рдЪрд╛рд░). рдпрд╛ рдХреА SNI рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди/рдбрд┐рдХреНрд░рд┐рдкреНрд╢рдирд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд.
рдЖрдореНрд╣реА Linux (рдбреЗрдмрд┐рдпрди, рдЕрд▓реНрдкрд╛рдЗрди) рдЖрдгрд┐ MacOS рд╡рд░ рдЧреЛ 1.13 рд╡рд╛рдкрд░реВрди рдмрд┐рд▓реНрдбрдЪреА рдЪрд╛рдЪрдгреА рдХреЗрд▓реА. 

рдСрдкрд░реЗрд╢рдирд▓ рд╡реИрд╢рд┐рд╖реНрдЯреНрдпрд╛рдВрдмрджреНрджрд▓ рдХрд╛рд╣реА рд╢рдмреНрдж

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 рд░рд┐рд╡реНрд╣рд░реНрд╕ рдкреНрд░реЙрдХреНрд╕реА рд╡рд╛рдкрд░реВрди рдЖрдгрд┐ рддреНрдпрд╛рд╢рд┐рд╡рд╛рдп рдпреЛрдЬрдиреЗрдЪреА рддреБрд▓рдирд╛ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкреВрд░реНрдгрдкрдгреЗ рдЧреБрдгрд╛рддреНрдордХ рд▓реЛрдб рдЪрд╛рдЪрдгреА рдХреЗрд▓реА. рдордзреНрдпрд╡рд░реНрддреА рдШрдЯрдХрд╛рдВрдордзреАрд▓ "рд╣рд╕реНрддрдХреНрд╖реЗрдк" рджреВрд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рд╕реНрдерд╛рдирд┐рдХ рдкрд╛рддрд│реАрд╡рд░ рд░рд╣рджрд╛рд░реА "рдУрддрд▓реА".

рддреНрдпрд╛рдореБрд│реЗ, HTTP рд╡рд░реВрди ESNI рд╕рдорд░реНрдерди рдЖрдгрд┐ рдЕрдкрд╕реНрдЯреНрд░реАрдо рдкреНрд░реЙрдХреНрд╕реАрд╕рд╣, рдЖрдореНрд╣рд╛рд▓рд╛ ESNI рд░рд┐рд╡реНрд╣рд░реНрд╕ рдкреНрд░реЙрдХреНрд╕реАрдЪреНрдпрд╛ рд╕рд░рд╛рд╕рд░реА CPU/RAM рд╡рд╛рдкрд░рд╛рд╕рд╣, рдПрдХрд╛ рдкреНрд░рд╕рдВрдЧрд╛рддреВрди рд╕реБрдорд╛рд░реЗ ~550 rps рдорд┐рд│рд╛рд▓реЗ:

  • 80% CPU рд╡рд╛рдкрд░ (4 vCPU, 4 GB RAM рд╣реЛрд╕реНрдЯ, Linux)
  • 130 MB рдореЗрдо RSS

ESNI рд╕рд╣ рддреБрдордЪреНрдпрд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯрдЪреЗ рд╕рдВрд░рдХреНрд╖рдг рдХрд╕реЗ рдХрд░рд╛рд╡реЗ

рддреБрд▓рдиреЗрд╕рд╛рдареА, TLS (HTTP рдкреНрд░реЛрдЯреЛрдХреЙрд▓) рд╕рдорд╛рдкреНрддреАрд╢рд┐рд╡рд╛рдп рд╕рдорд╛рди nginx рдЕрдкрд╕реНрдЯреНрд░реАрдорд╕рд╛рдареА RPS ~ 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 vCPUs, 4 GB RAM рд╣реЛрд╕реНрдЯ, Linux рд╡рд╛рдкрд░рд▓реЗ), рдЖрдгрд┐ рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рд╕рдВрднрд╛рд╡реНрдп RPS рдЬрд╛рд╕реНрдд рдЖрд╣реЗ (рдЖрдореНрд╣рд╛рд▓рд╛ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╕рдВрд╕рд╛рдзрдирд╛рдВрд╡рд░ 2700 RPS рдкрд░реНрдпрдВрддрдЪреЗ рдЖрдХрдбреЗ рдорд┐рд│рд╛рд▓реЗ).

рд╢реЗрд╡рдЯреА, рдореА рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рд╛ рдХреА ESNI рддрдВрддреНрд░рдЬреНрдЮрд╛рди рдЦреВрдк рдЖрд╢рд╛рджрд╛рдпрдХ рджрд┐рд╕рддреЗ. рдЕрдЬреВрдирд╣реА рдмрд░реЗрдЪ рдЦреБрд▓реЗ рдкреНрд░рд╢реНрди рдЖрд╣реЗрдд, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ ESNI рдХреА DNS рдордзреНрдпреЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рдгреЗ рдЖрдгрд┐ ESNI рдХреА рдлрд┐рд░рд╡рдгреЗ - рдпрд╛ рд╕рдорд╕реНрдпрд╛рдВрд╡рд░ рд╕рдХреНрд░рд┐рдпрдкрдгреЗ рдЪрд░реНрдЪрд╛ рдХреЗрд▓реА рдЬрд╛рдд рдЖрд╣реЗ рдЖрдгрд┐ ESNI рдорд╕реБрджреНрдпрд╛рдЪреА рдирд╡реАрдирддрдо рдЖрд╡реГрддреНрддреА (рд▓реЗрдЦрдирд╛рдЪреНрдпрд╛ рд╡реЗрд│реА) рдЖрдзреАрдЪ рдЖрд╣реЗ. 7.

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛