Cloudflare Tunnel でおうちサーバを公開する
こちらの記事は @disneyresidents さんとの共同執筆となっております。
今回はUbuntu 20.04LTSで検証を行いましたが、他環境でも同じ様に出来ると思います。
前提条件として、Cloudflareで1つ以上のドメインを管理していることが必要です。
cloudflaredのインストール
はじめにOSのパッケージの更新を行います。
Ubuntuであれば、
sudo apt update
sudo apt upgrade -y
と入力し、更新を行ってください。
次に、以下のサイトを参照してcloudflaredをサーバーにインストールします。
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
cloudflared loginの部分誤字ってますよ
修正しました~
ありがとうございます!