- いままでCLIとconfig.ymlで管理していたトンネルをダッシュボードに乗り換えることはできますが、その逆は無理です。
- なので、ダッシュボードで作成したトンネルは削除してはじめから作り直す流れになります。
既存のトンネルの削除
- ダッシュボードで作成したトンネルのホスト名とプロトコル://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