ืžื™ืจ ื›ืึทืคึผืŸ ืื•ื ื“ื–ืขืจ ื“ื ืก-ืื™ื‘ืขืจ-ื”ื˜ื˜ืคึผืก ืกืขืจื•ื•ืขืจ

ืคืืจืฉื™ื™ื“ืขื ืข ืึทืกืคึผืขืงืฅ ืคื•ืŸ ื“ื ืก ืึธืคึผืขืจืึทืฆื™ืข ื”ืึธื‘ืŸ ืฉื•ื™ืŸ ืจื™ืคึผื™ื˜ื™ื“ืœื™ ื’ืขืจื™ืจื˜ ื“ื•ืจืš ื“ืขืจ ืžื—ื‘ืจ ืื™ืŸ ืึท ื ื•ืžืขืจ ืคื•ืŸ ืืจื˜ื™ืงืœืขืŸ ืืจื•ื™ืก ื•ื•ื™ ืึท ื˜ื™ื™ืœ ืคื•ืŸ ื“ืขื ื‘ืœืึธื’. ืื™ืŸ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืฆื™ื™ื˜, ื“ืขืจ ื”ื•ื™ืคึผื˜ ื˜ืจืึธืคึผ ืื™ื– ืฉื˜ืขื ื“ื™ืง ื’ืขื•ื•ืขืŸ ืื•ื™ืฃ ื™ืžืคึผืจื•ื•ื•ื™ื ื’ ื“ื™ ื–ื™ื›ืขืจื”ื™ื™ื˜ ืคื•ืŸ ื“ืขื ืฉืœื™ืกืœ ืื™ื ื˜ืขืจื ืขื˜ ื“ื™ื ืกื˜.

ืžื™ืจ ื›ืึทืคึผืŸ ืื•ื ื“ื–ืขืจ ื“ื ืก-ืื™ื‘ืขืจ-ื”ื˜ื˜ืคึผืก ืกืขืจื•ื•ืขืจ

ื‘ื™ื– ืœืขืฆื˜ื ืก, ื˜ืจืึธืฅ ื“ื™ ืงืœืึธืจ ื•ื•ื™ ื“ืขืจ ื˜ืึธื’ ื•ื•ืึทืœื ืขืจืึทื‘ื™ืœื™ื˜ื™ ืคื•ืŸ DNS ืคืึทืจืงืขืจ, ื•ื•ืึธืก ืื™ื– ื ืึธืš, ืคึฟืึทืจ ื“ื™ ืจื•ื‘ึฟ ื˜ื™ื™ืœ, ื˜ืจืึทื ืกืžื™ื˜ื˜ืขื“ ืื™ืŸ ื“ื™ ืงืœืึธืจ, ืฆื• ื‘ื™ื™ื–ืข ืึทืงืฉืึทื ื– ืคื•ืŸ ื“ื™ ืคึผืจืึทื•ื•ื™ื™ื“ืขืจื– ื•ื•ืึธืก ื–ื•ื›ืŸ ืฆื• ืคืึทืจื’ืจืขืกืขืจืŸ ื–ื™ื™ืขืจ ื”ืึทื›ื ืึธืกืข ื“ื•ืจืš ืขืžื‘ืขื“ื“ื™ื ื’ ื’ืึทื ืฆืข ืื™ืŸ ืื™ื ื”ืึทืœื˜, ืจืขื’ื™ืจื•ื ื’ ื–ื™ื›ืขืจื”ื™ื™ื˜ ื™ื™ื“ื–ืฉืึทื ืกื™ื– ืื•ืŸ ืฆืขื ื–ื•ืจ, ื•ื•ื™ ื•ื•ื•ื™ืœ ื•ื•ื™ ืคืฉื•ื˜ ืงืจื™ืžืึทื ืึทืœื–, ื“ืขืจ ืคึผืจืึธืฆืขืก ืคึฟืึทืจืฉื˜ืึทืจืงื•ื ื’ ื–ื™ื™ึทืŸ ืฉื•ืฅ, ื˜ืจืึธืฅ ื“ืขื ื‘ื™ื™ึทื–ื™ื™ึทืŸ ืคื•ืŸ ืคืึทืจืฉื™ื“ืŸ ื˜ืขืงื ืึทืœืึทื“ื–ืฉื™ื– ืึทื–ืึท ื•ื•ื™ DNSSEC / DANE, DNScrypt, DNS-over-TLS ืื•ืŸ DNS-over-HTTPS, ืกื˜ืึธืœื“. ืื•ืŸ ืื•ื™ื‘ ืกืขืจื•ื•ืขืจ ืกืึทืœื•ืฉืึทื ื–, ืื•ืŸ ืขื˜ืœืขื›ืข ืคื•ืŸ โ€‹โ€‹ื–ื™ื™ ื”ืึธื‘ืŸ ืขืงืกื™ืกื˜ื™ืจื˜ ืคึฟืึทืจ ืึท ืœืึทื ื’ ืฆื™ื™ึทื˜, ื–ืขื ืขืŸ ื•ื•ื™ื™ื“ืœื™ ื‘ืึทื•ื•ื•ืกื˜ ืื•ืŸ ื‘ื ื™ืžืฆื, ื–ื™ื™ืขืจ ืฉื˜ื™ืฆืŸ ืคื•ืŸ ืงืœื™ืขื ื˜ ื•ื•ื™ื™ื›ื•ื•ืืจื’ ืœืึธื–ืŸ ืคื™ืœ ืฆื• ื–ื™ื™ืŸ ื’ืขื•ื•ืืœื˜.

ืฆื•ืž ื’ืœื™ืง, ื“ื™ ืกื™ื˜ื•ืึทืฆื™ืข ืื™ื– ื˜ืฉืึทื ื’ื™ื ื’. ืื™ืŸ ื‘ืึทื–ื•ื ื“ืขืจ, ื“ื™ ื“ืขื•ื•ืขืœืึธืคึผืขืจืก ืคื•ืŸ ื“ื™ ืคืึธืœืงืก Firefox ื‘ืœืขื˜ืขืจืขืจ ืกื˜ื™ื™ื˜ื™ื“ ื•ื•ืขื’ืŸ ืคึผืœืึทื ื– ืฆื• ื’ืขื‘ืŸ ืฉื˜ื™ืฆืŸ ืžืึธื“ืข ื“ื•ืจืš ืคืขืœื™ืงื™ื™ึทื˜ ื“ื ืก-ืื™ื‘ืขืจ-ื”ื˜ื˜ืคึผืก (ื“ืึธื”) ื‘ืึทืœื“. ื“ืึธืก ื–ืึธืœ ื”ืขืœืคึฟืŸ ื‘ืึทืฉื™ืฆืŸ ื“ื™ DNS ืคืึทืจืงืขืจ ืคื•ืŸ ื“ื™ WWW ื‘ืึทื ื™ืฆืขืจ ืคื•ืŸ ื“ื™ ืื•ื™ื‘ืŸ ื˜ืจืขืฅ, ืึธื‘ืขืจ ืงืขืŸ ืคึผืึทื˜ืขื ื˜ืฉืึทืœื™ ื‘ืึทืงืขื ืขืŸ ื ื™ื™ึทืข ืึธื ืขืก.

1. ื“ื ืก-ืื™ื‘ืขืจ-ื”ื˜ื˜ืคึผืก ืคึผืจืึธื‘ืœืขืžืก

ืื™ืŸ ืขืจืฉื˜ืขืจ ื‘ืœื™ืง, ื“ื™ ืึธื ื”ื™ื™ื‘ ืžืึทืกืข ื”ืงื“ืžื” ืคื•ืŸ DNS-over-HTTPS ืื™ืŸ ืื™ื ื˜ืขืจื ืขื˜ ื•ื•ื™ื™ื›ื•ื•ืืจื’ ื– ื‘ืœื•ื™ื– ืึท positive ืึธืคึผืจื•ืฃ. ืึธื‘ืขืจ, ื“ืขืจ ืฉื˜ืŸ, ื•ื•ื™ ื–ื™ื™ ื–ืึธื’ืŸ, ืื™ื– ืื™ืŸ ื“ื™ ืคืจื˜ื™ื.

ื“ืขืจ ืขืจืฉื˜ืขืจ ืคึผืจืึธื‘ืœืขื ื•ื•ืึธืก ืœื™ืžืึทืฅ ื“ื™ ืคืึทืจื ืขื ืคื•ืŸ DoH ืก ื•ื•ื™ื™ื“ืกืคึผืจืขื“ ื ื•ืฆืŸ ืื™ื– ื–ื™ื™ืŸ ืคืึธืงื•ืก ื‘ืœื•ื™ื– ืื•ื™ืฃ ื•ื•ืขื‘ ืคืึทืจืงืขืจ. ื˜ืึทืงืข, ื“ื™ ื”ื˜ื˜ืคึผ ืคึผืจืึธื˜ืึธืงืึธืœ ืื•ืŸ ื–ื™ื™ืŸ ืงืจืึทื ื˜ ื•ื•ืขืจืกื™ืข ื”ื˜ื˜ืคึผ / 2, ืื•ื™ืฃ ื•ื•ืึธืก ื“ืึธื” ืื™ื– ื‘ืื–ื™ืจื˜, ื–ืขื ืขืŸ ื“ื™ ื™ืงืขืจ ืคื•ืŸ ื“ื™ WWW. ืื‘ืขืจ ื“ืขืจ ืื™ื ื˜ืขืจื ืขืฅ ืื™ื– ื ื™ืฉื˜ ื‘ืœื•ื™ื– ื“ื™ ื•ื•ืขื‘. ืขืก ื–ืขื ืขืŸ ืคื™ืœืข ืคืึธืœืงืก ื‘ืึทื“ื™ื ื•ื ื’ืก, ืึทื–ืึท ื•ื•ื™ E- ื‘ืจื™ื•ื•, ืคืึทืจืฉื™ื“ืŸ ืจืขื’ืข ืžืขืกืกืขื ื’ืขืจืก, ื˜ืขืงืข ืึทืจื™ื‘ืขืจืคื™ืจืŸ ืกื™ืกื˜ืขืžืขืŸ, ืžื•ืœื˜ื™ืžืขื“ื™ืึท ืกื˜ืจื™ืžื™ื ื’, ืืื–"ื• ื•, ื•ื•ืึธืก ื˜ืึธืŸ ื ื™ื˜ ื ื•ืฆืŸ ื”ื˜ื˜ืคึผ. ืื–ื•ื™, ื˜ืจืึธืฅ ื“ืขืจ ืžืขืจืงื•ื ื’ ืคื•ืŸ ืคื™ืœืข ืคื•ืŸ โ€‹โ€‹DoH ื•ื•ื™ ืึท ืคึผืึทื ืึทืกื™ืึท, ืขืก ื˜ื•ืจื ืก ืื•ื™ืก ืฆื• ื–ื™ื™ืŸ ื™ื ืึทืคึผืœืึทืงืึทื‘ืึทืœ ืึธืŸ ื ืึธืš (ืื•ืŸ ื•ืžื ื™ื™ื˜ื™ืง) ืžื™ ืคึฟืึทืจ ืขืคึผืขืก ืึทื ื“ืขืจืฉ ื•ื•ื™ ื‘ืœืขื˜ืขืจืขืจ ื˜ืขืงื ืึทืœืึทื“ื–ืฉื™ื–. ื“ื•ืจืš ื“ืขื ื•ื•ืขื’, DNS-over-TLS ืงื•ืงื˜ ื•ื•ื™ ืึท ืคื™ืœ ืžืขืจ ื•ื•ืขืจื˜ ืงืึทื ื“ื™ื“ืึทื˜ ืคึฟืึทืจ ื“ืขื ืจืึธืœืข, ื•ื•ืึธืก ื™ืžืคึผืœืึทืžืึทื ืฅ ื“ื™ ืขื ืงืึทืคึผืกื•ืœืึทื˜ื™ืึธืŸ ืคื•ืŸ ื ืึธืจืžืึทืœ ื“ื ืก ืคืึทืจืงืขืจ ืื™ืŸ ื“ื™ ื–ื™ื›ืขืจ ื ืึธืจืžืึทืœ TLS ืคึผืจืึธื˜ืึธืงืึธืœ.

ื“ื™ ืฆื•ื•ื™ื™ื˜ืข ืคึผืจืึธื‘ืœืขื, ื•ื•ืึธืก ืื™ื– ืคึผืึทื˜ืขื ื˜ืฉืึทืœื™ ืคื™ืœ ืžืขืจ ื‘ืึทื˜ื™ื™ื˜ื™ืง ื•ื•ื™ ื“ืขืจ ืขืจืฉื˜ืขืจ, ืื™ื– ื“ื™ ืคืึทืงื˜ื™ืฉ ืึทื‘ืึทื ื“ืึทื ืžืึทื ื˜ ืคื•ืŸ ื“ื™ ื˜ืึธื›ื™ืง ื“ื™ืกืขื ื˜ืจืึทืœื™ื–ื™ื™ืฉืึทืŸ ืคื•ืŸ ื“ื ืก ื“ื•ืจืš ืคึผืœืึทืŸ ืื™ืŸ ื˜ื•ื™ื•ื•ืข ืคื•ืŸ โ€‹โ€‹ื ื™ืฆืŸ ืึท ืื™ื™ืŸ ื“ืึธื” ืกืขืจื•ื•ืขืจ ืกืคึผืขืกื™ืคื™ืขื“ ืื™ืŸ ื“ื™ ื‘ืœืขื˜ืขืจืขืจ ืกืขื˜ื˜ื™ื ื’ืก. ืื™ืŸ ื‘ืึทื–ื•ื ื“ืขืจ, ืžืึธื–ื™ืœืœืึท ืกืึทื’ื“ื–ืฉืขืกืฅ ื ื™ืฆืŸ ืึท ืกืขืจื•ื•ื™ืก ืคึฟื•ืŸ Cloudflare. ื ืขื ืœืขืš ื“ื™ื ืกื˜ ืื™ื– ืื•ื™ืš ืœืึธื ื˜ืฉื˜ ื“ื•ืจืš ืื ื“ืขืจืข ื‘ืึทื•ื•ื•ืกื˜ ืื™ื ื˜ืขืจื ืขื˜ ืคื™ื’ื™ืขืจื–, ืกืคึผืขืฆื™ืขืœ Google. ืขืก ื˜ื•ืจื ืก ืื•ื™ืก ืึทื– ื“ื™ ื™ืžืคึผืœืึทืžืขื ื˜ื™ื™ืฉืึทืŸ ืคื•ืŸ ื“ื ืก-ืื™ื‘ืขืจ-ื”ื˜ื˜ืคึผืก ืื™ืŸ ื“ื™ ืคืึธืจืขื ืื™ืŸ ื•ื•ืึธืก ืขืก ืื™ื– ื“ืขืจื•ื•ื™ื™ึทืœ ืคืืจื’ืขืœื™ื™ื’ื˜ ื‘ืœื•ื™ื– ื™ื ืงืจื™ืกื™ื– ื“ื™ ืึธืคืขื ื’ื™ืงื™ื™ึทื˜ ืคื•ืŸ ืกื•ืฃ ื ื™ืฆืขืจืก ืื•ื™ืฃ ื“ื™ ื’ืจืขืกื˜ืข ื‘ืึทื“ื™ื ื•ื ื’ืก. ืขืก ืื™ื– ืงื™ื™ืŸ ืกื•ื“ ืึทื– ื“ื™ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ื•ื•ืึธืก ืึทื ืึทืœื™ืกื™ืก ืคื•ืŸ ื“ื ืก ืงื•ื•ื™ืจื™ื– ืงืขื ืขืŸ ืฆื•ืฉื˜ืขืœืŸ ืงืขื ืขืŸ ืงืœื™ื™ึทื‘ืŸ ืืคื™ืœื• ืžืขืจ ื“ืึทื˜ืŸ ื•ื•ืขื’ืŸ ืื™ื, ืื•ืŸ ืคืึทืจื’ืจืขืกืขืจืŸ ื“ื™ ืึทืงื™ืขืจืึทืกื™ ืื•ืŸ ืฉื™ื™ื›ื•ืช.

ืื™ืŸ ื“ืขื ืึทื›ื˜ื•ื ื’, ื“ืขืจ ืžื—ื‘ืจ ืื™ื– ื’ืขื•ื•ืขืŸ ืื•ืŸ ื‘ืœื™ื™ื‘ื˜ ืึท ืกืึทืคึผืึธืจื˜ืขืจ ืคื•ืŸ ื“ื™ ืžืึทืกืข ื™ืžืคึผืœืึทืžืขื ื˜ื™ื™ืฉืึทืŸ ื ื™ื˜ ืคื•ืŸ DNS-over-HTTPS, ืึธื‘ืขืจ ืคื•ืŸ DNS-over-TLS ืฆื•ื–ืึทืžืขืŸ ืžื™ื˜ DNSSEC / DANE ื•ื•ื™ ืึท ื•ื ื™ื•ื•ืขืจืกืึทืœ, ื–ื™ื›ืขืจ ืื•ืŸ ื ื™ื˜ ืงืึทื ื“ื•ืกื™ื•ื• ืฆื• ื•ื•ื™ื™ึทื˜ืขืจ ืกืขื ื˜ืจืึทืœื™ื–ื™ื™ืฉืึทืŸ ืคื•ืŸ ื“ื™ ืื™ื ื˜ืขืจื ืขื˜ ืžื™ื˜ืœ. ืคึฟืึทืจ ื™ื ืฉื•ืจื™ื ื’ ื“ื™ ื–ื™ื›ืขืจื”ื™ื™ื˜ ืคื•ืŸ ื“ื ืก ืคืึทืจืงืขืจ. ืฆื•ื ื‘ืึทื“ื•ื™ืขืจืŸ, ืคึฟืึทืจ ืงืœืึธืจ ื•ื•ื™ ื“ืขืจ ื˜ืึธื’ ืกื™ื‘ื•ืช, ืžืขืŸ ืงืขืŸ ื ื™ืฉื˜ ื“ืขืจื•ื•ืึทืจื˜ืŸ ืึท ื’ื™ืš ื”ืงื“ืžื” ืคื•ืŸ ืžืึทืกืข ืฉื˜ื™ืฆืŸ ืคึฟืึทืจ DoH ืึทืœื˜ืขืจื ืึทื˜ื™ื•ื•ืขืก ืื™ืŸ ืงืœื™ืขื ื˜ ื•ื•ื™ื™ื›ื•ื•ืืจื’, ืื•ืŸ ืขืก ืื™ื– ื ืึธืš ื“ื™ ืคืขืœื“ ืคื•ืŸ ื–ื™ื›ืขืจื”ื™ื™ื˜ ื˜ืขื›ื ืึธืœืึธื’ื™ืข ืขื ื˜ื•ื–ื™ืึทืกืฅ.

ืึธื‘ืขืจ ื–ื™ื ื˜ ืžื™ืจ ืื™ืฆื˜ ื”ืึธื‘ืŸ ื“ืึธื”, ืคืืจื•ื•ืืก ื˜ืึธืŸ ื ื™ื˜ ื ื•ืฆืŸ ืขืก ื ืึธืš ื™ืกืงื™ื™ืคึผื™ื ื’ ืคึผืึธื˜ืขื ืฆื™ืขืœ ืกืขืจื•ื•ื™ื™ืœืึทื ืก ื“ื•ืจืš ืงืึธืจืคึผืขืจื™ื™ืฉืึทื ื– ื“ื•ืจืš ื–ื™ื™ืขืจ ืกืขืจื•ื•ืขืจืก ืฆื• ืื•ื ื“ื–ืขืจ ืื™ื™ื’ืขื ืข ื“ื ืก-ืื™ื‘ืขืจ-ื”ื˜ื˜ืคึผืก ืกืขืจื•ื•ืขืจ?

2. ื“ื ืก-ืื™ื‘ืขืจ-ื”ื˜ื˜ืคึผืก ืคึผืจืึธื˜ืึธืงืึธืœ

ืื•ื™ื‘ ืื™ืจ ืงื•ืง ืื™ืŸ ื“ื™ ื ืึธืจืžืึทืœ RFC8484 ื“ื™ืกืงืจื™ื™ื‘ื™ื ื’ ื“ื™ DNS-over-HTTPS ืคึผืจืึธื˜ืึธืงืึธืœ, ืื™ืจ ืงืขื ืขืŸ ื–ืขืŸ ืึทื– ืขืก ืื™ื–, ืื™ืŸ ืคืึทืงื˜, ืึท ื•ื•ืขื‘ ืึทืคึผื™ ื•ื•ืึธืก ืึทืœืึทื•ื– ืื™ืจ ืฆื• ืขื ืงืึทืคึผืกืึทืœื™ื™ื˜ ืึท ื ืึธืจืžืึทืœ ื“ื ืก ืคึผืขืงืœ ืื™ืŸ ื“ื™ ื”ื˜ื˜ืคึผ / 2 ืคึผืจืึธื˜ืึธืงืึธืœ. ื“ืึธืก ืื™ื– ื™ืžืคึผืœืึทืžืขื ืึทื“ ื“ื•ืจืš ืกืคึผืขืฆื™ืขืœ ื”ื˜ื˜ืคึผ ื›ืขื“ืขืจื–, ื•ื•ื™ ื’ืขื–ื•ื ื˜ ื•ื•ื™ ืงืึทื ื•ื•ืขืจื–ืฉืึทืŸ ืคื•ืŸ ื“ื™ ื‘ื™ื™ื ืขืจื™ ืคึฟืึธืจืžืึทื˜ ืคื•ืŸ ื˜ืจืึทื ืกืžื™ื˜ื˜ืขื“ ื“ื ืก ื“ืึทื˜ืŸ (ื–ืขืŸ. RFC1035 ืื•ืŸ ืกืึทื‘ืกืึทืงื•ื•ืึทื ื˜ ื“ืึธืงื•ืžืขื ื˜ืŸ) ืื™ืŸ ืึท ืคืึธืจืขื ื•ื•ืึธืก ืึทืœืึทื•ื– ืื™ืจ ืฆื• ืึทืจื™ื‘ืขืจืคื™ืจืŸ ืื•ืŸ ื‘ืึทืงื•ืžืขืŸ ื–ื™ื™, ื•ื•ื™ ื’ืขื–ื•ื ื˜ ื•ื•ื™ ืฆื• ืึทืจื‘ืขื˜ืŸ ืžื™ื˜ ื“ื™ ื ื™ื™ื˜ื™ืง ืžืขื˜ืึทื“ืึทื˜ืึท.

ืœื•ื™ื˜ ื“ืขืจ ื ืึธืจืžืึทืœ, ื‘ืœื•ื™ื– ื”ื˜ื˜ืคึผ / 2 ืื•ืŸ ืึท ื–ื™ื›ืขืจ TLS ืคึฟืึทืจื‘ื™ื ื“ื•ื ื’ ื–ืขื ืขืŸ ื’ืขืฉื˜ื™ืฆื˜.

ืฉื™ืงื˜ ืึท ื“ื ืก ื‘ืขื˜ืŸ ืงืขื ืขืŸ ื–ื™ื™ืŸ ื“ื•ืจื›ื’ืขืงืึธื›ื˜ ืžื™ื˜ ื“ื™ ื ืึธืจืžืึทืœ GET ืื•ืŸ POST ืžืขื˜ื”ืึธื“ืก. ืื™ืŸ ื“ืขืจ ืขืจืฉื˜ืขืจ ืคืึทืœ, ื“ื™ ื‘ืขื˜ืŸ ืื™ื– ืคืืจื•ื•ืื ื“ืœืขืŸ ืื™ืŸ ืึท base64URL-ืขื ืงืึธื•ื“ืขื“ ืฉื˜ืจื™ืงืœ, ืื•ืŸ ืื™ืŸ ื“ื™ ืจื’ืข, ื“ื•ืจืš ื“ืขื ื’ื•ืฃ ืคื•ืŸ ื“ื™ POST ื‘ืขื˜ืŸ ืื™ืŸ ื‘ื™ื™ื ืขืจื™ ืคืึธืจืขื. ืื™ืŸ ื“ืขื ืคืึทืœ, ืึท ืกืคึผืขืฆื™ืขืœ 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 ื•ื•ืขืจื˜ ืคึฟืึทืจ ื“ื™ DNS ืจืขืงืึธืจื“ ื•ื•ืึธืก ืื™ื– ืื•ืžื’ืขืงืขืจื˜ (ืึธื“ืขืจ ื“ื™ ืžื™ื ื™ืžื•ื ื•ื•ืขืจื˜ ืื•ื™ื‘ ืึท ืกื›ื•ื ืคื•ืŸ ื–ื™ื™ ืื™ื– ืื•ืžื’ืขืงืขืจื˜).

ื‘ืึทื–ื™ืจื˜ ืื•ื™ืฃ ื“ื™ ืื•ื™ื‘ืŸ, ื“ื™ ืคืึทื ื’ืงืฉืึทื ื™ื ื’ ืคื•ืŸ ืึท ื“ืึธื” ืกืขืจื•ื•ืขืจ ื‘ืืฉื˜ื™ื™ื˜ ืคื•ืŸ ืขื˜ืœืขื›ืข ืกื˜ืึทื’ืขืก.

  • ื‘ืึทืงื•ืžืขืŸ ืึท ื”ื˜ื˜ืคึผ ื‘ืขื˜ืŸ. ืื•ื™ื‘ ื“ืึธืก ืื™ื– ืึท GET, ื“ืขืงืึธื“ืข ื“ื™ ืคึผืึทืงืึทื˜ ืคึฟื•ืŸ base64URL ืงืึธื“ื™ืจื•ื ื’.
  • ืฉื™ืงืŸ ื“ืขื ืคึผืึทืงืึทื˜ ืฆื• ื“ื™ ื“ื ืก ืกืขืจื•ื•ืขืจ.
  • ื‘ืึทืงื•ืžืขืŸ ืึท ืขื ื˜ืคืขืจ ืคื•ืŸ ื“ื™ ื“ื ืก ืกืขืจื•ื•ืขืจ
  • ื’ืขืคึฟื™ื ืขืŸ ื“ื™ ืžื™ื ื™ืžื•ื TTL ื•ื•ืขืจื˜ ืื™ืŸ ื“ื™ ื‘ืืงื•ืžืขืŸ ืจืขืงืึธืจื“ืก.
  • ืฆื•ืจื™ืงืงื•ืžืขืŸ ืึท ืขื ื˜ืคืขืจ ืฆื• ื“ืขื ืงืœื™ืขื ื˜ ื“ื•ืจืš ื”ื˜ื˜ืคึผ.

3. ื“ื™ื™ืŸ ืื™ื™ื’ืขื ืข ื“ื ืก-ืื™ื‘ืขืจ-ื”ื˜ื˜ืคึผืก ืกืขืจื•ื•ืขืจ

ื“ื™ ืกื™ืžืคึผืœืึทืกื˜, ืคืึทืกื˜ืึทืกื˜ ืื•ืŸ ืžืขืจืกื˜ ืขืคืขืงื˜ื™ื•ื• ื•ื•ืขื’ ืฆื• ืœื•ื™ืคืŸ ื“ื™ื™ืŸ ืื™ื™ื’ืขื ืข ื“ื ืก-ืื™ื‘ืขืจ-ื”ื˜ื˜ืคึผืก ืกืขืจื•ื•ืขืจ ืื™ื– ืฆื• ื ื•ืฆืŸ ืึท ื”ื˜ื˜ืคึผ / 2 ื•ื•ืขื‘ ืกืขืจื•ื•ืขืจ ื”ืงืกื ื•ืžืงืกืึธ, ื•ื•ืขื’ืŸ ื•ื•ืขืœื›ืŸ ื“ืขืจ ืžื—ื‘ืจ ื”ืึธื˜ ืฉื•ื™ืŸ ืงื•ืจืฅ ื’ืขืฉืจื™ื‘ืŸ (ื–ืขืŸ "ื”ื•ื™ืš ืคืึธืจืฉื˜ืขืœื•ื ื’ H2O ื•ื•ืขื‘ ืกืขืจื•ื•ืขืจ").

ื“ื™ ื‘ืจื™ืจื” ืื™ื– ื’ืขืฉื˜ื™ืฆื˜ ื“ื•ืจืš ื“ื™ ืคืึทืงื˜ ืึทื– ืึทืœืข ื“ื™ ืงืึธื“ ืคื•ืŸ ื“ื™ื™ืŸ ืื™ื™ื’ืขื ืข ื“ืึธื” ืกืขืจื•ื•ืขืจ ืงืขื ืขืŸ ื–ื™ื™ืŸ ื™ืžืคึผืœืึทืžืขื ืึทื“ ืžื™ื˜ ื“ื™ ื™ื ื˜ืขืจืคึผืจืึทื˜ืขืจ ื™ื ืึทื’ืจื™ื™ื˜ื™ื“ ืื™ืŸ H2O ื–ื™ืš. mruby. ืื™ืŸ ืึทื“ื™ืฉืึทืŸ ืฆื• ื“ื™ ื ืึธืจืžืึทืœ ืœื™ื™ื‘ืจืขืจื™ื–, ืฆื• ื•ื•ืขืงืกืœ ื“ืึทื˜ืŸ ืžื™ื˜ ื“ื™ ื“ื ืก ืกืขืจื•ื•ืขืจ, ืื™ืจ ื“ืึทืจืคึฟืŸ ื“ื™ (mrbgem) ืกืึธืงืงืขื˜ ื‘ื™ื‘ืœื™ืึธื˜ืขืง, ื•ื•ืึธืก, ื’ืœื™ืง, ืื™ื– ืฉื•ื™ืŸ ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ ืื™ืŸ ื“ื™ ืงืจืึทื ื˜ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹H2O 2.3.0-beta2. ืคืึธืจืฉื˜ืขืœืŸ ืื™ืŸ FreeBSD ืคึผืึธืจืฅ. ืึธื‘ืขืจ, ืขืก ืื™ื– ื ื™ืฉื˜ ืฉื•ื•ืขืจ ืฆื• ืœื™ื™ื’ืŸ ืขืก ืฆื• ืงื™ื™ืŸ ืคืจื™ืขืจื“ื™ืงืŸ ื•ื•ืขืจืกื™ืข ื“ื•ืจืš ืงืœืึธื•ื ื™ื ื’ ื“ื™ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ ืกืึธืงืงืขื˜ ืœื™ื™ื‘ืจืขืจื™ื– ืฆื• ื“ืขื ืงืึทื˜ืึทืœืึธื’ / ื“ืขืคึผืก ืื™ื™ื“ืขืจ ื–ืึทืžืœื•ื ื’.

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 ืื•ืŸ ื’ืขืจื•ืคืŸ ื“ื•ืจืš ื“ื™ ื”ืึทื ื“ืœืขืจ ืึธืคึผืฆื™ืข, ืื™ื– ืคืืงื˜ื™ืฉ ืคืึทืจืึทื ื˜ื•ื•ืึธืจื˜ืœืขืš 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
}

ื‘ื™ื˜ืข ื˜ืึธืŸ ืึทื– ื“ื™ ื”ื™ื’ืข ืงืึทื˜ืฉื™ื ื’ ืกืขืจื•ื•ืขืจ ืื™ื– ืคืึทืจืึทื ื˜ื•ื•ืึธืจื˜ืœืขืš ืคึฟืึทืจ ืคึผืจืึทืกืขืกื™ื ื’ ื“ื ืก ืคึผืึทืงื™ืฅ, ืื™ืŸ ื“ืขื ืคืึทืœ ื•ื ื‘ืึธื•ื ื“ ืคึฟื•ืŸ ื“ืขืจ ื ืึธืจืžืึทืœ FreeBSD ืคืึทืจืฉืคึผืจื™ื™ื˜ื•ื ื’. ืคึฟื•ืŸ ืึท ื–ื™ื›ืขืจื”ื™ื™ื˜ ืคื•ื ื˜ ืคื•ืŸ ืžื™ื™ื ื•ื ื’, ื“ืึธืก ืื™ื– ื“ื™ ืึธืคึผื˜ื™ืžืึทืœ ืœื™ื™ื–ื•ื ื’. ืึธื‘ืขืจ, ื’ืึธืจื ื™ืฉื˜ ืคึผืจื™ื•ื•ืขื ืฅ ืื™ืจ ืคื•ืŸ ืจื™ืคึผืœื™ื™ืกื™ื ื’ ืœืึธืงืึทืœื”ืึธืกื˜ ืฆื• ืึท ืึทื ื“ืขืจืฉ ื“ื ืก ืึทื“ืจืขืก ื•ื•ืึธืก ืื™ืจ ื‘ื“ืขื” ืฆื• ื ื•ืฆืŸ.

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. ื˜ืขืกื˜ื™ื ื’

ืึทื–ื•ื™, ืœืึธืžื™ืจ ืงืึธื ื˜ืจืึธืœื™ืจืŸ ื“ื™ ืจืขื–ื•ืœื˜ืึทื˜ืŸ ื“ื•ืจืš ืฉื™ืงืŸ ืึท ืคึผืจื•ื‘ื™ืจืŸ ื‘ืขื˜ืŸ ื•ื•ื™ื“ืขืจ ืื•ืŸ ืงื•ืง ืื™ืŸ ื“ื™ ื ืขืฅ ืคืึทืจืงืขืจ ืžื™ื˜ ื“ื™ ื ื•ืฆืŸ ื˜ืงืคึผื“ื•ืžืคึผ.

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 ืื™ื– ื‘ืืงื•ืžืขืŸ ืื•ืŸ ื”ืฆืœื—ื” ืคึผืจืึทืกืขืกื˜ ื“ื•ืจืš ื“ื™ ื“ื ืก ืกืขืจื•ื•ืขืจ.

ืื™ืฆื˜ ืึทืœืข ื•ื•ืึธืก ื‘ืœื™ื™ื‘ื˜ ืื™ื– ืฆื• ืึทืงื˜ืึทื•ื•ื™ื™ื˜ ืื•ื ื“ื–ืขืจ ืกืขืจื•ื•ืขืจ ืื™ืŸ ื“ื™ Firefox ื‘ืœืขื˜ืขืจืขืจ. ืฆื• ื˜ืึธืŸ ื“ืึธืก, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื˜ื•ื™ืฉืŸ ืขื˜ืœืขื›ืข ืกืขื˜ื˜ื™ื ื’ืก ืื•ื™ืฃ ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื‘ืœืขื˜ืขืจ ื•ื•ืขื’ืŸ: config.

ืžื™ืจ ื›ืึทืคึผืŸ ืื•ื ื“ื–ืขืจ ื“ื ืก-ืื™ื‘ืขืจ-ื”ื˜ื˜ืคึผืก ืกืขืจื•ื•ืขืจ

ืขืจืฉื˜ืขืจ, ื“ืึธืก ืื™ื– ื“ื™ ืึทื“ืจืขืก ืคื•ืŸ ืื•ื ื“ื–ืขืจ ืึทืคึผื™ ืื™ืŸ ื•ื•ืึธืก ื“ืขืจ ื‘ืœืขื˜ืขืจืขืจ ื•ื•ืขื˜ ื‘ืขื˜ืŸ ื“ื ืก ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข network.trr.uri. ืขืก ืื™ื– ืื•ื™ืš ืจืขืงืึทืžืขื ื“ื™ื“ ืฆื• ืกืคึผืขืฆื™ืคื™ืฆื™ืจืŸ ื“ื™ ืคืขืœื“ IP ืคึฟื•ืŸ ื“ืขื URL ืคึฟืึทืจ ื–ื™ื›ืขืจ IP ื”ืึทื›ืœืึธื˜ืข ื ื™ืฆืŸ ื“ืขื ื‘ืœืขื˜ืขืจืขืจ ื–ื™ืš ืึธืŸ ืึทืงืกืขืก DNS ืื™ืŸ ื ืขืฅ.ื˜ืจืจ.ื‘ืึธืึธื˜ืกื˜ืจืึทืคึผืึทื“ืจืขืกืก. ืื•ืŸ ืœืขืกืึธืฃ, ื“ืขืจ ืคึผืึทืจืึทืžืขื˜ืขืจ ื–ื™ืš ื ืขืฅ.ื˜ืจืจ.ืžืึธื“ืข ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ ื“ื™ ื ื•ืฆืŸ ืคื•ืŸ ื“ืึธื”. ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ื“ื™ ื•ื•ืขืจื˜ ืฆื• "3" ื•ื•ืขื˜ ืฆื•ื•ื™ื ื’ืขืŸ ื“ืขื ื‘ืœืขื˜ืขืจืขืจ ืฆื• ื ื•ืฆืŸ ืื•ื™ืกืฉืœื™ืกืœืขืš DNS-over-HTTPS ืคึฟืึทืจ ื ืึธืžืขืŸ ื”ืึทื›ืœืึธื˜ืข, ื‘ืฉืขืช ื“ื™ ืžืขืจ ืคืึทืจืœืึธื–ืœืขืš ืื•ืŸ ื–ื™ื›ืขืจ "2" ื•ื•ืขื˜ ื’ืขื‘ืŸ ื‘ื™ืœื›ืขืจืงื™ื™ึทื˜ ืฆื• DoH, ืื•ืŸ ืœืึธื–ืŸ ื“ื™ ื ืึธืจืžืึทืœ ื“ื ืก ืœื•ืงืึทืคึผ ื•ื•ื™ ืึท ืคืึทืœื‘ืึทืง ืึธืคึผืฆื™ืข.

5. ื ื•ืฅ!

ืื™ื– ื“ืขืจ ืึทืจื˜ื™ืงืœ ื ื•ืฆื™ืง? ื‘ื™ื˜ืข ื˜ืึธืŸ ื ื™ื˜ ื–ื™ื™ืŸ ืฉืขืžืขื•ื•ื“ื™ืง ืื•ืŸ ืฉื˜ื™ืฆืŸ ืžื™ื˜ ื’ืขืœื˜ ื“ื•ืจืš ื“ื™ ืฆื•ืฉื˜ื™ื™ึทืขืจ ืคืึธืจืขื (ืื•ื ื˜ืŸ).

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’