cloudflare-gateway-pihole-scripts

mrrfvMIT活跃维护

用 Cloudflare Gateway 的 DNS/VPN 免费拦截广告、恶意软件和追踪域名,脚本自动同步屏蔽列表,可替代 NextDNS、Pi-hole 和 AdGuard。

Use Cloudflare Gateway DNS/VPN to block ads, malware and tracking domains - free alternative to NextDNS, Pi-hole and AdGuard

暂无版本849star +2 / 7 天1,553fork同步于 2026-11-10 17:55 UTC

怎么上手

由 README 提炼,执行前请确认
npm install
node download_lists.js
node cf_list_create.js
node cf_gateway_rule_create.js
硬件要求按 README 说明

无需自建服务器或树莓派,只需 Node.js 环境;DNS 过滤走 Cloudflare 解析器,SNI 过滤需安装 WARP 客户端登录 Zero Trust。README 未说明具体硬件或显存要求。

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

用 Cloudflare Gateway 实现 Pi-hole 式广告与追踪域名拦截,无需自建服务器

用 Cloudflare Gateway 的 DNS/VPN 免费拦截广告、恶意软件和追踪域名,脚本自动同步屏蔽列表,可替代 NextDNS、Pi-hole 和 AdGuard。

核心能力

  • 把 blocklist.txt 中的域名批量创建为 Gateway 列表
  • 自动清理重复、无效域名与注释
  • 支持 allowlist.txt 强制放行可信域名
  • 实验性 SNI 过滤,绕过 DNS 改动仍生效
  • 可配 GitHub Actions 定时自动更新过滤规则

容易踩的坑

需先复制 .env.example 为 .env 并填入 Cloudflare API Token、账户 ID 等;免费计划最多 30 万个域名,超出需调整 CLOUDFLARE_LIST_ITEM_LIMIT;DRY_RUN 目前仅对 cf_list_create.js 生效。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

0 个版本

暂无 release 数据(可能没有发版,或尚未同步)。

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    Cloudflare Gateway Pi-hole Scripts (CGPS)

    Cloudflare Gateway Analytics screenshot showing a thousand blocked DNS requests

    Cloudflare Gateway allows you to create custom rules to filter HTTP, DNS, and network traffic based on your firewall policies. This is a collection of scripts that can be used to get a similar experience as if you were using Pi-hole, but with Cloudflare Gateway - so no servers to maintain or need to buy a Raspberry Pi!

    About the individual scripts

    • cf_list_delete.js - Deletes all lists created by CGPS from Cloudflare Gateway. This is useful for subsequent runs.
    • cf_list_create.js - Takes a blocklist.txt file containing domains and creates lists in Cloudflare Gateway
    • cf_gateway_rule_create.js - Creates a Cloudflare Gateway rule to block all traffic if it matches the lists created by CGPS.
    • cf_gateway_rule_delete.js - Deletes the Cloudflare Gateway rule created by CGPS. Useful for subsequent runs.
    • download_lists.js - Initiates blocklist and whitelist download.

    Features

    • Support for basic hosts files
    • Full support for domain lists
    • Automatically cleans up filter lists: removes duplicates, invalid domains, comments and more
    • Works fully unattended
    • Allowlist support, allowing you to prevent false positives and breakage by forcing trusted domains to always be unblocked.
    • Experimental SNI-based filtering that works independently of DNS settings, preventing unauthorized or malicious DNS changes from bypassing the filter.
    • Optional health check: Sends a ping request ensuring continuous monitoring and alerting for the workflow execution, or messages a Discord webhook with progress.

    Usage

    Prerequisites

    1. Node.js installed on your machine
    2. Cloudflare Zero Trust account - the Free plan is enough. Use the Cloudflare documentation for details.
    3. Cloudflare email, API token with Zero Trust read and edit permissions, and account ID. See here for more information about how to create the token.
    4. A file containing the domains you want to block - max 300,000 domains for the free plan - in the working directory named blocklist.txt. Mullvad provides awesome DNS blocklists that work well with this project. A script that downloads recommended blocklists, download_lists.js, is included.
    5. Optional: You can whitelist domains by putting them in a file allowlist.txt. You can also use the get_recomended_whitelist.sh Bash script to get the recommended whitelists.
    6. Optional: A Discord (or similar) webhook URL to send notifications to.

    Running locally

    1. Clone this repository.
    2. Run npm install to install dependencies.
    3. Copy .env.example to .env and fill in the values.
    4. If you haven't downloaded any filters yourself, run the node download_lists.js command to download recommended filter lists (OISD Small and AdAway; about 50 000 domains).
    5. Run node cf_list_create.js to create the lists in Cloudflare Gateway. This will take a while.
    6. Run node cf_gateway_rule_create.js to create the firewall rule in Cloudflare Gateway.
    7. Profit! Time is money after all. You can update the lists by repeating steps 4, 5 and 6.

    Running in GitHub Actions

    These scripts can be run using GitHub Actions so your filters will be automatically updated and pushed to Cloudflare Gateway. This is useful if you are using a frequently updated blocklist.

    Please note that:

    • GitHub Actions wasn't intended to be used for this purpose, therefore the local options are recommended.
    • the GitHub Action downloads the recommended blocklists and whitelist by default. You can change this behavior by setting Actions variables.
    1. Create a new empty, private repository. Forking or public repositories are discouraged, but supported - although the script never leaks your API keys and GitHub Actions secrets are automatically redacted from the logs, it's better to be safe than sorry. There is no need to use the "Sync fork" button if you're doing that! The GitHub Action downloads the latest code regardless of what's in your forked repository.
    2. Create the following GitHub Actions secrets in your repository settings:
      • CLOUDFLARE_API_TOKEN: Your Cloudflare API Token with Zero Trust read and edit permissions
      • CLOUDFLARE_ACCOUNT_ID: Your Cloudflare account ID
      • CLOUDFLARE_LIST_ITEM_LIMIT: The maximum number of blocked domains allowed for your Cloudflare Zero Trust plan. Default to 300,000. Optional if you are using the free plan.
      • PING_URL: /Optional/ The HTTP(S) URL to ping (using curl) after the GitHub Action has successfully updated your filters. Useful for monitoring.
      • DISCORD_WEBHOOK_URL: /Optional/ The Discord (or similar) webhook URL to send notifications to. Good for monitoring as well.
    3. Create the following GitHub Actions variables in your repository settings if you desire:
      • ALLOWLIST_URLS: Uses your own allowlists. One URL per line. Recommended allowlists will be used if this variable is not provided.
      • BLOCKLIST_URLS: Uses your own blocklists. One URL per line. Recommended blocklists will be used if this variable is not provided.
      • BLOCK_PAGE_ENABLED: Enable showing block page if host is blocked.
    4. Create a new file in the repository named .github/workflows/main.yml with the contents of auto_update_github_action.yml found in this repository. The default settings will update your filters every week at 3 AM UTC. You can change this by editing the schedule property.
    5. Enable GitHub Actions in your repository settings.

    DNS setup for Cloudflare Gateway

    1. Go to your Cloudflare Zero Trust dashboard, and navigate to Networks -> Resolvers & Proxies -> DNS locations.
    2. Click on the default location or create one if it doesn't exist.
    3. Configure your router or device based on the provided DNS addresses.

    Alternatively, you can install the Cloudflare WARP client and log in to Zero Trust. This method proxies your traffic over Cloudflare servers, meaning it works similarly to a commercial VPN. You need to do this if you want to use the SNI-based filtering feature, as it requires Cloudflare to inspect your raw traffic (HTTPS remains encrypted if "TLS decryption" is disabled).

    Malware blocking

    The default filter lists are only optimized for ad & tracker blocking because Cloudflare Zero Trust itself comes with much more advanced security features. It's recommended that you create your own Cloudflare Gateway firewall policies that leverage those features on top of CGPS.

    Dry runs

    To see if e.g. your filter lists are valid without actually changing anything in your Cloudflare account, you can set the DRY_RUN environment variable to 1, either in .env or the regular way. This will only print info such as the lists that would be created or the amount of duplicate domains to the console.

    Warning: This currently only works for cf_list_create.js.

    Why not...

    Pi-hole or Adguard Home?

    • Complex setup to get it working outside your home
    • Requires a Raspberry Pi

    NextDNS?

    • DNS filtering is disabled after 300,000 queries per month on the free plan

    Cloudflare Gateway?

    • Requires a valid payment card or PayPal account
    • Limit of 300k domains on the free plan

    a hosts file?

    • Potential performance issues, especially on Windows
    • No filter updates
    • Doesn't work for your mobile device
    • No statistics on how many domains you've blocked

    License

    MIT License. See LICENSE for more information.