āĻĄāĻŋāĻāύāĻāϏ āĻ āĻĒāĻžāϰā§āĻļāύā§āϰ āĻŦāĻŋāĻāĻŋāύā§āύ āĻĻāĻŋāĻ āĻāϤāĻŋāĻŽāϧā§āϝā§āĻ āϞā§āĻāĻ āĻĻā§āĻŦāĻžāϰāĻž āĻŦāĻžāϰāĻŦāĻžāϰ āϏā§āĻĒāϰā§āĻļ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§ āĻŦā§āϞāĻā§āϰ āĻ āĻāĻļ āĻšāĻŋāϏāĻžāĻŦā§ āĻĒā§āϰāĻāĻžāĻļāĻŋāϤāĨ¤ āĻāĻāĻ āϏāĻžāĻĨā§, āĻāĻ āĻŽā§āϞ āĻāύā§āĻāĻžāϰāύā§āĻ āĻĒāϰāĻŋāώā§āĻŦāĻžāĻāĻŋāϰ āϏā§āϰāĻā§āώāĻž āĻāύā§āύāϤ āĻāϰāĻžāϰ āĻāĻĒāϰ āϏāϰā§āĻŦāĻĻāĻžāĻ āĻŽā§āϞ āĻā§āϰ āĻĻā§āĻāϝāĻŧāĻž āĻšāϝāĻŧā§āĻā§āĨ¤

āϏāĻŽā§āĻĒā§āϰāϤāĻŋ āĻ āĻŦāϧāĻŋ, āĻĄāĻŋāĻāύāĻāϏ āĻā§āϰā§āϝāĻžāĻĢāĻŋāĻā§āϰ āϏā§āϏā§āĻĒāώā§āĻ āĻĻā§āϰā§āĻŦāϞāϤāĻž āĻĨāĻžāĻāĻž āϏāϤā§āϤā§āĻŦā§āĻ, āϝāĻž āĻāĻāύāĻ, āĻŦā§āĻļāĻŋāϰāĻāĻžāĻ āĻ āĻāĻļā§, āĻŦāĻŋāώāϝāĻŧāĻŦāϏā§āϤā§, āϏāϰāĻāĻžāϰāĻŋ āύāĻŋāϰāĻžāĻĒāϤā§āϤāĻž āϏāĻāϏā§āĻĨāĻž āĻāĻŦāĻ āϏā§āύā§āϏāϰāĻļāĻŋāĻĒā§ āĻŦāĻŋāĻā§āĻāĻžāĻĒāύ āĻāĻŽā§āĻŦā§āĻĄ āĻāϰ⧠āϤāĻžāĻĻā§āϰ āĻāϝāĻŧ āĻŦāĻžāĻĄāĻŧāĻžāϤ⧠āĻāĻžāĻāϝāĻŧāĻž āĻĒā§āϰāĻĻāĻžāύāĻāĻžāϰā§āĻĻā§āϰ āĻĒāĻā§āώ āĻĨā§āĻā§ āĻĻā§āώāĻŋāϤ āĻā§āϰāĻŋāϝāĻŧāĻžāĻāϞāĻžāĻĒā§āϰ āĻāύā§āϝ āϏā§āĻĒāώā§āĻāĻāĻžāĻŦā§ āĻĒā§āϰā§āϰāĻŖ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§, āϏā§āĻāϏāĻžāĻĨā§ āϏāĻšāĻāĻāĻžāĻŦā§ āĻ āĻĒāϰāĻžāϧā§, āĻĒā§āϰāĻā§āϰāĻŋāϝāĻŧāĻž , DNSSEC/DANE, DNScrypt, DNS-over-TLS āĻāĻŦāĻ DNS-over-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 āĻĒā§āϰā§āĻā§āĻāϞ
āĻŽāĻžāύāĻĻāύā§āĻĄ āĻĻā§āĻāϞ⧠āĻĄāĻŋāĻāύāĻāϏ-āĻāĻāĻžāϰ-āĻāĻāĻāĻāĻŋāĻāĻŋāĻĒāĻŋāĻāϏ āĻĒā§āϰā§āĻā§āĻāϞā§āϰ āĻŦāϰā§āĻŖāύāĻž āĻĻāĻŋāϝāĻŧā§, āĻāĻĒāύāĻŋ āĻĻā§āĻāϤ⧠āĻĒāĻžāĻā§āĻā§āύ āϝ⧠āĻāĻāĻŋ āĻāϏāϞ⧠āĻāĻāĻāĻŋ āĻāϝāĻŧā§āĻŦ API āϝāĻž āĻāĻĒāύāĻžāĻā§ HTTP/2 āĻĒā§āϰā§āĻā§āĻāϞ⧠āĻāĻāĻāĻŋ āϏā§āĻā§āϝāĻžāύā§āĻĄāĻžāϰā§āĻĄ āĻĄāĻŋāĻāύāĻāϏ āĻĒā§āϝāĻžāĻā§āĻ āĻāύāĻā§āϝāĻžāĻĒāϏā§āϞā§āĻ āĻāϰāϤ⧠āĻĻā§āϝāĻŧāĨ¤ āĻāĻāĻŋ āĻŦāĻŋāĻļā§āώ HTTP āĻļāĻŋāϰā§āύāĻžāĻŽā§āϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻĒā§āϰāϝāĻŧā§āĻ āĻāϰāĻž āĻšāϝāĻŧ, āϏā§āĻāϏāĻžāĻĨā§ āĻĒā§āϰā§āϰāĻŖ āĻāϰāĻž DNS āĻĄā§āĻāĻžāϰ āĻŦāĻžāĻāύāĻžāϰāĻŋ āĻŦāĻŋāύā§āϝāĻžāϏā§āϰ āϰā§āĻĒāĻžāύā§āϤāϰ (āĻĻā§āĻā§āύāĨ¤ āĻāĻŦāĻ āĻĒāϰāĻŦāϰā§āϤ⧠āύāĻĨāĻŋ) āĻāĻāĻāĻŋ āĻĢāϰā§āĻŽā§āϰ āĻŽāϧā§āϝ⧠āϝāĻž āĻāĻĒāύāĻžāĻā§ āϏā§āĻā§āϞāĻŋ āĻĒā§āϰā§āϰāĻŖ āĻāĻŦāĻ āĻā§āϰāĻšāĻŖ āĻāϰāĻžāϰ āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ āĻĒā§āϰāϝāĻŧā§āĻāύā§āϝāĻŧ āĻŽā§āĻāĻžāĻĄā§āĻāĻž āύāĻŋāϝāĻŧā§ āĻāĻžāĻ āĻāϰāϤ⧠āĻĻā§āϝāĻŧāĨ¤
āĻŽāĻžāύ āĻ āύā§āϝāĻžāϝāĻŧā§, āĻļā§āϧā§āĻŽāĻžāϤā§āϰ 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 āĻāϝāĻŧā§āĻŦ āϏāĻžāϰā§āĻāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž , āϝāĻž āϏāĻŽā§āĻĒāϰā§āĻā§ āϞā§āĻāĻ āĻāϤāĻŋāĻŽāϧā§āϝ⧠āϏāĻāĻā§āώāĻŋāĻĒā§āϤāĻāĻžāĻŦā§ āϞāĻŋāĻā§āĻā§āύ (āĻĻā§āĻā§āύ "ÂĢ)āĨ¤
āĻāĻ āĻĒāĻāύā§āĻĻāĻāĻŋ āĻāĻ āϏāϤā§āϝ āĻĻā§āĻŦāĻžāϰāĻž āϏāĻŽāϰā§āĻĨāĻŋāϤ āϝ⧠āĻāĻĒāύāĻžāϰ āύāĻŋāĻā§āϰ DoH āϏāĻžāϰā§āĻāĻžāϰā§āϰ āϏāĻŽāϏā§āϤ āĻā§āĻĄ āϏāĻŽā§āĻĒā§āϰā§āĻŖāϰā§āĻĒā§ H2O-āϤ⧠āϏāĻāĻšāϤ āĻāύā§āĻāĻžāϰāĻĒā§āϰā§āĻāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻĒā§āϰāϝāĻŧā§āĻ āĻāϰāĻž āϝā§āϤ⧠āĻĒāĻžāϰā§āĨ¤ . āϏā§āĻā§āϝāĻžāύā§āĻĄāĻžāϰā§āĻĄ āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋ āĻāĻžāĻĄāĻŧāĻžāĻ, 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 āĻŦā§āϰāĻžāĻāĻāĻžāϰ⧠āĻāĻŽāĻžāĻĻā§āϰ āϏāĻžāϰā§āĻāĻžāϰ āϏāĻā§āϰāĻŋāϝāĻŧ āĻāϰāĻžāĨ¤ āĻāĻāĻŋ āĻāϰāĻžāϰ āĻāύā§āϝ, āĻāĻĒāύāĻžāĻā§ āĻāύāĻĢāĻŋāĻāĻžāϰā§āĻļāύ āĻĒā§āώā§āĻ āĻžāĻā§āϞāĻŋāϤ⧠āĻŦā§āĻļ āĻāϝāĻŧā§āĻāĻāĻŋ āϏā§āĻāĻŋāĻāϏ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāϤ⧠āĻšāĻŦā§ āϏāĻŽā§āĻĒāϰā§āĻā§: āĻāύāĻĢāĻŋāĻ.

āĻĒā§āϰāĻĨāĻŽāϤ, āĻāĻāĻŋ āĻāĻŽāĻžāĻĻā§āϰ 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
