Extending Cloudflare’s Zero Trust platform to support UDP and Internal DNS

2020年末、Cloudflareは、当社のネットワークの上にプライベートネットワークの構築を開始する権限を組織に与えました。サーバー側でCloudflareトンネルを、クライアント側でCloudflare WARPを使用することで、従来のVPNの必要性を排除しました。今日に至るまで、何千もの組織が当社と共にこの作業を続け、従来のVPNコンセントレータ、内部ファイアウォール、ロードバランサーの接続を解除してきました。これらの組織は、従来のハードウェアのすべてを維持する必要性を排除し、エンドユーザーの速度を劇的に向上させ、組織全体でZero Trustルールを維持することができるようになりました。

まずはTCPから始めました。TCPは重要なユースケースを有効にするため強力です。しかし、真にVPNを置き換えるには、UDPもカバーできるようにする必要があります。本日から、CloudflareのZero TrustプラットフォームでUDPへの早期アクセスを提供できることを嬉しく思います。さらに、UDPをサポートすることにより、内部DNSの提供も可能になります。それにより、DNSルールを上書きするために何千ものプライベートホスト名を手作業で移行する必要がなくなりました。Cloudflare for Teamsは、こちらからサインアップすることにより、本日より無料でご利用いただけます。UDPと内部DNSへの早期アクセスを行うための順番待ちリストに登録したい方は、こちらをご覧ください。

Cloudflare上のプライベートネットワークのトポロジー

プライベートネットワークの構築には、インフラストラクチャ側とクライアント側の2つの主要な構成要素があります。

インフラストラクチャ側はCloudflareトンネルによって強化されており、お客様のインフラストラクチャ(単一のアプリケーション、多数のアプリケーション、ネットワークセグメント全体など)をCloudflareに接続するだけです。これは、お客様の環境でシンプルなコマンドラインデーモンを実行し、Cloudflareへの複数の安全な、送信専用の、負荷分散されたリンクを確立することで可能となります。簡単に言うと、トンネルとはお客様のネットワークとCloudflareを接続するものです。

この図の反対側では、エンドユーザーがCloudflareに、そしてより重要なことに、お客様のネットワークに簡単に接続できる必要があります。この接続は、当社の堅牢なデバイスクライアントであるCloudflare WARPによって処理されます。このクライアントは、社内のMDMツールを使ってわずか数分で組織全体に展開でき、ユーザーのデバイスからCloudflareネットワークへのWireGuardベースのセキュアな接続を確立することが可能です。

お客様のインフラストラクチャとユーザーがCloudflareに接続すると、アプリケーションとレイヤーをZero Trustセキュリティ制御にタグ付けし、ネットワーク上のリクエストごとにIDとデバイス中心のルールの両方を検証することが容易になります。

ただし、これまではTCPのみがサポートされていました。

Cloudflare Zero Trustの拡張によるUDPのサポート

この1年間、CloudflareのZero Trustプラットフォームを採用するユーザーが増える中、VPNを接続し続けるすべてのユースケースに関するデータを集めてきました。その中で、最も一般的なニーズは、UDPベースのトラフィックのブランケットサポートでした。QUICのような最新のプロトコルは、UDPの軽量アーキテクチャを利用しています。Cloudflareでは、より良いインターネットを構築するためにこれらの新しい標準を推進することが我々の使命の一部であると信じてきました。

本日、UDPをサポートするCloudflare for Teamsの早期アクセスを希望する方のための公式順番待ちリストを開始しました。

UDPについて、およびUDPが重要な理由

UDPはインターネットの重要な構成要素です。UDPがなければ、多くのアプリケーションは現代的な用途には到底適さないものになってしまうでしょう。ビデオストリーミングやVoIPサービスなど、ほぼリアルタイムの通信を使用するアプリケーションは、UDPが必要な理由と、インターネットで果たす役割を示す代表的な例です。しかし、TCPとUDPはその中核において同じ結果をもたらしますが、その手段は大きく異なります。それぞれ独自の利点と欠点があり、それらを利用するアプリケーションは常に下流でそれらの影響を受けています。

ここで、比喩として誰かに質問する形式で、この2つの仕組みを簡単に説明します。TCPはかなり見慣れたもので、一般的な会話のように、挨拶をして、相手が挨拶を返すのを待ち、調子を伺い、相手の応答を待ってから、自分の希望を尋ねます。

一方、UDPは、相手が聞いているかどうかを確認することなく、ただ歩み寄って自分の希望を尋ねます。この方法では、質問の一部が聞き逃される可能性がありますが、答えが得られればそれでいいのです。

上記の会話と同様に、UDPの場合、多くのアプリケーションは実際にデータが失われたとしても気にしません。ビデオストリーミングやゲームサーバーがその良い例です。ストリーミング中にパケットが失われた場合、そのパケットを受信するまでストリーム全体を中断させたくはないでしょう。むしろ、パケットを破棄してでも次に進みたいはずです。アプリケーション開発者がUDPを利用するもう1つの理由には、TCPの標準化されたものを使うよりも、接続、転送、品質管理に関する独自の制御を開発することを好むということが挙げられます。

Cloudflareにとって、UDPベースのトラフィックのエンドツーエンドのサポートは、多くの新しいユースケースを可能にすることになります。ここでは、かなり楽しみにしていただけると思ういくつかのケースを紹介します。

内部DNSリゾルバ

ほとんどの企業ネットワークでは、イントラネットで利用可能なリソースへのアクセスを普及させるために、内部DNSリゾルバが必要です。イントラネットが内部DNSリゾルバを必要とする理由は、インターネットがパブリックDNSリゾルバを必要とする理由と同じです。要するに、人間が得意としていることはたくさんありますが、長い数字の列(この場合はIPアドレス)を覚えることは得意ではありません。パブリックDNSリゾルバも内部DNSリゾルバも、この問題(およびもっと多くの問題)を解決するために設計されました。

企業において、SharepointやOneDriveにアクセスするためだけに、社内のユーザーに例えば192.168.0.1に移動してもらうことは、無駄に骨が折れることだと思います。その代わりに、各リソースに対してDNSエントリーを作成し、内部リゾルバにユーザーのマッピングをすべて処理させる方がはるかに簡単です。なぜなら、これは、人間が実際に得意とすることだからです。

DNSクエリは、通常、クライアントからの1回のUDPリクエストで構成されています。それを受けると、サーバーはクライアントに1回、応答を返すことができます。DNSリクエストはそれほど大きくないため、多くの場合、1つのパケットで送受信することができます。このため、Zero TrustプラットフォームでUDPをサポートすることが、VPNの使用をやめるための重要な手段となります。

シッククライアントアプリケーション

UDPのもう1つの一般的なユーズケースとして、シッククライアントアプリケーションがあります。これまで述べてきたUDPの利点の1つは、無駄のないプロトコルであることです。これは、TCPのスリーウェイハンドシェイクなどの信頼性対策が設計上削ぎ落とされているためです。多くの場合、アプリケーション開発者はこれらの信頼性制御を引き続き望んでいますが、自分のアプリケーションを熟知しており、これらの制御を自分のアプリケーションに適合させることで、よりうまく処理できることを知っています。これらのシッククライアントアプリケーションは、重要なビジネス機能を実行することが多く、移行するためにはエンドツーエンドでサポートする必要があります。たとえば、ほとんどの操作がローカルマシンで実行され、Exchangeサーバーとの同期操作のみがUDP経由で行われるシッククライアントを介して、旧バージョンのOutlookを実装している場合があります。

繰り返しになりますが、Zero TrustプラットフォームではUDPをサポートしているため、この種のアプリケーションで従来のVPNを使用し続ける理由にはなりません。

さらに...

世界のインターネットトラフィックの大部分は、UDPで転送されています。多くの場合、ユーザーはタイムセンシティブなアプリケーションをUDPと同等と考え、パケットを時々破棄する方が待つよりも良いと考えています。しかし、他にも多くのユースケースがあり、幅広いサポートを提供できることを嬉しく思います。

今日から始めるにはどうしたらいいですか?

チュートリアルや開発者向けドキュメントにあるガイドを使用して、Cloudflareのプライベートネットワークの構築は、もうすでに開始することができます。クリティカルパスを以下に示します。すでにお客様で、UDPや内部DNSアクセスの順番待ちリストに加わることに興味がある方は、この投稿の最後まで読み飛ばしてください。

お客様のネットワークとCloudflareの接続

まず、お客様のネットワーク上にcloudflaredをインストールし、以下のコマンドで認証する必要があります。

cloudflared tunnel login

次に、お客様のネットワークや環境を識別するために、使いやすい名前のトンネルを作成します。

cloudflared tunnel create acme-network

最後に、プライベートネットワークのIP/CIDRレンジでトンネルを設定することをおすすめします。こうすることで、このIPレンジへのすべてのリクエストが新しいトンネルにルーティングされる必要があることを、Cloudflare WARPエージェントに認識させることができます。

cloudflared tunnel route ip add 192.168.0.1/32

あとはトンネルを実行するだけです。

ユーザーとネットワークの接続

最初のユーザーを接続するには、接続するデバイスにCloudflare WARPエージェントをダウンロードすることから始め、その後インストーラーの手順に従います。

次に、Teamsのダッシュボードにアクセスし、登録ポリシーを作成することでネットワークへのアクセスを許可するユーザーを定義します。このポリシーは、設定 > デバイス > デバイスの登録で作成することができます。以下の例では、カナダ在住で、@cloudflare.comで終わるメールアドレスを持つユーザーを要求していることがわかります。

このポリシーを作成したら、マシンのWARPデスクトップアイコンをクリックして、環境設定 > アカウント > Teamsでログインに移動することで、最初のデバイスを登録することができます。

最後に、設定 > ネットワーク > スプリットトンネルのリストを除外から、トンネルに追加したIPレンジを削除します。これにより、このトラフィックが実際にCloudflareにルーティングされ、意図したとおりにプライベートネットワークトンネルに送信されることが確認できます。

上記のチュートリアルに加えて、Teamsのダッシュボードにある製品内ガイドでは、各ステップについてより詳しく説明し、途中の検証も記載されています。

最初のトンネルを作成するには、Access > トンネルに移動します。

最初のデバイスをWARPに登録するには、My Team > デバイスに移動します。

次は何を?

本日、順番待ちリストをリリースできることを大変嬉しく思っていますし、今後数週間のうちにこの機能を発売できることをさらに楽しみにしています。プライベートネットワークトンネルはまだ始まったばかりで、発売後も各内部DNSホスト名への各リクエストに対するZero Trust Accessルールのサポートをさらに追加していく予定です。また、パフォーマンスを測定し、最速のZero Trustプラットフォームであり続けるために、さまざまな取り組みを行っていきます。これにより、従来のVPNを使用する場合の手間と比較して、ユーザーに喜びを与えることができます。