banner
三文字

方寸之间

居善地,心善渊,与善仁,言善信,正善治,事善能,动善时。
github
email
misskey

Cloudflare Tunnelの不完全な使い方ガイド

最近、私は Raspberry Pi 上でいくつかの Web サービスを設定しましたが、これらはローカルでしか使用できず、外部ネットワークからアクセスすることができませんでした。そのため、Cloudflare Tunnel を使用してイントラネットトラフィックを転送することを試みました。ここでは、私の手順を記録します。

私のハードウェア構成

Raspberry Pi 4B+ Ubuntu システム

cloudflared のインストール#

Raspberry Pi で Cloudflare トンネルを設定するには、「Cloudflared」というソフトウェアに依存します。これは、ローカルネットワークと Cloudflare ネットワークの間でセキュアなトンネルを作成および維持するためのソフトウェアです。2 つのインストール方法があります。

方法 1:Cloudflare リポジトリを使用する#

  1. Cloudflared リポジトリの GPG キーを取得します。
curl -L https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-archive-keyring.gpg >/dev/null
  1. Cloudflared リポジトリをソフトウェアソースに追加します。
echo "deb [signed-by=/usr/share/keyrings/cloudflare-archive-keyring.gpg] https://pkg.cloudflare.com/cloudflared $(lsb_release -cs) main" | sudo tee  /etc/apt/sources.list.d/cloudflared.list
  1. パッケージキャッシュを更新し、cloudflaredをインストールします。
sudo apt update
sudo apt install cloudflared

方法 2:公式の deb パッケージを直接使用する#

以下のコマンドを使用して、GitHub のリリースページから最新の deb パッケージをダウンロードし、dpkgを使用してインストールします。

wget -q https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-arm64.deb && sudo dpkg -i cloudflared-linux-arm64.deb

注意:Raspberry Pi 4B ではarm64バージョンをインストールしてください。

アカウントの設定#

以下のコマンドを実行し、ガイドに従ってアカウントを認証します。

cloudflared tunnel login

トンネルの作成#

以下のコマンドを実行して、トンネルを作成します。

cloudflared tunnel create <トンネル>

上記のコマンドを実行すると、次のようなメッセージが表示されます。

Tunnel credentials written to /home/pi/.cloudflared/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.json. cloudflared chose this file based on where your origin certificate was found. Keep this file secret. To revoke these credentials, delete the tunnel.

Created tunnel pimytunnel with id XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

このステップでは、トンネルが作成されると同時に、トンネルの UUID、認証情報ファイル、および.cfargotunnel.comのサブドメインが生成されます。UUID と認証情報ファイルのパス(デフォルトのパスで後で説明します)を覚えておく必要があります。

以下のコマンドを使用して、トンネルが正常に作成されたかどうかを確認することもできます。

cloudflared tunnel list

トンネルの詳細な設定#

設定ファイルのデフォルトパスは 3 つあります。

  1. ~/.cloudflared
  2. /etc/cloudflared
  3. /usr/local/etc/cloudflared

ここでは、現在のユーザーディレクトリである~/.cloudflaredを使用します。このディレクトリにconfig.ymlという名前の設定ファイルを作成し、以前に作成したトンネルの生成された設定情報を入力します。

tunnel: <トンネルのUUID>
credentials-file: /home/pi/.cloudflared/<トンネルのUUID>.json

ingress:
        - hostname: test.example.com
          service: http://localhost:80
        - hostname: example.com
    	  service: https://localhost:8000
        - service: http_status:404

その後、自分の Web サービスのホスト名とポートを設定ファイルの形式に従って設定します。各ルールには通常、hostnameserviceの 2 つのパートが含まれます。最後の行の- service: http_status:404にはホスト名の部分がないことに気付くかもしれませんが、これはエラーではなく、cloudflaredの特殊なルールです。これは、すべてのトラフィックに一致するために必要なものです。

これはcloudflaredのマッチングルールに関連しています。cloudflaredが受信リクエストを受け取ると、それはリクエストに一致するルールを上から下に評価します。ルールは受信リクエストのホスト名またはパス、またはその両方に一致することができます。すべてのルールに一致しない場合、最後のルールが一致します。

イントラネットサービスのトラフィックをルーティングする#

以下のコマンドを使用して、CNAME レコードを割り当ててトラフィックをトンネルのサブドメインにリダイレクトします。

cloudflared tunnel route dns <UUIDまたはNAME> <ホスト>

# 例
cloudflared tunnel route dns pi test.example.com

トンネルの実行#

以下のコマンドを実行して、cloudflared を Cloudflare ネットワークに接続します。Cloudflared はデフォルトの場所から設定ファイルを取得します(~/.cloudflared/config.yml)。

cloudflared tunnel run <UUIDまたはNAME>

設定ファイルがデフォルトの場所にない場合は、--configオプションを使用してトンネルを実行できます。

cloudflared tunnel --config /path/your-config-file.yaml run <UUIDまたはNAME>

トンネルのパラメータを確認する#

これで、トンネルの設定が完了しました。以下のコマンドを実行して、作成したトンネルの情報を取得できます。

cloudflared tunnel info

その他の一般的なコマンド:

機能コマンド
トンネルの作成cloudflared tunnel run <NAME>
トンネルの一覧cloudflared tunnel list
トンネルの停止cloudflared tunnel stop <NAME>
トンネルの再起動cloudflared tunnel restart <NAME>
トンネルの削除cloudflared tunnel delete <NAME>
トンネルの強制削除cloudflared tunnel delete -f <NAME>
トンネルの情報表示cloudflared tunnel info <NAME>

トンネルをサービスとして実行する#

Tunnel をシステムサービスとしてインストールし、Tunnel が起動時にデーモンとして自動的に実行されるようにします。デフォルトでは、Tunnel は設定ファイルをデフォルトディレクトリ~/.cloudflared/config.ymlで見つけることを期待していますが、Tunnel をサービスとして実行するためには、config.yml ファイルを~/etc/cloudflared/に移動する必要があります。

mvコマンドを使用して設定ファイルを移動します。

sudo mv /home/pi/.cloudflared/config.yml /etc/cloudflared/

次に、以下のコマンドを実行してサービスをインストールします。

sudo cloudflared service install

サービスを起動します。

systemctl start cloudflared

サービスの実行状態を確認します。

systemctl status cloudflared

トラブルシューティング#

トンネルサービスを起動する際に遭遇した問題:

failed to sufficiently increase receive buffer size (was: 208 kiB, wanted: 2048 kiB, got: 416 kiB).

解決策:

sudo sysctl -w net.core.rmem_max=2500000

参考文献#

https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/
https://github.com/quic-go/quic-go/wiki/UDP-Receive-Buffer-Size

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。