Cloudflare Tunnel のプライベートネットワークを使うと、データベースなどブラウザー以外の任意の TCP/UDP アプリケーションに接続できます。Cloudflare One Client を使い、誰が何にアクセスできるかを定義するゼロトラスト制御のネットワークポリシーを設定できます。
このチュートリアルの最後には、ネットワークポリシーを通過したユーザーが、Cloudflare Tunnel 経由で TCP ポート 3306 のリモート MySQL データベースへアクセスできるようになります。
次を用意してください。
- リモート接続を待ち受け、リモートから接続できるユーザーを設定した MySQL データベース
- (任意)アカウントで リゾルバーポリシー が有効になっていること
プライベートネットワーク上のサーバーに cloudflared をインストールします。このサーバーは MySQL データベースへ到達できる必要があります。
-
Cloudflare ダッシュボードにログインし、Networking > Tunnels を開きます。
Tunnels を開く ↗ -
Create a tunnel を選択します。
-
トンネルの名前を入力します。このトンネル経由で接続するリソースの種類がわかる名前(例:
enterprise-VPC-01)を推奨します。 -
Create Tunnel を選択します。
-
オペレーティングシステムを選び、インストールコマンドをコピーして、オリジンサーバーのターミナルで実行します。
-
トンネルの接続を待ちます。接続が確立したら Continue を選択します。
-
Cloudflare ダッシュボードで Networking > Routes を開きます。
Routes を開く ↗ -
Create route > Tunnel CIDR を選びます。作成したトンネルを選び、MySQL サーバーのプライベート IP/CIDR(例:
10.128.0.175/32)を入力し、Create route を選びます。 -
(任意)内部 DNS サーバーのプライベート IP/CIDR 向けに、2 本目のルートを同じ手順で作成します。
これでアプリケーションと(任意の)DNS サーバーが Cloudflare に接続されます。
- Traffic policies > Network policies を開きます。
- MySQL データベースのプライベート IP アドレスとポート(デフォルトはポート 3306)を対象とする ネットワークポリシー を追加します。次の例は、
@example.comのメールアドレスで Cloudflare One Client に登録したユーザーへ、データベースへのアクセスを許可します。ネットワークポリシーは デバイスポスチャチェック も考慮できます。
| セレクター | 演算子 | 値 | 論理 | アクション |
|---|---|---|---|---|
| Destination IP | in | 10.128.0.175 |
And | Allow |
| Destination Port | in | 3306 |
And | |
| User Email | matches regex | .*example.com |
上記の Allow ルールに加え、ネットワークポリシー一覧の末尾に キャッチオールの Block ポリシー を追加し、デフォルト拒否モデルにすることを推奨します。
許可された Cloudflare One Client ユーザーは、任意の MySQL クライアントで 10.128.0.175 の MySQL サーバーへ接続できます。
プライベート IP アドレスではなく内部ホスト名で MySQL データベースへアクセスできるようにするには、Gateway リゾルバーポリシーを設定します。
-
Traffic policies > Resolver policies を開きます。
-
Add a policy を選びます。
-
アプリケーションのプライベート ドメイン または ホスト名 に一致する式を作成します。次の例を参照してください。
セレクター 演算子 値 Domain in internalrecord.com -
Select DNS resolver で Configure custom DNS resolvers を選びます。
-
DNS サーバーのプライベート IP アドレスを入力します。
-
ドロップダウンで
<IP-address> - Privateを選びます。 -
(任意)カスタムポートを入力します。
-
Create policy を選びます。
内部 DNS サーバーに MySQL データベースの A レコードがある場合、ユーザーはそのレコードでサーバーへ接続できます。たとえば、次のエントリを含む BIND サーバーがあるとします。
mysql IN A 10.128.0.175
許可された Cloudflare One Client ユーザーは、任意の MySQL クライアントで mysql.internalrecord.com の MySQL データベースへ接続できます。