เดžเด™เตเด™เตพ เดžเด™เตเด™เดณเตเดŸเต† DNS-เด“เดตเตผ-HTTPS เดธเต†เตผเดตเตผ เด‰เดฏเตผเดคเตเดคเตเดจเตเดจเต

เดกเดฟเดŽเตปเดŽเดธเต เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเดฟเดจเตเดฑเต† เดตเดฟเดตเดฟเดง เดตเดถเด™เตเด™เตพ เดฐเดšเดฏเดฟเดคเดพเดตเต เด‡เดคเดฟเดจเด•เด‚ เดคเดจเตเดจเต† เดชเดฒ เด•เดพเดฐเตเดฏเด™เตเด™เดณเดฟเดฒเตเด‚ เด†เดตเตผเดคเตเดคเดฟเดšเตเดšเต เดธเตเดชเตผเดถเดฟเดšเตเดšเดฟเดŸเตเดŸเตเดฃเตเดŸเต เดฒเต‡เด–เดจเด™เตเด™เตพ เดฌเตเดฒเต‹เด—เดฟเดจเตเดฑเต† เดญเดพเด—เดฎเดพเดฏเดฟ เดชเตเดฐเดธเดฟเดฆเตเดงเต€เด•เดฐเดฟเดšเตเดšเดคเต. เด…เดคเต‡ เดธเดฎเดฏเด‚, เดˆ เดชเตเดฐเดงเดพเดจ เด‡เดจเตเดฑเตผเดจเต†เดฑเตเดฑเต เดธเต‡เดตเดจเดคเตเดคเดฟเดจเตเดฑเต† เดธเตเดฐเด•เตเดท เดฎเต†เดšเตเดšเดชเตเดชเต†เดŸเตเดคเตเดคเตเดจเตเดจเดคเดฟเดฒเดพเดฃเต เดชเตเดฐเดงเดพเดจ เดŠเดจเตเดจเตฝ.

เดžเด™เตเด™เตพ เดžเด™เตเด™เดณเตเดŸเต† DNS-เด“เดตเตผ-HTTPS เดธเต†เตผเดตเตผ เด‰เดฏเตผเดคเตเดคเตเดจเตเดจเต

เด…เดŸเตเดคเตเดค เด•เดพเดฒเด‚ เดตเดฐเต†, เดกเดฟเดŽเตปเดŽเดธเต เดŸเตเดฐเดพเดซเดฟเด•เตเด•เดฟเดจเตเดฑเต† เดตเตเดฏเด•เตเดคเดฎเดพเดฏ เด…เดชเด•เดŸเดธเดพเดงเตเดฏเดค เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเตเดจเตเดจเดฟเดŸเตเดŸเตเด‚, เด‰เดณเตเดณเดŸเด•เตเด•เด‚, เดธเตผเด•เตเด•เดพเตผ เดธเตเดฐเด•เตเดทเดพ เดเดœเตปเดธเดฟเด•เตพ, เดธเต†เตปเดธเตผเดทเดฟเดชเตเดชเต เดŽเดจเตเดจเดฟเดตเดฏเดฟเตฝ เดชเดฐเดธเตเดฏเด‚ เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเดฟ เดคเด™เตเด™เดณเตเดŸเต† เดตเดฐเตเดฎเดพเดจเด‚ เดตเตผเดฆเตเดงเดฟเดชเตเดชเดฟเด•เตเด•เดพเตป เดถเตเดฐเดฎเดฟเด•เตเด•เตเดจเตเดจ เดฆเดพเดคเดพเด•เตเด•เดณเตเดŸเต† เดญเดพเด—เดคเตเดคเตเดจเดฟเดจเตเดจเตเดณเตเดณ เด•เตเดทเตเดฆเตเดฐ เดจเดŸเดชเดŸเดฟเด•เดณเดฟเดฒเต‡เด•เตเด•เต, เด‡เดชเตเดชเต‹เดดเตเด‚, เดญเต‚เดฐเดฟเดญเดพเด—เดตเตเด‚, เดตเตเดฏเด•เตเดคเดฎเดพเดฏเตเด‚, เด•เตเดทเตเดฆเตเดฐเด•เดฐเดฎเดพเดฏ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเด‚ เด•เตˆเดฎเดพเดฑเตเดฑเด‚ เดšเต†เดฏเตเดฏเดชเตเดชเต†เดŸเตเดจเตเดจเต. เด…เดคเตเดชเต‹เดฒเต† เด•เต‡เดตเดฒเด‚ เด•เตเดฑเตเดฑเดตเดพเดณเดฟเด•เตพ, เดชเตเดฐเด•เตเดฐเดฟเดฏ เด…เดคเดฟเดจเตเดฑเต† เดธเด‚เดฐเด•เตเดทเดฃเด‚ เดถเด•เตเดคเดฟเดชเตเดชเต†เดŸเตเดคเตเดคเตเดจเตเดจเต, DNSSEC/DANE, DNScrypt, DNS-over-TLS, DNS-over-HTTPS เดคเตเดŸเด™เตเด™เดฟเดฏ เดตเดฟเดตเดฟเดง เดธเดพเด™เตเด•เต‡เดคเดฟเด• เดตเดฟเดฆเตเดฏเด•เดณเตเดŸเต† เดธเดพเดจเตเดจเดฟเดงเตเดฏเด‚ เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเตเดจเตเดจเดฟเดŸเตเดŸเตเด‚, เดธเตเดคเด‚เดญเดฟเดšเตเดšเต. เดธเต†เตผเดตเตผ เดธเตŠเดฒเตเดฏเต‚เดทเดจเตเด•เดณเตเด‚ เด…เดตเดฏเดฟเตฝ เดšเดฟเดฒเดคเตเด‚ เดตเดณเดฐเต†เด•เตเด•เดพเดฒเดฎเดพเดฏเดฟ เดจเดฟเดฒเดตเดฟเดฒเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เด…เดต เดตเตเดฏเดพเดชเด•เดฎเดพเดฏเดฟ เด…เดฑเดฟเดฏเดชเตเดชเต†เดŸเตเดจเตเดจเดคเตเด‚ เดฒเดญเตเดฏเดฎเดพเดฃเต†เด™เตเด•เดฟเตฝ, เด•เตเดฒเดฏเดจเตเดฑเต เดธเต‹เดซเตเดฑเตเดฑเตโ€Œเดตเต†เดฏเดฑเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เด…เดตเดฐเตเดŸเต† เดชเดฟเดจเตเดคเตเดฃ เด†เดตเดถเตเดฏเดฎเตเดณเตเดณเดตเดฏเดพเดฃเต.

เดญเดพเด—เตเดฏเดตเดถเดพเตฝ, เดธเตเดฅเดฟเดคเดฟ เดฎเดพเดฑเตเด•เดฏเดพเดฃเต. เดชเตเดฐเดคเตเดฏเต‡เด•เดฟเดšเตเดšเตเด‚, เดœเดจเดชเตเดฐเดฟเดฏ เดซเดฏเตผเดซเต‹เด•เตเดธเต เดฌเตเดฐเต—เดธเดฑเดฟเดจเตเดฑเต† เดกเต†เดตเดฒเดชเตเดชเตผเดฎเดพเตผ เดชเตเดฐเดธเตเดคเดพเดตเดฟเดšเตเดšเต เดธเตเดฅเดฟเดฐเดธเตเดฅเดฟเดคเดฟเดฏเดพเดฏเดฟ เดชเดฟเดจเตเดคเตเดฃเดพ เดฎเต‹เดกเต เดชเตเดฐเดตเตผเดคเตเดคเดจเด•เตเดทเดฎเดฎเดพเด•เตเด•เดพเดจเตเดณเตเดณ เดชเดฆเตเดงเดคเดฟเด•เดณเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต DNS-เด“เดตเตผ-เดŽเดšเตเดšเตเดŸเดฟเดŸเดฟเดชเดฟเดŽเดธเต (DoH) เด‰เดŸเตป. WWW เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเตเดฑเต† DNS เดŸเตเดฐเดพเดซเดฟเด•เตเด•เดฟเดจเต† เดฎเต‡เตฝเดชเตเดชเดฑเดžเตเดž เดญเต€เดทเดฃเดฟเด•เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดธเด‚เดฐเด•เตเดทเดฟเด•เตเด•เดพเตป เด‡เดคเต เดธเดนเดพเดฏเดฟเด•เตเด•เตเด‚, เดชเด•เตเดทเต‡ เดชเตเดคเดฟเดฏเดต เด…เดตเดคเดฐเดฟเดชเตเดชเดฟเด•เตเด•เดพเตป เดธเดพเดงเตเดฏเดคเดฏเตเดฃเตเดŸเต.

1. DNS-เด“เดตเตผ-เดŽเดšเตเดšเตเดŸเดฟเดŸเดฟเดชเดฟเดŽเดธเต เดชเตเดฐเดถเตเดจเด™เตเด™เตพ

เด’เดฑเตเดฑเดจเต‹เดŸเตเดŸเดคเตเดคเดฟเตฝ, เด‡เดจเตเดฑเตผเดจเต†เดฑเตเดฑเต เดธเต‹เดซเตโ€Œเดฑเตเดฑเตโ€Œเดตเต†เดฏเดฑเดฟเดฒเต‡เด•เตเด•เต DNS-เด“เดตเตผ-เดŽเดšเตเดšเตเดŸเดฟเดŸเดฟเดชเดฟเดŽเดธเต-เดจเตเดฑเต† เดคเตเดŸเด•เตเด•เด‚ เดตเตปเดคเต‹เดคเดฟเตฝ เด…เดตเดคเดฐเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเต เด’เดฐเต เดจเดฒเตเดฒ เดชเตเดฐเดคเดฟเด•เดฐเดฃเดคเตเดคเดฟเดจเต เด•เดพเดฐเดฃเดฎเดพเด•เตเดจเตเดจเต. เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เดชเดฟเดถเดพเดšเต, เด…เดตเตผ เดชเดฑเดฏเตเดจเตเดจเดคเตเดชเต‹เดฒเต†, เดตเดฟเดถเดฆเดพเด‚เดถเด™เตเด™เดณเดฟเดฒเดพเดฃเต.

DoH-เดจเตเดฑเต† เดตเตเดฏเดพเดชเด•เดฎเดพเดฏ เด‰เดชเดฏเต‹เด—เดคเตเดคเดฟเดจเตเดฑเต† เดตเตเดฏเดพเดชเตเดคเดฟ เดชเดฐเดฟเดฎเดฟเดคเดชเตเดชเต†เดŸเตเดคเตเดคเตเดจเตเดจ เด†เดฆเตเดฏเดคเตเดคเต† เดชเตเดฐเดถเตเดจเด‚ เดตเต†เดฌเต เดŸเตเดฐเดพเดซเดฟเด•เตเด•เดฟเตฝ เดฎเดพเดคเตเดฐเด‚ เดถเตเดฐเดฆเตเดง เด•เต‡เดจเตเดฆเตเดฐเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดพเดฃเต. เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚, HTTP เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เดณเตเด‚ เด…เดคเดฟเดจเตเดฑเต† เดจเดฟเดฒเดตเดฟเดฒเต† เดชเดคเดฟเดชเตเดชเดพเดฏ HTTP/2, DoH เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟเดฏเตเดณเตเดณเดคเดพเดฃเต WWW เดฏเตเดŸเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเด‚. เดŽเดจเตเดจเดพเตฝ เด‡เดจเตเดฑเตผเดจเต†เดฑเตเดฑเต เดตเต†เดฌเต เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ. เดŽเดšเตเดšเตเดŸเดฟเดŸเดฟเดชเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเดคเตเดค เด‡เดฎเต†เดฏเดฟเตฝ, เดตเดฟเดตเดฟเดง เดคเตฝเด•เตเดทเดฃ เดธเดจเตเดฆเต‡เดถเดตเดพเดนเด•เตผ, เดซเดฏเตฝ เดŸเตเดฐเดพเตปเดธเตเดซเตผ เดธเดฟเดธเตเดฑเตเดฑเด™เตเด™เตพ, เดฎเตพเดŸเตเดŸเดฟเดฎเต€เดกเดฟเดฏ เดธเตเดŸเตเดฐเต€เดฎเดฟเด‚เด—เต เดฎเตเดคเดฒเดพเดฏเดต เดชเต‹เดฒเตเดณเตเดณ เดœเดจเดชเตเดฐเดฟเดฏ เดธเต‡เดตเดจเด™เตเด™เตพ เดงเดพเดฐเดพเดณเด‚ เด‰เดฃเตเดŸเต. เด…เดคเดฟเดจเดพเตฝ, เดชเดฒ DoH-เดจเต†เดฏเตเด‚ เด’เดฐเต เดชเดฐเดฟเดญเตเดฐเดพเดจเตเดคเดฟเดฏเดพเดฏเดฟ เด•เดฃเด•เตเด•เดพเด•เตเด•เดฟเดฏเดฟเดŸเตเดŸเตเด‚, เดฌเตเดฐเต—เดธเตผ เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดตเดฟเดฆเตเดฏเด•เดณเดฒเตเดฒเดพเดคเต† เดฎเดฑเตเดฑเตŠเดจเตเดจเดฟเดจเตเด‚ เด…เดงเดฟเด• (เด…เดจเดพเดตเดถเตเดฏเดฎเดพเดฏ) เดชเตเดฐเดฏเดคเตเดจเด‚ เด•เต‚เดŸเดพเดคเต† เด‡เดคเต เดฌเดพเดงเด•เดฎเดฒเตเดฒ. เดตเดดเดฟเดฏเดฟเตฝ, DNS-over-TLS เดˆ เดฑเต‹เดณเดฟเดจเดพเดฏเดฟ เด•เต‚เดŸเตเดคเตฝ เดฏเต‹เด—เตเดฏเดจเดพเดฏ เด’เดฐเต เดธเตเดฅเดพเดจเดพเตผเดคเตเดฅเดฟเดฏเดพเดฃเต†เดจเตเดจเต เดคเต‹เดจเตเดจเตเดจเตเดจเต, เด‡เดคเต เดธเตเดฐเด•เตเดทเดฟเดคเดฎเดพเดฏ เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเต TLS เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เดณเดฟเตฝ เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเต DNS เดŸเตเดฐเดพเดซเดฟเด•เตเด•เดฟเดจเตเดฑเต† เดŽเตปเด•เตเดฏเดพเดชเตเดธเตเดฒเต‡เดทเตป เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเต.

เด†เดฆเตเดฏเดคเตเดคเต‡เดคเดฟเดจเต‡เด•เตเด•เดพเตพ เดตเดณเดฐเต† เดชเตเดฐเดพเดงเดพเดจเตเดฏเดฎเตผเดนเดฟเด•เตเด•เตเดจเตเดจ เดฐเดฃเตเดŸเดพเดฎเดคเตเดคเต† เดชเตเดฐเดถเตเดจเด‚, เดฌเตเดฐเต—เดธเตผ เด•เตเดฐเดฎเต€เด•เดฐเดฃเด™เตเด™เดณเดฟเตฝ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดฟเดฏเดฟเดŸเตเดŸเตเดณเตเดณ เด’เดฐเตŠเดฑเตเดฑ DoH เดธเต†เตผเดตเตผ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เด…เดจเตเด•เต‚เดฒเดฎเดพเดฏเดฟ เดกเดฟเดธเตˆเตป เดตเดดเดฟ DNS-เดจเตเดฑเต† เด…เดจเตเดคเตผเดฒเต€เดจเดฎเดพเดฏ เดตเดฟเด•เต‡เดจเตเดฆเตเดฐเต€เด•เดฐเดฃเด‚ เดฏเดฅเดพเตผเดคเตเดฅเดคเตเดคเดฟเตฝ เด‰เดชเต‡เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเดคเดพเดฃเต. เดชเตเดฐเดคเตเดฏเต‡เด•เดฟเดšเตเดšเตเด‚, Cloudflare-เตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เด’เดฐเต เดธเต‡เดตเดจเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเตป Mozilla เดจเดฟเตผเดฆเตเดฆเต‡เดถเดฟเด•เตเด•เตเดจเตเดจเต. เดธเดฎเดพเดจเดฎเดพเดฏ เด’เดฐเต เดธเต‡เดตเดจเด‚ เดฎเดฑเตเดฑเต เดชเตเดฐเดฎเตเด– เด‡เดจเตเดฑเตผเดจเต†เดฑเตเดฑเต เดตเตเดฏเด•เตเดคเดฟเด•เดณเตเด‚, เดชเตเดฐเดคเตเดฏเต‡เด•เดฟเดšเตเดšเต เด—เต‚เด—เดฟเตพ เด†เดฐเด‚เดญเดฟเดšเตเดšเต. เดจเดฟเดฒเดตเดฟเตฝ เดจเดฟเตผเดฆเตเดฆเต‡เดถเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดฐเต‚เดชเดคเตเดคเดฟเตฝ เดกเดฟเดŽเตปเดŽเดธเต-เด“เดตเตผ-เดŽเดšเตเดšเตเดŸเดฟเดŸเดฟเดชเดฟเดŽเดธเต เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเดคเต เด…เดจเตเดคเดฟเดฎ เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เดณเตเดŸเต† เดเดฑเตเดฑเดตเตเด‚ เดตเดฒเดฟเดฏ เดธเต‡เดตเดจเด™เตเด™เดณเต† เด†เดถเตเดฐเดฏเดฟเด•เตเด•เตเดจเตเดจเดคเต เดตเตผเดฆเตเดงเดฟเดชเตเดชเดฟเด•เตเด•เตเด•เดฏเต‡เดฏเตเดณเตเดณเต‚. เดกเดฟเดŽเตปเดŽเดธเต เด…เดจเตเดตเต‡เดทเดฃเด™เตเด™เดณเตเดŸเต† เดตเดฟเดถเด•เดฒเดจเด‚ เดจเตฝเด•เตเดจเตเดจ เดตเดฟเดตเดฐเด™เตเด™เตพเด•เตเด•เต เด…เดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เด•เต‚เดŸเตเดคเตฝ เดกเดพเดฑเตเดฑ เดถเต‡เด–เดฐเดฟเด•เตเด•เดพเดจเตเด‚ เด…เดคเดฟเดจเตเดฑเต† เด•เตƒเดคเตเดฏเดคเดฏเตเด‚ เดชเตเดฐเดธเด•เตเดคเดฟเดฏเตเด‚ เดตเตผเดฆเตเดงเดฟเดชเตเดชเดฟเด•เตเด•เดพเดจเตเด‚ เด•เดดเดฟเดฏเตเดฎเต†เดจเตเดจเดคเต เดฐเดนเดธเตเดฏเดฎเดฒเตเดฒ.

เด‡เด•เตเด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ, เดฐเดšเดฏเดฟเดคเดพเดตเต เดกเดฟเดŽเตปเดŽเดธเต-เด“เดตเตผ-เดŽเดšเตเดšเตเดŸเดฟเดŸเดฟเดชเดฟเดŽเดธเต เด…เดฒเตเดฒ, เดกเดฟเดŽเตปเดŽเดธเต-เด“เดตเตผ-เดŸเดฟเดŽเตฝเดŽเดธเต, เดกเดฟเดŽเตปเดŽเดธเตเดŽเดธเตเด‡เดธเดฟ/เดกเต†เดฏเตโ€Œเตป เดŽเดจเตเดจเดฟเดตเดฏเตโ€Œเด•เตเด•เตŠเดชเตเดชเด‚ เดธเดพเตผเดตเดคเตเดฐเดฟเด•เดตเตเด‚ เดธเตเดฐเด•เตเดทเดฟเดคเดตเตเด‚ เด‡เตปเดฑเตผเดจเต†เดฑเตเดฑเต เดฎเดพเตผเด—เด™เตเด™เดณเตเดŸเต† เด•เต‚เดŸเตเดคเตฝ เด•เต‡เดจเตเดฆเตเดฐเต€เด•เดฐเดฃเดคเตเดคเดฟเดจเต เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดฒเตเดฒเดพเดคเตเดคเดคเตเดฎเดพเดฏ เดตเตปเดคเต‹เดคเดฟเดฒเตเดณเตเดณ เดจเดฟเตผเดตเตเดตเดนเดฃเดคเตเดคเต† เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจเดฏเดพเดณเดพเดฏเดฟเดฐเตเดจเตเดจเต. DNS เดŸเตเดฐเดพเดซเดฟเด•เตเด•เดฟเดจเตเดฑเต† เดธเตเดฐเด•เตเดท เด‰เดฑเดชเตเดชเดพเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต. เดจเดฟเตผเดญเดพเด—เตเดฏเดตเดถเดพเตฝ, เดตเตเดฏเด•เตเดคเดฎเดพเดฏ เด•เดพเดฐเดฃเด™เตเด™เดณเดพเตฝ, เด•เตเดฒเดฏเดจเตเดฑเต เดธเต‹เดซเตโ€Œเดฑเตเดฑเตโ€Œเดตเต†เดฏเดฑเดฟเดฒเต‡เด•เตเด•เต DoH เด‡เดคเดฐเดฎเดพเตผเด—เด™เตเด™เตพเด•เตเด•เตเดณเตเดณ เดฌเดนเตเดœเดจ เดชเดฟเดจเตเดคเตเดฃเดฏเตเดŸเต† เดฆเตเดฐเตเดคเด—เดคเดฟเดฏเดฟเดฒเตเดณเตเดณ เด†เดฎเตเด–เด‚ เดชเตเดฐเดคเต€เด•เตเดทเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเดฟเดฒเตเดฒ, เด…เดคเต เด‡เดชเตเดชเต‹เดดเตเด‚ เดธเตเดฐเด•เตเดทเดพ เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดตเดฟเดฆเตเดฏ เดชเตเดฐเต‡เดฎเดฟเด•เดณเตเดŸเต† เดกเตŠเดฎเต†เดฏเตโ€Œเดจเดพเดฃเต.

เดŽเดจเตเดจเดพเตฝ เด‡เดชเตเดชเต‹เตพ เดžเด™เตเด™เตพเด•เตเด•เต DoH เด‰เดณเตเดณเดคเดฟเดจเดพเตฝ, เด•เต‹เตผเดชเตเดชเดฑเต‡เดทเดจเตเด•เตพ เด…เดตเดฐเตเดŸเต† เดธเต†เตผเดตเดฑเตเด•เดณเดฟเดฒเต‚เดŸเต† เดžเด™เตเด™เดณเตเดŸเต† เดธเตเดตเดจเตเดคเด‚ DNS-เด“เดตเตผ-เดŽเดšเตเดšเตเดŸเดฟเดŸเดฟเดชเดฟเดŽเดธเต เดธเต†เตผเดตเดฑเดฟเดฒเต‡เด•เตเด•เต เดจเดฟเดฐเต€เด•เตเดทเดฃเดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดฐเด•เตเดทเดชเตเดชเต†เดŸเตเดŸเดคเดฟเดจเต เดถเต‡เดทเด‚ เดŽเดจเตเดคเตเด•เตŠเดฃเตเดŸเต เด…เดคเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดฐเตเดคเต?

2. DNS-over-HTTPS เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เตพ

เดจเดฟเดฒเดตเดพเดฐเด‚ เดจเต‹เด•เตเด•เดฟเดฏเดพเตฝ RFC8484 DNS-over-HTTPS เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เตพ เดตเดฟเดตเดฐเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เด‡เดคเต เดฏเดฅเดพเตผเดคเตเดฅเดคเตเดคเดฟเตฝ, HTTP/2 เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เดณเดฟเตฝ เด’เดฐเต เดธเดพเดงเดพเดฐเดฃ DNS เดชเดพเด•เตเด•เต‡เดœเต เด‰เตพเด•เตเด•เตŠเดณเตเดณเดพเตป เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดตเต†เดฌเต API เด†เดฃเต†เดจเตเดจเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด•เดพเดฃเดพเตป เด•เดดเดฟเดฏเตเด‚. เด‡เดคเต เดชเตเดฐเดคเตเดฏเต‡เด• HTTP เดคเดฒเด•เตเด•เต†เดŸเตเดŸเตเด•เดณเดฟเดฒเต‚เดŸเต†เดฏเตเด‚ เดŸเตเดฐเดพเตปเดธเตเดฎเดฟเดฑเตเดฑเต เดšเต†เดฏเตเดค DNS เดกเดพเดฑเตเดฑเดฏเตเดŸเต† เดฌเตˆเดจเดฑเดฟ เดซเต‹เตผเดฎเดพเดฑเตเดฑเดฟเดจเตเดฑเต† เดชเดฐเดฟเดตเตผเดคเตเดคเดจเดคเตเดคเดฟเดฒเต‚เดŸเต†เดฏเตเด‚ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเต (เด•เดพเดฃเตเด•. RFC1035 เดคเตเดŸเตผเดจเตเดจเตเดณเตเดณ เดชเตเดฐเดฎเดพเดฃเด™เตเด™เดณเตเด‚) เด…เดต เด•เตˆเดฎเดพเดฑเดพเดจเตเด‚ เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เดพเดจเตเด‚ เด†เดตเดถเตเดฏเดฎเดพเดฏ เดฎเต†เดฑเตเดฑเดพเดกเดพเดฑเตเดฑเดฏเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเดจเตเด‚ เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดซเต‹เดฎเดฟเดฒเต‡เด•เตเด•เต.

เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเต เด…เดจเตเดธเดฐเดฟเดšเตเดšเต, HTTP/2 เด‰เด‚ เดธเตเดฐเด•เตเดทเดฟเดคเดฎเดพเดฏ TLS เด•เดฃเด•เตเดทเดจเตเด‚ เดฎเดพเดคเตเดฐเดฎเต‡ เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เต‚.

เด’เดฐเต เดกเดฟเดŽเตปเดŽเดธเต เด…เดญเตเดฏเตผเดคเตเดฅเดจ เด…เดฏเดฏเตเด•เตเด•เตเดจเตเดจเดคเต เดธเดพเดงเดพเดฐเดฃ GET, POST เดฐเต€เดคเดฟเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดšเต†เดฏเตเดฏเดพเด‚. เด†เดฆเตเดฏ เดธเดจเตเดฆเตผเดญเดคเตเดคเดฟเตฝ, เด…เดญเตเดฏเตผเดคเตเดฅเดจ เด…เดŸเดฟเดธเตเดฅเดพเดจ64URL-เดŽเตปเด•เต‹เดกเตเดšเต†เดฏเตโ€Œเดค เดธเตโ€ŒเดŸเตเดฐเดฟเด‚เด—เดฟเดฒเต‡เด•เตเด•เตเด‚ เดฐเดฃเตเดŸเดพเดฎเดคเตเดคเต‡เดคเดฟเตฝ, เดฌเตˆเดจเดฑเดฟ เดฐเต‚เดชเดคเตเดคเดฟเดฒเตเดณเตเดณ 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

เดคเดฒเด•เตเด•เต†เดŸเตเดŸเดฟเดฒเตเด‚ เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เตเด• เด•เดพเดทเต† เดจเดฟเดฏเดจเตเดคเตเดฐเดฃเด‚: เดตเต†เดฌเต เดธเต†เตผเดตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดชเตเดฐเดคเดฟเด•เดฐเดฃเดคเตเดคเดฟเตฝ. เดชเดฐเดพเดฎเต€เดฑเตเดฑเดฑเดฟเตฝ เดชเดฐเดฎเดพเดตเดงเดฟ เดชเตเดฐเดพเดฏเด‚ เดคเดฟเดฐเดฟเด•เต† เดจเตฝเด•เตเดจเตเดจ DNS เดฑเต†เด•เตเด•เต‹เตผเดกเดฟเดจเดพเดฏเตเดณเตเดณ TTL เดฎเต‚เดฒเตเดฏเด‚ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต (เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด…เดตเดฏเตเดŸเต† เด’เดฐเต เดธเต†เดฑเตเดฑเต เดคเดฟเดฐเดฟเด•เต† เดจเตฝเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ เดเดฑเตเดฑเดตเตเด‚ เด•เตเดฑเดžเตเดž เดฎเต‚เดฒเตเดฏเด‚).

เดฎเตเด•เดณเดฟเตฝ เดชเดฑเดžเตเดžเดตเดฏเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟ, เด’เดฐเต DoH เดธเต†เตผเดตเดฑเดฟเดจเตเดฑเต† เดชเตเดฐเดตเตผเดคเตเดคเดจเด‚ เดจเดฟเดฐเดตเดงเดฟ เด˜เดŸเตเดŸเด™เตเด™เตพ เด‰เตพเด•เตเด•เตŠเดณเตเดณเตเดจเตเดจเต.

  • เด’เดฐเต HTTP เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เตเด•. เด‡เดคเตŠเดฐเต GET เด†เดฃเต†เด™เตเด•เดฟเตฝ, base64URL เดŽเตปเด•เต‹เดกเดฟเด‚เด—เดฟเตฝ เดจเดฟเดจเตเดจเต เดชเดพเด•เตเด•เดฑเตเดฑเต เดกเต€เด•เต‹เดกเต เดšเต†เดฏเตเดฏเตเด•.
  • เดˆ เดชเดพเด•เตเด•เดฑเตเดฑเต DNS เดธเต†เตผเดตเดฑเดฟเดฒเต‡เด•เตเด•เต เด…เดฏเดฏเตเด•เตเด•เตเด•.
  • DNS เดธเต†เตผเดตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต เด’เดฐเต เดชเตเดฐเดคเดฟเด•เดฐเดฃเด‚ เดจเต‡เดŸเตเด•
  • เดฒเดญเดฟเดšเตเดš เดฐเต‡เด–เด•เดณเดฟเตฝ เดเดฑเตเดฑเดตเตเด‚ เด•เตเดฑเดžเตเดž TTL เดฎเต‚เดฒเตเดฏเด‚ เด•เดฃเตเดŸเต†เดคเตเดคเตเด•.
  • HTTP เดตเดดเดฟ เด•เตเดฒเดฏเดจเตเดฑเดฟเดจเต เด’เดฐเต เดชเตเดฐเดคเดฟเด•เดฐเดฃเด‚ เดจเตฝเด•เตเด•.

3. เดจเดฟเด™เตเด™เดณเตเดŸเต† เดธเตเดตเดจเตเดคเด‚ DNS-เด“เดตเตผ-เดŽเดšเตเดšเตเดŸเดฟเดŸเดฟเดชเดฟเดŽเดธเต เดธเต†เตผเดตเตผ

เดจเดฟเด™เตเด™เดณเตเดŸเต† เดธเตเดตเดจเตเดคเด‚ DNS-เด“เดตเตผ-HTTPS เดธเต†เตผเดตเตผ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดเดฑเตเดฑเดตเตเด‚ เดฒเดณเดฟเดคเดตเตเด‚ เดตเต‡เด—เดคเดฏเต‡เดฑเดฟเดฏเดคเตเด‚ เดซเดฒเดชเตเดฐเดฆเดตเตเดฎเดพเดฏ เดฎเดพเตผเด—เตเด—เด‚ เด’เดฐเต HTTP/2 เดตเต†เดฌเต เดธเต†เตผเดตเตผ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด• เดŽเดจเตเดจเดคเดพเดฃเต เดนเตเด•เตเดธเดจเตเดฎเตเด•เตเดธเตŠ, เดฐเดšเดฏเดฟเดคเดพเดตเต เด‡เดคเดฟเดจเด•เด‚ เดคเดจเตเดจเต† เดธเด‚เด•เตเดทเดฟเดชเตเดคเดฎเดพเดฏเดฟ เดŽเดดเตเดคเดฟเดฏเดฟเดŸเตเดŸเตเดฃเตเดŸเต (เด•เดพเดฃเตเด• "เด‰เดฏเตผเดจเตเดจ เดชเตเดฐเด•เดŸเดจเดฎเตเดณเตเดณ H2O เดตเต†เดฌเต เดธเต†เตผเดตเตผ").

H2O-เดฏเดฟเตฝ เดคเดจเตเดจเต† เดธเด‚เดฏเต‹เดœเดฟเดชเตเดชเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เด‡เดจเตเดฑเตผเดชเตเดฐเต†เดฑเตเดฑเตผ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดจเดฟเด™เตเด™เดณเตเดŸเต† เดธเตเดตเดจเตเดคเด‚ DoH เดธเต†เตผเดตเดฑเดฟเดจเตเดฑเต† เดŽเดฒเตเดฒเดพ เด•เต‹เดกเตเด•เดณเตเด‚ เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏเดฟ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚ เดŽเดจเตเดจ เดตเดธเตเดคเตเดค เดˆ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเดชเตเดชเดฟเดจเต† เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจเต. เดฎเตบเด•เดŸเตเดŸ. เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเต เดฒเตˆเดฌเตเดฐเดฑเดฟเด•เตพเด•เตเด•เต เดชเตเดฑเดฎเต‡, 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 เดŽเด‚เดฑเต‚เดฌเดฟเดฏเดฟเตฝ เดŽเดดเตเดคเดฟเดฏเดคเตเด‚ เดนเดพเตปเดกเตโ€Œเดฒเตผ เด“เดชเตเดทเดจเดฟเดฒเต‚เดŸเต† เดตเดฟเดณเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดจเตเดจเดคเตเดฎเดพเดฏ เดžเด™เตเด™เดณเตเดŸเต† DNS-เด“เดตเตผ-เดŽเดšเตเดšเตเดŸเดฟเดŸเดฟเดชเดฟเดŽเดธเต เดธเต†เตผเดตเดฑเดพเดฃเต เดฏเดฅเดพเตผเดคเตเดฅเดคเตเดคเดฟเตฝ เด‰เดคเตเดคเดฐเดตเดพเดฆเดฟ. 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 เดชเดพเด•เตเด•เดฑเตเดฑเตเด•เตพ เดชเตเดฐเต‹เดธเดธเตเดธเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด‰เดคเตเดคเดฐเดตเดพเดฆเดฟเดคเตเดคเด‚ เดชเตเดฐเดพเดฆเต‡เดถเดฟเด• เด•เดพเดทเดฟเด‚เด—เต เดธเต†เตผเดตเดฑเดฟเดจเดพเดฃเต†เดจเตเดจ เด•เดพเดฐเตเดฏเด‚ เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เตเด• เดชเดฐเดฟเดงเดฟเดฏเดฟเดฒเตเดฒเดพเดคเตเดค เดธเดพเดงเดพเดฐเดฃ FreeBSD เดตเดฟเดคเดฐเดฃเดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเต. เดธเตเดฐเด•เตเดทเดพ เดตเต€เด•เตเดทเดฃเด•เต‹เดฃเดฟเตฝ เดจเดฟเดจเตเดจเต, เด‡เดคเดพเดฃเต เดเดฑเตเดฑเดตเตเด‚ เดฎเดฟเด•เดšเตเดš เดชเดฐเดฟเดนเดพเดฐเด‚. เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เดฎเดพเดฑเตเดฑเดฟเดธเตเดฅเดพเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเตฝ เดจเดฟเดจเตเดจเต เด’เดจเตเดจเตเด‚ เดจเดฟเด™เตเด™เดณเต† เดคเดŸเดฏเตเดจเตเดจเดฟเดฒเตเดฒ เดฒเต‡เดพเด•เตเด•เตฝเดนเต‡เดพเดธเตเดฑเตเดฑเดฟเตฝ เดจเดฟเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเตป เด‰เดฆเตเดฆเต‡เดถเดฟเด•เตเด•เตเดจเตเดจ เดฎเดฑเตเดฑเตŠเดฐเต 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 เดกเดฟเดŽเตปเดŽเดธเต เดธเต†เตผเดตเตผ เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดชเตเดฐเต‹เดธเดธเตเดธเต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดคเต.

เด‡เดจเดฟ เด…เดตเดถเต‡เดทเดฟเด•เตเด•เตเดจเตเดจเดคเต เดซเดฏเตผเดซเต‹เด•เตเดธเต เดฌเตเดฐเต—เดธเดฑเดฟเตฝ เดžเด™เตเด™เดณเตเดŸเต† เดธเต†เตผเดตเตผ เดธเดœเต€เดตเดฎเดพเด•เตเด•เตเด• เดŽเดจเตเดจเดคเดพเดฃเต. เด‡เดคเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต, เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดชเต‡เดœเตเด•เดณเดฟเตฝ เดจเดฟเด™เตเด™เตพ เดจเดฟเดฐเดตเดงเดฟ เด•เตเดฐเดฎเต€เด•เดฐเดฃเด™เตเด™เตพ เดฎเดพเดฑเตเดฑเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต about: config.

เดžเด™เตเด™เตพ เดžเด™เตเด™เดณเตเดŸเต† DNS-เด“เดตเตผ-HTTPS เดธเต†เตผเดตเตผ เด‰เดฏเตผเดคเตเดคเตเดจเตเดจเต

เด’เดจเตเดจเดพเดฎเดคเดพเดฏเดฟ, เดฌเตเดฐเต—เดธเตผ DNS เดตเดฟเดตเดฐเด™เตเด™เตพ เด…เดญเตเดฏเตผเดคเตเดฅเดฟเด•เตเด•เตเดจเตเดจ เดžเด™เตเด™เดณเตเดŸเต† API-เดฏเตเดŸเต† เดตเดฟเดฒเดพเดธเดฎเดพเดฃเดฟเดคเต network.trr.uri. DNS เด†เด•เตเดธเดธเต เดšเต†เดฏเตเดฏเดพเดคเต† เดคเดจเตเดจเต† เดฌเตเดฐเต—เดธเตผ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดธเตเดฐเด•เตเดทเดฟเดคเดฎเดพเดฏ IP เดฑเต†เดธเดฒเตเดฏเต‚เดทเดจเตเดตเต‡เดฃเตเดŸเดฟ เดˆ URL-เตฝ เดจเดฟเดจเตเดจเต เดกเตŠเดฎเต†เดฏเตเตป IP เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดพเดจเตเด‚ เดถเตเดชเดพเตผเดถ เดšเต†เดฏเตเดฏเตเดจเตเดจเต. network.trr.bootstrapAddress. เด’เดŸเตเดตเดฟเตฝ, เดชเดฐเดพเดฎเต€เดฑเตเดฑเตผ เดคเดจเตเดจเต† network.trr.mode DoH เดจเตเดฑเต† เด‰เดชเดฏเต‹เด—เด‚ เด‰เตพเดชเตเดชเต†เดŸเต†. เดฎเต‚เดฒเตเดฏเด‚ "3" เด†เดฏเดฟ เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต, เดจเต†เดฏเดฟเด‚ เดฑเต†เดธเดฒเตเดฏเต‚เดทเดจเดพเดฏเดฟ DNS-เด“เดตเตผ-เดŽเดšเตเดšเตเดŸเดฟเดŸเดฟเดชเดฟเดŽเดธเต เดฎเดพเดคเตเดฐเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดฌเตเดฐเต—เดธเดฑเดฟเดจเต† เดชเตเดฐเต‡เดฐเดฟเดชเตเดชเดฟเด•เตเด•เตเด‚, เด…เดคเต‡เดธเดฎเดฏเด‚ เด•เต‚เดŸเตเดคเตฝ เดตเดฟเดถเตเดตเดธเดจเต€เดฏเดตเตเด‚ เดธเตเดฐเด•เตเดทเดฟเดคเดตเตเดฎเดพเดฏ "2" DoH-เดจเต เดฎเตเตปเด—เดฃเดจ เดจเตฝเด•เตเด‚, เดธเดพเดงเดพเดฐเดฃ DNS เดฒเตเด•เตเด•เตเด…เดชเตเดชเต เด’เดฐเต เดซเดพเตพเดฌเดพเด•เตเด•เต เด“เดชเตเดทเดจเดพเดฏเดฟ เด…เดตเดถเต‡เดทเดฟเด•เตเด•เตเดจเตเดจเต.

5. เดฒเดพเดญเด‚!

เดฒเต‡เด–เดจเด‚ เดธเดนเดพเดฏเด•เดฎเดพเดฏเดฟเดฐเตเดจเตเดจเต‹? เด…เดชเตเดชเต‹เตพ เดฆเดฏเดตเดพเดฏเดฟ เดฒเดœเตเดœเดฟเด•เตเด•เดฐเตเดคเต, เดธเด‚เดญเดพเดตเดจ เดซเต‹เดฎเดฟเดฒเต‚เดŸเต† (เดšเตเดตเดŸเต†เดฏเตเดณเตเดณ) เดชเดฃเด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเด•.

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•