แƒฉแƒ•แƒ”แƒœ แƒ•แƒ–แƒ แƒ“แƒ˜แƒ— แƒฉแƒ•แƒ”แƒœแƒก DNS-แƒ–แƒ”-HTTPS แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒก

DNS แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒแƒกแƒžแƒ”แƒฅแƒขแƒก แƒแƒ•แƒขแƒแƒ แƒ˜ แƒฃแƒ™แƒ•แƒ” แƒแƒ แƒแƒ”แƒ แƒ—แƒฎแƒ”แƒš แƒจแƒ”แƒ”แƒฎแƒ แƒ‘แƒ”แƒ•แƒ แƒฏแƒ”แƒ  แƒกแƒขแƒแƒขแƒ˜แƒ”แƒ‘แƒ˜ แƒ’แƒแƒ›แƒแƒฅแƒ•แƒ”แƒงแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ‘แƒšแƒแƒ’แƒ˜แƒก แƒœแƒแƒฌแƒ˜แƒšแƒแƒ“. แƒแƒ›แƒแƒ•แƒ“แƒ แƒแƒฃแƒšแƒแƒ“, แƒ›แƒ—แƒแƒ•แƒแƒ แƒ˜ แƒแƒฅแƒชแƒ”แƒœแƒขแƒ˜ แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก แƒ™แƒ”แƒ—แƒ“แƒ”แƒ‘แƒแƒ“แƒ แƒแƒ› แƒกแƒแƒ™แƒ•แƒแƒœแƒซแƒ แƒ˜แƒœแƒขแƒ”แƒ แƒœแƒ”แƒข แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒก แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒฃแƒ›แƒฏแƒแƒ‘แƒ”แƒกแƒ”แƒ‘แƒแƒ–แƒ”.

แƒฉแƒ•แƒ”แƒœ แƒ•แƒ–แƒ แƒ“แƒ˜แƒ— แƒฉแƒ•แƒ”แƒœแƒก DNS-แƒ–แƒ”-HTTPS แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒก

แƒ‘แƒแƒšแƒ แƒ“แƒ แƒแƒ›แƒ“แƒ”, แƒ›แƒ˜แƒฃแƒฎแƒ”แƒ“แƒแƒ•แƒแƒ“ DNS แƒขแƒ แƒแƒคแƒ˜แƒ™แƒ˜แƒก แƒแƒจแƒ™แƒแƒ แƒ แƒ“แƒแƒฃแƒชแƒ•แƒ”แƒšแƒแƒ‘แƒ˜แƒกแƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒแƒ˜แƒœแƒช, แƒฃแƒ›แƒ”แƒขแƒ”แƒกแƒฌแƒ˜แƒšแƒแƒ“, แƒแƒจแƒ™แƒแƒ แƒแƒ“ แƒแƒ แƒ˜แƒก แƒ’แƒแƒ“แƒแƒชแƒ”แƒ›แƒฃแƒšแƒ˜ แƒžแƒ แƒแƒ•แƒแƒ˜แƒ“แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ•แƒœแƒ” แƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ”แƒ‘แƒ–แƒ”, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒชแƒ“แƒ˜แƒšแƒแƒ‘แƒ”แƒœ แƒ—แƒแƒ•แƒ˜แƒแƒœแƒ—แƒ˜ แƒจแƒ”แƒ›แƒแƒกแƒแƒ•แƒšแƒ˜แƒก แƒ’แƒแƒ–แƒ แƒ“แƒแƒก แƒ™แƒแƒœแƒขแƒ”แƒœแƒขแƒจแƒ˜ แƒ แƒ”แƒ™แƒšแƒแƒ›แƒ˜แƒก แƒฉแƒแƒกแƒ›แƒ˜แƒ—, แƒกแƒแƒฎแƒ”แƒšแƒ›แƒฌแƒ˜แƒคแƒ แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒแƒ’แƒ”แƒœแƒขแƒแƒ”แƒ‘แƒ˜ แƒ“แƒ แƒชแƒ”แƒœแƒ–แƒฃแƒ แƒ, แƒ˜แƒกแƒ”แƒ•แƒ” แƒ แƒแƒ’แƒแƒ แƒช แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ™แƒ แƒ˜แƒ›แƒ˜แƒœแƒแƒšแƒ”แƒ‘แƒ˜, แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜ แƒ›แƒ˜แƒกแƒ˜ แƒ“แƒแƒชแƒ•แƒ˜แƒก แƒ’แƒแƒซแƒšแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ, แƒ›แƒ˜แƒฃแƒฎแƒ”แƒ“แƒแƒ•แƒแƒ“ แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒขแƒ”แƒฅแƒœแƒแƒšแƒแƒ’แƒ˜แƒ”แƒ‘แƒ˜แƒก แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒ˜แƒกแƒ, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ DNSSEC/DANE, DNScrypt, DNS-over-TLS แƒ“แƒ DNS-over-HTTPS, แƒจแƒ”แƒฉแƒ”แƒ แƒ“แƒ. แƒ“แƒ แƒ—แƒฃ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜, แƒ“แƒ แƒ–แƒแƒ’แƒ˜แƒ”แƒ แƒ—แƒ˜ แƒ›แƒแƒ—แƒ’แƒแƒœแƒ˜ แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒ“แƒ˜แƒ“แƒ˜ แƒฎแƒœแƒ˜แƒก แƒ’แƒแƒœแƒ›แƒแƒ•แƒšแƒแƒ‘แƒแƒจแƒ˜ แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก, แƒคแƒแƒ แƒ—แƒแƒ“ แƒแƒ แƒ˜แƒก แƒชแƒœแƒแƒ‘แƒ˜แƒšแƒ˜ แƒ“แƒ แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜, แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ˜แƒก แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒฃแƒšแƒ˜ แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒ˜แƒก แƒ›แƒฎแƒแƒ แƒ“แƒแƒญแƒ”แƒ แƒ แƒกแƒแƒกแƒฃแƒ แƒ•แƒ”แƒšแƒก แƒขแƒแƒ•แƒ”แƒ‘แƒก.

แƒกแƒแƒ‘แƒ”แƒ“แƒœแƒ˜แƒ”แƒ แƒแƒ“, แƒกแƒ˜แƒขแƒฃแƒแƒชแƒ˜แƒ แƒ˜แƒชแƒ•แƒšแƒ”แƒ‘แƒ. แƒ™แƒ”แƒ แƒซแƒแƒ“, แƒžแƒแƒžแƒฃแƒšแƒแƒ แƒฃแƒšแƒ˜ Firefox แƒ‘แƒ แƒแƒฃแƒ–แƒ”แƒ แƒ˜แƒก แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ”แƒ‘แƒ˜ แƒ’แƒแƒœแƒแƒชแƒฎแƒแƒ“แƒ แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒแƒ“ แƒ›แƒฎแƒแƒ แƒ“แƒแƒญแƒ”แƒ แƒ˜แƒก แƒ แƒ”แƒŸแƒ˜แƒ›แƒ˜แƒก แƒฉแƒแƒ แƒ—แƒ•แƒ˜แƒก แƒ’แƒ”แƒ’แƒ›แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ DNS- แƒ–แƒ” แƒ›แƒ”แƒขแƒ˜ HTTPS (DoH) แƒ›แƒแƒšแƒ”. แƒ”แƒก แƒฎแƒ”แƒšแƒก แƒจแƒ”แƒฃแƒฌแƒงแƒแƒ‘แƒก WWW แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก DNS แƒขแƒ แƒแƒคแƒ˜แƒ™แƒ˜แƒก แƒ“แƒแƒชแƒ•แƒแƒก แƒ–แƒ”แƒ›แƒแƒแƒฆแƒœแƒ˜แƒจแƒœแƒฃแƒšแƒ˜ แƒกแƒแƒคแƒ แƒ—แƒฎแƒ”แƒ”แƒ‘แƒ˜แƒกแƒ’แƒแƒœ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒžแƒแƒขแƒ”แƒœแƒชแƒ˜แƒฃแƒ แƒแƒ“ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒจแƒ”แƒ›แƒแƒ˜แƒขแƒแƒœแƒแƒก แƒแƒฎแƒแƒšแƒ˜ แƒกแƒแƒคแƒ แƒ—แƒฎแƒ”แƒ”แƒ‘แƒ˜.

1. DNS-แƒ–แƒ”-HTTPS แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ”แƒ‘แƒ˜

แƒ”แƒ แƒ—แƒ˜ แƒจแƒ”แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ—, DNS-แƒ–แƒ”-HTTPS-แƒ˜แƒก แƒกแƒแƒฌแƒงแƒ˜แƒกแƒ˜ แƒ›แƒแƒกแƒแƒ‘แƒ แƒ˜แƒ•แƒ˜ แƒ“แƒแƒœแƒ”แƒ แƒ’แƒ•แƒ แƒ˜แƒœแƒขแƒ”แƒ แƒœแƒ”แƒข แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒฃแƒš แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒแƒจแƒ˜ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ“แƒแƒ“แƒ”แƒ‘แƒ˜แƒ— แƒ แƒ”แƒแƒฅแƒชแƒ˜แƒแƒก แƒ˜แƒฌแƒ•แƒ”แƒ•แƒก. แƒ—แƒฃแƒ›แƒชแƒ, แƒ”แƒจแƒ›แƒแƒ™แƒ˜, แƒ แƒแƒ’แƒแƒ แƒช แƒแƒ›แƒ‘แƒแƒ‘แƒ”แƒœ, แƒ“แƒ”แƒขแƒแƒšแƒ”แƒ‘แƒจแƒ˜แƒ.

แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ–แƒฆแƒฃแƒ“แƒแƒ•แƒก DoH-แƒ˜แƒก แƒคแƒแƒ แƒ—แƒ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒคแƒแƒ แƒ’แƒšแƒ”แƒ‘แƒก, แƒแƒ แƒ˜แƒก แƒ›แƒ˜แƒกแƒ˜ แƒคแƒแƒ™แƒฃแƒกแƒ˜แƒ แƒ”แƒ‘แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ•แƒ”แƒ‘ แƒขแƒ แƒแƒคแƒ˜แƒ™แƒ–แƒ”. แƒ›แƒแƒ แƒ—แƒšแƒแƒช, HTTP แƒžแƒ แƒแƒขแƒแƒ™แƒแƒšแƒ˜ แƒ“แƒ แƒ›แƒ˜แƒกแƒ˜ แƒแƒ›แƒŸแƒแƒ›แƒ˜แƒœแƒ“แƒ”แƒšแƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ HTTP/2, แƒ แƒแƒ›แƒ”แƒšแƒ–แƒ”แƒช แƒ“แƒแƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ DoH, แƒแƒ แƒ˜แƒก WWW-แƒ˜แƒก แƒกแƒแƒคแƒฃแƒซแƒ•แƒ”แƒšแƒ˜. แƒ›แƒแƒ’แƒ แƒแƒ› แƒ˜แƒœแƒขแƒ”แƒ แƒœแƒ”แƒขแƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ•แƒ”แƒ‘. แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒฃแƒแƒ›แƒ แƒแƒ•แƒ˜ แƒžแƒแƒžแƒฃแƒšแƒแƒ แƒฃแƒšแƒ˜ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ แƒ”แƒšแƒคแƒแƒกแƒขแƒ, แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒ›แƒงแƒ˜แƒกแƒ˜แƒ”แƒ แƒ˜ แƒ›แƒ”แƒกแƒ˜แƒœแƒฏแƒ”แƒ แƒ”แƒ‘แƒ˜, แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ“แƒแƒชแƒ”แƒ›แƒ˜แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ”แƒ‘แƒ˜, แƒ›แƒฃแƒšแƒขแƒ˜แƒ›แƒ”แƒ“แƒ˜แƒฃแƒ แƒ˜ แƒœแƒแƒ™แƒแƒ“แƒ˜ แƒ“แƒ แƒ.แƒจ., แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒแƒ  แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ”แƒœ HTTP-แƒก. แƒแƒ›แƒ แƒ˜แƒ’แƒแƒ“, แƒ›แƒ˜แƒฃแƒฎแƒ”แƒ“แƒแƒ•แƒแƒ“ แƒ˜แƒ›แƒ˜แƒกแƒ, แƒ แƒแƒ› DoH-แƒ˜แƒก แƒ›แƒ แƒแƒ•แƒแƒšแƒ˜ แƒฌแƒแƒ แƒ›แƒแƒ›แƒแƒ“แƒ’แƒ”แƒœแƒ”แƒšแƒ˜ แƒžแƒแƒœแƒแƒชแƒ”แƒแƒก แƒแƒฆแƒ˜แƒฅแƒ•แƒแƒ›แƒก, แƒแƒฆแƒ›แƒแƒฉแƒœแƒ“แƒ”แƒ‘แƒ, แƒ แƒแƒ› แƒ˜แƒ’แƒ˜ แƒ’แƒแƒ›แƒแƒฃแƒกแƒแƒ“แƒ”แƒ’แƒแƒ แƒ˜แƒ แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—แƒ˜ (แƒ“แƒ แƒแƒ แƒแƒกแƒแƒญแƒ˜แƒ แƒ) แƒซแƒแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”, แƒ‘แƒ แƒแƒฃแƒ–แƒ”แƒ แƒ˜แƒก แƒขแƒ”แƒฅแƒœแƒแƒšแƒแƒ’แƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ“แƒ. แƒกแƒฎแƒ•แƒแƒ—แƒ แƒจแƒแƒ แƒ˜แƒก, DNS-over-TLS แƒ’แƒแƒ›แƒแƒ˜แƒงแƒฃแƒ แƒ”แƒ‘แƒ แƒ‘แƒ”แƒ•แƒ แƒแƒ“ แƒฃแƒคแƒ แƒ แƒฆแƒ˜แƒ แƒกแƒ”แƒฃแƒšแƒ˜ แƒ™แƒแƒœแƒ“แƒ˜แƒ“แƒแƒขแƒ˜ แƒแƒ› แƒ แƒแƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒก แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒฃแƒšแƒ˜ DNS แƒขแƒ แƒแƒคแƒ˜แƒ™แƒ˜แƒก แƒ˜แƒœแƒ™แƒแƒžแƒกแƒฃแƒšแƒแƒชแƒ˜แƒแƒก แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒ แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒฃแƒšแƒ˜ TLS แƒžแƒ แƒแƒขแƒแƒ™แƒแƒšแƒจแƒ˜.

แƒ›แƒ”แƒแƒ แƒ” แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒžแƒแƒขแƒ”แƒœแƒชแƒ˜แƒฃแƒ แƒแƒ“ แƒ‘แƒ”แƒ•แƒ แƒแƒ“ แƒฃแƒคแƒ แƒ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜แƒ, แƒ•แƒ˜แƒ“แƒ แƒ” แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜, แƒแƒ แƒ˜แƒก แƒ“แƒ˜แƒ–แƒแƒ˜แƒœแƒ˜แƒก แƒ›แƒ˜แƒ”แƒ  DNS-แƒ˜แƒก แƒ—แƒแƒœแƒ“แƒแƒงแƒแƒšแƒ˜แƒšแƒ˜ แƒ“แƒ”แƒชแƒ”แƒœแƒขแƒ แƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒคแƒแƒฅแƒขแƒแƒ‘แƒ แƒ˜แƒ•แƒ˜ แƒ›แƒ˜แƒขแƒแƒ•แƒ”แƒ‘แƒ แƒ‘แƒ แƒแƒฃแƒ–แƒ”แƒ แƒ˜แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒจแƒ˜ แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ”แƒ แƒ—แƒ˜ DoH แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒแƒ“. แƒ™แƒ”แƒ แƒซแƒแƒ“, Mozilla แƒ’แƒ—แƒแƒ•แƒแƒ–แƒแƒ‘แƒ— Cloudflare-แƒ˜แƒก แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒแƒก. แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ˜ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜ แƒแƒกแƒ”แƒ•แƒ” แƒแƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ“แƒ แƒกแƒฎแƒ•แƒ แƒ’แƒแƒ›แƒแƒฉแƒ”แƒœแƒ˜แƒšแƒ›แƒ แƒ˜แƒœแƒขแƒ”แƒ แƒœแƒ”แƒข แƒคแƒ˜แƒ’แƒฃแƒ แƒ”แƒ‘แƒ›แƒ, แƒ™แƒ”แƒ แƒซแƒแƒ“ Google-แƒ›แƒ. แƒ’แƒแƒ›แƒแƒ“แƒ˜แƒก, แƒ แƒแƒ› DNS-แƒ–แƒ”-HTTPS-แƒ˜แƒก แƒ“แƒแƒœแƒ”แƒ แƒ’แƒ•แƒ แƒ˜แƒ› แƒคแƒแƒ แƒ›แƒ˜แƒ—, แƒ แƒแƒ›แƒ”แƒšแƒจแƒ˜แƒช แƒ˜แƒก แƒแƒ›แƒŸแƒแƒ›แƒแƒ“ แƒแƒ แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒ—แƒแƒ•แƒแƒ–แƒ”แƒ‘แƒฃแƒšแƒ˜, แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ–แƒ แƒ“แƒ˜แƒก แƒกแƒแƒ‘แƒแƒšแƒแƒ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒแƒก แƒฃแƒ“แƒ˜แƒ“แƒ”แƒก แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ–แƒ”. แƒกแƒแƒ˜แƒ“แƒฃแƒ›แƒšแƒ แƒแƒ  แƒแƒ แƒ˜แƒก, แƒ แƒแƒ› DNS แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒก แƒแƒœแƒแƒšแƒ˜แƒ–แƒ›แƒ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ›แƒแƒ’แƒ•แƒแƒฌแƒแƒ“แƒแƒก แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ, แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒจแƒ”แƒแƒ’แƒ แƒแƒ•แƒแƒก แƒ™แƒ˜แƒ“แƒ”แƒ• แƒฃแƒคแƒ แƒ แƒ›แƒ”แƒขแƒ˜ แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ แƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒแƒกแƒ”แƒ•แƒ” แƒ’แƒแƒ–แƒแƒ แƒ“แƒแƒก แƒ›แƒ˜แƒกแƒ˜ แƒกแƒ˜แƒ–แƒฃแƒกแƒขแƒ” แƒ“แƒ แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒแƒ‘แƒ.

แƒแƒ› แƒ›แƒฎแƒ แƒ˜แƒ•, แƒแƒ•แƒขแƒแƒ แƒ˜ แƒ˜แƒงแƒ แƒ“แƒ แƒ แƒฉแƒ”แƒ‘แƒ แƒแƒ แƒ DNS-over-HTTPS-แƒ˜แƒก, แƒแƒ แƒแƒ›แƒ”แƒ“ DNS-over-TLS-แƒ—แƒแƒœ แƒ”แƒ แƒ—แƒแƒ“ DNSSEC/DANE-แƒกแƒ—แƒแƒœ แƒ”แƒ แƒ—แƒแƒ“ แƒ›แƒแƒกแƒแƒ‘แƒ แƒ˜แƒ•แƒ˜ แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ›แƒฎแƒ แƒ”, แƒ แƒแƒ’แƒแƒ แƒช แƒฃแƒœแƒ˜แƒ•แƒ”แƒ แƒกแƒแƒšแƒฃแƒ แƒ˜, แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒ แƒ“แƒ แƒแƒ แƒแƒฎแƒ”แƒšแƒกแƒแƒงแƒ แƒ”แƒšแƒ˜ แƒ˜แƒœแƒขแƒ”แƒ แƒœแƒ”แƒขแƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ’แƒแƒ›แƒ˜ แƒชแƒ”แƒœแƒขแƒ แƒแƒšแƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. DNS แƒขแƒ แƒแƒคแƒ˜แƒ™แƒ˜แƒก แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ”แƒ‘แƒ˜แƒก แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒกแƒแƒงแƒแƒคแƒแƒ“. แƒกแƒแƒ›แƒฌแƒฃแƒฎแƒแƒ แƒแƒ“, แƒ’แƒแƒกแƒแƒ’แƒ”แƒ‘แƒ˜ แƒ›แƒ˜แƒ–แƒ”แƒ–แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒ, แƒแƒ  แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ•แƒ”แƒšแƒแƒ“แƒแƒ— DoH แƒแƒšแƒขแƒ”แƒ แƒœแƒแƒขแƒ˜แƒ•แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒกแƒแƒ‘แƒ แƒ˜แƒ•แƒ˜ แƒ›แƒฎแƒแƒ แƒ“แƒแƒญแƒ”แƒ แƒ˜แƒก แƒกแƒฌแƒ แƒแƒค แƒจแƒ”แƒ›แƒแƒฆแƒ”แƒ‘แƒแƒก แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ˜แƒก แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒฃแƒš แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒแƒจแƒ˜ แƒ“แƒ แƒ˜แƒก แƒ™แƒ•แƒšแƒแƒ• แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ”แƒ‘แƒ˜แƒก แƒขแƒ”แƒฅแƒœแƒแƒšแƒแƒ’แƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒงแƒ•แƒแƒ แƒฃแƒšแƒ—แƒ แƒกแƒคแƒ”แƒ แƒแƒ.

แƒ›แƒแƒ’แƒ แƒแƒ› แƒ แƒแƒ“แƒ’แƒแƒœ แƒแƒฎแƒšแƒ แƒ’แƒ•แƒแƒฅแƒ•แƒก DoH, แƒ แƒแƒขแƒแƒ› แƒแƒ  แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒแƒ— แƒ˜แƒ’แƒ˜ แƒ™แƒแƒ แƒžแƒแƒ แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒžแƒแƒขแƒ”แƒœแƒชแƒ˜แƒฃแƒ แƒ˜ แƒ›แƒ”แƒ—แƒ•แƒแƒšแƒงแƒฃแƒ แƒ”แƒแƒ‘แƒ˜แƒกแƒ’แƒแƒœ แƒ—แƒแƒ•แƒ˜แƒก แƒ“แƒแƒฆแƒฌแƒ”แƒ•แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ›แƒแƒ—แƒ˜ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ— แƒฉแƒ•แƒ”แƒœแƒก แƒกแƒแƒ™แƒฃแƒ—แƒแƒ  DNS-แƒ–แƒ”-HTTPS แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ”?

2. DNS-over-HTTPS แƒžแƒ แƒแƒขแƒแƒ™แƒแƒšแƒ˜

แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒก แƒ—แƒฃ แƒ’แƒแƒ“แƒแƒฎแƒ”แƒ“แƒแƒ• RFC8484 DNS-over-HTTPS แƒžแƒ แƒแƒขแƒแƒ™แƒแƒšแƒ˜แƒก แƒแƒฆแƒฌแƒ”แƒ แƒ˜แƒกแƒแƒก, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฎแƒ”แƒ“แƒแƒ•แƒ—, แƒ แƒแƒ› แƒ”แƒก แƒแƒ แƒ˜แƒก, แƒคแƒแƒฅแƒขแƒแƒ‘แƒ แƒ˜แƒ•แƒแƒ“, แƒ•แƒ”แƒ‘ API, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒแƒซแƒšแƒ”แƒ•แƒ— แƒฉแƒแƒฌแƒ”แƒ แƒแƒ— แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒฃแƒšแƒ˜ DNS แƒžแƒแƒ™แƒ”แƒขแƒ˜ HTTP/2 แƒžแƒ แƒแƒขแƒแƒ™แƒแƒšแƒจแƒ˜. แƒ”แƒก แƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ“แƒ”แƒ‘แƒ แƒกแƒžแƒ”แƒชแƒ˜แƒแƒšแƒฃแƒ แƒ˜ HTTP แƒกแƒแƒ—แƒแƒฃแƒ แƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ—, แƒแƒกแƒ”แƒ•แƒ” แƒ’แƒแƒ“แƒแƒชแƒ”แƒ›แƒฃแƒšแƒ˜ DNS แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒแƒ แƒแƒ‘แƒ˜แƒ—แƒ˜ แƒคแƒแƒ แƒ›แƒแƒขแƒ˜แƒก แƒ™แƒแƒœแƒ•แƒ”แƒ แƒขแƒแƒชแƒ˜แƒ˜แƒ— (แƒ˜แƒฎ. RFC1035 แƒ“แƒ แƒจแƒ”แƒ›แƒ“แƒ’แƒแƒ›แƒ˜ แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜) แƒคแƒแƒ แƒ›แƒแƒจแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒแƒซแƒšแƒ”แƒ•แƒ— แƒ’แƒแƒ“แƒแƒกแƒชแƒ”แƒ— แƒ“แƒ แƒ›แƒ˜แƒ˜แƒฆแƒแƒ— แƒ˜แƒกแƒ˜แƒœแƒ˜, แƒแƒกแƒ”แƒ•แƒ” แƒ˜แƒ›แƒฃแƒจแƒแƒแƒ— แƒกแƒแƒญแƒ˜แƒ แƒ แƒ›แƒ”แƒขแƒแƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ—แƒแƒœ.

แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ—, แƒ›แƒฎแƒแƒ แƒ“แƒแƒญแƒ”แƒ แƒ˜แƒšแƒ˜แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ HTTP/2 แƒ“แƒ แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒ TLS แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜.

DNS แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ“แƒ”แƒก แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒฃแƒšแƒ˜ GET แƒ“แƒ POST แƒ›แƒ”แƒ—แƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—. แƒžแƒ˜แƒ แƒ•แƒ”แƒš แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ แƒ’แƒแƒ แƒ“แƒแƒ˜แƒฅแƒ›แƒœแƒ”แƒ‘แƒ base64URL-แƒจแƒ˜ แƒ™แƒแƒ“แƒ˜แƒ แƒ”แƒ‘แƒฃแƒš แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒแƒ“, แƒฎแƒแƒšแƒ แƒ›แƒ”แƒแƒ แƒ”แƒจแƒ˜ POST แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒกแƒฎแƒ”แƒฃแƒšแƒ˜แƒก แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ— แƒ‘แƒ˜แƒœแƒแƒ แƒฃแƒšแƒ˜ แƒคแƒแƒ แƒ›แƒ˜แƒ—. แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒกแƒžแƒ”แƒชแƒ˜แƒแƒšแƒฃแƒ แƒ˜ MIME แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒขแƒ˜แƒžแƒ˜ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ DNS แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒกแƒ แƒ“แƒ แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒก แƒ“แƒ แƒแƒก แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ/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

แƒแƒกแƒ”แƒ•แƒ” แƒงแƒฃแƒ แƒแƒ“แƒฆแƒ”แƒ‘แƒ แƒ›แƒ˜แƒแƒฅแƒชแƒ˜แƒ”แƒ— แƒกแƒแƒ—แƒแƒฃแƒ แƒก แƒฅแƒ”แƒจแƒ˜ แƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ˜: แƒ•แƒ”แƒ‘ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒžแƒแƒกแƒฃแƒฎแƒจแƒ˜. แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒจแƒ˜ แƒ›แƒแƒฅแƒกแƒ˜แƒ›แƒแƒšแƒฃแƒ แƒ˜ แƒแƒกแƒแƒ™แƒ˜ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก TTL แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒแƒก แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ DNS แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก (แƒแƒœ แƒ›แƒ˜แƒœแƒ˜แƒ›แƒแƒšแƒฃแƒ  แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒแƒก, แƒ—แƒฃ แƒ›แƒแƒ—แƒ˜ แƒœแƒแƒ™แƒ แƒ”แƒ‘แƒ˜ แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ“แƒ”แƒ‘แƒ).

แƒ–แƒ”แƒ›แƒแƒแƒฆแƒœแƒ˜แƒจแƒœแƒฃแƒšแƒ˜แƒ“แƒแƒœ แƒ’แƒแƒ›แƒแƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ”, DoH แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒœแƒ˜แƒ แƒ”แƒ‘แƒ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ”แƒขแƒแƒžแƒ˜แƒกแƒ’แƒแƒœ แƒจแƒ”แƒ“แƒ’แƒ”แƒ‘แƒ.

  • แƒ›แƒ˜แƒ˜แƒฆแƒ”แƒ— HTTP แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ. แƒ—แƒฃ แƒ”แƒก แƒแƒ แƒ˜แƒก GET, แƒ›แƒแƒจแƒ˜แƒœ แƒ’แƒแƒจแƒ˜แƒคแƒ แƒ”แƒ— แƒžแƒแƒ™แƒ”แƒขแƒ˜ base64URL แƒ™แƒแƒ“แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒ“แƒแƒœ.
  • แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ”แƒ— แƒ”แƒก แƒžแƒแƒ™แƒ”แƒขแƒ˜ DNS แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ”.
  • แƒ›แƒ˜แƒ˜แƒฆแƒ”แƒ— แƒžแƒแƒกแƒฃแƒฎแƒ˜ DNS แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒกแƒ’แƒแƒœ
  • แƒ˜แƒžแƒแƒ•แƒ”แƒ— แƒ›แƒ˜แƒœแƒ˜แƒ›แƒแƒšแƒฃแƒ แƒ˜ TTL แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒฃแƒš แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ”แƒ‘แƒจแƒ˜.
  • แƒ“แƒแƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ— แƒžแƒแƒกแƒฃแƒฎแƒ˜ แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒก HTTP-แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ—.

3. แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜ DNS-over-HTTPS แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜

แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜, แƒกแƒฌแƒ แƒแƒคแƒ˜ แƒ“แƒ แƒ”แƒคแƒ”แƒฅแƒขแƒฃแƒ แƒ˜ แƒ’แƒ–แƒ แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜ DNS-แƒ–แƒ”-HTTPS แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒ’แƒแƒกแƒแƒจแƒ•แƒ”แƒ‘แƒแƒ“ แƒแƒ แƒ˜แƒก HTTP/2 แƒ•แƒ”แƒ‘ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ. H2O, แƒ แƒแƒ›แƒšแƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘แƒแƒช แƒแƒ•แƒขแƒแƒ แƒ›แƒ แƒฃแƒ™แƒ•แƒ” แƒ“แƒแƒฌแƒ”แƒ แƒ แƒ›แƒแƒ™แƒšแƒ”แƒ“ (แƒ˜แƒฎ.แƒ›แƒแƒฆแƒแƒšแƒ˜ แƒฎแƒแƒ แƒ˜แƒกแƒฎแƒ˜แƒก H2O แƒ•แƒ”แƒ‘ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜โ€).

แƒแƒ› แƒแƒ แƒฉแƒ”แƒ•แƒแƒœแƒก แƒ›แƒฎแƒแƒ แƒก แƒฃแƒญแƒ”แƒ แƒก แƒ˜แƒก แƒคแƒแƒฅแƒขแƒ˜, แƒ แƒแƒ› แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜ DoH แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒ แƒ™แƒแƒ“แƒ˜แƒก แƒกแƒ แƒฃแƒšแƒแƒ“ แƒ“แƒแƒœแƒ”แƒ แƒ’แƒ•แƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒ—แƒแƒ•แƒแƒ“ H2O-แƒจแƒ˜ แƒ˜แƒœแƒขแƒ”แƒ’แƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ—แƒแƒ แƒฏแƒ˜แƒ›แƒœแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—. แƒ›แƒ แƒฃแƒ‘แƒ˜. แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒฃแƒšแƒ˜ แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ“แƒ, DNS แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ—แƒแƒœ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒกแƒแƒชแƒ•แƒšแƒ”แƒšแƒแƒ“, แƒ’แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ— (mrbgem) Socket แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช, แƒกแƒแƒ‘แƒ”แƒ“แƒœแƒ˜แƒ”แƒ แƒแƒ“, แƒฃแƒ™แƒ•แƒ” แƒจแƒ”แƒ“แƒ˜แƒก 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 แƒ แƒแƒ–แƒ”แƒช แƒ แƒ”แƒแƒšแƒฃแƒ แƒแƒ“ แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒกแƒ›แƒ’แƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒฉแƒ•แƒ”แƒœแƒ˜ DNS-over-HTTPS แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜แƒ mruby-แƒจแƒ˜ แƒ“แƒ แƒ’แƒแƒ›แƒแƒ˜แƒซแƒแƒฎแƒ”แƒ‘แƒ แƒ“แƒแƒ›แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒšแƒ˜แƒก แƒแƒคแƒชแƒ˜แƒแƒœแƒ˜แƒก แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ—. mruby. handler-แƒคแƒแƒ˜แƒšแƒ˜.

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 แƒžแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒแƒ–แƒ”, แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ unbound FreeBSD แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒฃแƒšแƒ˜ แƒ’แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒ“แƒแƒœ. แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ”แƒ‘แƒ˜แƒก แƒ—แƒ•แƒแƒšแƒกแƒแƒ–แƒ แƒ˜แƒกแƒ˜แƒ—, แƒ”แƒก แƒแƒ แƒ˜แƒก แƒแƒžแƒขแƒ˜แƒ›แƒแƒšแƒฃแƒ แƒ˜ แƒ’แƒแƒ“แƒแƒฌแƒงแƒ•แƒ”แƒขแƒ. แƒ—แƒฃแƒ›แƒชแƒ, แƒแƒ แƒแƒคแƒ”แƒ แƒ˜ แƒ’แƒ˜แƒจแƒšแƒ˜แƒ— แƒฎแƒ”แƒšแƒก แƒฉแƒแƒœแƒแƒชแƒ•แƒšแƒ”แƒ‘แƒแƒจแƒ˜ localhost แƒกแƒฎแƒ•แƒ DNS แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ–แƒ”, แƒ แƒแƒ›แƒšแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒแƒกแƒแƒช แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒ—.

root@beta:/usr/local/etc/h2o # local-unbound verison
usage:  local-unbound [options]
        start unbound daemon DNS resolver.
-h      this help
-c file config file to read instead of /var/unbound/unbound.conf
        file format is described in unbound.conf(5).
-d      do not fork into the background.
-p      do not create a pidfile.
-v      verbose (more times to increase verbosity)
Version 1.8.1
linked libs: mini-event internal (it uses select), OpenSSL 1.1.1a-freebsd  20 Nov 2018
linked modules: dns64 respip validator iterator
BSD licensed, see LICENSE in source package for details.
Report bugs to [email protected]
root@eprove:/usr/local/etc/h2o # sockstat -46 | grep unbound
unbound  local-unbo 69749 3  udp6   ::1:53                *:*
unbound  local-unbo 69749 4  tcp6   ::1:53                *:*
unbound  local-unbo 69749 5  udp4   127.0.0.1:53          *:*
unbound  local-unbo 69749 6  tcp4   127.0.0.1:53          *:*

แƒ แƒฉแƒ”แƒ‘แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ H2O-แƒก แƒ’แƒแƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ แƒ“แƒ แƒ•แƒœแƒแƒฎแƒแƒ— แƒ แƒ แƒ’แƒแƒ›แƒแƒ•แƒ.

root@beta:/usr/local/etc/h2o # service h2o restart
Stopping h2o.
Waiting for PIDS: 69871.
Starting h2o.
start_server (pid:70532) starting now...

4. แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒ

แƒแƒกแƒ” แƒ แƒแƒ›, แƒ›แƒแƒ“แƒ˜แƒ— แƒจแƒ”แƒ•แƒแƒ›แƒแƒฌแƒ›แƒแƒ— แƒจแƒ”แƒ“แƒ”แƒ’แƒ”แƒ‘แƒ˜ แƒขแƒ”แƒกแƒขแƒ˜แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒฎแƒ”แƒšแƒแƒฎแƒšแƒ แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ˜แƒ— แƒ“แƒ แƒฃแƒขแƒ˜แƒšแƒ˜แƒขแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— แƒฅแƒกแƒ”แƒšแƒ˜แƒก แƒขแƒ แƒแƒคแƒ˜แƒ™แƒ˜แƒก แƒ“แƒแƒ—แƒ•แƒแƒšแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒ— tcpdump.

root@beta/usr/local/etc/h2o # curl -H 'accept: application/dns-message' 'https://my.domain/dns-query?dns=q80BAAABAAAAAAAAB2V4YW1wbGUDY29tAAABAAE'
Warning: Binary output can mess up your terminal. Use "--output -" to tell
Warning: curl to output it to your terminal anyway, or consider "--output
Warning: <FILE>" to save to a file.
...
root@beta:~ # tcpdump -n -i lo0 udp port 53 -xx -XX -vv
tcpdump: listening on lo0, link-type NULL (BSD loopback), capture size 262144 bytes
16:32:40.420831 IP (tos 0x0, ttl 64, id 37575, offset 0, flags [none], proto UDP (17), length 57, bad cksum 0 (->e9ea)!)
    127.0.0.1.21070 > 127.0.0.1.53: [bad udp cksum 0xfe38 -> 0x33e3!] 43981+ A? example.com. (29)
        0x0000:  0200 0000 4500 0039 92c7 0000 4011 0000  ....E..9....@...
        0x0010:  7f00 0001 7f00 0001 524e 0035 0025 fe38  ........RN.5.%.8
        0x0020:  abcd 0100 0001 0000 0000 0000 0765 7861  .............exa
        0x0030:  6d70 6c65 0363 6f6d 0000 0100 01         mple.com.....
16:32:40.796507 IP (tos 0x0, ttl 64, id 37590, offset 0, flags [none], proto UDP (17), length 73, bad cksum 0 (->e9cb)!)
    127.0.0.1.53 > 127.0.0.1.21070: [bad udp cksum 0xfe48 -> 0x43fa!] 43981 q: A? example.com. 1/0/0 example.com. A 93.184.216.34 (45)
        0x0000:  0200 0000 4500 0049 92d6 0000 4011 0000  ....E..I....@...
        0x0010:  7f00 0001 7f00 0001 0035 524e 0035 fe48  .........5RN.5.H
        0x0020:  abcd 8180 0001 0001 0000 0000 0765 7861  .............exa
        0x0030:  6d70 6c65 0363 6f6d 0000 0100 01c0 0c00  mple.com........
        0x0040:  0100 0100 0151 8000 045d b8d8 22         .....Q...].."
^C
2 packets captured
23 packets received by filter
0 packets dropped by kernel

แƒ’แƒแƒ›แƒแƒ›แƒแƒ•แƒแƒšแƒ˜ แƒ’แƒ•แƒ˜แƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒก, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒ’แƒแƒ“แƒแƒญแƒ แƒ แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ˜ example.com แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ“แƒ แƒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ— แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ“แƒ DNS แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒ›แƒ˜แƒ”แƒ .

แƒแƒฎแƒšแƒ แƒ แƒฉแƒ”แƒ‘แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒฉแƒ•แƒ”แƒœแƒ˜ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒ’แƒแƒแƒฅแƒขแƒ˜แƒฃแƒ แƒ”แƒ‘แƒ Firefox แƒ‘แƒ แƒแƒฃแƒ–แƒ”แƒ แƒจแƒ˜. แƒแƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒชแƒ•แƒแƒšแƒแƒ— แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ˜ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒ’แƒ•แƒ”แƒ แƒ“แƒ”แƒ‘แƒ–แƒ” แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘: config.

แƒฉแƒ•แƒ”แƒœ แƒ•แƒ–แƒ แƒ“แƒ˜แƒ— แƒฉแƒ•แƒ”แƒœแƒก DNS-แƒ–แƒ”-HTTPS แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒก

แƒžแƒ˜แƒ แƒ•แƒ”แƒš แƒ แƒ˜แƒ’แƒจแƒ˜, แƒ”แƒก แƒแƒ แƒ˜แƒก แƒฉแƒ•แƒ”แƒœแƒ˜ API-แƒก แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ–แƒ”แƒช แƒ‘แƒ แƒแƒฃแƒ–แƒ”แƒ แƒ˜ แƒ˜แƒ—แƒฎแƒแƒ•แƒก DNS แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒแƒก แƒฅแƒกแƒ”แƒšแƒ˜.trr.uri. แƒแƒกแƒ”แƒ•แƒ” แƒ แƒ”แƒ™แƒแƒ›แƒ”แƒœแƒ“แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒแƒ› URL-แƒ“แƒแƒœ แƒ“แƒแƒ›แƒ”แƒœแƒ˜แƒก IP-แƒ˜แƒก แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒ IP-แƒ˜แƒก แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒ แƒ’แƒแƒ แƒฉแƒ”แƒ•แƒแƒ“แƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ—แƒแƒ•แƒแƒ“ แƒ‘แƒ แƒแƒฃแƒ–แƒ”แƒ แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— DNS-แƒจแƒ˜ แƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”. network.trr.bootstrapAddress. แƒ“แƒ แƒ‘แƒแƒšแƒแƒก, แƒ—แƒแƒ•แƒแƒ“ แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ˜ network.trr.mode แƒ›แƒแƒ— แƒจแƒแƒ แƒ˜แƒก DoH-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ. แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ˜แƒก โ€ž3โ€œ-แƒ–แƒ” แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒแƒ˜แƒซแƒฃแƒšแƒ”แƒ‘แƒก แƒ‘แƒ แƒแƒฃแƒ–แƒ”แƒ แƒก แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒก แƒ”แƒฅแƒกแƒ™แƒšแƒฃแƒ–แƒ˜แƒฃแƒ แƒแƒ“ DNS-over-HTTPS แƒกแƒแƒฎแƒ”แƒšแƒ˜แƒก แƒ’แƒแƒ“แƒแƒกแƒแƒญแƒ แƒ”แƒšแƒแƒ“, แƒฎแƒแƒšแƒ แƒฃแƒคแƒ แƒ แƒกแƒแƒ˜แƒ›แƒ”แƒ“แƒ แƒ“แƒ แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒ โ€ž2โ€œ แƒžแƒ แƒ˜แƒแƒ แƒ˜แƒขแƒ”แƒขแƒก แƒ›แƒ˜แƒแƒœแƒ˜แƒญแƒ”แƒ‘แƒก DoH-แƒก แƒ“แƒ แƒ“แƒแƒขแƒแƒ•แƒ”แƒ‘แƒก แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒฃแƒš DNS แƒซแƒ˜แƒ”แƒ‘แƒแƒก, แƒ แƒแƒ’แƒแƒ แƒช แƒ“แƒแƒ›แƒฎแƒ›แƒแƒ แƒ” แƒ•แƒแƒ แƒ˜แƒแƒœแƒขแƒก.

5. แƒ›แƒแƒ’แƒ”แƒ‘แƒ!

แƒ˜แƒงแƒ แƒกแƒขแƒแƒขแƒ˜แƒ แƒกแƒแƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒ? แƒ›แƒแƒจแƒ˜แƒœ แƒ’แƒ—แƒฎแƒแƒ•แƒ—, แƒœแƒฃ แƒ›แƒแƒ”แƒ แƒ˜แƒ“แƒ”แƒ‘แƒ˜แƒ— แƒ“แƒ แƒ›แƒฎแƒแƒ แƒ˜ แƒ“แƒแƒฃแƒญแƒ˜แƒ แƒ”แƒ— แƒจแƒ”แƒ›แƒแƒฌแƒ˜แƒ แƒฃแƒšแƒแƒ‘แƒ˜แƒก แƒคแƒแƒ แƒ›แƒ˜แƒก แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ— (แƒฅแƒ•แƒ”แƒ›แƒแƒ—).

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ