Image credit: pixabay
cloudflared on Debian with Ansible
Today I wanted to make a web service internet facing without exposing the origin server. Cloudflare offers cloudflared, a tool that tunnels traffic from the origin server to Cloudflare’s network. This gives the benefit of Cloudflare’s protection.
Below is a simple Ansible task that will:
- Add the Cloudflare repository.
- Install the
cloudflareddaemon. - Configure the tunnel in an idempotent manner (by checking for the
systemdservice file).
The variable cloudflare_tunnel_token needs to be configured, likely in host_vars as tunnels will typically be 1:1 between origin and Cloudflare.
---
- name: Add Cloudflare signing key
ansible.builtin.apt_key:
url: https://pkg.cloudflare.com/cloudflare-main.gpg
state: present
- name: Add Cloudflare repository
ansible.builtin.apt_repository:
repo: deb https://pkg.cloudflare.com/cloudflared bookworm main
state: present
- name: Install cloudflared
ansible.builtin.apt:
name: cloudflared
state: present
- name: Connect to tunnel
ansible.builtin.command: >
cloudflared service install {{ cloudflare_tunnel_token }}
args:
creates: /etc/systemd/system/cloudflared.service
Once run it should appear in the Cloudflare dashboard, where individual services can directed to the origin.

To change the token in future, remove all files /etc/systemd/system/cloudflare* and run the task again.