Open5

OPNsense で Cloudflare Tunnel を使う

hrkohrko

OPNsense に cloudflared を入れる

# opnsense-code ports
# cd /usr/ports/net/cloudflared/
# make install

ソースコードからビルドするので結構時間がかかる。

hrkohrko

アップデートしたいときはこうする。

# opnsense-code ports
# cd /usr/ports/net/cloudflared/
# make clean
# make reinstall
hrkohrko

cloudflared にログインする

以下のコマンドを実行して、表示されたURLにブラウザでアクセスする。

# cloudflared tunnel login
Please open the following URL and log in with your Cloudflare account:

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

Leave cloudflared running to download the cert automatically.
You have successfully logged in.
If you wish to copy your credentials to a server, they have been saved to:
/root/.cloudflared/cert.pem

トンネルを作成する

アカウントにトンネルが作成され、接続情報が格納された json ファイルが /root/.cloudflared/ に保存される。

# cloudflared tunnel create <your-tunnel-name>
Tunnel credentials written to /root/.cloudflared/<your-tunnel-UUID>.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 <your-tunnel-name> with id <your-tunnel-UUID>

json ファイルの中身はこんな感じ

{
  "AccountTag": "cloudflareにログインした直後のURLに含まれる文字列",
  "TunnelSecret": "base64エンコードされたシークレット",
  "TunnelID": "トンネルのUUID"
}
hrkohrko

ダッシュボード管理のトンネル vs ローカル管理のトンネル

Cloudflare Tunnel を作成するには、

の 2 種類の方法がある。前者の方が ingress をブラウザから設定できるので便利。後者の方は ingress をテキストファイル or コマンドライン引数で設定する必要がある。

便宜上、前者をダッシュボード管理、後者をローカル管理と呼ぶことにする。

ローカル管理のトンネルも、Zero Trust ダッシュボードから操作することでダッシュボード管理に変更することができる。ただし、この変更は不可逆なので注意されたし。

今回 OPNsense で作成したトンネルもダッシュボード管理に変更しておく。

hrkohrko

cloudflared 設定ファイルの作成

以下の内容で /root/.cloudflared/config.yml を作成する。<your-tunnel-UUID> は実際のトンネルの UUID に置き換える。

/root/.cloudflared/config.yml
tunnel: <your-tunnel-UUID>
credentials-file: /root/.cloudflared/<your-tunnel-UUID>.json

サービスの設定

以下のコマンドを実行して /etc/rc.conf.local に設定を追記する。

# echo 'cloudflared_conf="/root/.cloudflared/config.yml"' > /etc/rc.conf.local
# echo 'cloudflared_mode="tunnel run"' >> /etc/rc.conf.local

これらの変数は /usr/local/etc/rc.d/cloudflared によって読み取られる。

サービスの有効化と起動

# service cloudflared enable
# service cloudflared start

トンネルが正常に繋がっているかどうかは Zero Trust ダッシュボードから確認できる。