Server Message Block(SMB)プロトコルは、ネットワーク上の共有リソースへの読み取り、書き込み、アクセスを可能にします。セキュリティ上のリスクがあるため、ファイアウォールや ISP は通常、SMB ファイル共有への公開接続をブロックします。Cloudflare Tunnel を使うと、ネットワーク外のユーザーにも安全で簡単な SMB アクセスを提供できます。
Cloudflare Zero Trust では、SMB サーバーへの接続方法が 2 つあります。
SMB は Microsoft Windows 向けに開発されましたが、Samba を使うと UNIX 系および BSD システムからも SMB 接続できます。Ubuntu マシンでは、この ガイド ↗ で Samba サーバーをセットアップできます。
Cloudflare Tunnel を使うと、サーバーから Cloudflare のグローバルネットワークへ、アウトバウンドのみの安全な接続を作れます。サーバー上で cloudflared デーモンを動かす必要があります。ユーザーはデバイスに Cloudflare One Client をインストールし、Zero Trust 組織に登録してサービスに到達します。リモートデバイスは、プライベートネットワーク上にいるかのように接続できます。デフォルトでは、組織に登録されたすべてのデバイスがサービスにアクセスできます。特定のユーザーを許可またはブロックするには、ポリシーを作成します。
-
Cloudflare ダッシュボードで Networking > Tunnels を開きます。
Tunnels を開く ↗ -
新しいトンネルを作成する か、既存の
cloudflaredトンネルを編集します。
-
Cloudflare ダッシュボードで Networking > Routes を開きます。
Routes を開く ↗ -
Create route > Tunnel CIDR を選択します。作成したトンネルを選び、サーバーのプライベート IP または CIDR アドレスを入力して Create route を選択します。
-
(任意)サーバーへのアクセスを細かく制御するには、Zero Trust ポリシーを設定 します。
デバイスを Cloudflare に接続するには:
- デバイスに Cloudflare One Client をデプロイ し、Traffic and DNS mode にするか、プロキシエンドポイントを生成 して PAC ファイルをデプロイします。
- デバイス登録ルールを作成 し、Zero Trust 組織に登録できるデバイスを決めます。
デフォルトでは、WARP は RFC 1918 空間 ↗ 向けのトラフィックを除外します。これはプライベートネットワークでよく使われ、インターネットから到達できない IP アドレスです。Cloudflare One Client が private network へトラフィックを送るには、Split Tunnels を設定し、private network の IP/CIDR が Cloudflare One Client 経由でルーティングされるようにします。
-
まず、Split Tunnels のモード が Exclude と Include のどちらになっているかを確認します。
-
モードに応じて Split Tunnel のルートを編集します。
Exclude モードを使っている場合:
a. private network の IP/CIDR 範囲を含む ルートを削除 します。たとえば、ネットワークが AWS のデフォルト範囲
172.31.0.0/16を使っている場合は、172.16.0.0/12を削除します。b. private network が明示的に使っていない IP/CIDR 範囲を再追加 します。上記の AWS の例では、
172.16.0.0/13、172.24.0.0/14、172.28.0.0/15、172.30.0.0/16を新たに追加します。こうすると、172.31.0.0/16向けのトラフィックだけが Cloudflare One Client 経由になります。再追加する IP アドレスは、次の計算機で求められます。
計算機の使い方
- Base CIDR に、Split Tunnels から削除した RFC 1918 範囲を入力します。
- Subtracted CIDRs に、private network が使う IP/CIDR 範囲を入力します。
- 計算機の結果を Split Tunnel の Exclude モードのリストに戻します。
Cloudflare One Client に含めるプライベート IP 範囲を狭めると、ユーザーの ローカルリソースへのアクセス を壊すリスクを下げられます。
Include モードを使っている場合:
- 必要な Zero Trust ドメイン または IP アドレス を Split Tunnel の include リストに追加します。
- private network の IP/CIDR 範囲を含める ルートを追加 します。
-
Finder メニューで Go > Connect to Server を選択します。
-
smb://<smb-server-ip-address>/sambashareを入力します。
-
サーバーセットアップ時に作成したユーザー名とパスワードでサインインします。
- エクスプローラーを開き、Network を右クリックして Map Network Drive を選択します。
- Folder に
\\<server-private-ip>\sambashareを入力します。 - Connect using different credentials を選択します。
- Finish を選択します。
- サーバーセットアップ時に作成したユーザー名とパスワードでサインインします。
Cloudflare Tunnel は、公開ホスト名経由でアプリケーションをルーティングすることもできます。この方法なら、ユーザーは Cloudflare One Client なしでアプリケーションに接続できます。サーバーマシンとクライアントマシンの両方に cloudflared をインストールし、Cloudflare 上に有効なゾーンが必要です。トラフィックはこの接続上でプロキシされ、ユーザーは Cloudflare Access の認証情報でサーバーにログインします。
公開ホスト名の方法は、Cloudflare One Client 経由のルーティングと併用できます。サーバーへの接続手段を複数用意できます。プライベートネットワークのルートと公開ホスト名のルートで、同じトンネルを再利用できます。
-
ダッシュボードのセットアップガイド に従って Cloudflare Tunnel を作成します。
-
Cloudflare ダッシュボードで Networking > Tunnels を開き、対象のトンネルを選択します。
Tunnels を開く ↗ -
Routes タブで Add route を選び、Published application を選択します。
-
ドロップダウンからドメインを選び、サブドメインを指定します(例:
smb.example.com)。 -
Service で SMB を選び、SMB の待受ポートを入力します(例:
localhost:445)。SMB ドライブはデフォルトでポート139または445を待ち受けます。 -
Add route を選択します。
デフォルトでは、公開アプリケーションのホスト名を知っていれば、インターネット上の誰でもサーバーに接続できます。特定のユーザーを許可またはブロックするには、Cloudflare Access で セルフホストアプリケーション を作成します。
-
クライアントマシンに
cloudflaredをインストール します。 -
次のコマンドで SMB の待受ポートを開きます。クライアントマシン上の空きポートを指定できます。
cloudflared access tcp --hostname smb.example.com --url localhost:8445このコマンドはデスクトップショートカットに包めます。エンドユーザーがコマンドラインを使う必要はありません。
-
SMB クライアントを開き、クライアントの接続先を
smb://localhost:8445/sambashareに設定します。ホスト名は入力しないでください。 -
サーバーセットアップ時に作成したユーザー名とパスワードでサインインします。
Windows マシンを使っていて SMB のポートを指定できない場合は、ローカルサーバーを無効にする必要があることがあります。クライアントマシンのローカルサーバーは、CIFS/SMB と同じデフォルトポート 445 を使います。そのポートで待ち受けると、ローカルサーバーが cloudflare access 接続を妨げることがあります。
Windows マシンでローカルサーバーを無効にする手順は次のとおりです。
- Win+R を押して Run ウィンドウを開きます。
services.mscと入力し、Enter を押します。- ローカルサーバーのプロセス(多くの場合
Server)を探します。 - サービスを停止し、Startup type を Disabled にします。
TCP/IP NetBIOS Helperについても手順 3 と 4 を繰り返します。