-
Notifications
You must be signed in to change notification settings - Fork 0
Geo specific checks setup
虽然 Cloudflare 官方并不支持指定 Worker 的运行区域,但可以通过一些变通方法实现(参考 此链接 和 此链接)。
通常,在 Cloudflare 中添加一个 proxied 记录可以确保我们源站的 IP 地址对外隐藏,而该记录将解析为 Anycast IP 地址。这种 IP 地址的独特之处在于,它被多个 Cloudflare 边缘数据中心共享。用户连接到 Anycast IP 时,会被自动路由到最近的数据中心,从而减少延迟。然而,使用 Anycast IP 的 Worker 无法选择运行监控任务的位置。
幸运的是,Cloudflare 网络中仍然有一些特定地理位置的 IP。这些是位于某个特定数据中心的标准 IP。虽然这些 IP 不用于 CDN 且无法通过公共互联网直接访问,但 Worker 可以在 Cloudflare 网络内部访问这些 IP。
在我们的场景中,一个由定时触发器启动的 Worker 通常运行在 Cloudflare 随机选择的边缘数据中心。但如果我们通过标准的特定地理位置 IP 将子请求路由到自身,就可以在我们想要的数据中心执行监控任务。
-
准备一个域名
要实现此方法,您需要一个在 Cloudflare 上已激活的域名(也称为 Zone)。请注意,这个域名与您的状态页域名无关(详细信息)。如果您没有可用的域名,可以注册一个免费域名(例如 eu.org)。该域名仅供内部使用,不会被他人看到。
例如,我使用的域名是
lyc8503.eu.org。 -
获取特定地理位置 IP
这些 IP 地址位于
AS13335和8.0.0.0/8范围内。我已经从 ipinfo.io 下载了Free IP to Country + IP to ASN数据库,并通过grep '^8\.[0-9]*\.[0-9]*\.0,.*AS13335' country_asn.csv过滤出了 这个列表,省去了您的麻烦。下载列表后,根据需求选择适合的 IP 范围。例如,我想从日本测试我的自建实验室,因为日本地理位置上更靠近我(中国大陆),于是我在列表中搜索 “Japan”,找到 6 个可用的 IP 范围:
8.34.71.0,8.34.71.255,JP,Japan,AS,Asia,AS13335,"Cloudflare, Inc.",cloudflare.com 8.25.97.0,8.25.97.255,JP,Japan,AS,Asia,AS13335,"Cloudflare, Inc.",cloudflare.com 8.34.201.0,8.34.201.255,JP,Japan,AS,Asia,AS13335,"Cloudflare, Inc.",cloudflare.com 8.27.68.0,8.27.68.255,JP,Japan,AS,Asia,AS13335,"Cloudflare, Inc.",cloudflare.com 8.37.43.0,8.37.43.255,JP,Japan,AS,Asia,AS13335,"Cloudflare, Inc.",cloudflare.com 8.38.172.0,8.38.172.255,JP,Japan,AS,Asia,AS13335,"Cloudflare, Inc.",cloudflare.com由于并非范围内的所有 IP 都可用,因此我们需要用
nmap识别可用 IP。例如,执行sudo nmap -sP 8.34.71.0/24扫描第一个/24IP 范围,使用 ICMP ping(这些服务器不响应 TCP ping)。root@server:~# nmap -sP 8.34.71.0/24 Starting Nmap 7.80 ( https://nmap.org ) at 2023-12-08 14:28 CST Nmap scan report for 8.34.71.1 Host is up (0.091s latency). Nmap done: 256 IP addresses (1 host up) scanned in 9.65 seconds我们发现
8.34.71.0/24中只有一个运行中的 IP:8.34.71.1。但是,由于范围内的第一个 IP(如8.x.x.1)通常不处理 Worker 请求,所以这个范围不可用。我们继续尝试8.25.97.0/24,8.34.201.0/24…… 在第三次尝试中,8.34.201.0/24中有 10 个主机运行。排除8.34.201.1后,我们找到 9 个可用 IP,随意选择了8.34.201.12。root@server:~# nmap -sP 8.34.201.0/24 Starting Nmap 7.80 ( https://nmap.org ) at 2023-12-08 14:57 CST Nmap scan report for 8.34.201.1 Host is up (0.12s latency). ... Nmap scan report for 8.34.201.12 Host is up (0.11s latency). Nmap done: 256 IP addresses (10 hosts up) scanned in 6.22 seconds -
设置 Worker 路由
登录 Cloudflare Dashboard,选择您的域名(即步骤 1 中的 Zone),在
Workers Route区域点击Add route。
为路由选择一个易记的前缀。例如,我们使用
jp表示日本。在路由中输入jp.lyc8503.eu.org/*,选择 Worker 为uptimeflare_worker,然后点击Save。
在同一 Zone 中,添加一个代理的 DNS A 记录,名称为
jp,内容为步骤 2 中找到的特定地理位置 IP(如8.34.201.12)。
完成设置!访问刚刚配置的域名时,您应该会看到
Remote worker is working...的响应。将 URLhttps://jp.lyc8503.eu.org/填入配置文件的checkLocationWorkerRoute字段中即可。 协议(http或https)取决于您的 Zone 设置。您可以通过浏览器访问该 URL,查看使用的协议类型。更新:如果设置后遇到 "Too many redirects" 错误,可能需要在 Zone 中禁用 “Always Use HTTPS” 选项。参考 #7。