📝

Cloudflare Tunnel でおうちサーバを公開する

2022/05/07に公開
2

こちらの記事は @disneyresidents さんとの共同執筆となっております。

今回はUbuntu 20.04LTSで検証を行いましたが、他環境でも同じ様に出来ると思います。
前提条件として、Cloudflareで1つ以上のドメインを管理していることが必要です。

cloudflaredのインストール

はじめにOSのパッケージの更新を行います。
Ubuntuであれば、

sudo apt update
sudo apt upgrade -y

と入力し、更新を行ってください。

次に、以下のサイトを参照してcloudflaredをサーバーにインストールします。
https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/installation/
AMD64/x86-64, ARM64であれば、

# amd64 / x86-64
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared-linux-amd64.deb

# ARM x64
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-arm64.deb
sudo dpkg -i cloudflared-linux-arm64.deb

のようにしてインストール出来ます。
x86(32bit)及び、ARMの場合のリンクははじめに示したURLを参照してください。(wgetのURLとdpkgのファイル名が変わります。)

cloudflareへのログイン

cloudflared login

のようにすると

A browser window should have opened at the following URL:

https://dash.cloudflare.com/argotunnel?callback=https%3A%2F%2Flogin.cloudflareaccess.org/xxxxxxx

If the browser failed to open, please visit the URL above directly in your browser.

ブラウザが開きドメインを選択するページが表示されるので、公開するURLに使用したいドメインを選択し、認証ボタンを押します。

※ Cloudflareにログインしていない場合はログインページに遷移するのでログインし、ターミナルに表示されているURLを再度開きます。

Nginxのインストール

今回はHTTPのサービスを外部に公開します。

sudo apt install nginx

のようにしてサーバソフトウェアをインストールします。

Nginxの設定

Nginxで公開するアドレスなどを設定するファイルを編集します。
この例では127.0.0.1:80にリクエストが送信された際にローカルサーバのアドレスを返します。

server {
    listen 80;
    
    server_name localhost サブドメイン.cloudflareに登録したドメイン;
    //ex localhost file.example.com;

    location / {
        root /path/to/file/;
    }
}

設定ファイルを編集し終えたら、

sudo nginx -t

のようにコマンドを実行し、エラーが表示された場合は修正します。

エラーがなければ、

sudo systemctl reload nginx

のようにしてNginxの設定ファイルを再読込します。

Cloudflare Zero Trustの初期設定

Get Startedを参照して、Cloudlfare Zero Trustアカウントを作成してください。

Cloudflare Tunnelを作成

TunnelとはサーバーからCloudflareへコンテンツを配信するためのものです。

Cloudflare Zero Trustのダッシュボードを開き、AccessタブからTunnelsを選択します。
Tunnelの設定画面が開くので、右上にあるCreate a Tunnelをクリックします。
Tunnelの名前を入力します。お好きな名前をどうぞ。Save Tunnelをクリックします。

Choose your environmentと出てくるので、自分の環境に合わせたものを選択します。
選択するとトンネルを構築するためのコマンドが出てくるため、これをサーバーへコピペして実行します。cloudflaredはインストール済みなので、If you already have cloudflared installed on your machineの方のコマンドを実行します。
Saveをクリックします。

hostnameを設定します。
Subdomainの部分に好きなサブドメインを入力します。Domainの部分にはcloudflareに登録したドメインがでてくるので、選択します。

Serviceの設定をします。
プルダウンでHTTPを選択し、右側にはlocalhostと入力します。
Save {トンネル名} tunnelをクリックし設定を完了します。

終わりに

Cloudflare Tunnelを使用すると、おうちサーバのポートを開放することなく外部からサービスを利用したり公開したりすることができます。
今回はHTTPの通信について書きましたが、HTTPだけでなくTCPやRDPの通信やUnix Socketでの通信なども設定することができます。
また、Cloudflare TunnelではCloudflare Zero Trustの機能を利用することによりアクセスした際に認証をつける、ブラウザ上でSSH, VNCをレンダリングするといったような便利な機能もあります。

便利です!!!使いましょう!!!!
でもお高いんでしょう?
なんと!無料で使えるんです!!!


Discussion