{"id":13583841,"url":"https://github.com/papanito/ansible-role-cloudflared","last_synced_at":"2025-06-27T03:05:11.286Z","repository":{"id":44911242,"uuid":"281964100","full_name":"papanito/ansible-role-cloudflared","owner":"papanito","description":"This ansible role does download and install cloudflared on the host and optionally installs the argo-tunnel as a service.","archived":false,"fork":false,"pushed_at":"2025-05-29T20:03:55.000Z","size":195,"stargazers_count":52,"open_issues_count":8,"forks_count":14,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-05-29T20:34:19.350Z","etag":null,"topics":["ansible","ansible-role","cloudflared"],"latest_commit_sha":null,"homepage":"","language":"Jinja","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/papanito.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"papanito","ko_fi":"papanito","patreon":"papanito"}},"created_at":"2020-07-23T13:48:34.000Z","updated_at":"2025-05-29T20:03:59.000Z","dependencies_parsed_at":"2025-04-09T20:13:37.881Z","dependency_job_id":"a56ba98c-e2fd-4780-95c4-27ce2df89daa","html_url":"https://github.com/papanito/ansible-role-cloudflared","commit_stats":{"total_commits":128,"total_committers":10,"mean_commits":12.8,"dds":0.1953125,"last_synced_commit":"07ce26fa34a4bf285b0e9c28dc013b810a35f1ea"},"previous_names":[],"tags_count":33,"template":false,"template_full_name":null,"purl":"pkg:github/papanito/ansible-role-cloudflared","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/papanito%2Fansible-role-cloudflared","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/papanito%2Fansible-role-cloudflared/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/papanito%2Fansible-role-cloudflared/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/papanito%2Fansible-role-cloudflared/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/papanito","download_url":"https://codeload.github.com/papanito/ansible-role-cloudflared/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/papanito%2Fansible-role-cloudflared/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262180925,"owners_count":23271312,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ansible","ansible-role","cloudflared"],"created_at":"2024-08-01T15:03:50.532Z","updated_at":"2025-06-27T03:05:11.252Z","avatar_url":"https://github.com/papanito.png","language":"Jinja","funding_links":["https://github.com/sponsors/papanito","https://ko-fi.com/papanito","https://patreon.com/papanito"],"categories":["Jinja"],"sub_categories":[],"readme":"# Ansible role \"papanito.cloudflared\"\n\n[![Ansible Role](https://img.shields.io/ansible/role/49833)](https://galaxy.ansible.com/papanito/cloudflared) [![Ansible Quality Score](https://img.shields.io/ansible/quality/49833)](https://galaxy.ansible.com/papanito/cloudflared) [![Ansible Role](https://img.shields.io/ansible/role/d/49833)](https://galaxy.ansible.com/papanito/cloudflared) [![GitHub issues](https://img.shields.io/github/issues/papanito/ansible-role-cloudflared)](https://github.com/papanito/ansible-role-cloudflared/issues) [![GitHub pull requests](https://img.shields.io/github/issues-pr/papanito/ansible-role-cloudflared)](https://github.com/papanito/ansible-role-cloudflared/pulls)\n\nThis ansible role does download and install `cloudflared` on the host and optionally installs the [argo-tunnel] as a service.\n\n\u003e **Breaking changes with 3.0.0**\n\u003e\n\u003e This is a breaking change to reflect [the new beahviour](https://blog.cloudflare.com/many-services-one-cloudflared/) of [named tunnels](https://blog.cloudflare.com/argo-tunnels-that-live-forever/)\n\u003e\n\u003e The role should take care of cleanup if you used the role before v.3.0.0. However **you have to update the configuration (variables)** in your ansible project. I renamed the variables - usually prefixed with `cf_` to make them unique to the role. If they are not unique it may happen that variables using the same name in different roles can have undesired side-effects.\n\n## Cloudflared and connecting apps to tunnels\n\nAccording to [1], in order to create and manage Tunnels, you'll first need to:\n\n1. [Download and install cloudflared](https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/installation) on your machine\n2. [Authenticate](https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/setup) cloudflared\n\nOnce cloudflared has been installed and authenticated, the process to get your first Tunnel up and running includes 3 high-level steps:\n\n3. [Create a Tunnel](https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/create-tunnel)\n4. [Route traffic to your Tunnel](https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/routing-to-tunnel)\n5. [Run your Tunnel](https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/run-tunnel)\n\nSteps 4-5 are executed once per Tunnel, normally by an administrator, and Step 6 is executed whenever the Tunnel is to be started, normally by the owner of the Tunnel (whom may be different from the administrator).\n\n## What does the role do?\n\nThe role has actually two purposes\n\n- [Server side daemon installation](#server-side-daemon-installation)\n- [SSH Client config](#ssh-client-config)\n\n### Server side daemon installation\n\nThe role only takes care of **setting up the service on the nodes**, i.e. steps 1, 2, 4 and 5 from above, cause\n\n\u003e Creating tunnels and enable routing is a task which should be done by an administrator and not the role \u003csup\u003e[1]\u003c/sup\u003e\n\nYou can configure one to multiple [named tunnels] as well as [single service] - even so, with [named tunnels] you usually only need one daemon. The role actually performs these steps:\n\n1. Download and install binary according to [downloads]\n2. Install/configure the daemon - see [Authenticate the daemon](#authenticate-the-daemon)\n3. For [named tunnels] a [credentials file] is created under `{{ cf_credentials_dir }}/{{ tunnel_id }}.json` similar to this\n\n    ```json\n    {\"AccountTag\":\"{{ account_tag }}\",\"TunnelSecret\":\"{{ tunnel_secret }}\",\"TunnelID\":\"{{ tunnel_id }}\",\"TunnelName\":\"{{ cf_tunnels.key }}\"}\n    ```\n\n4. For each key in `cf_tunnels` create a tunnel config in `/etc/cloudflare`\n\n    The file is named `{{ tunnel }}.yml` and will contain the minimal configuration is as follows\n\n    **named tunnels**\n\n    ```yaml\n    tunnel: {{ cf_tunnels.key }}\n    credentials-file: {{ cf_credentials_dir }}/{{ tunnel_id }}.json\n    ingress:\n      {{ item.value.ingress }}\n    ```\n\n    **single service**\n\n    ```yaml\n    hostname: {{ hostname }}\n    url: {{ url }}\n    ```\n\n    Additional parameters are configured using [Tunnel configuration params](#tunnel-configuration-params)\n\n5. Depending on your init system - controlled by `cf_init_system` - the role does the following\n\n   - **Systemd**\n\n     Create a [systemd-unit-template] `cloudflared@{{ tunnel }}.service` and start an instance for each service in the list of `cf_tunnels`\n\n     ```bash\n     cloudflared tunnel --config {{ tunnel }}.yml\n     ```\n\n   - **Init-V Systems**\n\n     1. Install [cloudflared service](https://github.com/papanito/ansible-role-cloudflared/blob/master/templates/cloudflared.initv.j2) to `/etc/init.d/{{ systemd_filename }}-{{ tunnel_name }}`\n     2. Link Stop-Script to `/etc/init.d/{{ systemd_filename }}-{{ tunnel_name }}`\n     3. Link Start-Script to `/etc/init.d/{{ systemd_filename }}-{{ tunnel_name }}`\n\n6. If you use [named tunnels] the role would also create a [dns route].\n\n### SSH Client config\n\nFrom where you access your nodes via ssh which is proxied by cloudflared, you need to follow [ssh-guide-client]. You have to add the following\n\n```yml\nHost xxx.mycompany.com\n  ProxyCommand /usr/bin/cloudflared access ssh --hostname %h\n```\n\nYou can achieve this configuration if you enable `cf_ssh_client_config`. In addition you also need to specify `cf_ssh_client_config_group`. So let's assume your inventory looks as follows:\n\n```yml\nall:\n  children:\n    servers:\n      hosts:\n        host001:\n        host002:\n```\n\nIf you specify `cf_ssh_client_config_group: servers` you would get an entry for `host001` and `host002`.\n\n## Requirements\n\nnone\n\n## Role Variables\n\n### Install and uninstall parameters\n\nThe following parameters control the installation and/or un-installation\n\n|Parameter|Description|Default Value|\n|---------|-----------|-------------|\n|`cf_download_baseurl`|Base url for `cloudflare` binaries|https://github.com/cloudflare/cloudflared/releases/latest/download/|\n|`cf_install_only`|Set to `true` if you only want to install the binary without any configuration or login|`false`|\n|`cf_ssh_client_config`|Set to `true` if you want to configure the proxy configuration for your [ssh-guide-client], see [SSH Client config](#ssh-client-config)|`false`|\n|`cf_ssh_client_config_group`|Name of the inventory group for which the ssh proxy config shall be created, see [SSH Client config](#ssh-client-config)|``|\n|`cf_force_install`|Set to `true` if you want to re-install `cloudflared`. By default the assumption is that `cloudflared` is running as a service and automatically auto-updates.|`false`|\n|`cf_remove_unused_tunnel`|Removes unused cf_tunnels, means cf_tunnels running but not listed in `cf_tunnels`.|`false`|\n|`cf_remove_setup_certificate`|Remove cert.pem after installing the service|`false`|\n|`cf_credential_file_base`|Folder where to place credential files|`/root/.cloudflared/`|\n|`cf_config_dir`|Folder where to place cloudflare configuration files|`/etc/cloudflared`|\n|`cf_os_package_enable`|Use OS packaging system and Cloudflare package repository (currently just Debian/Ubuntu)|`false`|\n|`cf_repository_key_url`|If cf_os_package_enable is true, url of the GPG key for the apt repository | `https://pkg.cloudflare.com/pubkey.gpg` |\n|`cf_repository_key_install_path`|If cf_os_package_enable is true, path where to instal the GPG key for the apt repository | `/usr/share/keyrings/cloudflare-main.gpg` |\n|`cf_repository`|If cf_os_package_enable is true, url for the Cloudflare apt repository | `deb [signed-by={{ cf_repository_key_install_path }}] https://pkg.cloudflare.com/cloudflared {{ ansible_distribution_release }} main` |\n|`cf_binary_name`|Name of the cloudflare daemon binary - change only if you know what you are doing|`cloudflared`|\n\n### Cloudflared service parameters\n\nThese are parameters required to create the system service\n\n|Parameter|Description|Default Value|\n|---------|-----------|-------------|\n|`cf_init_system`|Define which init service to use. Possible values are `systemd` and `initv`|`systemd`|\n|`cf_systemd_user`|User for systemd service in case `cf_init_system: systemd`|`root`|\n|`cf_systemd_group`|Group for systemd service in case `cf_init_system: systemd`|`root`|\n|`cf_cert_location`|Location of the certificate to be copied - see [Authenticate the daemon](#authenticate-the-daemon)|-|\n|`cf_cert_content`|Content of the certificate to be copied - see [Authenticate the daemon](#authenticate-the-daemon)|-|\n|`cf_tunnels`|[Mandatory] List of tunnel-services, each one defining [Cloudflare parameters](#cloudflare-parameters)|-|\n|`cf_sysctl_buffer_size_increase`|Increase UDP receive buffer size allowed by the OS (non BSD) - [more details](https://github.com/lucas-clemente/quic-go/wiki/UDP-Receive-Buffer-Size)|`false`|\n\nIt's recommended to use [named tunnels] for `cf_tunnels` which require [Cloudflare named tunnel parameters](#cloudflare-named-tunnel-parameters) but you can also use [Cloudflare legacy tunnel parameters](#cloudflare-legacy§-tunnel-parameters)\n\n### Cloudflare named tunnel parameters\n\n```yaml\n  ...\n    cf_tunnels:\n      test:\n        routes:\n          dns:\n            - \"{{ inventory_hostname }}\"\n          cidr:\n            - \"192.168.42.0/24\"\n          lb:\n            - hostname: website.mycompany.com\n              poolname: bzh-west1.website.mycompany.com\n        account_tag:  !vault....\n        tunnel_secret: !vault....\n        tunnel_id: !vault....\n        ingress:\n          - hostname: website.mycompany.com\n            service: http://localhost:1313\n          - hostname: hello.mycompany.com\n            service: hello_world\n          - hostname: ssh.mycompany.com\n            service: ssh://localhost:22\n          - service: http_status:404\n```\n\n|Parameter|Description|Default Value|\n|---------|-----------|-------------|\n|`account_tag`|[Mandatory] Account tag from the [credentials file] generated when creating a tunnel|-|\n|`tunnel_secret`|[Mandatory] Tunnel secret from the [credentials file] generated when creating a tunnel|-|\n|`tunnel_id`|[Mandatory] Tunnel id from the [credentials file] generated when creating a tunnel|-|\n|`ingress`|[Mandatory] [ingress rules] for the tunnel|-|\n|`routes`|List of routes which shall be created. It allows a list for `dns`-routes at the moment (see example above)|`-`|\n\n#### Routes\n\n##### DNS\n\n`dns` routes expect a list of `CNAME`'s to be created as [described here](https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/routing-to-tunnel/dns). If the `CNAME` already exists the task will be skipped but no error thrown. Also only add `CNAME` not a FQDN as the `FQDN` is determined by `cloudlfared`.\n\n##### Private Network\n\n`private network` routes expect a list of `CIDR`'s to be created as [described here](https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/private-net/connect-private-networks/). The playbook loop on the list to execute `cloudflared tunnel route ip add {{ cf_cidr_entry }} {{ cf_tunnel.key }}`. If the `CIDR` already exists, an error will thrown but ignored.\n\n##### Load Balancer\n\n`lb` routes expect a list of existing cloudflared load balancer (plus its pool) to route tunnel on as [described here](https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/routing-to-tunnel/lb/). The playbook loop on the list to execute `cloudflared tunnel route lb {{ cf_tunnel.key }} {{ cf_lb_entry.host_name }} {{ cf_lb_entry.pool_name }}`. If the tunnel is already bind into the pool, an ignored error will throw.\n\n### Cloudflare single service parameters\n\nAs with previous versions of this roles you can use the [single service configuration style][single service]\n\n\u003e If you need to proxy traffic to only one local service, you can do so using the config file. As an alternative, you can set up single-service configuration\n\n```yaml\ncf_tunnels:\n  ssh:\n    hostname: xxx\n    url: ssh.mycompany.com\n```\n\n|Parameter|Description|Default Value|\n|---------|-----------|-------------|\n|`hostname`|[Mandatory]Name or unique|-|\n|`url`|[Mandatory] url to which to connect to [config] e.g. `ssh://localhost:22` or `https://localhost:443`|-|\n\n#### Tunnel configuration params\n\nThese are used to configure the parameters per cloudflared service. You still can configure [Per-rule configuration for named tunnels](https://blog.cloudflare.com/many-services-one-cloudflared/) as part of the `ingress` under `cf_tunnels`.\n\n|Parameter|Description|Default Value|\n|---------|-----------|-------------|\n|`autoupdate_freq`|Autoupdate frequency - see [docu](https://developers.cloudflare.com/argo-tunnel/reference/arguments/#autoupdate-freq)|`24h`|\n|`edge_ip_version`|Specifies the IP address version (IPv4 or IPv6) used to esablish a connection between cloudflared and the Cloudflare global network. Available values are `auto`, `4`, and `6`|`auto`|\n|`edge_bind_address`|Specifies the outgoing IP address used to establish a connection between cloudflared and the Cloudflare global network|-|\n|`grace_period`|When cloudflared receives SIGINT/SIGTERM it will stop accepting new requests, wait for in-progress requests to terminate, then shut down. Waiting for in-progress requests will timeout after this grace period, or when a second SIGTERM/SIGINT is received|`30s`|\n|`metrics`|Address to query for usage metrics - see [docu](https://developers.cloudflare.com/argo-tunnel/reference/arguments/#metrics)|`localhost:`|\n|`metrics_update_freq`|Frequency to update tunnel metrics - see [docu](https://developers.cloudflare.com/argo-tunnel/reference/arguments/#metrics-update-freq)|`5s`|\n|`no_autoupdate`|Disable periodic check for updates, restarting the server with the new version - see [docu](https://developers.cloudflare.com/argo-tunnel/reference/arguments/#lb-pool)|`false`|\n|`no_chunked_encoding`|Disables chunked transfer encoding; useful if you are running a WSGI server - see [docu](https://developers.cloudflare.com/argo-tunnel/reference/arguments/#no-chunked-encoding)|`false`|\n|`no_tls_verify`|Disables TLS verification of the certificate presented by your origin. Will allow any certificate from the origin to be accepted - see [docu](https://developers.cloudflare.com/argo-tunnel/reference/arguments/#no-tls-verify)|-|\n|`origin_server_name`|Hostname that `cloudflared` should expect from your origin server certificate - see [docu](https://developers.cloudflare.com/argo-tunnel/reference/arguments/#origin-server-name)|-|\n|`origin_ca_pool`|Path to the CA for the certificate of your origin. This option should be used only if your certificate is not signed by Cloudflare - see [docu](https://developers.cloudflare.com/argo-tunnel/reference/arguments/#origin-ca-pool)|-|\n|`protocol`|Specifies the protocol to use for the tunnel - see [docu](https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/configuration/arguments#protocol) |`auto`|\n|`logfile`|Enables writing a logfile for cloudflared - it will still log to the journal|`true`|\n|`loglevel`|Specifies the verbosity of logging. The default \"info\" is not noisy, but you may wish to run with \"warn\" in production - see [docu](https://developers.cloudflare.com/argo-tunnel/reference/arguments/#loglevel)|`info`|\n|`region`|Allows you to choose the regions to which connections are established. Omit or leave empty to connect to the global region. Set `--region=us` to route all connections through us region 1 and us region 2|-|\n|`retries`|Maximum number of retries for connection/protocol errors. Retries use exponential backoff (retrying at 1, 2, 4, 8, 16 seconds by default) so increasing this value significantly is not recommended - see [docu](https://developers.cloudflare.com/argo-tunnel/reference/arguments/#retries)|`5`|\n|`tag`|Custom tags used to identify this tunnel, in format `KEY=VALUE` - see [docu](https://developers.cloudflare.com/argo-tunnel/reference/arguments/#tag)|-|\n|`token`|Associates the cloudflared instance with a specific tunnel. The tunnel’s token is shown in the dashboard when you first [create the tunnel](https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/install-and-setup/tunnel-guide/remote/). You can also retrieve the token using the [API](https://developers.cloudflare.com/api/operations/cloudflare-tunnel-get-a-cloudflare-tunnel-token)|-|\n|`transport_loglevel`|Specifies the verbosity of logs for the transport between cloudflared and the Cloudflare edge. Available levels are: `trace`, `debug`, `info`, `warn`, `error`, `fatal`, `panic`. Any value below warn produces substantial output and should only be used to debug low-level performance issues and protocol quirks - see [docu](https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/tunnel-guide/local/local-management/arguments/#transport-loglevel)|`info`|\n|`warp_routing`|Allow users to connect to internal services using WARP, details see [warp-routing]|`false`|\n\n## Dependencies\n\nnone\n\n## Example Playbooks\n\nThe following example installs an single service for an ssh-tunnel for each `server`\n\n```yaml\n- hosts: servers\n  vars:\n    cf_systemd_user: root\n    cf_systemd_group: root\n    cf_cert_location: /home/papanito/cert.pem\n    services:\n      ssh:\n        hostname: \"{{ inventory_hostname }}.mycompany.com\"\n        url: ssh://localhost:22\n  roles:\n    - papanito.cloudflared\n```\n\nThe following example installs an [named tunnel] `servers` with an ingress to `{{ inventory_hostname }}.mycompany.com` for ssh a [hello world] if you access `hello-{{ inventory_hostname }}.mycompany.com` via the browser\n\n```yaml\n- hosts: servers\n  remote_user: ansible\n  become: true\n  vars:\n    cf_cert_location: /home/papanito/.cloudflared/cert.mycompany.com.pem\n    cf_tunnels:\n      test:\n        account_tag: !vault...\n        tunnel_secret: !vault...\n        tunnel_id: !vault...\n        routes:\n          dns:\n          - \"{{ inventory_hostname }}\"\n          - \"hello-{{ inventory_hostname }}\"\n        ingress:\n        - hostname: \"hello-{{ inventory_hostname }}.mycompany.com\"\n          service: hello_world\n        - hostname: \"{{ inventory_hostname }}.mycompany.com\"\n          service: ssh://localhost:22\n        - service: http_status:404\n  roles:\n    - papanito.cloudflared\n```\n\nThe following example simply downloads `cloudflared` on your local machine and configures the ssh-config file:\n\n```yaml\n- hosts: localhost\n  remote_user: papanito #your local user who has admin\n  vars:\n    cf_install_only: true\n    cf_ssh_client_config: true\n    cf_ssh_client_config_group: servers\n  roles:\n    - papanito.cloudflared\n```\n\n## Test\n\n```bash\nansible-playbook tests/test.yml -i tests/inventory\n```\n\n## Additional Info\n\n### Authenticate the daemon\n\nAccording to [authenticate-the-cloudflare-daemon] when authenticate the daemon, there is a browser window opened or - if this is not possible - then the link has to be put manually. During this time the daemon waits. I could not come up with a solution how to automate this behavior so I came up with the following implementation.\n\n- if nothing is specified, then ansible calls the `cloudflared login` and will continue when the authentication is done - this makes sens if you use the role to install the daemon locally on your machine and where you have a browser window\n- if `cf_cert_location` the certificate is actually copied from the `cf_cert_location`, or if `cf_cert_content` is defined then the certificate is created directly from the value stored in it. So you could login once to cloudflare from your master node (where you run ansible) or from a remote location.\n\n   You can encrypt the `cert.pem` with ansible vault and store it somewhere save.\n\nReferences:\n\n- [downloads] - cloudflared download instructions\n- [ssh-guide] - ssh connections with cloudflared\n- [cli-args] - command-line arguments\n- [config] - The configuration file format uses YAML syntax\n\n## License\n\nThis is Free Software, released under the terms of the Apache v2 license.\n\n## Author Information\n\nWritten by [Papanito](https://wyssmann.com) - [Gitlab](https://gitlab.com/papanito) / [Github](https://github.com/papanito)\n\n\n[dns route]: https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/routing-to-tunnel/dns\n[hello world]: https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/configuration/ingress#supported-protocols\n[credentials file]: https://developers.cloudflare.com/cloudflare-one/tutorials/multi-origin#configure-cloudflared\n[named tunnels]: https://blog.cloudflare.com/argo-tunnels-that-live-forever/\n[argo-tunnel]: https://developers.cloudflare.com/cloudflare-one/connections/connect-apps\n[ingress rules]: https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/configuration/ingress\n[downloads]: https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/installation\n[ssh-guide]: https://developers.cloudflare.com/cloudflare-one/tutorials/ssh\n[ssh-guide-client]: https://developers.cloudflare.com/cloudflare-one/tutorials/ssh#connect-from-a-client-machine\n[config]: https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/configuration/config\n[cli-args]: https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/configuration/config\n[authenticate-the-cloudflare-daemon]: https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/setup\n[systemd-unit-template]: https://fedoramagazine.org/systemd-template-unit-files/ssh-guide-client\n[warp-routing]: https://developers.cloudflare.com/cloudflare-one/tutorials/warp-to-tunnel#configure-and-run-the-tunnel\n[1]: https://developers.cloudflare.com/cloudflare-one/tutorials/ssh/\n[single service]: https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/configuration/ingress#single-service-configuration)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpapanito%2Fansible-role-cloudflared","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpapanito%2Fansible-role-cloudflared","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpapanito%2Fansible-role-cloudflared/lists"}