Cloudflare ã¯æ¬¡ã®å Žæã§ãããªãã¯DNSãå°å ¥ããŸããã
- 1.1.1.1
- 1.0.0.1
- 2606ïŒ4700ïŒ4700 :: 1111
- 2606ïŒ4700ïŒ4700 :: 1001
ãŠãŒã¶ãŒããªã¯ãšã¹ãã®å 容ã«ã€ããŠèœã¡çãããšãã§ããããã«ãããã©ã€ãã·ãŒåªå ãããªã·ãŒã䜿çšãããŠãããšèšãããŠããŸãã
ãã®ãµãŒãã¹ã¯ãéåžžã®DNSã«å ããŠã DNS-over-TLSããã³DNS-over-HTTPSãã¯ãããžãŒã䜿çšããæ©èœãæäŸãããšããç¹ã§èå³æ·±ããã®ã§ããããã«ããããããã€ããŒã¯ããªã¯ãšã¹ãã®éäžã§ãªã¯ãšã¹ãããªãã¹ã³ããããçµ±èšã®åéãç£èŠãããã³åºåã®ç®¡çãè¡ããªããªããŸãã Cloudflareã¯ãçºè¡šæ¥ïŒ2018幎4æ1æ¥ããŸãã¯ç±³åœã®è¡šèšã§ã¯04/01ïŒãå¶ç¶éžæãããªãã£ããšäž»åŒµããŠããŸãã
HabrãªãŒãã£ãšã³ã¹ã¯æè¡çã«ç²ŸéããŠãããããåŸæ¥ã®ã»ã¯ã·ã§ã³ããªãDNSãå¿ èŠãªã®ã§ããïŒã ãããæçš¿ã®æåŸã«æ²èŒããŸããããã§ã¯ãããå®çšçãªæçšäºé ã®æŠèŠã説æããŸãã
æ°ãããµãŒãã¹ã®äœ¿çšæ¹æ³ã¯ïŒ
æãç°¡åãªã®ã¯ãDNSã¯ã©ã€ã¢ã³ãïŒãŸãã¯äœ¿çšããŠããããŒã«ã«DNSãµãŒããŒã®èšå®ã®äžæµïŒã§ãäžèšã®DNSãµãŒããŒã¢ãã¬ã¹ãæå®ããããšã§ãã Googleã®DNSã®éåžžã®å€ïŒ8.8.8.8ãªã©ïŒããŸãã¯ããŸãäžè¬çã§ã¯ãªãYandexãããªãã¯DNSãµãŒã㌠ïŒ77.88.8.8ãªã©ïŒãCloudflareã®ãµãŒããŒã«çœ®ãæããããšã¯æå³ããããŸããïŒåçã¯ãã©ã®Cloudflareããã¹ãŠã®ç«¶åä»ç€Ÿãããéããã瀺ããŠããŸãïŒæããã«ããŸãïŒãµãŒãããŒãã£ã®ãµãŒãã¹ã«ãã£ãŠæž¬å®ãè¡ãããç¹å®ã®ã¯ã©ã€ã¢ã³ããžã®é床ã¯ãã¡ããç°ãªãå ŽåããããŸãïŒã
äžèšã®DNS-over-TLSããã³DNS-over-HTTPSãšãããæå·åãããæ¥ç¶ïŒå®éã«ã¯å¿çãè¿ãããïŒãä»ããŠèŠæ±ããµãŒããŒã«éä¿¡ãããæ°ããã¢ãŒãã§äœæ¥ããããšã¯ãã¯ããã«èå³æ·±ãã§ãã æ®å¿µãªããããããã¯ããã®ãŸãŸãã§ã¯ãµããŒããããŠããŸããïŒèè ã¯ããããŸã§ããšèããŠããŸãïŒãããœãããŠã§ã¢ïŒãŸãã¯ããŒããŠã§ã¢ïŒã§äœæ¥ãæŽçããããšã¯é£ãããããŸããã
DNS over HTTPïŒDoHïŒ
ååã瀺ãããã«ãéä¿¡ã¯HTTPSãã£ãã«ã®äžã§è¡ãããŸãã
- ã¿ãããã€ã³ãïŒãšã³ããã€ã³ãïŒã®ååš-https://cloudflare-dns.com/dns-queryã«ãããŸã ã
- èŠæ±ãéä¿¡ããŠåçãåãåãããšãã§ããã¯ã©ã€ã¢ã³ãã
èŠæ±ã¯ã RFC1035 ïŒHTTP POSTããã³GETã¡ãœããã§éä¿¡ïŒã§å®çŸ©ãããDNS Wireformat圢åŒãŸãã¯JSON圢åŒïŒHTTP GETã¡ãœããã䜿çšïŒã®ããããã§ãã å人çã«ã¯ãHTTPãªã¯ãšã¹ããä»ããŠDNSã¯ãšãªãäœæãããšããã¢ã€ãã¢ã¯äºæ³å€ã®ããã«æããŸããããåççãªãã€ã³ãããããŸãïŒãã®ãããªãªã¯ãšã¹ãã¯å€ãã®ãã©ãã£ãã¯ãã£ã«ã¿ãªã³ã°ã·ã¹ãã ãééããå¿çã®è§£æã¯éåžžã«ç°¡åã§ããªã¯ãšã¹ãã®äœæã¯ããã«ç°¡åã§ãã éåžžã®ã©ã€ãã©ãªãšãããã³ã«ãã»ãã¥ãªãã£ãæ åœããŸãã
ããã¥ã¡ã³ãããçŽæ¥ã¯ãšãªã®ãµã³ãã«ïŒ
DNS Wireformat圢åŒã®GETãªã¯ãšã¹ã
$ curl -v "https://cloudflare-dns.com/dns-query?ct=application/dns-udpwireformat&dns=q80BAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB" | hexdump * 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 0x7f968700a400) GET /dns-query?ct=application/dns-udpwireformat&dns=q80BAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB HTTP/2 Host: cloudflare-dns.com User-Agent: curl/7.54.0 Accept: */* * Connection state changed (MAX_CONCURRENT_STREAMS updated)! HTTP/2 200 date: Fri, 23 Mar 2018 05:14:02 GMT content-type: application/dns-udpwireformat content-length: 49 cache-control: max-age=0 set-cookie: \__cfduid=dd1fb65f0185fadf50bbb6cd14ecbc5b01521782042; expires=Sat, 23-Mar-19 05:14:02 GMT; path=/; domain=.cloudflare.com; HttpOnly server: cloudflare-nginx cf-ray: 3ffe69838a418c4c-SFO-DOG { [49 bytes data] 100 49 100 49 0 0 493 0 --:--:-- --:--:-- --:--:-- 494 * Connection #0 to host cloudflare-dns.com left intact 0000000 ab cd 81 80 00 01 00 01 00 00 00 00 03 77 77 77 0000010 07 65 78 61 6d 70 6c 65 03 63 6f 6d 00 00 01 00 0000020 01 c0 0c 00 01 00 01 00 00 0a 8b 00 04 5d b8 d8 0000030 22 0000031
DNS Wireformat圢åŒã®POSTãªã¯ãšã¹ã
$ echo -n 'q80BAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB' | base64 -D | curl -H 'Content-Type: application/dns-udpwireformat' --data-binary @- https://cloudflare-dns.com/dns-query -o - | hexdump { [49 bytes data] 100 49 100 49 0 0 493 0 --:--:-- --:--:-- --:--:-- 494 * Connection #0 to host cloudflare-dns.com left intact 0000000 ab cd 81 80 00 01 00 01 00 00 00 00 03 77 77 77 0000010 07 65 78 61 6d 70 6c 65 03 63 6f 6d 00 00 01 00 0000020 01 c0 0c 00 01 00 01 00 00 0a 8b 00 04 5d b8 d8 0000030 22 0000031
JSONã䜿çšããåãããš
$ curl 'https://cloudflare-dns.com/dns-query?ct=application/dns-json&name=example.com&type=AAAA' { "Status": 0, "TC": false, "RD": true, "RA": true, "AD": true, "CD": false, "Question": [ { "name": "example.com.", "type": 1 } ], "Answer": [ { "name": "example.com.", "type": 1, "TTL": 1069, "data": "93.184.216.34" } ] }
æããã«ããŸãã«ïŒå°ãªããšã1ã€ã¯ïŒããŒã ã«ãŒã¿ãŒããã®æ¹æ³ã§DNSã䜿çšã§ããŸãããããã¯ãµããŒããææ¥è¡šç€ºãããªããšããæå³ã§ã¯ãããŸãã-ãããŠãèå³æ·±ãããšã«ãããã§ã¢ããªã±ãŒã·ã§ã³ã§DNSãå®å šã«äœ¿çšã§ããŸãïŒæ¢ã«è¡ãããã«ïŒ Mozilla ãCloudflareãµãŒããŒäžã®ã¿ïŒã
DNS over TLS
ããã©ã«ãã§ã¯ãDNSã¯ãšãªã¯æå·åãªãã§éä¿¡ãããŸãã DNS over TLSã¯ãå®å šãªæ¥ç¶ã§ããããéä¿¡ããæ¹æ³ã§ãã Cloudflareã¯ã RFC7858ã§èŠå®ãããŠããããã«ãæšæºããŒã853ã§DNS over TLSããµããŒãããŠããŸãã cloudflare-dns.comãã¹ãçšã«çºè¡ããã蚌ææžã䜿çšãããTLS 1.2ããã³TLS 1.3ããµããŒããããŸãã
éä¿¡ã®ç¢ºç«ãšãããã³ã«ã§ã®äœæ¥ã¯ã»ãŒæ¬¡ã®ããã«ãªããŸãã
- DNSãšã®æ¥ç¶ã確ç«ããåã«ãã¯ã©ã€ã¢ã³ãã¯base64 SHA256ããã·ã¥ïŒSPKIãšåŒã°ããïŒã§ãšã³ã³ãŒããããcloudflare-dns.comã®TLS蚌ææžãä¿åããŸã
- DNSã¯ã©ã€ã¢ã³ãã¯cloudflare-dns.com:853ãšã®TCPæ¥ç¶ã確ç«ããŸã
- DNSã¯ã©ã€ã¢ã³ããTLSãã³ãã·ã§ã€ã¯ãéå§ããŸã
- TLSãã³ãã·ã§ã€ã¯ããã»ã¹ã§ãcloudflare-dns.comãã¹ãã¯ãã®TLS蚌ææžãæ瀺ããŸãã
- TLSæ¥ç¶ã確ç«ããããšããã«ãDNSã¯ã©ã€ã¢ã³ãã¯ã»ãã¥ãªãã£ã§ä¿è·ããããã£ãã«ãä»ããŠDNSèŠæ±ãéä¿¡ã§ããŸããããã«ãããèŠæ±ãšå¿çã®çèŽãšæ¹ãããé²æ¢ãããŸãã
- TLSæ¥ç¶ã§éä¿¡ããããã¹ãŠã®DNSã¯ãšãªã¯ãTCPã§DNSãéä¿¡ããããã®ä»æ§ã«æºæ ããå¿ èŠããããŸã ã
DNS over TLSãä»ããã¯ãšãªã®äŸïŒ
$ kdig -d @1.1.1.1 +tls-ca +tls-host=cloudflare-dns.com example.com ;; DEBUG: Querying for owner(example.com.), class(1), type(1), server(1.1.1.1), port(853), protocol(TCP) ;; DEBUG: TLS, imported 170 system certificates ;; DEBUG: TLS, received certificate hierarchy: ;; DEBUG: #1, C=US,ST=CA,L=San Francisco,O=Cloudflare\, Inc.,CN=\*.cloudflare-dns.com ;; DEBUG: SHA-256 PIN: yioEpqeR4WtDwE9YxNVnCEkTxIjx6EEIwFSQW+lJsbc= ;; DEBUG: #2, C=US,O=DigiCert Inc,CN=DigiCert ECC Secure Server CA ;; DEBUG: SHA-256 PIN: PZXN3lRAy+8tBKk2Ox6F7jIlnzr2Yzmwqc3JnyfXoCw= ;; DEBUG: TLS, skipping certificate PIN check ;; DEBUG: TLS, The certificate is trusted. ;; TLS session (TLS1.2)-(ECDHE-ECDSA-SECP256R1)-(AES-256-GCM) ;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 58548 ;; Flags: qr rd ra; QUERY: 1; ANSWER: 1; AUTHORITY: 0; ADDITIONAL: 1 ;; EDNS PSEUDOSECTION: ;; Version: 0; flags: ; UDP size: 1536 B; ext-rcode: NOERROR ;; PADDING: 408 B ;; QUESTION SECTION: ;; example.com. IN A ;; ANSWER SECTION: example.com. 2347 IN A 93.184.216.34 ;; Received 468 B ;; Time 2018-03-31 15:20:57 PDT ;; From 1.1.1.1@853(TCP) in 12.6 ms
ãã®ãªãã·ã§ã³ã¯ãããŒã«ã«ãããã¯ãŒã¯ãŸãã¯åäžã®ãŠãŒã¶ãŒã®ããŒãºã«å¯Ÿå¿ããããŒã«ã«DNSãµãŒããŒã«ããé©ããŠããããã§ãã 確ãã«ãæšæºããµããŒãããããšã¯ããŸãè¯ããããŸããããæåŸ ããŸãããïŒ
äŒè©±ã®å 容ã«ã€ããŠèª¬æãã2ã€ã®èšè
DNSã®ç¥èªã¯ãã¡ã€ã³ããŒã ãµãŒãã¹ã®ç¥èªã§ãïŒã€ãŸãããDNSãµãŒãã¹ãã¯ããåé·ã§ãããç¥èªã«ã¯ããµãŒãã¹ããšããåèªãæ¢ã«ãããŸãïŒãç¹å®ã®ãã¹ãåãã©ã®IPã¢ãã¬ã¹ã§ããããç解ããããã®ç°¡åãªã¿ã¹ã¯ã解決ããããã«äœ¿çšãããŸã ãŠãŒã¶ãŒããªã³ã¯ãã¯ãªãã¯ãããããã©ãŠã¶ãŒã®ã¢ãã¬ã¹ããŒã«ã¢ãã¬ã¹ãå ¥åãããã³ã«ïŒã https://habrahabr.ru/post/346430/ ããªã©ïŒããŠãŒã¶ãŒã®ã³ã³ãã¥ãŒã¿ãŒã¯ãªã¯ãšã¹ããéä¿¡ãããµãŒããŒãèŠã€ããããšããŸãããŒãžã®ã³ã³ãã³ããåä¿¡ããŸãã habrahabr.ruã®å ŽåãDNSããã®å¿çã«ã¯ãWebãµãŒããŒã®IPã¢ãã¬ã¹178.248.237.68ã®æ瀺ãå«ãŸããŸãããã®åŸããã©ãŠã¶ãŒã¯ãæå®ãããIPã¢ãã¬ã¹ã§ãµãŒããŒã«æ¥ç¶ããããšããŸãã
次ã«ããhabrahabr.ruãšããååã®ãã¹ãã®IPã¢ãã¬ã¹ã¯äœã§ããïŒããšããèŠæ±ãåãåã£ãDNSãµãŒããŒã¯ãæå®ããããã¹ãã«ã€ããŠäœããç¥ã£ãŠãããã©ãããå€æããŸãã ããã§ãªãå Žåã圌ã¯äžçã®ä»ã®DNSãµãŒããŒã«èŠæ±ãè¡ããã¹ããããã€ã¹ãããã§ã質åã«å¯ŸããçããèŠã€ããããšããŸãã ãã®çµæãæçµçãªåçãèŠã€ãããšãèŠã€ãã£ãããŒã¿ã¯ãŸã åŸ æ©ããŠããã¯ã©ã€ã¢ã³ãã«éä¿¡ãããããã«DNSãµãŒããŒèªäœã®ãã£ãã·ã¥ã«ä¿åãããŸããããã«ããã次ååæ§ã®è³ªåã«ã¯ããã«éãåçã§ããããã«ãªããŸãã
äžè¬çãªåé¡ã¯ãæåã«ãDNSã¯ãšãªã®ããŒã¿ããªãŒãã³ãã©ãŒã ã§éä¿¡ãããããšã§ãïŒããã«ããããã©ãã£ãã¯ãããŒã«ã¢ã¯ã»ã¹ã§ãããã¹ãŠã®äººãDNSã¯ãšãªãšåä¿¡ããåçãåé¢ããç¬èªã®ç®çã§åæã§ããããã«ãªããŸã;ããã«ããã DNSã¯ã©ã€ã¢ã³ãã®åºåãæ£ç¢ºã«ã¿ãŒã²ãã£ã³ã°ããæ©èœãããã¯éåžžã«å€ãã®ããšã§ãïŒïŒã 第äºã«ãäžéšã®ã€ã³ã¿ãŒããããããã€ããŒïŒç§ãã¡ã¯æãæãããæå°ã®ãã®ã§ã¯ãããŸããïŒã¯ã1ã€ãŸãã¯å¥ã®èŠæ±ãããããŒãžã®ä»£ããã«åºåã衚瀺ããåŸåããããŸãïŒéåžžã«ç°¡åã«å®è£ ãããŸãïŒãã¹ãåhabranabr.ruã«ããã¯ãšãªã®æå®ãããIPã¢ãã¬ã¹ã®ä»£ããã«ã人ã¯ã©ã³ãã ã§ãããã¯ãåºåãå«ãããŒãžãè¿ããããããã€ããŒã®WebãµãŒããŒã®ã¢ãã¬ã¹ãè¿ããŸãïŒã 第äžã«ããããã¯ãããWebãªãœãŒã¹ã®IPã¢ãã¬ã¹ã«é¢ããæ£ããDNSåçãã¹ã¿ãããŒãžãå«ããµãŒããŒã®IPã¢ãã¬ã¹ã«çœ®ãæããããšã«ãããåã ã®ãµã€ãããããã¯ããèŠä»¶ãæºããã¡ã«ããºã ãå®è£ ããã€ã³ã¿ãŒãããã¢ã¯ã»ã¹ãããã€ããŒããããŸãïŒãã®çµæãèããè€éãªãµã€ãïŒããŸãã¯ãã£ã«ã¿ãªã³ã°ãå®è¡ãããããã·ãµãŒããŒã®ã¢ãã¬ã¹ã«éä¿¡ãããŸãã
ããã§ã¯ãããããããµãŒãã¹ãžã®æ¥ç¶ã説æããhttp://1.1.1.1/ã®ãµã€ãããç»åãé 眮ããå¿ èŠããããŸãã ã芧ã®ããã«ãèè ã¯DNSã®å質ã«çµ¶å¯Ÿçãªèªä¿¡ãæã£ãŠããŸãïŒãã ããCloudflareã«å¥ã®ãã®ãæåŸ ããããšã¯å°é£ã§ãïŒã
ãµãŒãã¹ã®äœæè ã§ããCloudflareãå®å šã«ç解ã§ããŸãïŒåœŒãã¯äžçã§æã人æ°ã®ããCDNãããã¯ãŒã¯ïŒã³ã³ãã³ãã®é ä¿¡ã ãã§ãªããDNSãŸãŒã³ã®ãã¹ãã£ã³ã°ãå«ãæ©èœïŒã®1ã€ããµããŒãããã³éçºããããšã§å©çãåŸãŠããŸãããµãŒããŒã®ã¢ãã¬ã¹ããããã¯ããããšã§éåžžã«é »ç¹ã«èŠããã°ããŒãã«ãããã¯ãŒã¯ã®ã©ãã«è¡ãã¹ã ããç¥ããªã人ã«æããããã« ã ããŸãç¥ããªã人 ãã€ãŸããå«ã³ãwhoãèœæžãããäŒç€Ÿã«ãšã£ãŠã圌ãã®ãã€ãžã®å®³ãå°ãªãããšãæå³ããŸã ç¥ã£ãŠããã ãããŠãæè¡çãªå©ç¹ïŒäºçŽ°ãªããšã§ãããç¹ã«ãç¡æã®Cloudflare DNSã®é¡§å®¢ã«ãšã£ãŠãäŒç€Ÿã®DNSãµãŒããŒäžã«ãããªãœãŒã¹ã®DNSã¬ã³ãŒãã®æŽæ°ã¯ç¬æã«è¡ãããŸãïŒã«ããããã®èšäºã§èª¬æãããŠãããµãŒãã¹ãããã«èå³æ·±ããã®ã«ããããšãã§ããŸãã