DNS เจธเฉฐเจเจพเจฒเจจ เจฆเฉ เจตเฉฑเจ-เจตเฉฑเจ เจชเจนเจฟเจฒเฉเจเจ เจจเฉเฉฐ เจฒเฉเจเจ เจฆเฉเจเจฐเจพ เจเจ เจตเจพเจฐ เจชเจนเจฟเจฒเจพเจ เจนเฉ เจฌเจพเจฐ เจฌเจพเจฐ เจเฉเจนเจฟเจ เจเจพ เจเฉเฉฑเจเจพ เจนเฉ
เจนเจพเจฒ เจนเฉ เจตเจฟเฉฑเจ, DNS เจเฉเจฐเฉเจซเจฟเจ เจฆเฉ เจธเจชเฉฑเจธเจผเจ เจเจฎเจเจผเฉเจฐเฉ เจฆเฉ เจฌเจพเจตเจเฉเจฆ, เจเฉ เจเจฟ เจ
เจเฉ เจตเฉ, เจเจผเจฟเจเจฆเจพเจคเจฐ เจนเจฟเฉฑเจธเฉ เจฒเจ, เจธเจฎเฉฑเจเจฐเฉ, เจธเจฐเจเจพเจฐเฉ เจธเฉเจฐเฉฑเจเจฟเจ เจเจเฉฐเจธเฉเจเจ เจ
เจคเฉ เจธเฉเจเจธเจฐเจธเจผเจฟเจช เจตเจฟเฉฑเจ เจตเจฟเจเจฟเจเจชเจจ เจจเฉเฉฐ เจเจฎเจฌเฉเจก เจเจฐเจเฉ เจเจชเจฃเฉ เจเจฎเจฆเจจ เจตเจงเจพเจเจฃ เจฆเฉ เจฎเฉฐเจ เจเจฐเจจ เจตเจพเจฒเฉ เจชเฉเจฐเจฆเจพเจคเจพเจตเจพเจ เจฆเฉ เจนเจฟเฉฑเจธเฉ 'เจคเฉ เจเจคเจฐเจจเจพเจ เจเจพเจฐเจตเจพเจเจเจ เจฒเจ เจธเจชเฉฑเจธเจผเจ เจฐเฉเจช เจตเจฟเฉฑเจ เจธเฉฐเจเจพเจฐเจฟเจค เจนเฉ, เจฆเฉ เจจเจพเจฒ เจจเจพเจฒ เจธเจฟเจฐเจซเจผ เจ
เจชเจฐเจพเจงเฉ, เจชเฉเจฐเจเจฟเจฐเจฟเจ
เจเฉเจธเจผเจเจฟเจธเจฎเจคเฉ เจจเจพเจฒ, เจธเจฅเจฟเจคเฉ เจฌเจฆเจฒ เจฐเจนเฉ เจนเฉ. เจเจพเจธ เจคเฉเจฐ 'เจคเฉ, เจชเฉเจฐเจธเจฟเฉฑเจง เจซเจพเจเจฐเจซเจพเจเจธ เจฌเจฐเจพเจเจเจผเจฐ เจฆเฉ เจกเจฟเจตเฉเจฒเจชเจฐ
1. DNS-เจเจตเจฐ-HTTPS เจธเจฎเฉฑเจธเจฟเจเจตเจพเจ
เจชเจนเจฟเจฒเฉ เจจเจเจผเจฐ 'เจคเฉ, เจเฉฐเจเจฐเจจเฉเจ เจธเฉเจซเจเจตเฉเจ เจฐ เจตเจฟเฉฑเจ DNS-เจเจตเจฐ-HTTPS เจฆเฉ เจธเจผเฉเจฐเฉเจเจคเฉ เจชเฉเฉฐเจ เจธเจผเฉเจฐเฉเจเจค เจธเจฟเจฐเจซ เจเฉฑเจ เจธเจเจพเจฐเจพเจคเจฎเจ เจชเฉเจฐเจคเฉเจเฉเจฐเจฟเจ เจฆเจพ เจเจพเจฐเจจ เจฌเจฃเจฆเฉ เจนเฉเฅค เจนเจพเจฒเจพเจเจเจฟ, เจธเจผเฉเจคเจพเจจ, เจเจฟเจตเฉเจ เจเจฟ เจเจน เจเจนเจฟเฉฐเจฆเฉ เจนเจจ, เจตเฉเจฐเจตเจฟเจเจ เจตเจฟเฉฑเจ เจนเฉ.
เจชเจนเจฟเจฒเฉ เจธเจฎเฉฑเจธเจฟเจ เจเฉ DoH เจฆเฉ เจตเจฟเจเจชเจ เจตเจฐเจคเฉเจ เจฆเฉ เจฆเจพเจเจฐเฉ เจจเฉเฉฐ เจธเฉเจฎเจฟเจค เจเจฐเจฆเฉ เจนเฉ เจเจน เจนเฉ เจเจธเจฆเจพ เจงเจฟเจเจจ เจธเจฟเจฐเจซเจผ เจตเฉเฉฑเจฌ เจเฉเจฐเฉเจซเจฟเจ 'เจคเฉ เจนเฉเฅค เจฆเจฐเจ เจธเจฒ, HTTP เจชเฉเจฐเฉเจเฉเจเฉเจฒ เจ เจคเฉ เจเจธเจฆเจพ เจฎเฉเจเฉเจฆเจพ เจธเฉฐเจธเจเจฐเจฃ HTTP/2, เจเจฟเจธ 'เจคเฉ DoH เจ เจงเจพเจฐเจค เจนเฉ, WWW เจฆเจพ เจ เจงเจพเจฐ เจนเจจเฅค เจชเจฐ เจเฉฐเจเจฐเจจเฉเฉฑเจ เจธเจฟเจฐเจซเจผ เจตเฉเฉฑเจฌ เจจเจนเฉเจ เจนเฉเฅค เจเฉฑเจฅเฉ เจฌเจนเฉเจค เจธเจพเจฐเฉเจเจ เจชเฉเจฐเจธเจฟเฉฑเจง เจธเฉเจตเจพเจตเจพเจ เจนเจจ, เจเจฟเจตเฉเจ เจเจฟ เจเจฎเฉเจฒ, เจตเฉฑเจ-เจตเฉฑเจ เจคเจคเจเจพเจฒ เจฎเฉเจธเฉเจเจเจฐ, เจซเจพเจเจฒ เจเฉเจฐเจพเจเจธเจซเจฐ เจธเจฟเจธเจเจฎ, เจฎเจฒเจเฉเจฎเฉเจกเฉเจ เจธเจเฉเจฐเฉเจฎเจฟเฉฐเจ, เจเจฆเจฟ, เจเฉ เจเจฟ HTTP เจฆเฉ เจตเจฐเจคเฉเจ เจจเจนเฉเจ เจเจฐเจฆเฉเจเจ เจนเจจเฅค เจเจธ เจคเจฐเฉเจนเจพเจ, เจฌเจนเฉเจค เจธเจพเจฐเฉ DoH เจฆเฉเจเจฐเจพ เจเฉฑเจ เจเจฒเจพเจ เจฆเฉ เจฐเฉเจช เจตเจฟเฉฑเจ เจงเจพเจฐเจจเจพ เจฆเฉ เจฌเจพเจตเจเฉเจฆ, เจเจน เจฌเฉเจฐเจพเจเจเจผเจฐ เจคเจเจจเฉเจเจพเจ เจคเฉเจ เจเจฒเจพเจตเจพ เจเจฟเจธเฉ เจนเฉเจฐ เจเฉเจเจผ เจฒเจ เจตเจพเจงเฉ (เจ เจคเฉ เจฌเฉเจฒเฉเฉเฉ) เจเฉเจธเจผเจฟเจธเจผเจพเจ เจคเฉเจ เจฌเจฟเจจเจพเจ เจฒเจพเจเฉ เจจเจนเฉเจ เจนเฉ เจธเจเจฆเจพ เจนเฉเฅค เจคเจฐเฉเจเฉ เจจเจพเจฒ, DNS-เจเจตเจฐ-TLS เจเจธ เจญเฉเจฎเจฟเจเจพ เจฒเจ เจฌเจนเฉเจค เจเจผเจฟเจเจฆเจพ เจฏเฉเจ เจเจฎเฉเจฆเจตเจพเจฐ เจฆเฉ เจคเจฐเฉเจนเจพเจ เจฆเจฟเจเจฆเจพ เจนเฉ, เจเฉ เจธเฉเจฐเฉฑเจเจฟเจ เจค เจธเจเฉเจเจกเจฐเจก TLS เจชเฉเจฐเฉเจเฉเจเฉเจฒ เจตเจฟเฉฑเจ เจฎเจฟเจเจฐเฉ DNS เจเฉเจฐเฉเจซเจฟเจ เจฆเฉ เจเจจเจเฉเจชเจธเฉเจฒเฉเจธเจผเจจ เจจเฉเฉฐ เจฒเจพเจเฉ เจเจฐเจฆเจพ เจนเฉเฅค
เจฆเฉเจเฉ เจธเจฎเฉฑเจธเจฟเจ, เจเฉ เจธเฉฐเจญเจพเจตเฉ เจคเฉเจฐ 'เจคเฉ เจชเจนเจฟเจฒเฉ เจจเจพเจฒเฉเจ เจฌเจนเฉเจค เจเจผเจฟเจเจฆเจพ เจฎเจนเฉฑเจคเจตเจชเฉเจฐเจจ เจนเฉ, เจฌเฉเจฐเจพเจเจเจผเจฐ เจธเฉเจเจฟเฉฐเจเจพเจ เจตเจฟเฉฑเจ เจจเจฟเจฐเจฆเจฟเจธเจผเจ เจเฉฑเจ เจธเจฟเฉฐเจเจฒ DoH เจธเจฐเจตเจฐ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจ เจฆเฉ เจชเฉฑเจ เจตเจฟเฉฑเจ เจกเจฟเจเจผเจพเจเจจ เจฆเฉเจเจฐเจพ DNS เจฆเฉ เจ เฉฐเจฆเจฐเฉเจจเฉ เจตเจฟเจเฉเจเจฆเจฐเฉเจเจฐเจฃ เจฆเจพ เจ เจธเจฒ เจคเจฟเจเจ เจนเฉเฅค เจเจพเจธ เจคเฉเจฐ 'เจคเฉ, เจฎเฉเจเจผเฉเจฒเจพ Cloudflare เจคเฉเจ เจเฉฑเจ เจธเฉเจตเจพ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจ เจฆเจพ เจธเฉเจเจพเจ เจฆเจฟเฉฐเจฆเจพ เจนเฉเฅค เจเจธเฉ เจคเจฐเฉเจนเจพเจ เจฆเฉ เจธเฉเจตเจพ เจนเฉเจฐ เจชเฉเจฐเจฎเฉเฉฑเจ เจเฉฐเจเจฐเจจเฉเจ เจธเจผเจเจธเฉเจ เจคเจพเจ, เจเจพเจธ เจคเฉเจฐ 'เจคเฉ เจเฉเจเจฒ เจฆเฉเจเจฐเจพ เจตเฉ เจฒเจพเจเจ เจเฉเจคเฉ เจเจ เจธเฉเฅค เจเจน เจชเจคเจพ เจเจฒเจฆเจพ เจนเฉ เจเจฟ DNS-over-HTTPS เจจเฉเฉฐ เจเจธ เจฐเฉเจช เจตเจฟเฉฑเจ เจฒเจพเจเฉ เจเจฐเจจเจพ เจเจฟเจธ เจตเจฟเฉฑเจ เจเจน เจตเจฐเจคเจฎเจพเจจ เจตเจฟเฉฑเจ เจชเฉเจฐเจธเจคเจพเจตเจฟเจค เจนเฉ, เจธเจฟเจฐเจซ เจธเจญ เจคเฉเจ เจตเฉฑเจกเฉเจเจ เจธเฉเจตเจพเจตเจพเจ 'เจคเฉ เจ เฉฐเจคเจฎ เจเจชเจญเฉเจเจคเจพเจตเจพเจ เจฆเฉ เจจเจฟเจฐเจญเจฐเจคเจพ เจจเฉเฉฐ เจตเจงเจพเจเจเจฆเจพ เจนเฉเฅค เจเจน เจเฉเจ เจญเฉเจค เจจเจนเฉเจ เจนเฉ เจเจฟ DNS เจชเฉเจฐเจธเจผเจจเจพเจ เจฆเจพ เจตเจฟเจธเจผเจฒเฉเจธเจผเจฃ เจเฉ เจเจพเจฃเจเจพเจฐเฉ เจชเฉเจฐเจฆเจพเจจ เจเจฐ เจธเจเจฆเจพ เจนเฉ, เจเจน เจเจธ เจฌเจพเจฐเฉ เจนเฉเจฐ เจตเฉ เจกเฉเจเจพ เจเจเฉฑเจ เจพ เจเจฐ เจธเจเจฆเจพ เจนเฉ, เจจเจพเจฒ เจนเฉ เจเจธเจฆเฉ เจธเจผเฉเฉฑเจงเจคเจพ เจ เจคเฉ เจธเจพเจฐเจฅเจเจคเจพ เจจเฉเฉฐ เจตเจงเจพ เจธเจเจฆเจพ เจนเฉเฅค
เจเจธ เจธเจฌเฉฐเจง เจตเจฟเฉฑเจ, เจฒเฉเจเจ DNS-over-HTTPS เจฆเฉ เจจเจนเฉเจ, เจธเจเฉเจ DNS-over-TLS เจฆเฉ เจเฉฑเจ เจตเจฟเจเจชเจ, เจธเฉเจฐเฉฑเจเจฟเจ เจค เจ เจคเฉ เจเฉฐเจเจฐเจจเฉเจ เจธเจพเจงเจจเจพเจ เจฆเฉ เจนเฉเจฐ เจเฉเจเจฆเจฐเฉเจเจฐเจจ เจฒเจ เจ เจจเฉเจเฉเจฒ เจจเจพ เจนเฉเจฃ เจฆเฉ เจฐเฉเจช เจตเจฟเฉฑเจ DNSSEC/DANE เจฆเฉ เจจเจพเจฒ เจธเจฎเฉเจนเจฟเจ เจฒเจพเจเฉ เจเจฐเจจ เจฆเจพ เจธเจฎเจฐเจฅเจ เจธเฉ เจ เจคเฉ เจฐเจฟเจนเจพ เจนเฉเฅค DNS เจเฉเจฐเฉเจซเจฟเจ เจฆเฉ เจธเฉเจฐเฉฑเจเจฟเจ เจจเฉเฉฐ เจฏเจเฉเจจเฉ เจฌเจฃเจพเจเจฃ เจฒเจเฅค เจฌเจฆเจเจฟเจธเจฎเจคเฉ เจจเจพเจฒ, เจธเจชเฉฑเจธเจผเจ เจเจพเจฐเจจเจพเจ เจเจฐเจเฉ, เจเฉเจ เจตเฉ เจเจฒเจพเจเฉฐเจ เจธเฉเจซเจเจตเฉเจ เจฐ เจตเจฟเฉฑเจ DoH เจตเจฟเจเจฒเจชเจพเจ เจฒเจ เจชเฉเฉฐเจ เจธเจฎเจฐเจฅเจจ เจฆเฉ เจคเฉเจเจผเฉ เจจเจพเจฒ เจเจพเจฃ-เจชเจเจพเจฃ เจฆเฉ เจเจฎเฉเจฆ เจจเจนเฉเจ เจเจฐ เจธเจเจฆเจพ เจนเฉ, เจ เจคเฉ เจเจน เจ เจเฉ เจตเฉ เจธเฉเจฐเฉฑเจเจฟเจ เจคเจเจจเจพเจฒเฉเจเฉ เจฆเฉ เจเจคเจธเจผเจพเจนเฉเจเจ เจฆเจพ เจกเฉเจฎเฉเจจ เจนเฉเฅค
เจชเจฐ เจเจฟเจเจเจเจฟ เจธเจพเจกเฉ เจเฉเจฒ เจนเฉเจฃ DoH เจนเฉ, เจเจฟเจเจ เจจเจพ เจเจพเจฐเจชเฉเจฐเฉเจธเจผเจจเจพเจ เจฆเฉเจเจฐเจพ เจเจชเจฃเฉ เจธเจฐเจตเจฐเจพเจ เจฆเฉเจเจฐเจพ เจธเจพเจกเฉ เจเจชเจฃเฉ DNS-เจเจตเจฐ-HTTPS เจธเจฐเจตเจฐ เจฆเฉเจเจฐเจพ เจธเฉฐเจญเจพเจตเฉ เจจเจฟเจเจฐเจพเจจเฉ เจคเฉเจ เจฌเจเจฃ เจคเฉเจ เจฌเจพเจ เจฆ เจเจธเจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเฉ?
2. DNS-เจเจตเจฐ-HTTPS เจชเฉเจฐเฉเจเฉเจเฉเจฒ
เจเฉ เจคเฉเจธเฉเจ เจธเจเฉเจเจกเจฐเจก 'เจคเฉ เจจเจเจผเจฐ เจฎเจพเจฐเฉ
เจฎเจฟเจเจฐ เจฆเฉ เจ เจจเฉเจธเจพเจฐ, เจธเจฟเจฐเจซเจผ HTTP/2 เจ เจคเฉ เจเฉฑเจ เจธเฉเจฐเฉฑเจเจฟเจ เจค TLS เจเจจเฉเจเจธเจผเจจ เจธเจฎเจฐเจฅเจฟเจค เจนเจจเฅค
เจเฉฑเจ DNS เจฌเฉเจจเจคเฉ เจญเฉเจเจฃเจพ เจฎเจฟเจเจฐเฉ GET เจ เจคเฉ POST เจตเจฟเจงเฉเจเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ เจเฉเจคเจพ เจเจพ เจธเจเจฆเจพ เจนเฉเฅค เจชเจนเจฟเจฒเฉ เจเฉเจธ เจตเจฟเฉฑเจ, เจฌเฉเจจเจคเฉ เจจเฉเฉฐ เจเฉฑเจ base64URL-เจเจจเจเฉเจกเจก เจธเจคเจฐ เจตเจฟเฉฑเจ เจฌเจฆเจฒเจฟเจ เจเจพเจเจฆเจพ เจนเฉ, เจ เจคเฉ เจฆเฉเจเฉ เจตเจฟเฉฑเจ, POST เจฌเฉเจจเจคเฉ เจฆเฉ เจฎเฉเฉฑเจ เจญเจพเจ เจฆเฉเจเจฐเจพ เจฌเจพเจเจจเจฐเฉ เจฐเฉเจช เจตเจฟเฉฑเจเฅค เจเจธ เจธเจฅเจฟเจคเฉ เจตเจฟเฉฑเจ, DNS เจฌเฉเจจเจคเฉ เจ เจคเฉ เจเจตเจพเจฌ เจฆเฉ เจฆเฉเจฐเจพเจจ เจเฉฑเจ เจตเจฟเจธเจผเฉเจธเจผ MIME เจกเฉเจเจพ เจเจฟเจธเจฎ เจฆเฉ เจตเจฐเจคเฉเจ เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเฉ เจเจชเจฒเฉเจเฉเจธเจผเจจ/dns-เจธเฉเจจเฉเจนเจพ.
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
เจธเจฟเจฐเจฒเฉเจ เจตเฉฑเจฒ เจตเฉ เจงเจฟเจเจจ เจฆเจฟเจ เจเฉเจธเจผ เจเฉฐเจเจฐเฉเจฒ: เจตเฉเฉฑเจฌ เจธเจฐเจตเจฐ เจคเฉเจ เจเจตเจพเจฌ เจตเจฟเฉฑเจ. เจชเฉเจฐเจพเจฎเฉเจเจฐ เจตเจฟเฉฑเจ เจตเฉฑเจง เจคเฉเจ เจตเฉฑเจง เจเจฎเจฐ เจตเจพเจชเจธ เจเฉเจคเฉ เจเจพ เจฐเจนเฉ DNS เจฐเจฟเจเจพเจฐเจก เจฒเจ TTL เจฎเฉเฉฑเจฒ เจฐเฉฑเจเจฆเจพ เจนเฉ (เจเจพเจ เจเฉฑเจเฉ-เจเฉฑเจ เจฎเฉเฉฑเจฒ เจเฉเจเจฐ เจเจนเจจเจพเจ เจฆเจพ เจเฉฑเจ เจธเฉเฉฑเจ เจตเจพเจชเจธ เจเฉเจคเจพ เจเจพ เจฐเจฟเจนเจพ เจนเฉ)เฅค
เจเจชเจฐเฉเจเจค เจฆเฉ เจเจงเจพเจฐ 'เจคเฉ, เจเฉฑเจ DoH เจธเจฐเจตเจฐ เจฆเฉ เจเฉฐเจฎเจเจพเจ เจตเจฟเฉฑเจ เจเจ เจชเฉเจพเจ เจนเฉเฉฐเจฆเฉ เจนเจจเฅค
- เจเฉฑเจ HTTP เจฌเฉเจจเจคเฉ เจชเฉเจฐเจพเจชเจค เจเจฐเฉเฅค เจเฉเจเจฐ เจเจน เจเฉฑเจ GET เจนเฉ เจคเจพเจ เจฌเฉเจธ64URL เจเจจเจเฉเจกเจฟเฉฐเจ เจคเฉเจ เจชเฉเจเฉเจ เจจเฉเฉฐ เจกเฉเจเฉเจก เจเจฐเฉเฅค
- เจเจธ เจชเฉเจเฉเจ เจจเฉเฉฐ DNS เจธเจฐเจตเจฐ เจจเฉเฉฐ เจญเฉเจเฉเฅค
- DNS เจธเจฐเจตเจฐ เจคเฉเจ เจเจตเจพเจฌ เจชเฉเจฐเจพเจชเจค เจเจฐเฉ
- เจชเฉเจฐเจพเจชเจค เจเฉเจคเฉ เจฐเจฟเจเจพเจฐเจกเจพเจ เจตเจฟเฉฑเจ เจเฉฑเจเฉ-เจเฉฑเจ TTL เจฎเฉเฉฑเจฒ เจฒเฉฑเจญเฉเฅค
- HTTP เจฐเจพเจนเฉเจ เจเจฒเจพเจเฉฐเจ เจจเฉเฉฐ เจเจตเจพเจฌ เจตเจพเจชเจธ เจเจฐเฉเฅค
3. เจคเฉเจนเจพเจกเจพ เจเจชเจฃเจพ DNS-เจเจตเจฐ-HTTPS เจธเจฐเจตเจฐ
เจเจชเจฃเฉ เจเฉเจฆ เจฆเฉ DNS-เจเจตเจฐ-HTTPS เจธเจฐเจตเจฐ เจจเฉเฉฐ เจเจฒเจพเจเจฃ เจฆเจพ เจธเจญ เจคเฉเจ เจธเจฐเจฒ, เจธเจญ เจคเฉเจ เจคเฉเจเจผ เจ
เจคเฉ เจธเจญ เจคเฉเจ เจชเฉเจฐเจญเจพเจตเจธเจผเจพเจฒเฉ เจคเจฐเฉเจเจพ เจนเฉ เจเฉฑเจ HTTP/2 เจตเฉเฉฑเจฌ เจธเจฐเจตเจฐ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจเจพ
เจเจน เจเฉเจฃ เจเจธ เจคเฉฑเจฅ เจฆเฉเจเจฐเจพ เจธเจฎเจฐเจฅเจค เจนเฉ เจเจฟ เจคเฉเจนเจพเจกเฉ เจเจชเจฃเฉ DoH เจธเจฐเจตเจฐ เจฆเฉ เจธเจพเจฐเฉ เจเฉเจก เจจเฉเฉฐ H2O เจตเจฟเฉฑเจ เจเจเฉเจเฉเจฐเจฟเจค เจฆเฉเจญเจพเจธเจผเฉเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ เจชเฉเจฐเฉ เจคเจฐเฉเจนเจพเจ เจฒเจพเจเฉ เจเฉเจคเจพ เจเจพ เจธเจเจฆเจพ เจนเฉเฅค
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 เจเจฟเจธเจฆเฉ เจฒเจ, เจ เจธเจฒ เจตเจฟเฉฑเจ, เจธเจพเจกเจพ DNS-เจเจตเจฐ-HTTPS เจธเจฐเจตเจฐ, เจเฉ เจเจฟ 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
}
เจเจฟเจฐเจชเจพ เจเจฐเจเฉ เจจเฉเจ เจเจฐเฉ เจเจฟ เจธเจฅเจพเจจเจ เจเฉเจเจฟเฉฐเจ เจธเจฐเจตเจฐ เจเจธ เจฎเจพเจฎเจฒเฉ เจตเจฟเฉฑเจ, 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 เจธเจฐเจตเจฐ เจฆเฉเจเจฐเจพ เจธเจซเจฒเจคเจพเจชเฉเจฐเจตเจ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจเฉเจคเฉ เจเจ เจธเฉเฅค
เจนเฉเจฃ เจธเจฟเจฐเจซเจผ เจซเจพเจเจฐเจซเจพเจเจธ เจฌเจฐเจพเจเจเจผเจฐ เจตเจฟเฉฑเจ เจธเจพเจกเฉ เจธเจฐเจตเจฐ เจจเฉเฉฐ เจเจเจเฉเจตเฉเจ เจเจฐเจจเจพ เจฌเจพเจเฉ เจนเฉเฅค เจ เจเจฟเจนเจพ เจเจฐเจจ เจฒเจ, เจคเฉเจนเจพเจจเฉเฉฐ เจธเฉฐเจฐเจเจจเจพ เจชเฉฐเจจเจฟเจเจ 'เจคเฉ เจเจ เจธเฉเจเจฟเฉฐเจเจพเจ เจจเฉเฉฐ เจฌเจฆเจฒเจฃ เจฆเฉ เจฒเฉเฉ เจนเฉ เจฌเจพเจฐเฉ: เจธเฉฐเจฐเจเจจเจพ.
เจชเจนเจฟเจฒเจพเจ, เจเจน เจธเจพเจกเฉ API เจฆเจพ เจชเจคเจพ เจนเฉ เจเจฟเจธ 'เจคเฉ เจฌเฉเจฐเจพเจเจเจผเจฐ DNS เจเจพเจฃเจเจพเจฐเฉ เจฒเจ เจฌเฉเจจเจคเฉ เจเจฐเฉเจเจพ network.trr.uri. เจธเฉเจฐเฉฑเจเจฟเจ เจค IP เจฐเฉเจเจผเฉเจฒเจฟเจเจธเจผเจจ เจฒเจ เจเจธ URL เจคเฉเจ เจกเฉเจฎเฉเจจ IP เจจเฉเฉฐ เจจเจฟเจฐเจงเจพเจฐเจฟเจค เจเจฐเจจ เจฆเฉ เจตเฉ เจธเจฟเจซเจผเจพเจฐเจธเจผ เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเฉ, เจฌเฉเจฐเจพเจเจเจผเจฐ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ DNS เจคเฉฑเจ เจชเจนเฉเฉฐเจ เจเฉเจคเฉ เจฌเจฟเจจเจพเจ network.trr.bootstrapAddress. เจ เจคเฉ เจ เฉฐเจค เจตเจฟเฉฑเจ, เจชเฉเจฐเจพเจฎเฉเจเจฐ เจเจชเจฃเฉ เจเจช เจตเจฟเฉฑเจ network.trr.mode DoH เจฆเฉ เจตเจฐเจคเฉเจ เจธเจฎเฉเจคเฅค เจฎเฉเฉฑเจฒ เจจเฉเฉฐ "3" 'เจคเฉ เจธเฉเฉฑเจ เจเจฐเจจเจพ เจฌเฉเจฐเจพเจเจเจผเจฐ เจจเฉเฉฐ เจจเจพเจฎ เจฐเฉเจเจผเฉเจฒเฉเจธเจผเจจ เจฒเจ เจตเจฟเจธเจผเฉเจธเจผ เจคเฉเจฐ 'เจคเฉ DNS-over-HTTPS เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจ เจฒเจ เจฎเจเจฌเฉเจฐ เจเจฐเฉเจเจพ, เจเจฆเฉเจ เจเจฟ เจตเจงเฉเจฐเฉ เจญเจฐเฉเจธเฉเจฏเฉเจ เจ เจคเฉ เจธเฉเจฐเฉฑเจเจฟเจ เจค "2" DoH เจจเฉเฉฐ เจคเจฐเจเฉเจน เจฆเฉเจตเฉเจเจพ, เจธเจเฉเจเจกเจฐเจก DNS เจฒเฉเฉฑเจเจ เจช เจจเฉเฉฐ เจซเจพเจฒเจฌเฉเจ เจตเจฟเจเจฒเจช เจตเจเฉเจ เจเฉฑเจก เจเฉเฅค
5. เจฒเจพเจญ!
เจเฉ เจฒเฉเจ เจฎเจฆเจฆเจเจพเจฐ เจธเฉ? เจซเจฟเจฐ เจเจฟเจฐเจชเจพ เจเจฐเจเฉ เจธเจผเจฐเจฎเจฟเฉฐเจฆเจพ เจจเจพ เจนเฉเจตเฉ เจ เจคเฉ เจฆเจพเจจ เจซเจพเจฐเจฎ (เจนเฉเจ เจพเจ) เจฐเจพเจนเฉเจ เจชเฉเจธเฉ เจจเจพเจฒ เจธเจนเจพเจเจคเจพ เจเจฐเฉเฅค
เจธเจฐเฉเจค: www.habr.com