āφāĻŽāϰāĻž āφāĻŽāĻžāĻĻ⧇āϰ DNS-āĻ“āĻ­āĻžāϰ-HTTPS āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻŦāĻžāĻĄāĻŧāĻžāχ

āĻĄāĻŋāĻāύāĻāϏ āĻ…āĻĒāĻžāϰ⧇āĻļāύ⧇āϰ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āĻĻāĻŋāĻ• āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇āχ āϞ⧇āĻ–āĻ• āĻĻā§āĻŦāĻžāϰāĻž āĻŦāĻžāϰāĻŦāĻžāϰ āĻ¸ā§āĻĒāĻ°ā§āĻļ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇ āύāĻŋāĻŦāĻ¨ā§āϧ āĻŦā§āϞāϗ⧇āϰ āĻ…āĻ‚āĻļ āĻšāĻŋāϏāĻžāĻŦ⧇ āĻĒā§āϰāĻ•āĻžāĻļāĻŋāϤāĨ¤ āĻāĻ•āχ āϏāĻžāĻĨ⧇, āĻāχ āĻŽā§‚āϞ āχāĻ¨ā§āϟāĻžāϰāύ⧇āϟ āĻĒāϰāĻŋāώ⧇āĻŦāĻžāϟāĻŋāϰ āϏ⧁āϰāĻ•ā§āώāĻž āωāĻ¨ā§āύāϤ āĻ•āϰāĻžāϰ āωāĻĒāϰ āϏāĻ°ā§āĻŦāĻĻāĻžāχ āĻŽā§‚āϞ āĻœā§‹āϰ āĻĻ⧇āĻ“āϝāĻŧāĻž āĻšāϝāĻŧ⧇āϛ⧇āĨ¤

āφāĻŽāϰāĻž āφāĻŽāĻžāĻĻ⧇āϰ DNS-āĻ“āĻ­āĻžāϰ-HTTPS āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻŦāĻžāĻĄāĻŧāĻžāχ

āϏāĻŽā§āĻĒā§āϰāϤāĻŋ āĻ…āĻŦāϧāĻŋ, āĻĄāĻŋāĻāύāĻāϏ āĻŸā§āĻ°ā§āϝāĻžāĻĢāĻŋāϕ⧇āϰ āϏ⧁āĻ¸ā§āĻĒāĻˇā§āϟ āĻĻ⧁āĻ°ā§āĻŦāϞāϤāĻž āĻĨāĻžāĻ•āĻž āϏāĻ¤ā§āĻ¤ā§āĻŦ⧇āĻ“, āϝāĻž āĻāĻ–āύāĻ“, āĻŦ⧇āĻļāĻŋāϰāĻ­āĻžāĻ— āĻ…āĻ‚āĻļ⧇, āĻŦāĻŋāώāϝāĻŧāĻŦāĻ¸ā§āϤ⧁, āϏāϰāĻ•āĻžāϰāĻŋ āύāĻŋāϰāĻžāĻĒāĻ¤ā§āϤāĻž āϏāĻ‚āĻ¸ā§āĻĨāĻž āĻāĻŦāĻ‚ āϏ⧇āĻ¨ā§āϏāϰāĻļāĻŋāĻĒ⧇ āĻŦāĻŋāĻœā§āĻžāĻžāĻĒāύ āĻāĻŽā§āĻŦ⧇āĻĄ āĻ•āϰ⧇ āϤāĻžāĻĻ⧇āϰ āφāϝāĻŧ āĻŦāĻžāĻĄāĻŧāĻžāϤ⧇ āϚāĻžāĻ“āϝāĻŧāĻž āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āĻĒāĻ•ā§āώ āĻĨ⧇āϕ⧇ āĻĻā§‚āώāĻŋāϤ āĻ•ā§āϰāĻŋāϝāĻŧāĻžāĻ•āϞāĻžāĻĒ⧇āϰ āϜāĻ¨ā§āϝ āĻ¸ā§āĻĒāĻˇā§āϟāĻ­āĻžāĻŦ⧇ āĻĒā§āϰ⧇āϰāĻŖ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇, āϏ⧇āχāϏāĻžāĻĨ⧇ āϏāĻšāϜāĻ­āĻžāĻŦ⧇ āĻ…āĻĒāϰāĻžāϧ⧀, āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻāϰ āϏ⧁āϰāĻ•ā§āώāĻž āĻœā§‹āϰāĻĻāĻžāϰ āĻ•āϰāĻž, DNSSEC/DANE, DNScrypt, DNS-over-TLS āĻāĻŦāĻ‚ DNS-over-HTTPS-āĻāϰ āĻŽāϤ⧋ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āĻĒā§āϰāϝ⧁āĻ•ā§āϤāĻŋāϰ āωāĻĒāĻ¸ā§āĻĨāĻŋāϤāĻŋ āĻĨāĻžāĻ•āĻž āϏāĻ¤ā§āĻ¤ā§āĻŦ⧇āĻ“, āĻ¸ā§āĻĨāĻŦāĻŋāϰāĨ¤ āĻāĻŦāĻ‚ āϝāĻĻāĻŋ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϏāĻŽāĻžāϧāĻžāύ, āĻāĻŦāĻ‚ āϤāĻžāĻĻ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āĻ•āĻŋāϛ⧁ āĻĻā§€āĻ°ā§āϘāĻ•āĻžāϞ āϧāϰ⧇ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āĻĨāĻžāϕ⧇, āĻŦā§āϝāĻžāĻĒāĻ•āĻ­āĻžāĻŦ⧇ āĻĒāϰāĻŋāϚāĻŋāϤ āĻāĻŦāĻ‚ āωāĻĒāϞāĻŦā§āϧ, āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ āϏāĻĢā§āϟāĻ“āϝāĻŧā§āϝāĻžāϰ āĻĨ⧇āϕ⧇ āϤāĻžāĻĻ⧇āϰ āϏāĻŽāĻ°ā§āĻĨāύ āĻ•āĻžāĻ™ā§āĻ–āĻŋāϤ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āĻ­āĻžāĻ—ā§āϝāĻ•ā§āϰāĻŽā§‡, āĻĒāϰāĻŋāĻ¸ā§āĻĨāĻŋāϤāĻŋāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻšāĻšā§āϛ⧇āĨ¤ āĻŦāĻŋāĻļ⧇āώ āĻ•āϰ⧇, āϜāύāĻĒā§āϰāĻŋāϝāĻŧ āĻĢāĻžāϝāĻŧāĻžāϰāĻĢāĻ•ā§āϏ āĻŦā§āϰāĻžāωāϜāĻžāϰ⧇āϰ āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāϰ⧀āϰāĻž āĻŦāĻŋāĻŦ⧃āϤ āĻĄāĻŋāĻĢāĻ˛ā§āϟāϰ⧂āĻĒ⧇ āϏāĻŽāĻ°ā§āĻĨāύ āĻŽā§‹āĻĄ āϏāĻ•ā§āώāĻŽ āĻ•āϰāĻžāϰ āĻĒāϰāĻŋāĻ•āĻ˛ā§āĻĒāύāĻž āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ DNS-āĻ“āĻ­āĻžāϰ-HTTPS (DoH) āĻļā§€āĻ˜ā§āϰāχāĨ¤ āĻāϟāĻŋ WWW āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ DNS āĻŸā§āĻ°ā§āϝāĻžāĻĢāĻŋāĻ•āϕ⧇ āωāĻĒāϰ⧇āϰ āĻšā§āĻŽāĻ•āĻŋ āĻĨ⧇āϕ⧇ āϰāĻ•ā§āώāĻž āĻ•āϰāϤ⧇ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰāĻŦ⧇, āϤāĻŦ⧇ āϏāĻŽā§āĻ­āĻžāĻŦā§āϝāĻ­āĻžāĻŦ⧇ āύāϤ⧁āύāϗ⧁āϞāĻŋ āĻĒā§āϰāĻŦāĻ°ā§āϤāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

1. DNS-āĻ“āĻ­āĻžāϰ-HTTPS āϏāĻŽāĻ¸ā§āϝāĻž

āĻĒā§āϰāĻĨāĻŽ āύāϜāϰ⧇, āχāĻ¨ā§āϟāĻžāϰāύ⧇āϟ āϏāĻĢā§āϟāĻ“āϝāĻŧā§āϝāĻžāϰ⧇ āĻĄāĻŋāĻāύāĻāϏ-āĻ“āĻ­āĻžāϰ-āĻāχāϚāϟāĻŋāϟāĻŋāĻĒāĻŋāĻāϏ-āĻāϰ āĻŦā§āϝāĻžāĻĒāĻ• āĻĒā§āϰāĻŦāĻ°ā§āϤāύ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻāĻ•āϟāĻŋ āχāϤāĻŋāĻŦāĻžāϚāĻ• āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻž āϏ⧃āĻˇā§āϟāĻŋ āĻ•āϰ⧇āĨ¤ āϝāĻžāχāĻšā§‹āĻ•, āĻļāϝāĻŧāϤāĻžāύ, āϝ⧇āĻŽāύ āϤāĻžāϰāĻž āĻŦāϞ⧇, āĻŦāĻŋāĻļāĻĻ⧇ āϰāϝāĻŧ⧇āϛ⧇āĨ¤

āĻĒā§āϰāĻĨāĻŽ āϏāĻŽāĻ¸ā§āϝāĻž āϝāĻž DoH āĻāϰ āĻŦā§āϝāĻžāĻĒāĻ• āĻŦā§āϝāĻŦāĻšāĻžāϰ⧇āϰ āϏ⧁āϝ⧋āĻ—āϕ⧇ āϏ⧀āĻŽāĻŋāϤ āĻ•āϰ⧇ āϤāĻž āĻšāϞ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻ“āϝāĻŧ⧇āĻŦ āĻŸā§āϰāĻžāĻĢāĻŋāϕ⧇āϰ āωāĻĒāϰ āĻĢā§‹āĻ•āĻžāϏāĨ¤ āĻĒā§āϰāĻ•ā§ƒāϤāĻĒāĻ•ā§āώ⧇, HTTP āĻĒā§āϰ⧋āĻŸā§‹āĻ•āϞ āĻāĻŦāĻ‚ āĻāϰ āĻŦāĻ°ā§āϤāĻŽāĻžāύ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ HTTP/2, āϝāĻžāϰ āωāĻĒāϰ DoH āĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ•, WWW āĻāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋāĨ¤ āĻ•āĻŋāĻ¨ā§āϤ⧁ āχāĻ¨ā§āϟāĻžāϰāύ⧇āϟ āĻļ⧁āϧ⧁ āĻ“āϝāĻŧ⧇āĻŦ āύāϝāĻŧāĨ¤ āχāĻŽā§‡āϞ, āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āχāύāĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āϟ āĻŽā§‡āϏ⧇āĻžā§āϜāĻžāϰ, āĻĢāĻžāχāϞ āĻŸā§āϰāĻžāĻ¨ā§āϏāĻĢāĻžāϰ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ, āĻŽāĻžāĻ˛ā§āϟāĻŋāĻŽāĻŋāĻĄāĻŋāϝāĻŧāĻž āĻ¸ā§āĻŸā§āϰāĻŋāĻŽāĻŋāĻ‚ āχāĻ¤ā§āϝāĻžāĻĻāĻŋāϰ āĻŽāϤ⧋ āĻ…āύ⧇āĻ• āϜāύāĻĒā§āϰāĻŋāϝāĻŧ āĻĒāϰāĻŋāώ⧇āĻŦāĻž āϰāϝāĻŧ⧇āϛ⧇ āϝāĻž HTTP āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āύāĻžāĨ¤ āĻāχāĻ­āĻžāĻŦ⧇, āĻ…āύ⧇āϕ⧇āϰ āĻĻā§āĻŦāĻžāϰāĻž āĻāĻ•āϟāĻŋ āĻĒā§āϝāĻžāύ⧇āϏāĻŋāϝāĻŧāĻž āĻšāĻŋāϏāĻžāĻŦ⧇ āĻĄāĻŋāĻ“āĻāχāϚ āωāĻĒāϞāĻŦā§āϧāĻŋ āϏāĻ¤ā§āĻ¤ā§āĻŦ⧇āĻ“, āĻŦā§āϰāĻžāωāϜāĻžāϰ āĻĒā§āϰāϝ⧁āĻ•ā§āϤāĻŋ āĻ›āĻžāĻĄāĻŧāĻž āĻ…āĻ¨ā§āϝ āĻ•āĻŋāϛ⧁āϰ āϜāĻ¨ā§āϝ āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ (āĻāĻŦāĻ‚ āĻ…āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ) āĻĒā§āϰāĻšā§‡āĻˇā§āϟāĻž āĻ›āĻžāĻĄāĻŧāĻžāχ āĻāϟāĻŋ āĻĒā§āϰāϝ⧋āĻœā§āϝ āύāϝāĻŧāĨ¤ āϝāĻžāχāĻšā§‹āĻ•, āĻĄāĻŋāĻāύāĻāϏ-āĻ“āĻ­āĻžāϰ-āϟāĻŋāĻāϞāĻāϏ āĻāχ āĻ­ā§‚āĻŽāĻŋāĻ•āĻžāϰ āϜāĻ¨ā§āϝ āĻ…āύ⧇āĻ• āĻŦ⧇āĻļāĻŋ āϝ⧋āĻ—ā§āϝ āĻĒā§āϰāĻžāĻ°ā§āĻĨā§€āϰ āĻŽāϤ⧋ āĻĻ⧇āĻ–āĻžāϝāĻŧ, āϝāĻž āύāĻŋāϰāĻžāĻĒāĻĻ āĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āϟāĻŋāĻāϞāĻāϏ āĻĒā§āϰ⧋āĻŸā§‹āĻ•āϞ⧇ āĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āĻĄāĻŋāĻāύāĻāϏ āĻŸā§āĻ°ā§āϝāĻžāĻĢāĻŋāϕ⧇āϰ āĻāύāĻ•ā§āϝāĻžāĻĒāϏ⧁āϞ⧇āĻļāύ āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰ⧇āĨ¤

āĻĻā§āĻŦāĻŋāϤ⧀āϝāĻŧ āϏāĻŽāĻ¸ā§āϝāĻž, āϝāĻž āϏāĻŽā§āĻ­āĻžāĻŦā§āϝāĻ­āĻžāĻŦ⧇ āĻĒā§āϰāĻĨāĻŽāϟāĻŋāϰ āĻšā§‡āϝāĻŧ⧇ āĻ…āύ⧇āĻ• āĻŦ⧇āĻļāĻŋ āϤāĻžā§ŽāĻĒāĻ°ā§āϝāĻĒā§‚āĻ°ā§āĻŖ, āĻŦā§āϰāĻžāωāϜāĻžāϰ āϏ⧇āϟāĻŋāĻ‚āϏ⧇ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āϰāĻž āĻāĻ•āϟāĻŋ āĻāĻ•āĻ• DoH āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ⧇āϰ āĻĒāĻ•ā§āώ⧇ āĻĄāĻŋāϜāĻžāχāύ⧇āϰ āĻĻā§āĻŦāĻžāϰāĻž DNS-āĻāϰ āĻ…āĻ¨ā§āϤāĻ°ā§āύāĻŋāĻšāĻŋāϤ āĻŦāĻŋāϕ⧇āĻ¨ā§āĻĻā§āϰ⧀āĻ•āϰāϪ⧇āϰ āĻĒā§āϰāĻ•ā§ƒāϤ āĻĒāϰāĻŋāĻ¤ā§āϝāĻžāĻ—āĨ¤ āĻŦāĻŋāĻļ⧇āώ āĻ•āϰ⧇, Mozilla Cloudflare āĻĨ⧇āϕ⧇ āĻāĻ•āϟāĻŋ āĻĒāϰāĻŋāώ⧇āĻŦāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āĻĒāϰāĻžāĻŽāĻ°ā§āĻļ āĻĻ⧇āϝāĻŧāĨ¤ āĻāĻ•āϟāĻŋ āĻ…āύ⧁āϰ⧂āĻĒ āĻĒāϰāĻŋāώ⧇āĻŦāĻž āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻŦāĻŋāĻļāĻŋāĻˇā§āϟ āχāĻ¨ā§āϟāĻžāϰāύ⧇āϟ āĻŦā§āϝāĻ•ā§āϤāĻŋāĻ¤ā§āĻŦ, āĻŦāĻŋāĻļ⧇āώ āĻ•āϰ⧇ Google āĻĻā§āĻŦāĻžāϰāĻž āϚāĻžāϞ⧁ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āĻ›āĻŋāϞāĨ¤ āĻĻ⧇āĻ–āĻž āϝāĻžāĻšā§āϛ⧇ āϝ⧇ DNS-āĻ“āĻ­āĻžāϰ-HTTPS āϝ⧇ āĻĢāĻ°ā§āĻŽā§‡ āĻāϟāĻŋ āĻŦāĻ°ā§āϤāĻŽāĻžāύ⧇ āĻĒā§āϰāĻ¸ā§āϤāĻžāĻŦāĻŋāϤ āĻšāϝāĻŧ⧇āϛ⧇ āϤāĻž āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžāϝāĻŧāύ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻŦ⧃āĻšāĻ¤ā§āϤāĻŽ āĻĒāϰāĻŋāώ⧇āĻŦāĻžāϰ āωāĻĒāϰ āĻļ⧇āώ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āύāĻŋāĻ°ā§āĻ­āϰāϤāĻž āĻŦāĻžāĻĄāĻŧāĻžāϝāĻŧāĨ¤ āĻāϟāĻŋ āϕ⧋āύ āĻ—ā§‹āĻĒāύ āĻŦāĻŋāώāϝāĻŧ āύāϝāĻŧ āϝ⧇ āĻĄāĻŋāĻāύāĻāϏ āĻĒā§āϰāĻļā§āύāϗ⧁āϞāĻŋāϰ āĻŦāĻŋāĻļā§āϞ⧇āώāĻŖ āϝ⧇ āϤāĻĨā§āϝ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇ āϤāĻž āĻāϟāĻŋ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āφāϰāĻ“ āĻŦ⧇āĻļāĻŋ āĻĄā§‡āϟāĻž āϏāĻ‚āĻ—ā§āϰāĻš āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇, āϏ⧇āχāϏāĻžāĻĨ⧇ āĻāϰ āϝāĻĨāĻžāĻ°ā§āĻĨāϤāĻž āĻāĻŦāĻ‚ āĻĒā§āϰāĻžāϏāĻ™ā§āĻ—āĻŋāĻ•āϤāĻž āĻŦ⧃āĻĻā§āϧāĻŋ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āĻāχ āĻŦāĻŋāώāϝāĻŧ⧇, āϞ⧇āĻ–āĻ• DNS-over-HTTPS āύāϝāĻŧ, DNS-over-TLS-āĻāϰ āϏāĻžāĻĨ⧇ DNSSEC/DANE-āĻāϰ āϏāĻžāĻ°ā§āĻŦāϜāύ⧀āύ, āϏ⧁āϰāĻ•ā§āώāĻŋāϤ āĻāĻŦāĻ‚ āχāĻ¨ā§āϟāĻžāϰāύ⧇āĻŸā§‡āϰ āφāϰāĻ“ āϕ⧇āĻ¨ā§āĻĻā§āϰ⧀āĻ•āϰāϪ⧇āϰ āϜāĻ¨ā§āϝ āωāĻĒāϝ⧋āĻ—ā§€ āύāϝāĻŧ āĻšāĻŋāϏāĻžāĻŦ⧇ āĻŦā§āϝāĻžāĻĒāĻ• āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžāϝāĻŧāύ⧇āϰ āϏāĻŽāĻ°ā§āĻĨāĻ• āĻ›āĻŋāϞ⧇āύ āĻāĻŦāĻ‚ āϰāϝāĻŧ⧇āϛ⧇āύāĨ¤ DNS āĻŸā§āϰāĻžāĻĢāĻŋāϕ⧇āϰ āύāĻŋāϰāĻžāĻĒāĻ¤ā§āϤāĻž āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝāĨ¤ āĻĻ⧁āĻ°ā§āĻ­āĻžāĻ—ā§āϝāĻŦāĻļāϤ, āϏ⧁āĻ¸ā§āĻĒāĻˇā§āϟ āĻ•āĻžāϰāϪ⧇, āϕ⧇āω āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ āϏāĻĢā§āϟāĻ“āϝāĻŧā§āϝāĻžāϰ⧇ DoH āĻŦāĻŋāĻ•āĻ˛ā§āĻĒāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āĻŦā§āϝāĻžāĻĒāĻ• āϏāĻŽāĻ°ā§āĻĨāύ⧇āϰ āĻĻā§āϰ⧁āϤ āĻĒā§āϰāĻŦāĻ°ā§āϤāύ⧇āϰ āφāĻļāĻž āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇ āύāĻž āĻāĻŦāĻ‚ āĻāϟāĻŋ āĻāĻ–āύāĻ“ āύāĻŋāϰāĻžāĻĒāĻ¤ā§āϤāĻž āĻĒā§āϰāϝ⧁āĻ•ā§āϤāĻŋ āωāĻ¤ā§āϏāĻžāĻšā§€āĻĻ⧇āϰ āĻĄā§‹āĻŽā§‡āύāĨ¤

āĻ•āĻŋāĻ¨ā§āϤ⧁ āϝ⧇āĻšā§‡āϤ⧁ āφāĻŽāĻžāĻĻ⧇āϰ āĻ•āĻžāϛ⧇ āĻāĻ–āύ DoH āφāϛ⧇, āϕ⧇āύ āĻ•āĻ°ā§āĻĒā§‹āϰ⧇āĻļāύāϗ⧁āϞāĻŋ āϤāĻžāĻĻ⧇āϰ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āφāĻŽāĻžāĻĻ⧇āϰ āύāĻŋāϜāĻ¸ā§āĻŦ āĻĄāĻŋāĻāύāĻāϏ-āĻ“āĻ­āĻžāϰ-āĻāχāϚāϟāĻŋāϟāĻŋāĻĒāĻŋāĻāϏ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ āϏāĻŽā§āĻ­āĻžāĻŦā§āϝ āύāϜāϰāĻĻāĻžāϰāĻŋ āĻāĻĄāĻŧāĻŋāϝāĻŧ⧇ āϝāĻžāĻ“āϝāĻŧāĻžāϰ āĻĒāϰ⧇ āĻāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦ⧇ āύāĻž?

2. DNS-āĻ“āĻ­āĻžāϰ-HTTPS āĻĒā§āϰ⧋āĻŸā§‹āĻ•āϞ

āĻŽāĻžāύāĻĻāĻ¨ā§āĻĄ āĻĻ⧇āĻ–āϞ⧇ RFC8484 āĻĄāĻŋāĻāύāĻāϏ-āĻ“āĻ­āĻžāϰ-āĻāχāϚāϟāĻŋāϟāĻŋāĻĒāĻŋāĻāϏ āĻĒā§āϰ⧋āĻŸā§‹āĻ•āϞ⧇āϰ āĻŦāĻ°ā§āĻŖāύāĻž āĻĻāĻŋāϝāĻŧ⧇, āφāĻĒāύāĻŋ āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāĻšā§āϛ⧇āύ āϝ⧇ āĻāϟāĻŋ āφāϏāϞ⧇ āĻāĻ•āϟāĻŋ āĻ“āϝāĻŧ⧇āĻŦ API āϝāĻž āφāĻĒāύāĻžāϕ⧇ HTTP/2 āĻĒā§āϰ⧋āĻŸā§‹āĻ•āϞ⧇ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āĻĄāĻŋāĻāύāĻāϏ āĻĒā§āϝāĻžāϕ⧇āϜ āĻāύāĻ•ā§āϝāĻžāĻĒāϏ⧁āϞ⧇āϟ āĻ•āϰāϤ⧇ āĻĻ⧇āϝāĻŧāĨ¤ āĻāϟāĻŋ āĻŦāĻŋāĻļ⧇āώ HTTP āĻļāĻŋāϰ⧋āύāĻžāĻŽā§‡āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰāĻž āĻšāϝāĻŧ, āϏ⧇āχāϏāĻžāĻĨ⧇ āĻĒā§āϰ⧇āϰāĻŖ āĻ•āϰāĻž DNS āĻĄā§‡āϟāĻžāϰ āĻŦāĻžāχāύāĻžāϰāĻŋ āĻŦāĻŋāĻ¨ā§āϝāĻžāϏ⧇āϰ āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰ (āĻĻ⧇āϖ⧁āύāĨ¤ RFC1035 āĻāĻŦāĻ‚ āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āύāĻĨāĻŋ) āĻāĻ•āϟāĻŋ āĻĢāĻ°ā§āĻŽā§‡āϰ āĻŽāĻ§ā§āϝ⧇ āϝāĻž āφāĻĒāύāĻžāϕ⧇ āϏ⧇āϗ⧁āϞāĻŋ āĻĒā§āϰ⧇āϰāĻŖ āĻāĻŦāĻ‚ āĻ—ā§āϰāĻšāĻŖ āĻ•āϰāĻžāϰ āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āĻŽā§‡āϟāĻžāĻĄā§‡āϟāĻž āύāĻŋāϝāĻŧ⧇ āĻ•āĻžāϜ āĻ•āϰāϤ⧇ āĻĻ⧇āϝāĻŧāĨ¤

āĻŽāĻžāύ āĻ…āύ⧁āϝāĻžāϝāĻŧā§€, āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ HTTP/2 āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āύāĻŋāϰāĻžāĻĒāĻĻ TLS āϏāĻ‚āϝ⧋āĻ— āϏāĻŽāĻ°ā§āĻĨāĻŋāϤāĨ¤

āĻāĻ•āϟāĻŋ DNS āĻ…āύ⧁āϰ⧋āϧ āĻĒāĻžāĻ āĻžāύ⧋ āĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ GET āĻāĻŦāĻ‚ POST āĻĒāĻĻā§āϧāϤāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻĒā§āϰāĻĨāĻŽ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇, āĻ…āύ⧁āϰ⧋āϧāϟāĻŋ āĻāĻ•āϟāĻŋ base64URL-āĻāύāϕ⧋āĻĄā§‡āĻĄ āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚-āĻ āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰāĻŋāϤ āĻšāϝāĻŧ āĻāĻŦāĻ‚ āĻĻā§āĻŦāĻŋāϤ⧀āϝāĻŧāϟāĻŋāϤ⧇, āĻŦāĻžāχāύāĻžāϰāĻŋ āφāĻ•āĻžāϰ⧇ POST āĻ…āύ⧁āϰ⧋āϧ⧇āϰ āĻŽā§‚āϞ āĻ…āĻ‚āĻļ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡āĨ¤ āĻāχ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇, DNS āĻ…āύ⧁āϰ⧋āϧ āĻāĻŦāĻ‚ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻžāϰ āϏāĻŽāϝāĻŧ āĻāĻ•āϟāĻŋ āĻŦāĻŋāĻļ⧇āώ MIME āĻĄā§‡āϟāĻž āϟāĻžāχāĻĒ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ/āĻĄāĻŋāĻāύāĻāϏ-āĻŦāĻžāĻ°ā§āϤāĻž.

root@eprove:~ # curl -H 'accept: application/dns-message' 'https://my.domaint/dns-query?dns=q80BAAABAAAAAAAAB2V4YW1wbGUDY29tAAABAAE' -v
*   Trying 2001:100:200:300::400:443...
* TCP_NODELAY set
* Connected to eprove.net (2001:100:200:300::400) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /usr/local/share/certs/ca-root-nss.crt
  CApath: none
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use h2
* Server certificate:
*  subject: CN=my.domain
*  start date: Jul 22 00:07:13 2019 GMT
*  expire date: Oct 20 00:07:13 2019 GMT
*  subjectAltName: host "my.domain" matched cert's "my.domain"
*  issuer: C=US; O=Let's Encrypt; CN=Let's Encrypt Authority X3
*  SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x801441000)
> GET /dns-query?dns=q80BAAABAAAAAAAAB2V4YW1wbGUDY29tAAABAAE HTTP/2
> Host: eprove.net
> User-Agent: curl/7.65.3
> accept: application/dns-message
>
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* Connection state changed (MAX_CONCURRENT_STREAMS == 100)!
< HTTP/2 200
< server: h2o/2.3.0-beta2
< content-type: application/dns-message
< cache-control: max-age=86274
< date: Thu, 12 Sep 2019 13:07:25 GMT
< strict-transport-security: max-age=15768000; includeSubDomains; preload
< content-length: 45
<
Warning: Binary output can mess up your terminal. Use "--output -" to tell
Warning: curl to output it to your terminal anyway, or consider "--output
Warning: <FILE>" to save to a file.
* Failed writing body (0 != 45)
* stopped the pause stream!
* Connection #0 to host eprove.net left intact

āĻļāĻŋāϰ⧋āύāĻžāĻŽā§‡āϰ āĻĻāĻŋāϕ⧇āĻ“ āĻŽāύ⧋āϝ⧋āĻ— āĻĻāĻŋāύ āĻ•ā§āϝāĻžāĻļ⧇-āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ: āĻ“āϝāĻŧ⧇āĻŦ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻĨ⧇āϕ⧇ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻž. āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ⧇ āϏāĻ°ā§āĻŦā§‹āĻšā§āϚ āĻŦāϝāĻŧāϏ āĻĄāĻŋāĻāύāĻāϏ āϰ⧇āĻ•āĻ°ā§āĻĄā§‡āϰ āϜāĻ¨ā§āϝ TTL āĻŽāĻžāύ āϰāϝāĻŧ⧇āϛ⧇ (āĻ…āĻĨāĻŦāĻž āϤāĻžāĻĻ⧇āϰ āĻāĻ•āϟāĻŋ āϏ⧇āϟ āĻĢ⧇āϰāϤ āĻĻ⧇āĻ“āϝāĻŧāĻž āĻšāϞ⧇ āϏāĻ°ā§āĻŦāύāĻŋāĻŽā§āύ āĻŽāĻžāύ)āĨ¤

āωāĻĒāϰ⧇āϰ āωāĻĒāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋ āĻ•āϰ⧇, āĻāĻ•āϟāĻŋ DoH āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇āϰ āĻ•āĻžāĻ°ā§āϝāĻ•āĻžāϰāĻŋāϤāĻž āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āϧāĻžāĻĒ āύāĻŋāϝāĻŧ⧇ āĻ—āĻ āĻŋāϤāĨ¤

  • āĻāĻ•āϟāĻŋ HTTP āĻ…āύ⧁āϰ⧋āϧ āĻ—ā§āϰāĻšāĻŖ āĻ•āϰ⧁āύ. āϝāĻĻāĻŋ āĻāϟāĻŋ āĻāĻ•āϟāĻŋ GET āĻšāϝāĻŧ āϤāĻžāĻšāϞ⧇ base64URL āĻāύāϕ⧋āĻĄāĻŋāĻ‚ āĻĨ⧇āϕ⧇ āĻĒā§āϝāĻžāϕ⧇āϟāϟāĻŋ āĻĄāĻŋāϕ⧋āĻĄ āĻ•āϰ⧁āύāĨ¤
  • āĻāχ āĻĒā§āϝāĻžāϕ⧇āϟāϟāĻŋ DNS āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ āĻĒāĻžāĻ āĻžāύāĨ¤
  • DNS āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻĨ⧇āϕ⧇ āĻāĻ•āϟāĻŋ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻĒāĻžāύ
  • āĻĒā§āϰāĻžāĻĒā§āϤ āϰ⧇āĻ•āĻ°ā§āĻĄā§‡ āĻ¨ā§āϝ⧂āύāϤāĻŽ TTL āĻŽāĻžāύ āϖ⧁āρāϜ⧁āύāĨ¤
  • HTTP āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āĻŸā§‡āϰ āĻ•āĻžāϛ⧇ āĻāĻ•āϟāĻŋ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻĢ⧇āϰāϤ āĻĻāĻŋāύāĨ¤

3. āφāĻĒāύāĻžāϰ āύāĻŋāϜāĻ¸ā§āĻŦ DNS-āĻ“āĻ­āĻžāϰ-HTTPS āϏāĻžāĻ°ā§āĻ­āĻžāϰ

āφāĻĒāύāĻžāϰ āύāĻŋāĻœā§‡āϰ DNS-āĻ“āĻ­āĻžāϰ-HTTPS āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϚāĻžāϞāĻžāύ⧋āϰ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϏāĻšāϜ, āĻĻā§āϰ⧁āϤ āĻāĻŦāĻ‚ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻ•āĻžāĻ°ā§āϝāĻ•āϰ āωāĻĒāĻžāϝāĻŧ āĻšāϞ āĻāĻ•āϟāĻŋ HTTP/2 āĻ“āϝāĻŧ⧇āĻŦ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž H2O, āϝāĻž āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āϞ⧇āĻ–āĻ• āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇ āϏāĻ‚āĻ•ā§āώāĻŋāĻĒā§āϤāĻ­āĻžāĻŦ⧇ āϞāĻŋāϖ⧇āϛ⧇āύ (āĻĻ⧇āϖ⧁āύ "āωāĻšā§āϚ āĻ•āĻ°ā§āĻŽāĻ•ā§āώāĻŽāϤāĻž H2O āĻ“āϝāĻŧ⧇āĻŦ āϏāĻžāĻ°ā§āĻ­āĻžāϰÂĢ)āĨ¤

āĻāχ āĻĒāĻ›āĻ¨ā§āĻĻāϟāĻŋ āĻāχ āϏāĻ¤ā§āϝ āĻĻā§āĻŦāĻžāϰāĻž āϏāĻŽāĻ°ā§āĻĨāĻŋāϤ āϝ⧇ āφāĻĒāύāĻžāϰ āύāĻŋāĻœā§‡āϰ DoH āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇āϰ āϏāĻŽāĻ¸ā§āϤ āϕ⧋āĻĄ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖāϰ⧂āĻĒ⧇ H2O-āϤ⧇ āϏāĻ‚āĻšāϤ āχāĻ¨ā§āϟāĻžāϰāĻĒā§āϰ⧇āϟāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ mruby. āĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ āĻ›āĻžāĻĄāĻŧāĻžāĻ“, DNS āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇āϰ āϏāĻžāĻĨ⧇ āĻĄā§‡āϟāĻž āφāĻĻāĻžāύ-āĻĒā§āϰāĻĻāĻžāύ⧇āϰ āϜāĻ¨ā§āϝ, āφāĻĒāύāĻžāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ (mrbgem) āϏāϕ⧇āϟ āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ, āϝāĻž āϏ⧌āĻ­āĻžāĻ—ā§āϝāĻŦāĻļāϤ, H2O 2.3.0-beta2-āĻāϰ āĻŦāĻ°ā§āϤāĻŽāĻžāύ āĻŦāĻŋāĻ•āĻžāĻļ āϏāĻ‚āĻ¸ā§āĻ•āϰāϪ⧇ āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇āχ āĻ…āĻ¨ā§āϤāĻ°ā§āϭ⧁āĻ•ā§āϤ āϰāϝāĻŧ⧇āϛ⧇āĨ¤ āĻŦāĻ°ā§āϤāĻŽāĻžāύ FreeBSD āĻĒā§‹āĻ°ā§āĻŸā§‡āĨ¤ āϤāĻŦ⧇ āϰāĻŋāĻĒā§‹āϜāĻŋāϟāϰāĻŋ āĻ•ā§āϞ⧋āύ āĻ•āϰ⧇ āφāϗ⧇āϰ āϝ⧇āϕ⧋āύ⧋ āϏāĻ‚āĻ¸ā§āĻ•āϰāϪ⧇ āϝ⧋āĻ— āĻ•āϰāĻž āĻ•āĻ āĻŋāύ āύāϝāĻŧ āϏāϕ⧇āϟ āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ āĻ•ā§āϝāĻžāϟāĻžāϞāĻ— āĻĨ⧇āϕ⧇ /deps āϏāĻ‚āĻ•āϞāύ⧇āϰ āφāϗ⧇āĨ¤

root@beta:~ # uname -v
FreeBSD 12.0-RELEASE-p10 GENERIC
root@beta:~ # cd /usr/ports/www/h2o
root@beta:/usr/ports/www/h2o # make extract
===>  License MIT BSD2CLAUSE accepted by the user
===>   h2o-2.2.6 depends on file: /usr/local/sbin/pkg - found
===> Fetching all distfiles required by h2o-2.2.6 for building
===>  Extracting for h2o-2.2.6.
=> SHA256 Checksum OK for h2o-h2o-v2.2.6_GH0.tar.gz.
===>   h2o-2.2.6 depends on file: /usr/local/bin/ruby26 - found
root@beta:/usr/ports/www/h2o # cd work/h2o-2.2.6/deps/
root@beta:/usr/ports/www/h2o/work/h2o-2.2.6/deps # git clone https://github.com/iij/mruby-socket.git
КĐģĐžĐŊĐ¸Ņ€ĐžĐ˛Đ°ĐŊиĐĩ в ÂĢmruby-socketÂģâ€Ļ
remote: Enumerating objects: 385, done.
remote: Total 385 (delta 0), reused 0 (delta 0), pack-reused 385
ПоĐģŅƒŅ‡ĐĩĐŊиĐĩ ĐžĐąŅŠĐĩĐēŅ‚ĐžĐ˛: 100% (385/385), 98.02 KiB | 647.00 KiB/s, ĐŗĐžŅ‚ĐžĐ˛Đž.
ОĐŋŅ€ĐĩĐ´ĐĩĐģĐĩĐŊиĐĩ иСĐŧĐĩĐŊĐĩĐŊиК: 100% (208/208), ĐŗĐžŅ‚ĐžĐ˛Đž.
root@beta:/usr/ports/www/h2o/work/h2o-2.2.6/deps # ll
total 181
drwxr-xr-x   9 root  wheel  18 12 Đ°Đ˛Đŗ.  16:09 brotli/
drwxr-xr-x   2 root  wheel   4 12 Đ°Đ˛Đŗ.  16:09 cloexec/
drwxr-xr-x   2 root  wheel   5 12 Đ°Đ˛Đŗ.  16:09 golombset/
drwxr-xr-x   4 root  wheel  35 12 Đ°Đ˛Đŗ.  16:09 klib/
drwxr-xr-x   2 root  wheel   5 12 Đ°Đ˛Đŗ.  16:09 libgkc/
drwxr-xr-x   4 root  wheel  26 12 Đ°Đ˛Đŗ.  16:09 libyrmcds/
drwxr-xr-x  13 root  wheel  32 12 Đ°Đ˛Đŗ.  16:09 mruby/
drwxr-xr-x   5 root  wheel  11 12 Đ°Đ˛Đŗ.  16:09 mruby-digest/
drwxr-xr-x   5 root  wheel  10 12 Đ°Đ˛Đŗ.  16:09 mruby-dir/
drwxr-xr-x   5 root  wheel  10 12 Đ°Đ˛Đŗ.  16:09 mruby-env/
drwxr-xr-x   4 root  wheel   9 12 Đ°Đ˛Đŗ.  16:09 mruby-errno/
drwxr-xr-x   5 root  wheel  14 12 Đ°Đ˛Đŗ.  16:09 mruby-file-stat/
drwxr-xr-x   5 root  wheel  10 12 Đ°Đ˛Đŗ.  16:09 mruby-iijson/
drwxr-xr-x   5 root  wheel  11 12 Đ°Đ˛Đŗ.  16:09 mruby-input-stream/
drwxr-xr-x   6 root  wheel  11 12 Đ°Đ˛Đŗ.  16:09 mruby-io/
drwxr-xr-x   5 root  wheel  10 12 Đ°Đ˛Đŗ.  16:09 mruby-onig-regexp/
drwxr-xr-x   4 root  wheel  10 12 Đ°Đ˛Đŗ.  16:09 mruby-pack/
drwxr-xr-x   5 root  wheel  10 12 Đ°Đ˛Đŗ.  16:09 mruby-require/
drwxr-xr-x   6 root  wheel  10 12 ҁĐĩĐŊŅ‚. 16:10 mruby-socket/
drwxr-xr-x   2 root  wheel   9 12 Đ°Đ˛Đŗ.  16:09 neverbleed/
drwxr-xr-x   2 root  wheel  13 12 Đ°Đ˛Đŗ.  16:09 picohttpparser/
drwxr-xr-x   2 root  wheel   4 12 Đ°Đ˛Đŗ.  16:09 picotest/
drwxr-xr-x   9 root  wheel  16 12 Đ°Đ˛Đŗ.  16:09 picotls/
drwxr-xr-x   4 root  wheel   8 12 Đ°Đ˛Đŗ.  16:09 ssl-conservatory/
drwxr-xr-x   8 root  wheel  18 12 Đ°Đ˛Đŗ.  16:09 yaml/
drwxr-xr-x   2 root  wheel   8 12 Đ°Đ˛Đŗ.  16:09 yoml/
root@beta:/usr/ports/www/h2o/work/h2o-2.2.6/deps # cd ../../..
root@beta:/usr/ports/www/h2o # make install clean
...

āĻ“āϝāĻŧ⧇āĻŦ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āϏāĻžāϧāĻžāϰāĻŖāϤ āĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄāĨ¤

root@beta:/usr/ports/www/h2o #  cd /usr/local/etc/h2o/
root@beta:/usr/local/etc/h2o # cat h2o.conf
# this sample config gives you a feel for how h2o can be used
# and a high-security configuration for TLS and HTTP headers
# see https://h2o.examp1e.net/ for detailed documentation
# and h2o --help for command-line options and settings

# v.20180207 (c)2018 by Max Kostikov http://kostikov.co e-mail: max@kostikov.co

user: www
pid-file: /var/run/h2o.pid
access-log:
    path: /var/log/h2o/h2o-access.log
    format: "%h %v %l %u %t "%r" %s %b "%{Referer}i" "%{User-agent}i""
error-log: /var/log/h2o/h2o-error.log

expires: off
compress: on
file.dirlisting: off
file.send-compressed: on

file.index: [ 'index.html', 'index.php' ]

listen:
    port: 80
listen:
    port: 443
    ssl:
        cipher-suite: ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
        cipher-preference: server
        dh-file: /etc/ssl/dhparams.pem
        certificate-file: /usr/local/etc/letsencrypt/live/eprove.net/fullchain.pem
        key-file: /usr/local/etc/letsencrypt/live/my.domain/privkey.pem

hosts:
    "*.my.domain":
        paths: &go_tls
            "/":
                redirect:
                    status: 301
                    url: https://my.domain/
    "my.domain:80":
        paths: *go_tls
    "my.domain:443":
        header.add: "Strict-Transport-Security: max-age=15768000; includeSubDomains; preload"
        paths:
            "/dns-query":
               mruby.handler-file: /usr/local/etc/h2o/h2odoh.rb

āĻāĻ•āĻŽāĻžāĻ¤ā§āϰ āĻŦā§āϝāϤāĻŋāĻ•ā§āϰāĻŽ āĻšāϞ URL āĻšā§āϝāĻžāĻ¨ā§āĻĄāϞāĻžāϰ /dns-query āϝāĻžāϰ āϜāĻ¨ā§āϝ āφāĻŽāĻžāĻĻ⧇āϰ āĻĄāĻŋāĻāύāĻāϏ-āĻ“āĻ­āĻžāϰ-āĻāχāϚāϟāĻŋāϟāĻŋāĻĒāĻŋāĻāϏ āϏāĻžāĻ°ā§āĻ­āĻžāϰ, āĻŽā§āϰ⧁āĻŦāĻŋāϤ⧇ āϞ⧇āĻ–āĻž āĻāĻŦāĻ‚ āĻšā§āϝāĻžāĻ¨ā§āĻĄāϞāĻžāϰ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻŦāϞāĻž āĻšāϝāĻŧ⧇āϛ⧇, āφāϏāϞ⧇ āĻĻāĻžāϝāĻŧā§€ mruby.handler-file.

root@beta:/usr/local/etc/h2o # cat h2odoh.rb
# H2O HTTP/2 web server as DNS-over-HTTP service
# v.20190908 (c)2018-2019 Max Kostikov https://kostikov.co e-mail: max@kostikov.co

proc {|env|
    if env['HTTP_ACCEPT'] == "application/dns-message"
        case env['REQUEST_METHOD']
            when "GET"
                req = env['QUERY_STRING'].gsub(/^dns=/,'')
                # base64URL decode
                req = req.tr("-_", "+/")
                if !req.end_with?("=") && req.length % 4 != 0
                    req = req.ljust((req.length + 3) & ~3, "=")
                end
                req = req.unpack1("m")
            when "POST"
                req = env['rack.input'].read
            else
                req = ""
        end
        if req.empty?
            [400, { 'content-type' => 'text/plain' }, [ "Bad Request" ]]
        else
            # --- ask DNS server
            sock = UDPSocket.new
            sock.connect("localhost", 53)
            sock.send(req, 0)
            str = sock.recv(4096)
            sock.close
            # --- find lowest TTL in response
            nans = str[6, 2].unpack1('n') # number of answers
            if nans > 0 # no DNS failure
                shift = 12
                ttl = 0
                while nans > 0
                    # process domain name compression
                    if str[shift].unpack1("C") < 192
                        shift = str.index("x00", shift) + 5
                        if ttl == 0 # skip question section
                            next
                        end
                    end
                    shift += 6
                    curttl = str[shift, 4].unpack1('N')
                    shift += str[shift + 4, 2].unpack1('n') + 6 # responce data size
                    if ttl == 0 or ttl > curttl
                        ttl = curttl
                    end
                    nans -= 1
                 end
                 cc = 'max-age=' + ttl.to_s
            else
                 cc = 'no-cache'
            end
            [200, { 'content-type' => 'application/dns-message', 'content-length' => str.size, 'cache-control' => cc }, [ str ] ]
        end
    else
        [415, { 'content-type' => 'text/plain' }, [ "Unsupported Media Type" ]]
    end
}

āĻĻāϝāĻŧāĻž āĻ•āϰ⧇ āĻŽāύ⧇ āϰāĻžāĻ–āĻŦ⧇āύ āϝ⧇ āĻ¸ā§āĻĨāĻžāύ⧀āϝāĻŧ āĻ•ā§āϝāĻžāĻļāĻŋāĻ‚ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻāχ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ DNS āĻĒā§āϝāĻžāϕ⧇āϟ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻžāĻ•āϰāϪ⧇āϰ āϜāĻ¨ā§āϝ āĻĻāĻžāϝāĻŧā§€ āĻļāĻŋāĻĨāĻŋāϞ āĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āĻĢā§āϰāĻŋāĻŦāĻŋāĻāϏāĻĄāĻŋ āĻĄāĻŋāĻ¸ā§āĻŸā§āϰāĻŋāĻŦāĻŋāωāĻļāύ āĻĨ⧇āϕ⧇āĨ¤ āύāĻŋāϰāĻžāĻĒāĻ¤ā§āϤāĻžāϰ āĻĻ⧃āĻˇā§āϟāĻŋāϕ⧋āĻŖ āĻĨ⧇āϕ⧇, āĻāϟāĻŋ āϏāĻ°ā§āĻŦā§‹āĻ¤ā§āϤāĻŽ āϏāĻŽāĻžāϧāĻžāύāĨ¤ āϝāĻžāχāĻšā§‹āĻ•, āĻ•āĻŋāϛ⧁āχ āφāĻĒāύāĻžāϕ⧇ āĻĒā§āϰāϤāĻŋāĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāϤ⧇ āĻŦāĻžāϧāĻž āĻĻ⧇āϝāĻŧ āύāĻž āĻ¸ā§āĻĨāĻžāύ⧀āϝāĻŧ āĻšā§‹āĻ¸ā§āϟ āĻāĻ•āϟāĻŋ āĻ­āĻŋāĻ¨ā§āύ DNS āĻ āĻŋāĻ•āĻžāύāĻž āϝāĻž āφāĻĒāύāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āϚāĻžāύāĨ¤

root@beta:/usr/local/etc/h2o # local-unbound verison
usage:  local-unbound [options]
        start unbound daemon DNS resolver.
-h      this help
-c file config file to read instead of /var/unbound/unbound.conf
        file format is described in unbound.conf(5).
-d      do not fork into the background.
-p      do not create a pidfile.
-v      verbose (more times to increase verbosity)
Version 1.8.1
linked libs: mini-event internal (it uses select), OpenSSL 1.1.1a-freebsd  20 Nov 2018
linked modules: dns64 respip validator iterator
BSD licensed, see LICENSE in source package for details.
Report bugs to unbound-bugs@nlnetlabs.nl
root@eprove:/usr/local/etc/h2o # sockstat -46 | grep unbound
unbound  local-unbo 69749 3  udp6   ::1:53                *:*
unbound  local-unbo 69749 4  tcp6   ::1:53                *:*
unbound  local-unbo 69749 5  udp4   127.0.0.1:53          *:*
unbound  local-unbo 69749 6  tcp4   127.0.0.1:53          *:*

āϝāĻž āĻŦāĻžāĻ•āĻŋ āĻĨāĻžāϕ⧇ āϤāĻž āĻšāϞ H2O āĻĒ⧁āύāϰāĻžāϝāĻŧ āϚāĻžāϞ⧁ āĻ•āϰāĻž āĻāĻŦāĻ‚ āĻāϰ āĻĨ⧇āϕ⧇ āϕ⧀ āφāϏ⧇ āϤāĻž āĻĻ⧇āϖ⧁āύāĨ¤

root@beta:/usr/local/etc/h2o # service h2o restart
Stopping h2o.
Waiting for PIDS: 69871.
Starting h2o.
start_server (pid:70532) starting now...

4. āĻĒāϰ⧀āĻ•ā§āώāĻž

āϏ⧁āϤāϰāĻžāĻ‚, āφāϏ⧁āύ āφāĻŦāĻžāϰ āĻāĻ•āϟāĻŋ āĻĒāϰ⧀āĻ•ā§āώāĻžāϰ āĻ…āύ⧁āϰ⧋āϧ āĻĒāĻžāĻ āĻŋāϝāĻŧ⧇ āĻāĻŦāĻ‚ āχāωāϟāĻŋāϞāĻŋāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āύ⧇āϟāĻ“āϝāĻŧāĻžāĻ°ā§āĻ• āĻŸā§āĻ°ā§āϝāĻžāĻĢāĻŋāĻ• āĻĻ⧇āϖ⧇ āĻĢāϞāĻžāĻĢāϞāϗ⧁āϞāĻŋ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāĻŋ tcpdump.

root@beta/usr/local/etc/h2o # curl -H 'accept: application/dns-message' 'https://my.domain/dns-query?dns=q80BAAABAAAAAAAAB2V4YW1wbGUDY29tAAABAAE'
Warning: Binary output can mess up your terminal. Use "--output -" to tell
Warning: curl to output it to your terminal anyway, or consider "--output
Warning: <FILE>" to save to a file.
...
root@beta:~ # tcpdump -n -i lo0 udp port 53 -xx -XX -vv
tcpdump: listening on lo0, link-type NULL (BSD loopback), capture size 262144 bytes
16:32:40.420831 IP (tos 0x0, ttl 64, id 37575, offset 0, flags [none], proto UDP (17), length 57, bad cksum 0 (->e9ea)!)
    127.0.0.1.21070 > 127.0.0.1.53: [bad udp cksum 0xfe38 -> 0x33e3!] 43981+ A? example.com. (29)
        0x0000:  0200 0000 4500 0039 92c7 0000 4011 0000  ....E..9....@...
        0x0010:  7f00 0001 7f00 0001 524e 0035 0025 fe38  ........RN.5.%.8
        0x0020:  abcd 0100 0001 0000 0000 0000 0765 7861  .............exa
        0x0030:  6d70 6c65 0363 6f6d 0000 0100 01         mple.com.....
16:32:40.796507 IP (tos 0x0, ttl 64, id 37590, offset 0, flags [none], proto UDP (17), length 73, bad cksum 0 (->e9cb)!)
    127.0.0.1.53 > 127.0.0.1.21070: [bad udp cksum 0xfe48 -> 0x43fa!] 43981 q: A? example.com. 1/0/0 example.com. A 93.184.216.34 (45)
        0x0000:  0200 0000 4500 0049 92d6 0000 4011 0000  ....E..I....@...
        0x0010:  7f00 0001 7f00 0001 0035 524e 0035 fe48  .........5RN.5.H
        0x0020:  abcd 8180 0001 0001 0000 0000 0765 7861  .............exa
        0x0030:  6d70 6c65 0363 6f6d 0000 0100 01c0 0c00  mple.com........
        0x0040:  0100 0100 0151 8000 045d b8d8 22         .....Q...].."
^C
2 packets captured
23 packets received by filter
0 packets dropped by kernel

āφāωāϟāĻĒ⧁āϟ āĻĻ⧇āĻ–āĻžāϝāĻŧ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻ…āύ⧁āϰ⧋āϧ āĻ āĻŋāĻ•āĻžāύāĻž āϏāĻŽāĻžāϧāĻžāύ āĻ•āϰāϤ⧇ example.com DNS āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻĻā§āĻŦāĻžāϰāĻž āĻĒā§āϰāĻžāĻĒā§āϤ āĻāĻŦāĻ‚ āϏāĻĢāϞāĻ­āĻžāĻŦ⧇ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇āĨ¤

āĻāĻ–āύ āϝāĻž āĻŦāĻžāĻ•āĻŋ āφāϛ⧇ āϤāĻž āĻšāϞ Firefox āĻŦā§āϰāĻžāωāϜāĻžāϰ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϏāĻ•ā§āϰāĻŋāϝāĻŧ āĻ•āϰāĻžāĨ¤ āĻāϟāĻŋ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ, āφāĻĒāύāĻžāϕ⧇ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻĒ⧃āĻˇā§āĻ āĻžāϗ⧁āϞāĻŋāϤ⧇ āĻŦ⧇āĻļ āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ āϏ⧇āϟāĻŋāĻ‚āϏ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇: āĻ•āύāĻĢāĻŋāĻ—.

āφāĻŽāϰāĻž āφāĻŽāĻžāĻĻ⧇āϰ DNS-āĻ“āĻ­āĻžāϰ-HTTPS āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻŦāĻžāĻĄāĻŧāĻžāχ

āĻĒā§āϰāĻĨāĻŽāϤ, āĻāϟāĻŋ āφāĻŽāĻžāĻĻ⧇āϰ API āĻāϰ āĻ āĻŋāĻ•āĻžāύāĻž āϝ⧇āĻ–āĻžāύ⧇ āĻŦā§āϰāĻžāωāϜāĻžāϰ DNS āϤāĻĨā§āϝ⧇āϰ āϜāĻ¨ā§āϝ āĻ…āύ⧁āϰ⧋āϧ āĻ•āϰāĻŦ⧇ network.trr.uri. DNS āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āύāĻž āĻ•āϰ⧇ āĻŦā§āϰāĻžāωāϜāĻžāϰ āύāĻŋāĻœā§‡āχ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āύāĻŋāϰāĻžāĻĒāĻĻ IP āϰ⧇āĻœā§‹āϞāĻŋāωāĻļāύ⧇āϰ āϜāĻ¨ā§āϝ āĻāχ URL āĻĨ⧇āϕ⧇ āĻĄā§‹āĻŽā§‡āύ āφāχāĻĒāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āϰāĻžāϰ āϏ⧁āĻĒāĻžāϰāĻŋāĻļ āĻ•āϰāĻž āĻšāϝāĻŧ network.trr.bootstrapAddress. āĻāĻŦāĻ‚ āĻ…āĻŦāĻļ⧇āώ⧇, āĻĒāϰāĻžāĻŽāĻŋāϤāĻŋ āύāĻŋāĻœā§‡āχ network.trr.mode DoH āĻŦā§āϝāĻŦāĻšāĻžāϰ āϏāĻšāĨ¤ "3" āϤ⧇ āĻŽāĻžāύ āϏ⧇āϟ āĻ•āϰāĻž āĻŦā§āϰāĻžāωāϜāĻžāϰāϟāĻŋāϕ⧇ āύāĻžāĻŽā§‡āϰ āϰ⧇āĻœā§‹āϞāĻŋāωāĻļāύ⧇āϰ āϜāĻ¨ā§āϝ āĻāĻ•āĻšā§‡āϟāĻŋāϝāĻŧāĻžāĻ­āĻžāĻŦ⧇ DNS-āĻ“āĻ­āĻžāϰ-HTTPS āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻŦāĻžāĻ§ā§āϝ āĻ•āϰāĻŦ⧇, āϝāĻ–āύ āφāϰāĻ“ āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻāĻŦāĻ‚ āϏ⧁āϰāĻ•ā§āώāĻŋāϤ "2" DoH-āϕ⧇ āĻ…āĻ—ā§āϰāĻžāϧāĻŋāĻ•āĻžāϰ āĻĻ⧇āĻŦ⧇, āĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ DNS āϞ⧁āĻ•āφāĻĒāϟāĻŋāϕ⧇ āĻĢāϞāĻŦā§āϝāĻžāĻ• āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ āĻšāĻŋāϏāĻžāĻŦ⧇ āϛ⧇āĻĄāĻŧ⧇ āĻĻ⧇āĻŦ⧇āĨ¤

5. āϞāĻžāĻ­!

āύāĻŋāĻŦāĻ¨ā§āϧāϟāĻŋ āϏāĻšāĻžāϝāĻŧāĻ• āĻ›āĻŋāϞ? āϤāĻžāĻšāϞ⧇ āĻ…āύ⧁āĻ—ā§āϰāĻš āĻ•āϰ⧇ āϞāĻžāϜ⧁āĻ• āĻšāĻŦ⧇āύ āύāĻž āĻāĻŦāĻ‚ āĻ…āύ⧁āĻĻāĻžāύ āĻĢāĻ°ā§āĻŽā§‡āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻ…āĻ°ā§āĻĨ āĻĻāĻŋāϝāĻŧ⧇ āϏāĻšāĻžāϝāĻŧāϤāĻž āĻ•āϰ⧁āύ (āύ⧀āĻšā§‡)āĨ¤

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

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