2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Cloudflareトンネルの構成管理をダッシュボードからCLIに乗り換える

Last updated at Posted at 2025-07-23
  • いままでCLIとconfig.ymlで管理していたトンネルをダッシュボードに乗り換えることはできますが、その逆は無理です。
  • なので、ダッシュボードで作成したトンネルは削除してはじめから作り直す流れになります。

image.png
(↑ 証拠画像)

既存のトンネルの削除

  • ダッシュボードで作成したトンネルのホスト名とプロトコル://localhost:ポート番号をメモしておきます。(★)
  • ダッシュボードからトンネルの削除します。
  • ホストで動いているトンネルサービスの削除します。(トンネルを作成するときに実行したtokenつきのサービスを削除します)
sudo su
systemctl status cloudflared # 状態確認
cloudflared service uninstall # 既存のトンネルサービスの削除
systemctl status cloudflared # 削除確認
cat /etc/systemd/system/cloudflared.service # 削除確認
rm /etc/cloudflared/*.json # もしあれば既存のトンネルの構成削除
rm ~/.cloudflared/*.json

新しいトンネルの作成

cloudflared tunnel create $TUNNEL_NAME
# /etc/cloudflared/に作成されていることを確認する。

cloudflared tunnel login # していなければ
cloudflared tunnel list # トンネルの作成確認

vi /etc/cloudflared/config.yml # 新しいTUNNEL_IDを設定します。
config.yml
tunnel: ${TUNNEL_ID}
credentials-file: /etc/cloudflared/${TUNNEL_ID}.json

ingress:
  - hostname: your.hostname.net
    service: ssh://localhost:22
    
  - service: http_status:404
  • (★)でメモした情報を参考にします。
  • ChatGPTに作ってもらっても良いかもしれません。

トンネルのサービス化

cloudflared service install # 新しいトンネルのサービス化

systemctl status cloudflared # サービス作成確認
cat /etc/systemd/system/cloudflared.service # サービス作成確認
  • ここでエラーが出る場合は、cloudflared service uninstallをしっかり完了していることを確認しましょう。

古いトンネルで作成したDNSレコードの削除

  • 古いDNS情報が残っていると、トンネルサービスが正常に動いていても、外からアクセスできません。
  • cloudflaredコマンドでは削除できません。
  • ダッシュボードのフィルターからまとめて削除できます。

新しいDNSレコードの登録

  • 基本はこんな感じです。
TUNNEL_ID=$(basename /etc/cloudflared/*.json .json) # ひとつしかない前提!
echo $TUNNEL_ID # 一応確認
cloudflared tunnel route dns $TUNNEL_ID your.hostname.net
  • スクリプトでconfig.ymlをもとにDNSレコードを登録する例です。
#!/bin/bash
# 実行前に旧トンネルのすべてのDNSレコードを削除
TUNNEL_ID=$(basename /etc/cloudflared/*.json .json) # ひとつしかない前提
# hostnameだけを抽出してループ
for HOSTNAME in $(grep 'hostname:' /etc/cloudflared/config.yml | sed -E 's/.*hostname:[[:space:]]*//'); do
  echo "登録中: $HOSTNAME"
  cloudflared tunnel route dns "$TUNNEL_ID" "$HOSTNAME"
done

新しいingressの追加

  • config.ymlを修正したらsystemctl restart cloudflared.serviceを実行して、DNSレコードを登録すると良さそうです
# ホスト追加時のオペレーション
## 設定ファイルへingress の追記
sudo su
nano /etc/cloudflared/config.yml # new.hostname.netをコピー
systemctl restart cloudflared.service
## DNS登録
TUNNEL_ID=$(basename /etc/cloudflared/*.json .json)
HOSTNAME=new.hostname.net
cloudflared tunnel route dns $TUNNEL_ID $HOSTNAME
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?