āĻ†āĻŽāĻ°āĻž āĻ†āĻŽāĻžāĻĻā§‡āĻ° 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: [email protected]

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: [email protected]

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 [email protected]
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

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨