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