
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
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
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:
ãã®ãªãã·ã§ã³ã¯ãããŒã«ã«ãããã¯ãŒã¯ãŸãã¯åäžã®ãŠãŒã¶ãŒã®ããŒãºã«å¯Ÿå¿ããããŒã«ã«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ã¬ã³ãŒãã®æŽæ°ã¯ç¬æã«è¡ãããŸãïŒã«ããããã®èšäºã§èª¬æãããŠãããµãŒãã¹ãããã«è峿·±ããã®ã«ããããšãã§ããŸãã