Cloudflare Zero Trustを利用して、自宅サーバに対して、外部のネットワークからSSHする手順です。
事前準備
あらかじめCloudflareのアカウント作成とZero Trustの有効化を行っておく。
実装
1. Cloudflareでトンネルの作成
はじめにCloudflareでVPNのトンネルを作成する
「Zero Trust」のダッシュボードに移動し、「Network > Tunnulens」に遷移する
「Tnunnel name」は自分が分かるように任意の名称を入力する。
Cloudflareと接続するクライアントのをサーバにインストールするためのコマンドが表示される。
このコマンドは後の手順で利用するので控えておく。
画面右下部の「Next」を選択すると最後にルーティング方法を選択する画面に遷移する。
今回は、自宅サーバーのネットワークに接続するため「Private Network」を選択する。
CIDRは接続する自宅サーバーが所属するのネットワークのCIDRを記載する。
CIDRは、接続したい自宅サーバ上でip
コマンドを利用することで確認ができる
ip addr
~~省略~~
1: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 68:1d:ef:25:72:ad brd ff:ff:ff:ff:ff:ff
inet 192.168.2.150/24 brd 192.168.2.255 scope global noprefixroute eno1 # ここで確認
valid_lft forever preferred_lft forever
inet6 fd44:28ec:e1e8:4a97:6a1d:efff:fe25:72ad/64 scope global dynamic noprefixroute
valid_lft 1664sec preferred_lft 1664sec
inet6 fe80::6a1d:efff:fe25:72ad/64 scope link noprefixroute
2. 自宅サーバにCloudflareのクライアントをインストール
自宅サーバーにCloudflareのクライアントをインストールする。
以降の手順はCentOS7にインストールする手順となる。
sudo yum install yum-utils
sudo yum-config-manager --add-repo https://pkg.cloudflare.com/cloudflared-ascii.repo
sudo yum install cloudflared
自宅サーバが他のOSの場合は、以下の公式ドキュメントの該当のOSの章を参照
インストールが完了したら、インストールした端末をCloudflareのトンネルに接続する。
Cloudflareの画面の「Network > Tnunnels」の「Install and run a connector」よりインストールコマンドを取得し、実行する
sudo cloudflared service install ${トークン}
Systemdを確認しプロセスが正常な状態であることを確認する。
systemctl status cloudflared
● cloudflared.service - cloudflared
Loaded: loaded (/etc/systemd/system/cloudflared.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2024-11-24 17:24:58 JST; 45min ago
Main PID: 741192 (cloudflared)
Tasks: 8 (limit: 48452)
Memory: 16.2M
CGroup: /system.slice/cloudflared.service
~~~省略~~~
Cloduflaredの自動起動設定も同時に設定されているため、サーバが再起動してた場合も自動でTunnelが再接続される。
「Network > Tnunnels」から詳細を確認し「Hostname」の欄に、インストールした端末の自宅サーバーのホスト名が表示されていれば疎通は完了となる。
WARP Clientの設定
デバイスポリシーの登録
はじめにVPNに接続可能なデバイスポリシーの登録を行う。
「Settings > WARP Client」を選択する。
「Device enrollment > Device enrollement permissions」より「Manage」を選択する。
「Add a role」を選択する。
ロールを作成する。今回は日本からのアクセスに限定するため、以下のように設定した
- Selector: Coutnry
- Value: Japan
設定が完了したら「Save」をクリックする。こちらでロールの作成は完了となる。
Split Tunnelsの設定
デフォルトではZero Trustトンネルの接続の設定で、192.168.0.0/16
や10.0.0.0/8
にルーティングがされないように設定されている。
その設定を解除しないとトンネルに接続しても自宅サーバに接続できない。指定した自宅サーバのCIDRだけを除外するように設定する。
「WARP Client > Device settings」より「Default」の設定を選択、3点リーダーより「Configure」をクリックする。
「Split Tunnels」の「Manage」を選択
除外されているIPアドレスの一覧が出てくるので、この中からおうちサーバが属するCIDRを選択し削除する。(添付した画像は192.168.0.0/16
を削除済み)
ダッシュボード上で実施する作業は完了となる
3. WARP Clientの設定
接続元の端末に、自宅サーバに接続するために必要なWARP Client(WARP)をインストールする。
Macの場合、WARPはbrewからもインストールが可能なので以下のコマンドでインストールする。
brew install --cask cloudflare-warp
インストールが完了したら「Preferences > Account」に移動する。
画面赤枠の「Login to Cloudflare Zero Trust」をクリックする。
チーム名の入力が求められる。「Team Name」はZero Trustsを作成したときのチーム名を入力する。
例えば、XYZ.cloudflare.com
の名前でチームを作成した場合はXYZ
と入力する
ブラウザが起動し、Cloudflareのログインが実行される。無事ログインができている場合「Zero Trust」が起動し「Connected」と表示される。
4. SSHログイン
WARP Clientを「Connected」にした状態で、外部のネットワークからSSHをすれば自宅サーバに接続が可能となる。
% ssh ${ユーザ名}@${自宅サーバのIP Address}
Last login: Sun Nov 24 21:50:07 2024 from ${自宅サーバのIP Address}
[${ユーザ名}@${自宅サーバのIP Address} ~]$
参考