Argo Tunnelで複数のトンネルをサービスとして起動
CloudflareのArgo Tunnelはサービスとして起動することができるが、現時点では設定ファイルが決め打ちになっているため、そのままでは1本のトンネルしか起動できない。
そこで、ユニットファイルを少し変更して1台のマシン上で複数のトンネルを起動できるようにした。
ユニットファイルの作成
以下の内容で/etc/systemd/system/cloudflared@.service
を作成する(要root)。
[Unit]
Description=Argo Tunnel (%I)
After=network.target
[Service]
TimeoutStartSec=0
Type=notify
ExecStart=/usr/local/bin/cloudflared --config /etc/cloudflared/config-%i.yml --no-autoupdate tunnel run
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
もしかしたらExecStart=/usr/local/bin/cloudflared --config /etc/cloudflared/config-%i.yml --no-autoupdate tunnel run
の部分は
ExecStart=/usr/local/bin/cloudflared tunnel --config /etc/cloudflared/config-%i.yml --no-autoupdate run
と順序を変えたほうが良いかも。
保存したらユニットファイルを再読込み。
sudo systemctl daemon-reload
起動
チュートリアル(Connect applications · Cloudflare for Teams documentation)に従ってトンネルを作成。
cloudflared tunnel create test001
~/.cloudflared
以下に作成された.jsonファイルを/etc/cloudflared
に移動する。
また、~/.cloudflared/cert.pem
も/etc/cloudflared
に移動しないとサービスが起動しなかった(ドキュメントには既存のトンネルの接続にはcert.pem
は不要、と書いてあったのだが…)。
次にルートを設定。
cloudflared tunnel route dns test001 test001.example.com
あとは/etc/cloudflared/
ディレクトリにconfig-(設定名).yml
という名前で設定ファイルを作成。
sudo nano /etc/cloudflared/config-test001.yml
設定ファイルの内容は以下のような感じ。
hostname: test001.example.com
tunnel: a75c4ff3-a8ed-471e-8d76-e30b780b98f7
url: https://localhost:8080/
no-tls-verify: true
logfile: /var/log/cloudflared_test001.log
credentials-file: /etc/cloudflared/a75c4ff3-a8ed-471e-8d76-e30b780b98f7.json
ここまでできれば、あとは@
に続けて設定名を指定してユニットを起動する。
sudo systemctl start cloudflared@test001
複数のトンネルを起動する時は上記手順を繰り返せばOK。
Cloudflareとしては複数起動する場合はdockerを使うことを想定しているのかも。