ESNI рдорд╛рд░реНрдлрдд рддрдкрд╛рдИрдВрдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХрд╕рд░реА рд╕реБрд░рдХреНрд╖рд┐рдд рдЧрд░реНрдиреЗ

рдирдорд╕реНрддреЗ Habr, рдореЗрд░реЛ рдирд╛рдо Ilya рд╣реЛ, рдо Exness рдорд╛ рдкреНрд▓реЗрдЯрдлрд░реНрдо рдЯреЛрд▓реАрдорд╛ рдХрд╛рдо рдЧрд░реНрдЫреБред рд╣рд╛рдореА рд╣рд╛рдореНрд░реЛ рдЙрддреНрдкрд╛рджрди рд╡рд┐рдХрд╛рд╕ рдЯреЛрд▓реАрд╣рд░реВрд▓реЗ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдореБрдЦреНрдп рдкреВрд░реНрд╡рд╛рдзрд╛рд░ рдШрдЯрдХрд╣рд░реВ рд╡рд┐рдХрд╛рд╕ рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрдЫреМрдВред

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

ESNI рдорд╛рд░реНрдлрдд рддрдкрд╛рдИрдВрдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХрд╕рд░реА рд╕реБрд░рдХреНрд╖рд┐рдд рдЧрд░реНрдиреЗ

рдпрд╕ рдкреНрд░рд╡рд┐рдзрд┐рдХреЛ рдкреНрд░рдпреЛрдЧрд▓реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрджрд╛ рд╕реБрд░рдХреНрд╖рд╛рдХреЛ рд╕реНрддрд░ рдмрдврд╛рдЙрдиреЗрдЫ рд░ рдХрдореНрдкрдиреАрд▓реЗ рдЕрдкрдирд╛рдПрдХреЛ рдЖрдиреНрддрд░рд┐рдХ рд╕реБрд░рдХреНрд╖рд╛ рдорд╛рдкрджрдгреНрдбрд╣рд░реВрдХреЛ рдкрд╛рд▓рдирд╛ рдЧрд░реНрджрдЫред

рд╕рдмреИрднрдиреНрджрд╛ рдкрд╣рд┐рд▓реЗ, рдо рдпреЛ рдХреБрд░рд╛ рдмрддрд╛рдЙрди рдЪрд╛рд╣рдиреНрдЫреБ рдХрд┐ рдЯреЗрдХреНрдиреЛрд▓реЛрдЬреА рдорд╛рдирдХреАрдХреГрдд рдЫреИрди рд░ рдЕрдЭреИ рдорд╕реНрдпреМрджрд╛рдорд╛ рдЫ, рддрд░ рдХреНрд▓рд╛рдЙрдбрдлреНрд▓реЗрдпрд░ рд░ рдореЛрдЬрд┐рд▓рд╛рд▓реЗ рдкрд╣рд┐рд▓реЗ рдиреИ рдпрд╕рд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрджрдЫ (рдорд╛ рдорд╕реНрдпреМрджрд╛ режрез)ред рдпрд╕рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рдпрд╕реНрддреЛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдкреНрд░реЗрд░рд┐рдд рдЧрд░реНтАНрдпреЛред

рдмрд┐рдЯ рд╕рд┐рджреНрдзрд╛рдиреНрдд

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 рдорд╛ CloudFlare рд╕рд░реНрднрд░рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореАрд╕рдБрдЧ рдХрдореНрддрд┐рдорд╛ рджреБрдИрд╡рдЯрд╛ рд░реЗрдХрд░реНрдбрд╣рд░реВ рдЫрдиреН - 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 рд╕рдорд░реНрдерди рдХрд╕рд░реА рд╕рдХреНрд░рд┐рдп рдЧрд░реНрдиреЗ рднрдиреНрдиреЗ рдмрд╛рд░реЗ рдпрд╣рд╛рдБ рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рдЫрдиреНред рдПрдХ рдкрдЯрдХ рдмреНрд░рд╛рдЙрдЬрд░ рдХрдиреНрдлрд┐рдЧрд░ рднрдПрдкрдЫрд┐, рд╣рд╛рдореАрд▓реЗ рдпреЛ рдЬрд╕реНрддреИ рдХреЗрд╣рд┐ рджреЗрдЦреНрдиреБрдкрд░реНрдЫ:

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 рд░ рддреНрдпрд╕реИрд▓реЗ "рдкреНрдпрд╛рдЪрд┐рдЩ" рдЪрд╛рд╣рд┐рдиреНрдЫ GOROOT рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдЕрдШрд┐ред

ESNI рдХреБрдЮреНрдЬреАрд╣рд░реВ рдЙрддреНрдкрдиреНрди рдЧрд░реНрди рд╣рд╛рдореАрд▓реЗ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдпреМрдВ esnitool (CloudFlare рдХреЛ рджрд┐рдорд╛рдЧрдХреЛ рдЙрдкрдЬ рдкрдирд┐)ред рдпреА рдХреБрдЮреНрдЬреАрд╣рд░реВ SNI рдЗрдиреНрдХреНрд░рд┐рдкреНрд╢рди/рдбрд┐рдХреНрд░рд┐рдкреНрд╢рдирдХрд╛ рд▓рд╛рдЧрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред
рд╣рд╛рдореАрд▓реЗ рд▓рд┐рдирдХреНрд╕ (рдбреЗрдмрд┐рдпрди, рдЕрд▓реНрдкрд╛рдЗрди) рд░ MacOS рдорд╛ go 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 рд░рд┐рднрд░реНрд╕ рдкреНрд░реЛрдХреНрд╕реА рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд░ рдмрд┐рдирд╛ рдпреЛрдЬрдирд╛рдХреЛ рддреБрд▓рдирд╛ рдЧрд░реНрди рд╡рд┐рд╢реБрджреНрдз рдЧреБрдгрд╛рддреНрдордХ рд▓реЛрдб рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрдпреМрдВред рдордзреНрдпрд╡рд░реНрддреА рдХрдореНрдкреЛрдиреЗрдиреНрдЯрд╣рд░реВрдорд╛ "рд╣рд╕реНрддрдХреНрд╖реЗрдк" рд╣рдЯрд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореАрд▓реЗ рд╕реНрдерд╛рдиреАрдп рд░реВрдкрдорд╛ рдЯреНрд░рд╛рдлрд┐рдХ "рдЦрдиреНрдпрд╛рдпреМрдВ"ред

рддреНрдпрд╕реЛрднрдП, ESNI рд╕рдорд░реНрдерди рд░ HTTP рдмрд╛рдЯ рдЕрдкрд╕реНрдЯреНрд░реАрдордорд╛ рдкреНрд░реЛрдХреНрд╕реА рдЧрд░реНрджреИ, рд╣рд╛рдореАрд▓реЗ 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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди