はじめに
この記事はシスコの有志による Cisco Systems Japan Advent Calendar 2020 (2枚目) の 24日目として投稿しています。 2017年版: https://qiita.com/advent-calendar/2017/cisco 2018年版: https://qiita.com/advent-calendar/2018/cisco 2019年版: https://qiita.com/advent-calendar/2019/cisco 2020年版: https://qiita.com/advent-calendar/2020/cisco 2020年版(2枚目): https://qiita.com/advent-calendar/2020/cisco2 (これ)昨年は自宅をLoRaWAN基地局にしてみた話(番外編)という省電力で遠距離通信が可能な通信規格"LoRaWAN"に関する記事を書かせていただきましたが、今年はDNSセキュリティ製品である"Cisco Umbrella"のちょっとした疑問について投稿させていただきます。
Cisco Umbrellaとは
Cisco UmbrellaはDNS SecurityやSIG(Secure Internet Gateway)機能を提供するSaaS型のセキュリティソリューションになります。
UmbrellaのDNS Security機能を利用する場合、展開方法としては
・端末のDNS ServerをUmbrellaに設定する
・DHCPで配るDNS ServerをUmbrellaに指定する
・端末にエージェントをインストールする
・対応NW機器でDNS Queryを強制的にUmbrellaに向ける
・Local DNS SerberのフォワーダーにUmbrellaを設定する
etc.....
などといった方法があり、お使いのネットワーク環境に応じた様々な展開方法が用意されています。
DNS QueryをUmbrella(IPv4:208.67.222.222, 208.67.220.220 IPv6: 2620:119:35::35, 2620:119:53::53)に向けることで名前解決を行うのですが、このタイミングでUmbrella側のデータベースを参照し、ドメイン単位で脅威があるかないか・事前に設定されたポリシーを参照し通信させていいのか悪いのかといったことを判別し、ユーザーに名前解決後のIPアドレスを返す・もしくは通信が拒否された場合はUmbrellaのブロックページのIPアドレスを返すといった挙動をします。
今回の疑問
「Umbrellaで名前解決を行うと、CDNのキャッシュサーバーはUmbrellaのDNSサーバーに近いところが選択されてしまう、、、?」この疑問を解決する前にCDNの説明もしておきます。
CDNとは
CDNというのはContent Delivery Networkの頭文字をとったもので、WebアプリケーションやWebコンテンツへのレスポンスタイムを短縮する技術となっております。
コンテンツをISP(Internet Service Provider)などが保有しているCDNのキャッシュサーバーにキャッシュさせておくことで、クライアントが直接コンテンツを配信しているサーバーにアクセスしてダウンロードすることなく、クライアントのロケーションから近い位置にあるCDNキャッシュサーバーからダウンロードできます。
もしユーザーがISPが提供するDNSサーバーを利用している場合、コンテンツのキャッシュがCDNキャッシュサーバーにあればユーザーの一番身近にあるサーバーからコンテンツをダウンロードできるため、レスポンスタイムが減少します。
しかし、最近では再帰DNSサーバーサービスが一般化しており、Googleの8.8.8.8やCloudflareの1.1.1.1をユーザーが設定し利用するケースが増加しています。
権威DNSサーバーは再帰DNSサーバーからDNS Queryが来た際、再帰DNSサーバーのIPアドレスの情報から最適なCDNキャッシュサーバーのIPアドレスを回答しますが、回答は再帰DNSサーバーのIPアドレスベースとなり、ユーザーのロケーションが考慮されないため下記イメージのようにCDNのメリットをユーザーが享受できません。
あれ?これでは身近なCDNキャッシュサーバーを特定できないんじゃ、、、。
再び疑問へ・・・。
改めて先ほどの疑問を振り返ります。「Umbrellaで名前解決を行うと、CDNのキャッシュサーバーはUmbrellaのDNSサーバーに近いところが選択されてしまう、、、?」
CDNの項目でも説明したとおり、クライアントから近い位置にあるCDNキャッシュサーバーにコンテンツを取りに行かなければCDNのメリットを享受できません。
CDNの仕組みとしてどのように"クライアントに近いロケーション"を識別しているのでしょうか。
EDNS Client Subnet(ECS)
ここで登場するのがEDNS Client Subnetという技術になります。
ECSはRFC7871として掲載されております。
仕組みとしては、権威DNSサーバーへのDNS Queryに、クライアントのIPアドレス(通常、/24)を拡張情報として追加することで、ユーザーのIPアドレスを通知するというものになっております。
これにより、ユーザーからのDNS Queryがどこから来たものなのかといった情報をより詳細に権威DNSサーバーに伝えることができるため、最適なCDNキャッシュサーバーのIPアドレスが通知されるといった仕組みになっています。
しかし、Umbrellaの場合すべての権威DNSサーバーに対してEDNS Cliient Subnetを利用した通信を行っているわけではないので注意が必要です。
Umbrella内部でホワイトリストに登録されている権威DNSサーバーに対してのみ機能が有効になります。
(ホワイトリストへの登録には、権威DNSサーバーの事業者がUmbrellaに対して申請をする必要があります。)
Anycast DNS
ECSに加えて、Anycast DNSという技術もUmbrellaでは実装されています。
これはIP AnycastをDNSサーバーで利用しているものになります。
ユニキャストのIPアドレスは一つのインターフェースに対して、一つのIPアドレスといった組み合わせになっていますが、エニーキャストの場合、一つのIPアドレスに対して複数のインターフェースが紐付いています。
もしユーザーが特定のエニーキャストIPアドレスに対して通信を行った場合、世界中に分散されているノードの中からネットワーク的に自分に一番近い場所※にあるノードが選択されます。
※物理的な距離ではなくネットワーク的に近い場所=HOP数が少ないといった形になります。これはBGPピアリングというプロセスにより最適化されています。
これによりユーザーが意識することなく自分から近いノードを自動で選択することができます。
また、IP Anycastを利用することで、もし数ある中の特定のサーバーがダウンした場合でも、他のサーバーを選択することができるため、冗長化にもつながります。
Cisco Umbrellaの場合、世界中に30ヶ所以上のデータセンターが存在しており、その中で208.67.222.222のIPアドレスを持つサーバーは数百台あります。そしてデータセンターは日本にもございます。
これにより、もしECSが有効でない権威DNSサーバーへの名前解決の場合でも、より高速に名前解決をすることができるような仕組みになっております。
最後に
本記事ではCisco Umbrellaにおける名前解決の高速化技術についてご紹介しました。色々と書きましたが覚えていただきたいことは二点だけです!
・Cisco UmbrellaではEDNS Client Subnet(ECS), Anycast DNSといった技術を用いています。
・これら技術により、毎日2500億も送られてくる再帰DNSリクエストに対し、高速かつ高い信頼性を維持し、サービスを提供しています。
実はAdvent Calendar一枚目の4日目に同じCisco UmbrellaネタでshogokatsuradaさんがDoH(DNS over HTTPS) を Cisco Umbrella で扱うという記事を書かれています。
DNSの仕組みを使ったセキュリティ製品です!とすごい簡単な構造をしているようにも見えるCisco Umbrellaですが、裏では様々な技術・環境への対応をしており日々進化していますので、ぜひ今後の製品動向にも期待したいところです。