āĻ•āĻŋāĻ­āĻžāĻŦ⧇ ESNI āĻĻāĻŋāϝāĻŧ⧇ āφāĻĒāύāĻžāϰ āĻĒāĻžāĻŦāϞāĻŋāĻ• āĻ“āϝāĻŧ⧇āĻŦāϏāĻžāχāϟ āϰāĻ•ā§āώāĻž āĻ•āϰāĻŦ⧇āύ

āĻšā§āϝāĻžāϞ⧋ āĻšāĻžāĻŦāϰ, āφāĻŽāĻžāϰ āύāĻžāĻŽ āχāϞāĻŋāϝāĻŧāĻž, āφāĻŽāĻŋ Exness-āĻāϰ āĻĒā§āĻ˛ā§āϝāĻžāϟāĻĢāĻ°ā§āĻŽ āϟāĻŋāĻŽā§‡ āĻ•āĻžāϜ āĻ•āϰāĻŋāĨ¤ āφāĻŽāĻžāĻĻ⧇āϰ āĻĒā§āϰ⧋āĻĄāĻžāĻ•ā§āϟ āĻĄā§‡āϭ⧇āϞāĻĒāĻŽā§‡āĻ¨ā§āϟ āϟāĻŋāĻŽāϗ⧁āϞāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āφāĻŽāϰāĻž āĻŽā§‚āϞ āĻ…āĻŦāĻ•āĻžāĻ āĻžāĻŽā§‹āϰ āωāĻĒāĻžāĻĻāĻžāύāϗ⧁āϞāĻŋāϰ āĻŦāĻŋāĻ•āĻžāĻļ āĻāĻŦāĻ‚ āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžāϝāĻŧāύ āĻ•āϰāĻŋāĨ¤

āĻāχ āύāĻŋāĻŦāĻ¨ā§āϧ⧇, āφāĻŽāĻŋ āĻĒāĻžāĻŦāϞāĻŋāĻ• āĻ“āϝāĻŧ⧇āĻŦāϏāĻžāχāĻŸā§‡āϰ āĻĒāϰāĻŋāĻ•āĻžāĻ āĻžāĻŽā§‹āϤ⧇ āĻāύāĻ•ā§āϰāĻŋāĻĒā§āĻŸā§‡āĻĄ SNI (ESNI) āĻĒā§āϰāϝ⧁āĻ•ā§āϤāĻŋ āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžāϝāĻŧāύ⧇āϰ āφāĻŽāĻžāϰ āĻ…āĻ­āĻŋāĻœā§āĻžāϤāĻž āĻļ⧇āϝāĻŧāĻžāϰ āĻ•āϰāϤ⧇ āϚāĻžāχāĨ¤

āĻ•āĻŋāĻ­āĻžāĻŦ⧇ ESNI āĻĻāĻŋāϝāĻŧ⧇ āφāĻĒāύāĻžāϰ āĻĒāĻžāĻŦāϞāĻŋāĻ• āĻ“āϝāĻŧ⧇āĻŦāϏāĻžāχāϟ āϰāĻ•ā§āώāĻž āĻ•āϰāĻŦ⧇āύ

āĻāĻ•āϟāĻŋ āϏāĻ°ā§āĻŦāϜāύ⧀āύ āĻ“āϝāĻŧ⧇āĻŦāϏāĻžāχāĻŸā§‡āϰ āϏāĻžāĻĨ⧇ āĻ•āĻžāϜ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āĻāĻŦāĻ‚ āϕ⧋āĻŽā§āĻĒāĻžāύāĻŋāϰ āĻ—ā§ƒāĻšā§€āϤ āĻ…āĻ­ā§āϝāĻ¨ā§āϤāϰ⧀āĻŖ āύāĻŋāϰāĻžāĻĒāĻ¤ā§āϤāĻž āĻŽāĻžāύāϗ⧁āϞāĻŋ āĻŽā§‡āύ⧇ āϚāϞāĻžāϰ āϏāĻŽāϝāĻŧ āĻāχ āĻĒā§āϰāϝ⧁āĻ•ā§āϤāĻŋāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āύāĻŋāϰāĻžāĻĒāĻ¤ā§āϤāĻžāϰ āĻŽāĻžāĻ¤ā§āϰāĻž āĻŦ⧃āĻĻā§āϧāĻŋ āĻ•āϰāĻŦ⧇āĨ¤

āĻĒā§āϰāĻĨāĻŽāϤ, āφāĻŽāĻŋ āωāĻ˛ā§āϞ⧇āĻ– āĻ•āϰāϤ⧇ āϚāĻžāχ āϝ⧇ āĻĒā§āϰāϝ⧁āĻ•ā§āϤāĻŋāϟāĻŋ āĻŽāĻžāύāϏāĻŽā§āĻŽāϤ āύāϝāĻŧ āĻāĻŦāĻ‚ āĻāĻ–āύāĻ“ āĻ–āϏāĻĄāĻŧāĻžāϝāĻŧ āϰāϝāĻŧ⧇āϛ⧇, āϤāĻŦ⧇ āĻ•ā§āϞāĻžāωāĻĄāĻĢā§āϞ⧇āϝāĻŧāĻžāϰ āĻāĻŦāĻ‚ āĻŽāϜāĻŋāϞāĻž āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇āχ āĻāϟāĻŋāϕ⧇ āϏāĻŽāĻ°ā§āĻĨāύ āĻ•āϰ⧇ ( āĻ–āϏāĻĄāĻŧāĻž 01) āĻāχ āϧāϰāύ⧇āϰ āĻāĻ•āϟāĻŋ āĻĒāϰ⧀āĻ•ā§āώāĻžāϰ āϜāĻ¨ā§āϝ āφāĻŽāĻžāĻĻ⧇āϰ āĻ…āύ⧁āĻĒā§āϰāĻžāĻŖāĻŋāϤ.

āϤāĻ¤ā§āĻ¤ā§āĻŦ āĻāĻ•āϟāĻŋ āĻŦāĻŋāϟ

ESNI TLS 1.3 āĻĒā§āϰ⧋āĻŸā§‹āĻ•āϞ⧇āϰ āĻāĻ•āϟāĻŋ āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύ āϝāĻž TLS āĻšā§āϝāĻžāĻ¨ā§āĻĄāĻļ⧇āĻ• "āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ āĻšā§āϝāĻžāϞ⧋" āĻŦāĻžāĻ°ā§āϤāĻžāϝāĻŧ SNI āĻāύāĻ•ā§āϰāĻŋāĻĒāĻļāύ⧇āϰ āĻ…āύ⧁āĻŽāϤāĻŋ āĻĻ⧇āϝāĻŧ⧎ ESNI āϏāĻŽāĻ°ā§āĻĨāύ⧇āϰ āϏāĻžāĻĨ⧇ āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ āĻšā§āϝāĻžāϞ⧋ āϕ⧇āĻŽāύ āĻĻ⧇āĻ–āĻžāϝāĻŧ āϤāĻž āĻāĻ–āĻžāύ⧇ (āϏāĻžāϧāĻžāϰāĻŖ SNI āĻāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇ āφāĻŽāϰāĻž ESNI āĻĻ⧇āĻ–āĻŋ):

āĻ•āĻŋāĻ­āĻžāĻŦ⧇ ESNI āĻĻāĻŋāϝāĻŧ⧇ āφāĻĒāύāĻžāϰ āĻĒāĻžāĻŦāϞāĻŋāĻ• āĻ“āϝāĻŧ⧇āĻŦāϏāĻžāχāϟ āϰāĻ•ā§āώāĻž āĻ•āϰāĻŦ⧇āύ

 ESNI āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇, āφāĻĒāύāĻžāϰ āϤāĻŋāύāϟāĻŋ āωāĻĒāĻžāĻĻāĻžāύ āĻĒā§āϰāϝāĻŧā§‹āϜāύ:

  • DNS; 
  • āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ āϏāĻŽāĻ°ā§āĻĨāύ;
  • āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϏāĻžāχāĻĄ āϏāĻŽāĻ°ā§āĻĨāύ.

āĻĄāĻŋāĻāύāĻāϏ

āφāĻĒāύāĻžāϕ⧇ āĻĻ⧁āϟāĻŋ DNS āϰ⧇āĻ•āĻ°ā§āĻĄ āϝ⧋āĻ— āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ - AāĻāĻŦāĻ‚ TXT (TXT āϰ⧇āĻ•āĻ°ā§āĻĄā§‡ āϏāĻ°ā§āĻŦāϜāύ⧀āύ āϕ⧀ āϰāϝāĻŧ⧇āϛ⧇ āϝāĻž āĻĻāĻŋāϝāĻŧ⧇ āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ SNI āĻāύāĻ•ā§āϰāĻŋāĻĒā§āϟ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇) - āύ⧀āĻšā§‡ āĻĻ⧇āϖ⧁āύāĨ¤ āωāĻĒāϰāĻ¨ā§āϤ⧁, āϏāĻŽāĻ°ā§āĻĨāύ āĻĨāĻžāĻ•āϤ⧇ āĻšāĻŦ⧇ DoH (HTTPS āĻāϰ āωāĻĒāϰ DNS) āĻ•āĻžāϰāĻŖ āωāĻĒāϞāĻŦā§āϧ āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ (āύ⧀āĻšā§‡ āĻĻ⧇āϖ⧁āύ) DoH āĻ›āĻžāĻĄāĻŧāĻž ESNI āϏāĻŽāĻ°ā§āĻĨāύ āϏāĻ•ā§āώāĻŽ āĻ•āϰ⧇ āύāĻžāĨ¤ āĻāϟāĻŋ āϝ⧌āĻ•ā§āϤāĻŋāĻ•, āϝ⧇āĻšā§‡āϤ⧁ ESNI āĻĻā§āĻŦāĻžāϰāĻž āφāĻŽāϰāĻž āϝ⧇ āϏāĻ‚āĻ¸ā§āĻĨāĻžāύāϟāĻŋ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻ•āϰāĻ›āĻŋ āϤāĻžāϰ āύāĻžāĻŽ āĻāύāĻ•ā§āϰāĻŋāĻĒāĻļāύ āĻŦā§‹āĻāĻžāϝāĻŧ, āĻ…āĻ°ā§āĻĨāĻžā§Ž, UDP-āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ DNS āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻ•āϰāĻžāϰ āϕ⧋āύ āĻŽāĻžāύ⧇ āĻšāϝāĻŧ āύāĻžāĨ¤ āϤāĻžāĻ›āĻžāĻĄāĻŧāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻĄāĻŋāĻāύ⧇āϏāĻāϏāχāϏāĻŋ āĻāχ āĻĒāϰāĻŋāĻ¸ā§āĻĨāĻŋāϤāĻŋāϤ⧇ āĻ•ā§āϝāĻžāĻļ⧇ āĻŦāĻŋāώāĻ•ā§āϰāĻŋāϝāĻŧāĻžāϰ āφāĻ•ā§āϰāĻŽāĻŖ āĻĨ⧇āϕ⧇ āϰāĻ•ā§āώāĻž āĻ•āϰāĻžāϰ āĻ…āύ⧁āĻŽāϤāĻŋ āĻĻ⧇āϝāĻŧāĨ¤

āĻŦāĻ°ā§āϤāĻŽāĻžāύ⧇ āϏāĻšāϜāϞāĻ­ā§āϝ āĻŦ⧇āĻļ āĻ•āĻŋāϛ⧁ 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 āϏāĻŽāĻ°ā§āĻĨāύ āĻ•āϰ⧇ āύāĻžāĨ¤

āĻ…āϤāĻāĻŦ, āφāĻŽāϰāĻž āφāĻŽāĻžāĻĻ⧇āϰ āύāĻŋāϜāĻ¸ā§āĻŦ āĻĢā§āϰāĻ¨ā§āϟ-āĻāĻ¨ā§āĻĄ āĻ•āĻŽā§āĻĒā§‹āύ⧇āĻ¨ā§āϟ (āχāĻāϏāĻāύāφāχ āϰāĻŋāĻ­āĻžāĻ°ā§āϏ āĻĒā§āϰāĻ•ā§āϏāĻŋ) āϤ⧈āϰāĻŋ āĻ•āϰāĻžāϰ āϏāĻŋāĻĻā§āϧāĻžāĻ¨ā§āϤ āύāĻŋāϝāĻŧ⧇āĻ›āĻŋ, āϝāĻž āχāĻāϏāĻāύāφāχ āϏāĻš TLS 1.3 āϏāĻŽāĻžāĻĒā§āϤāĻŋ āϏāĻŽāĻ°ā§āĻĨāύ āĻ•āϰāĻŦ⧇ āĻāĻŦāĻ‚ āφāĻĒāĻ¸ā§āĻŸā§āϰāĻŋāĻŽā§‡ āĻĒā§āϰāĻ•ā§āϏāĻŋ HTTP(S) āĻŸā§āϰāĻžāĻĢāĻŋāĻ• āϝāĻž ESNI āϏāĻŽāĻ°ā§āĻĨāύ āĻ•āϰ⧇ āύāĻžāĨ¤ āĻāϟāĻŋ āĻŽā§‚āϞ āωāĻĒāĻžāĻĻāĻžāύāϗ⧁āϞāĻŋ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āύāĻž āĻ•āϰ⧇ āĻĒā§āϰāϝ⧁āĻ•ā§āϤāĻŋāϟāĻŋāϕ⧇ āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āĻĒāϰāĻŋāĻ•āĻžāĻ āĻžāĻŽā§‹āϤ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āĻ…āύ⧁āĻŽāϤāĻŋ āĻĻ⧇āϝāĻŧ - āĻ…āĻ°ā§āĻĨāĻžā§Ž, āĻŦāĻ°ā§āϤāĻŽāĻžāύ āĻ“āϝāĻŧ⧇āĻŦ āϏāĻžāĻ°ā§āĻ­āĻžāϰāϗ⧁āϞāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϝāĻž ESNI āϏāĻŽāĻ°ā§āĻĨāύ āĻ•āϰ⧇ āύāĻžā§ˇ 

āĻ¸ā§āĻĒāĻˇā§āϟāϤāĻžāϰ āϜāĻ¨ā§āϝ, āĻāĻ–āĻžāύ⧇ āĻāĻ•āϟāĻŋ āϚāĻŋāĻ¤ā§āϰ āϰāϝāĻŧ⧇āϛ⧇:

āĻ•āĻŋāĻ­āĻžāĻŦ⧇ ESNI āĻĻāĻŋāϝāĻŧ⧇ āφāĻĒāύāĻžāϰ āĻĒāĻžāĻŦāϞāĻŋāĻ• āĻ“āϝāĻŧ⧇āĻŦāϏāĻžāχāϟ āϰāĻ•ā§āώāĻž āĻ•āϰāĻŦ⧇āύ

āφāĻŽāĻŋ āϞāĻ•ā§āĻˇā§āϝ āĻ•āϰāĻŋ āϝ⧇ āĻĒā§āϰāĻ•ā§āϏāĻŋāϟāĻŋ ESNI āĻ›āĻžāĻĄāĻŧāĻžāχ āĻāĻ•āϟāĻŋ TLS āϏāĻ‚āϝ⧋āĻ— āĻŦāĻ¨ā§āϧ āĻ•āϰāĻžāϰ āĻ•ā§āώāĻŽāϤāĻž āϏāĻš, ESNI āĻ›āĻžāĻĄāĻŧāĻž āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟāĻĻ⧇āϰ āϏāĻŽāĻ°ā§āĻĨāύ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻĄāĻŋāϜāĻžāχāύ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ⧎ āĻāĻ›āĻžāĻĄāĻŧāĻžāĻ“, āφāĻĒāĻ¸ā§āĻŸā§āϰāĻŋāĻŽā§‡āϰ āϏāĻžāĻĨ⧇ āϝ⧋āĻ—āĻžāϝ⧋āϗ⧇āϰ āĻĒā§āϰ⧋āĻŸā§‹āĻ•āϞāϟāĻŋ HTTP āĻŦāĻž HTTPS āĻšāϤ⧇ āĻĒāĻžāϰ⧇ āϝāĻžāϰ TLS āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ 1.3 āĻāϰ āĻšā§‡āϝāĻŧ⧇ āĻ•āĻŽ (āϝāĻĻāĻŋ āφāĻĒāĻ¸ā§āĻŸā§āϰāĻŋāĻŽ 1.3 āϏāĻŽāĻ°ā§āĻĨāύ āύāĻž āĻ•āϰ⧇)āĨ¤ āĻāχ āĻ¸ā§āĻ•āĻŋāĻŽ āϏāĻ°ā§āĻŦā§‹āĻšā§āϚ āύāĻŽāύ⧀āϝāĻŧāϤāĻž āĻĻ⧇āϝāĻŧāĨ¤

āωāĻĒāϰ ESNI āϏāĻŽāĻ°ā§āĻĨāύ āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžāϝāĻŧāύ go āφāĻŽāϰāĻž āĻĨ⧇āϕ⧇ āϧāĻžāϰ āĻ•āϰ⧇āĻ›āĻŋ CloudFlare. āφāĻŽāĻŋ āĻ…āĻŦāĻŋāϞāĻŽā§āĻŦ⧇ āύ⧋āϟ āĻ•āϰāϤ⧇ āϚāĻžāχ āϝ⧇ āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžāϝāĻŧāύ āύāĻŋāĻœā§‡āχ āĻŦ⧇āĻļ āĻ…-āϤ⧁āĻšā§āĻ›, āĻ•āĻžāϰāĻŖ āĻāϤ⧇ āĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋāϤ⧇ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āϜāĻĄāĻŧāĻŋāϤ āĻ•ā§āϰāĻŋāĻĒā§āĻŸā§‹/āϟāĻŋāĻāϞāĻāϏ āĻāĻŦāĻ‚ āϤāĻžāχ "āĻĒā§āϝāĻžāϚāĻŋāĻ‚" āĻĒā§āϰāϝāĻŧā§‹āϜāύ āϗ⧁āϰ⧋āϟ āϏāĻŽāĻžāĻŦ⧇āĻļ⧇āϰ āφāϗ⧇āĨ¤

ESNI āϕ⧀ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āφāĻŽāϰāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āĻ›āĻŋ esnitool (āĻāĻ›āĻžāĻĄāĻŧāĻžāĻ“ āĻ•ā§āϞāĻžāωāĻĄāĻĢā§āϞ⧇āϝāĻŧāĻžāϰ⧇āϰ āĻŽāĻ¸ā§āϤāĻŋāĻˇā§āĻ•āĻĒā§āϰāϏ⧂āϤ)āĨ¤ āĻāχ āϕ⧀āϗ⧁āϞāĻŋ SNI āĻāύāĻ•ā§āϰāĻŋāĻĒāĻļāύ/āĻĄāĻŋāĻ•ā§āϰāĻŋāĻĒāĻļāύ⧇āϰ āϜāĻ¨ā§āϝ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤
āφāĻŽāϰāĻž āĻ—ā§‹ ā§§.ā§§ā§Š āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻŦāĻŋāĻ˛ā§āĻĄāϟāĻŋ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰ⧇āĻ›āĻŋ 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 āĻ–āϰāϚ āϏāĻš:

  • ā§Žā§Ļ% āϏāĻŋāĻĒāĻŋāχāω āĻŦā§āϝāĻŦāĻšāĻžāϰ (ā§ĒāϟāĻŋ āĻ­āĻŋ-āϏāĻŋāĻĒāĻŋāχāω, ā§Ē āϜāĻŋāĻŦāĻŋ āĻ°â€ā§āϝāĻžāĻŽ āĻšā§‹āĻ¸ā§āϟ) Linux)
  • 130 āĻāĻŽāĻŦāĻŋ āĻŽā§‡āĻŽ āφāϰāĻāϏāĻāϏ

āĻ•āĻŋāĻ­āĻžāĻŦ⧇ 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 

āϟāĻžāχāĻŽāφāωāĻŸā§‡āϰ āωāĻĒāĻ¸ā§āĻĨāĻŋāϤāĻŋ āϰāĻŋāϏ⧋āĻ°ā§āϏ⧇āϰ āĻ…āĻ­āĻžāĻŦ āύāĻŋāĻ°ā§āĻĻ⧇āĻļ āĻ•āϰ⧇ (āφāĻŽāϰāĻž ā§ĒāϟāĻŋ vCPU, ā§Ē āϜāĻŋāĻŦāĻŋ āĻ°â€ā§āϝāĻžāĻŽā§‡āϰ āĻšā§‹āĻ¸ā§āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āĻ›āĻŋ, Linux), āĻāĻŦāĻ‚ āĻĒā§āϰāĻ•ā§ƒāϤāĻĒāĻ•ā§āώ⧇ āϏāĻŽā§āĻ­āĻžāĻŦā§āϝ RPS āφāϰāĻ“ āĻŦ⧇āĻļāĻŋ (āφāĻŽāϰāĻž āφāϰāĻ“ āĻļāĻ•ā§āϤāĻŋāĻļāĻžāϞ⧀ āϰāĻŋāϏ⧋āĻ°ā§āϏāϗ⧁āϞāĻŋāϤ⧇ ⧍⧭ā§Ļā§Ļ RPS āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āĻŽāĻžāύ āĻĒ⧇āϝāĻŧ⧇āĻ›āĻŋ)āĨ¤

āωāĻĒāϏāĻ‚āĻšāĻžāϰ⧇, āφāĻŽāĻŋ āύ⧋āϟ āϝ⧇ ESNI āĻĒā§āϰāϝ⧁āĻ•ā§āϤāĻŋ āĻŦ⧇āĻļ āφāĻļāĻžāĻĒā§āϰāĻĻ āĻĻ⧇āĻ–āĻžāϝāĻŧāĨ¤ āĻāĻ–āύāĻ“ āĻ…āύ⧇āĻ•āϗ⧁āϞāĻŋ āĻ–ā§‹āϞāĻž āĻĒā§āϰāĻļā§āύ āϰāϝāĻŧ⧇āϛ⧇, āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, DNS-āĻ āϏāĻ°ā§āĻŦāϜāύ⧀āύ ESNI āϕ⧀ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāĻžāϰ āĻāĻŦāĻ‚ ESNI āϕ⧀āϗ⧁āϞāĻŋ āĻ˜ā§‹āϰāĻžāύ⧋āϰ āϏāĻŽāĻ¸ā§āϝāĻžāϗ⧁āϞāĻŋ - āĻāχ āϏāĻŽāĻ¸ā§āϝāĻžāϗ⧁āϞāĻŋ āϏāĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āφāϞ⧋āϚāύāĻž āĻ•āϰāĻž āĻšāĻšā§āϛ⧇ āĻāĻŦāĻ‚ ESNI āĻ–āϏāĻĄāĻŧāĻžāϰ āϏāĻ°ā§āĻŦāĻļ⧇āώ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ (āϞ⧇āĻ–āĻžāϰ āϏāĻŽāϝāĻŧ) āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇āχ āϰāϝāĻŧ⧇āϛ⧇ 7.

āωāĻ¤ā§āϏ: www.habr.com

DDoS āϏ⧁āϰāĻ•ā§āώāĻž, VPS VDS āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϏāĻš āϏāĻžāχāϟāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋāύ⧁āύ đŸ”Ĩ DDoS āϏ⧁āϰāĻ•ā§āώāĻž āϏāĻš āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻ“āϝāĻŧ⧇āĻŦāϏāĻžāχāϟ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋāύ⧁āύ, VPS VDS āϏāĻžāĻ°ā§āĻ­āĻžāϰ | ProHoster