diff --git a/.prettierrc.json b/.prettierrc.json
new file mode 100644
index 0000000..789ac2e
--- /dev/null
+++ b/.prettierrc.json
@@ -0,0 +1,5 @@
+{
+ "printWidth": 100,
+ "singleQuote": true,
+ "trailingComma": "es5"
+}
diff --git a/README.cmn-CN.md b/README.cmn-CN.md
index 8a8c393..dea7f0c 100644
--- a/README.cmn-CN.md
+++ b/README.cmn-CN.md
@@ -19,37 +19,39 @@
“`审查=是`”表示描述文件不会发送某些主机“`主机名=IP`”关系的真实信息。
-| 名称 | 区域 | 审查 | 备注 | 安装链接 |
-| ------------------------------------------------ | ----- | ---- | ------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------- |
-| [360 安全 DNS][360-dns] | 🇨🇳 | 是 | 由 360 数字安全集团运营 | [HTTPS][360-dns-profile-https] |
-| [AdGuard DNS 默认][adguard-dns-default] | 🇷🇺 | 是 | 由 AdGuard 运营,拦截广告、跟踪器和钓鱼网站 | [HTTPS][adguard-dns-default-profile-https], [TLS][adguard-dns-default-profile-tls] |
-| [AdGuard DNS 家庭保护][adguard-dns-family] | 🇷🇺 | 是 | 由 AdGuard 运营,除默认规则外,额外拦截恶意软件和成人内容 | [HTTPS][adguard-dns-family-profile-https], [TLS][adguard-dns-family-profile-tls] |
-| [AdGuard DNS 无过滤][adguard-dns-unfiltered] | 🇷🇺 | 否 | 由 AdGuard 运营,无过滤 | [HTTPS][adguard-dns-unfiltered-profile-https], [TLS][adguard-dns-unfiltered-profile-tls] |
-| [Alekberg 加密 DNS][alekberg-dns] | 🇳🇱 | 否 | 由个人提供 | [HTTPS][alekberg-dns-profile-https] |
-| [阿里云公共 DNS][aliyun-dns] | 🇨🇳 | 否 | 由阿里云计算运营 | [HTTPS][aliyun-dns-profile-https], [TLS][aliyun-dns-profile-tls] |
-| [BlahDNS CDN 过滤][blahdns] | 🇺🇸 | 是 | 由个人提供,拦截广告、跟踪器和恶意软件 | [HTTPS][blahdns-cdn-filtered-profile-https] |
-| [BlahDNS CDN 无过滤][blahdns] | 🇺🇸 | 否 | 由个人提供,无过滤 | [HTTPS][blahdns-cdn-unfiltered-profile-https] |
-| [BlahDNS 芬兰][blahdns] | 🇫🇮 | 是 | 由个人提供,拦截广告、跟踪器和恶意软件 | [HTTPS][blahdns-finland-profile-https] |
-| [BlahDNS 德国][blahdns] | 🇩🇪 | 是 | 由个人提供,拦截广告、跟踪器和恶意软件 | [HTTPS][blahdns-germany-profile-https] |
-| [BlahDNS 日本][blahdns] | 🇯🇵 | 是 | 由个人提供,拦截广告、跟踪器和恶意软件 | [HTTPS][blahdns-japan-profile-https] |
-| [BlahDNS 新加坡][blahdns] | 🇸🇬 | 是 | 由个人提供,拦截广告、跟踪器和恶意软件 | [HTTPS][blahdns-singapore-profile-https] |
-| [BlahDNS 瑞士][blahdns] | 🇨🇭 | 是 | 由个人提供,拦截广告、跟踪器和恶意软件 | [TLS][blahdns-switzerland-profile-tls] |
-| [Canadian Shield 隐私][canadian-shield] | 🇨🇦 | 否 | 由加拿大互联网注册局 (CIRA) 运营 | [HTTPS][canadian-shield-private-profile-https], [TLS][canadian-shield-private-profile-tls] |
-| [Canadian Shield 保护][canadian-shield] | 🇨🇦 | 是 | 由加拿大互联网注册局 (CIRA) 运营,拦截恶意软件和钓鱼网站 | [HTTPS][canadian-shield-protected-profile-https], [TLS][canadian-shield-protected-profile-tls] |
-| [Canadian Shield 家庭][canadian-shield] | 🇨🇦 | 是 | 由加拿大互联网注册局 (CIRA) 运营,拦截恶意软件、钓鱼网站和成人内容 | [HTTPS][canadian-shield-family-profile-https], [TLS][canadian-shield-family-profile-tls] |
-| [Cloudflare 1.1.1.1][cloudflare-dns] | 🇺🇸 | 否 | 由 Cloudflare 运营 | [HTTPS][cloudflare-dns-profile-https], [TLS][cloudflare-dns-profile-tls] |
-| [Cloudflare 1.1.1.1 安全][cloudflare-dns-family] | 🇺🇸 | 是 | 由 Cloudflare 运营,拦截恶意软件和钓鱼网站 | [HTTPS][cloudflare-dns-security-profile-https] |
-| [Cloudflare 1.1.1.1 家庭][cloudflare-dns-family] | 🇺🇸 | 是 | 由 Cloudflare 运营,拦截恶意软件、钓鱼网站和成人内容 | [HTTPS][cloudflare-dns-family-profile-https] |
-| [DNSPod 公共 DNS][dnspod-dns] | 🇨🇳 | 否 | 由腾讯云计算旗下 DNSPod 运营 | [HTTPS][dnspod-dns-profile-https], [TLS][dnspod-dns-profile-tls] |
-| [谷歌公共 DNS][google-dns] | 🇺🇸 | 否 | 由谷歌运营 | [HTTPS][google-dns-profile-https], [TLS][google-dns-profile-tls] |
-| [keweonDNS][keweondns] | 🇩🇪 | 否 | 由 Aviontex. 拦截广告和跟踪器 | [HTTPS][keweondns-profile-https], [TLS][keweondns-profile-tls] |
-| [Mullvad DNS][mullvad-dns] | 🇸🇪 | 是 | 由 Mullvad VPN 运营 | [HTTPS][mullvad-dns-profile-https] |
-| [Mullvad DNS 广告过滤][mullvad-dns] | 🇸🇪 | 是 | 由 Mullvad VPN 运营,拦截广告和跟踪器 | [HTTPS][mullvad-dns-adblock-profile-https] |
-| [OpenDNS 标准][opendns] | 🇺🇸 | 否 | 由思科 OpenDNS 运营 | [HTTPS][opendns-standard-profile-https] |
-| [OpenDNS 家庭防护][opendns] | 🇺🇸 | 是 | 由思科 OpenDNS 运营,拦截恶意软件和成人内容 | [HTTPS][opendns-familyshield-profile-https] |
-| [Quad9][quad9] | 🇨🇭 | 是 | 由 Quad9 基金会运营,拦截恶意软件 | [HTTPS][quad9-profile-https], [TLS][quad9-profile-tls] |
-| [Quad9 ECS][quad9] | 🇨🇭 | 是 | 由 Quad9 基金会运营,支持 ECS,拦截恶意软件 | [HTTPS][quad9-ecs-profile-https], [TLS][quad9-ecs-profile-tls] |
-| [Tiarap][tiarap] | 🇸🇬 🇺🇸 | 是 | 由 Tiarap 运营,拦截广告、跟踪器、钓鱼网站和恶意软件 | [HTTPS][tiarap-profile-https], [TLS][tiarap-profile-tls] |
+| 名称 | 区域 | 审查 | 备注 | 安装 (已签名 - 推荐) | 安装 (未签名) |
+| ------------------------------------------------ | ----- | ---- | ------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------- |
+| [360 安全 DNS][360-dns] | 🇨🇳 | 是 | 由 360 数字安全集团运营 | [HTTPS][360-dns-profile-https-signed] | [HTTPS][360-dns-profile-https] |
+| [AdGuard DNS 默认][adguard-dns-default] | 🇷🇺 | 是 | 由 AdGuard 运营,拦截广告、跟踪器和钓鱼网站 | [HTTPS][adguard-dns-default-profile-https-signed], [TLS][adguard-dns-default-profile-tls-signed] | [HTTPS][adguard-dns-default-profile-https], [TLS][adguard-dns-default-profile-tls] |
+| [AdGuard DNS 家庭保护][adguard-dns-family] | 🇷🇺 | 是 | 由 AdGuard 运营,除默认规则外,额外拦截恶意软件和成人内容 | [HTTPS][adguard-dns-family-profile-https-signed], [TLS][adguard-dns-family-profile-tls-signed] | [HTTPS][adguard-dns-family-profile-https], [TLS][adguard-dns-family-profile-tls] |
+| [AdGuard DNS 无过滤][adguard-dns-unfiltered] | 🇷🇺 | 否 | 由 AdGuard 运营,无过滤 | [HTTPS][adguard-dns-unfiltered-profile-https-signed], [TLS][adguard-dns-unfiltered-profile-tls-signed] | [HTTPS][adguard-dns-unfiltered-profile-https], [TLS][adguard-dns-unfiltered-profile-tls] |
+| [Alekberg 加密 DNS][alekberg-dns] | 🇳🇱 | 否 | 由个人提供 | [HTTPS][alekberg-dns-profile-https-signed] | [HTTPS][alekberg-dns-profile-https] |
+| [阿里云公共 DNS][aliyun-dns] | 🇨🇳 | 否 | 由阿里云计算运营 | [HTTPS][aliyun-dns-profile-https-signed], [TLS][aliyun-dns-profile-tls-signed] | [HTTPS][aliyun-dns-profile-https], [TLS][aliyun-dns-profile-tls] |
+| [BlahDNS CDN 过滤][blahdns] | 🇺🇸 | 是 | 由个人提供,拦截广告、跟踪器和恶意软件 | [HTTPS][blahdns-cdn-filtered-profile-https-signed] | [HTTPS][blahdns-cdn-filtered-profile-https] |
+| [BlahDNS CDN 无过滤][blahdns] | 🇺🇸 | 否 | 由个人提供,无过滤 | [HTTPS][blahdns-cdn-unfiltered-profile-https-signed] | [HTTPS][blahdns-cdn-unfiltered-profile-https] |
+| [BlahDNS 德国][blahdns] | 🇩🇪 | 是 | 由个人提供,拦截广告、跟踪器和恶意软件 | [HTTPS][blahdns-germany-profile-https-signed] | [HTTPS][blahdns-germany-profile-https] |
+| [BlahDNS 新加坡][blahdns] | 🇸🇬 | 是 | 由个人提供,拦截广告、跟踪器和恶意软件 | [HTTPS][blahdns-singapore-profile-https-signed] | [HTTPS][blahdns-singapore-profile-https] |
+| [Canadian Shield 私人][canadian-shield] | 🇨🇦 | 否 | 由加拿大互联网注册管理局 (CIRA) 运营 | [HTTPS][canadian-shield-private-profile-https-signed], [TLS][canadian-shield-private-profile-tls-signed] | [HTTPS][canadian-shield-private-profile-https], [TLS][canadian-shield-private-profile-tls] |
+| [Canadian Shield 保护][canadian-shield] | 🇨🇦 | 是 | 由加拿大互联网注册管理局 (CIRA) 运营,拦截恶意软件和钓鱼网站 | [HTTPS][canadian-shield-protected-profile-https-signed], [TLS][canadian-shield-protected-profile-tls-signed] | [HTTPS][canadian-shield-protected-profile-https], [TLS][canadian-shield-protected-profile-tls] |
+| [Canadian Shield 家庭][canadian-shield] | 🇨🇦 | 是 | 由加拿大互联网注册管理局 (CIRA) 运营,拦截恶意软件、钓鱼和成人内容 | [HTTPS][canadian-shield-family-profile-https-signed], [TLS][canadian-shield-family-profile-tls-signed] | [HTTPS][canadian-shield-family-profile-https], [TLS][canadian-shield-family-profile-tls] |
+| [Cleanbrowsing 家庭过滤器][cleanbrowsing] | 🇺🇸 | 是 | 过滤恶意软件、成人内容和混合内容 | | [HTTPS][cleanbrowsing-family-https], [TLS][cleanbrowsing-family-tls] |
+| [Cleanbrowsing 成人过滤器][cleanbrowsing] | 🇺🇸 | 是 | 过滤恶意软件和成人内容 | | [HTTPS][cleanbrowsing-adult-https], [TLS][cleanbrowsing-adult-tls] |
+| [Cleanbrowsing 安全过滤器][cleanbrowsing] | 🇺🇸 | 是 | 过滤恶意软件 | | [HTTPS][cleanbrowsing-security-https], [TLS][cleanbrowsing-security-tls] |
+| [Cloudflare 1.1.1.1][cloudflare-dns] | 🇺🇸 | 否 | 由 Cloudflare 公司运营 | [HTTPS][cloudflare-dns-profile-https-signed], [TLS][cloudflare-dns-profile-tls-signed] | [HTTPS][cloudflare-dns-profile-https], [TLS][cloudflare-dns-profile-tls] |
+| [Cloudflare 1.1.1.1 安全][cloudflare-dns-family] | 🇺🇸 | 是 | 由 Cloudflare 公司运营,拦截恶意软件和钓鱼网站 | [HTTPS][cloudflare-dns-security-profile-https-signed] | [HTTPS][cloudflare-dns-security-profile-https] |
+| [Cloudflare 1.1.1.1 家庭][cloudflare-dns-family] | 🇺🇸 | 是 | 由 Cloudflare 公司运营,拦截恶意软件、钓鱼和成人内容 | [HTTPS][cloudflare-dns-family-profile-https-signed] | [HTTPS][cloudflare-dns-family-profile-https] |
+| [DNSPod 公共 DNS][dnspod-dns] | 🇨🇳 | 否 | 由腾讯公司 DNSPod 运营 | [HTTPS][dnspod-dns-profile-https-signed], [TLS][dnspod-dns-profile-tls-signed] | [HTTPS][dnspod-dns-profile-https], [TLS][dnspod-dns-profile-tls] |
+| [FDN][fdn-dns] | 🇫🇷 | 否 | 由法国数据网络运营 | | [HTTPS][fdn-https], [TLS][fdn-tls] |
+| [Google 公共 DNS][google-dns] | 🇺🇸 | 否 | 由谷歌公司运营 | [HTTPS][google-dns-profile-https-signed], [TLS][google-dns-profile-tls-signed] | [HTTPS][google-dns-profile-https], [TLS][google-dns-profile-tls] |
+| [keweonDNS][keweondns] | 🇩🇪 | 否 | 由 Aviontex 运营,拦截广告和跟踪器 | [HTTPS][keweondns-profile-https-signed], [TLS][keweondns-profile-tls-signed] | [HTTPS][keweondns-profile-https], [TLS][keweondns-profile-tls] |
+| [Mullvad DNS][mullvad-dns] | 🇸🇪 | 是 | 由 Mullvad VPN AB 运营 | [HTTPS][mullvad-dns-profile-https-signed] | [HTTPS][mullvad-dns-profile-https] |
+| [Mullvad DNS 广告拦截][mullvad-dns] | 🇸🇪 | 是 | 由 Mullvad VPN AB 运营,拦截广告和跟踪器 | [HTTPS][mullvad-dns-adblock-profile-https-signed] | [HTTPS][mullvad-dns-adblock-profile-https] |
+| [OpenDNS 标准版][opendns] | 🇺🇸 | 否 | 由思科 OpenDNS 运营 | [HTTPS][opendns-standard-profile-https-signed] | [HTTPS][opendns-standard-profile-https] |
+| [OpenDNS 家庭盾][opendns] | 🇺🇸 | 是 | 由思科 OpenDNS 运营,拦截恶意软件和成人内容 | [HTTPS][opendns-familyshield-profile-https-signed] | [HTTPS][opendns-familyshield-profile-https] |
+| [Quad9][quad9] | 🇨🇭 | 是 | 由 Quad9 基金会运营,拦截恶意软件 | [HTTPS][quad9-profile-https-signed], [TLS][quad9-profile-tls-signed] | [HTTPS][quad9-profile-https], [TLS][quad9-profile-tls] |
+| [Quad9 带 ECS][quad9] | 🇨🇭 | 是 | 由 Quad9 基金会运营,支持 ECS,拦截恶意软件 | [HTTPS][quad9-ecs-profile-https-signed], [TLS][quad9-ecs-profile-tls-signed] | [HTTPS][quad9-ecs-profile-https], [TLS][quad9-ecs-profile-tls] |
+| [Quad9 无过滤][quad9] | 🇨🇭 | 否 | 由 Quad9 基金会运营 | | [HTTPS][quad9-profile-unfiltered-https], [TLS][quad9-profile-unfiltered-tls] |
+| [Tiarap][tiarap] | 🇸🇬 🇺🇸 | 是 | 由 Tiarap 公司运营,拦截广告、跟踪器、钓鱼和恶意软件 | [HTTPS][tiarap-profile-https-signed], [TLS][tiarap-profile-tls-signed] | [HTTPS][tiarap-profile-https], [TLS][tiarap-profile-tls] |
## 安装
@@ -114,13 +116,13 @@ New-Guid
[360-dns]: https://sdns.360.net/dnsPublic.html
[360-dns-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/360-https.mobileconfig
-[adguard-dns-default]: https://adguard-dns.io/kb/zh-CN/general/dns-providers/#default
+[adguard-dns-default]: https://adguard-dns.io/kb/general/dns-providers/#default
[adguard-dns-default-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/adguard-default-https.mobileconfig
[adguard-dns-default-profile-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/adguard-default-tls.mobileconfig
-[adguard-dns-family]: https://adguard-dns.io/kb/zh-CN/general/dns-providers/#family-protection
+[adguard-dns-family]: https://adguard-dns.io/kb/general/dns-providers/#family-protection
[adguard-dns-family-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/adguard-family-https.mobileconfig
[adguard-dns-family-profile-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/adguard-family-tls.mobileconfig
-[adguard-dns-unfiltered]: https://adguard-dns.io/kb/zh-CN/general/dns-providers/#non-filtering
+[adguard-dns-unfiltered]: https://adguard-dns.io/kb/general/dns-providers/#non-filtering
[adguard-dns-unfiltered-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/adguard-nofilter-https.mobileconfig
[adguard-dns-unfiltered-profile-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/adguard-nofilter-tls.mobileconfig
[alekberg-dns]: https://alekberg.net
@@ -131,11 +133,8 @@ New-Guid
[blahdns]: https://blahdns.com/
[blahdns-cdn-filtered-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/blahdns-cdn-adblock-doh1.mobileconfig
[blahdns-cdn-unfiltered-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/blahdns-cdn-unfiltered-doh1.mobileconfig
-[blahdns-finland-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/blahdns-finland-doh.mobileconfig
[blahdns-germany-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/blahdns-germany-doh.mobileconfig
-[blahdns-japan-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/blahdns-japan-doh.mobileconfig
[blahdns-singapore-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/blahdns-singapore-doh.mobileconfig
-[blahdns-switzerland-profile-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/blahdns-switzerland-dot.mobileconfig
[canadian-shield]: https://www.cira.ca/cybersecurity-services/canadian-shield/configure/summary-cira-canadian-shield-dns-resolver-addresses
[canadian-shield-private-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/canadianshield-private-https.mobileconfig
[canadian-shield-private-profile-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/canadianshield-private-tls.mobileconfig
@@ -143,22 +142,32 @@ New-Guid
[canadian-shield-protected-profile-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/canadianshield-protected-tls.mobileconfig
[canadian-shield-family-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/canadianshield-family-https.mobileconfig
[canadian-shield-family-profile-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/canadianshield-family-tls.mobileconfig
+[cleanbrowsing]: https://cleanbrowsing.org/filters/
+[cleanbrowsing-family-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/cleanbrowsing-family-https.mobileconfig
+[cleanbrowsing-family-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/cleanbrowsing-family-tls.mobileconfig
+[cleanbrowsing-adult-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/cleanbrowsing-adult-https.mobileconfig
+[cleanbrowsing-adult-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/cleanbrowsing-adult-tls.mobileconfig
+[cleanbrowsing-security-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/cleanbrowsing-security-https.mobileconfig
+[cleanbrowsing-security-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/cleanbrowsing-security-tls.mobileconfig
[cloudflare-dns]: https://developers.cloudflare.com/1.1.1.1/encryption/
[cloudflare-dns-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/cloudflare-https.mobileconfig
[cloudflare-dns-profile-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/cloudflare-tls.mobileconfig
-[cloudflare-dns-family]: https://developers.cloudflare.com/1.1.1.1/setup/#1111-for-families
[cloudflare-dns-security-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/cloudflare-malware-https.mobileconfig
+[cloudflare-dns-family]: https://developers.cloudflare.com/1.1.1.1/setup/#1111-for-families
[cloudflare-dns-family-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/cloudflare-family-https.mobileconfig
-[dnspod-dns]: https://www.dnspod.cn/products/publicdns
+[dnspod-dns]: https://www.dnspod.com/products/public.dns
[dnspod-dns-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/dnspod-https.mobileconfig
[dnspod-dns-profile-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/dnspod-tls.mobileconfig
-[google-dns]: https://developers.google.com/speed/public-dns/docs/secure-transports?hl=zh-cn
+[fdn-dns]: https://www.fdn.fr/actions/dns/
+[fdn-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/fdn-https.mobileconfig
+[fdn-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/fdn-tls.mobileconfig
+[google-dns]: https://developers.google.com/speed/public-dns/docs/secure-transports
[google-dns-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/google-https.mobileconfig
[google-dns-profile-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/google-tls.mobileconfig
[keweondns]: https://forum.xda-developers.com/t/keweondns-info-facts-and-what-is-keweon-actually.4576651/
[keweondns-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/keweondns-doh.mobileconfig
[keweondns-profile-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/keweondns-dot.mobileconfig
-[mullvad-dns]: https://mullvad.net/zh-hans/help/dns-over-https-and-dns-over-tls/
+[mullvad-dns]: https://mullvad.net/help/dns-over-https-and-dns-over-tls/
[mullvad-dns-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/mullvad-doh.mobileconfig
[mullvad-dns-adblock-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/mullvad-adblock-doh.mobileconfig
[opendns]: https://support.opendns.com/hc/articles/360038086532
@@ -169,6 +178,48 @@ New-Guid
[quad9-profile-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/quad9-tls.mobileconfig
[quad9-ecs-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/quad9-ECS-https.mobileconfig
[quad9-ecs-profile-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/quad9-ECS-tls.mobileconfig
+[quad9-profile-unfiltered-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/quad9-nofilter-https.mobileconfig
+[quad9-profile-unfiltered-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/quad9-nofilter-tls.mobileconfig
[tiarap]: https://doh.tiar.app
[tiarap-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/tiarapp-https.mobileconfig
[tiarap-profile-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/tiarapp-tls.mobileconfig
+[360-dns-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/360-https.mobileconfig
+[adguard-dns-default-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/adguard-default-https.mobileconfig
+[adguard-dns-default-profile-tls-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/adguard-default-tls.mobileconfig
+[adguard-dns-family-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/adguard-family-https.mobileconfig
+[adguard-dns-family-profile-tls-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/adguard-family-tls.mobileconfig
+[adguard-dns-unfiltered-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/adguard-nofilter-https.mobileconfig
+[adguard-dns-unfiltered-profile-tls-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/adguard-nofilter-tls.mobileconfig
+[alekberg-dns-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/alekberg-https.mobileconfig
+[aliyun-dns-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/alibaba-https.mobileconfig
+[aliyun-dns-profile-tls-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/alibaba-tls.mobileconfig
+[blahdns-cdn-filtered-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/blahdns-cdn-adblock-doh1.mobileconfig
+[blahdns-cdn-unfiltered-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/blahdns-cdn-unfiltered-doh1.mobileconfig
+[blahdns-germany-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/blahdns-germany-doh.mobileconfig
+[blahdns-singapore-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/blahdns-singapore-doh.mobileconfig
+[canadian-shield-private-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/canadianshield-private-https.mobileconfig
+[canadian-shield-private-profile-tls-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/canadianshield-private-tls.mobileconfig
+[canadian-shield-protected-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/canadianshield-protected-https.mobileconfig
+[canadian-shield-protected-profile-tls-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/canadianshield-protected-tls.mobileconfig
+[canadian-shield-family-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/canadianshield-family-https.mobileconfig
+[canadian-shield-family-profile-tls-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/canadianshield-family-tls.mobileconfig
+[cloudflare-dns-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/cloudflare-https.mobileconfig
+[cloudflare-dns-profile-tls-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/cloudflare-tls.mobileconfig
+[cloudflare-dns-security-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/cloudflare-malware-https.mobileconfig
+[cloudflare-dns-family-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/cloudflare-family-https.mobileconfig
+[dnspod-dns-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/dnspod-https.mobileconfig
+[dnspod-dns-profile-tls-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/dnspod-tls.mobileconfig
+[google-dns-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/google-https.mobileconfig
+[google-dns-profile-tls-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/google-tls.mobileconfig
+[keweondns-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/keweondns-doh.mobileconfig
+[keweondns-profile-tls-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/keweondns-dot.mobileconfig
+[mullvad-dns-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/mullvad-doh.mobileconfig
+[mullvad-dns-adblock-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/mullvad-adblock-doh.mobileconfig
+[opendns-standard-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/opendns-https.mobileconfig
+[opendns-familyshield-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/opendns-family-https.mobileconfig
+[quad9-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/quad9-https.mobileconfig
+[quad9-profile-tls-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/quad9-tls.mobileconfig
+[quad9-ecs-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/quad9-ECS-https.mobileconfig
+[quad9-ecs-profile-tls-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/quad9-ECS-tls.mobileconfig
+[tiarap-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/tiarapp-https.mobileconfig
+[tiarap-profile-tls-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/tiarapp-tls.mobileconfig
diff --git a/README.cmn-TW.md b/README.cmn-TW.md
index d4784d3..6239ea8 100644
--- a/README.cmn-TW.md
+++ b/README.cmn-TW.md
@@ -19,37 +19,39 @@
「`審查=是`」意味著描述檔不會發送某些主機「`主機名=IP`」關係的真實訊息。
-| 名稱 | 區域 | 審查 | 備註 | 安裝連結 |
-| ------------------------------------------------ | ----- | ---- | ---------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
-| [360 安全 DNS][360-dns] | 🇨🇳 | 是 | 由 360 數字安全集團運營 | [HTTPS][360-dns-profile-https] |
-| [AdGuard DNS 默認][adguard-dns-default] | 🇷🇺 | 是 | 由 AdGuard 運營,攔截廣告、跟蹤器和釣魚網站 | [HTTPS][adguard-dns-default-profile-https], [TLS][adguard-dns-default-profile-tls] |
-| [AdGuard DNS 家庭保護][adguard-dns-family] | 🇷🇺 | 是 | 由 AdGuard 運營,除默認規則外,額外攔截惡意軟體和成人內容 | [HTTPS][adguard-dns-family-profile-https], [TLS][adguard-dns-family-profile-tls] |
-| [AdGuard DNS 無過濾][adguard-dns-unfiltered] | 🇷🇺 | 否 | 由 AdGuard 運營,無攔截 | [HTTPS][adguard-dns-unfiltered-profile-https], [TLS][adguard-dns-unfiltered-profile-tls] |
-| [Alekberg 加密 DNS][alekberg-dns] | 🇳🇱 | 否 | 由個人提供 | [HTTPS][alekberg-dns-profile-https] |
-| [阿里雲公共 DNS][aliyun-dns] | 🇨🇳 | 否 | 由阿里雲計算運營 | [HTTPS][aliyun-dns-profile-https], [TLS][aliyun-dns-profile-tls] |
-| [BlahDNS CDN 過濾][blahdns] | 🇺🇸 | 是 | 由個人提供,攔截廣告、跟蹤器和惡意軟體 | [HTTPS][blahdns-cdn-filtered-profile-https] |
-| [BlahDNS CDN 無過濾][blahdns] | 🇺🇸 | 否 | 由個人提供,無過濾 | [HTTPS][blahdns-cdn-unfiltered-profile-https] |
-| [BlahDNS 芬蘭][blahdns] | 🇫🇮 | 是 | 由個人提供,攔截廣告、跟蹤器和惡意軟體 | [HTTPS][blahdns-finland-profile-https] |
-| [BlahDNS 德國][blahdns] | 🇩🇪 | 是 | 由個人提供,攔截廣告、跟蹤器和惡意軟體 | [HTTPS][blahdns-germany-profile-https] |
-| [BlahDNS 日本][blahdns] | 🇯🇵 | 是 | 由個人提供,攔截廣告、跟蹤器和惡意軟體 | [HTTPS][blahdns-japan-profile-https] |
-| [BlahDNS 新加坡][blahdns] | 🇸🇬 | 是 | 由個人提供,攔截廣告、跟蹤器和惡意軟體 | [HTTPS][blahdns-singapore-profile-https] |
-| [BlahDNS 瑞士][blahdns] | 🇨🇭 | 是 | 由個人提供,攔截廣告、跟蹤器和惡意軟體 | [TLS][blahdns-switzerland-profile-tls] |
-| [Canadian Shield 隱私][canadian-shield] | 🇨🇦 | 否 | 由加拿大網路註冊局 (CIRA) 運營 | [HTTPS][canadian-shield-private-profile-https], [TLS][canadian-shield-private-profile-tls] |
-| [Canadian Shield 保護][canadian-shield] | 🇨🇦 | 是 | 由加拿大網路註冊局 (CIRA) 運營,攔截惡意軟體和釣魚網站 | [HTTPS][canadian-shield-protected-profile-https], [TLS][canadian-shield-protected-profile-tls] |
-| [Canadian Shield 家庭][canadian-shield] | 🇨🇦 | 是 | 由加拿大網路註冊局 (CIRA) 運營,攔截惡意軟體、釣魚網站和成人內容 | [HTTPS][canadian-shield-family-profile-https], [TLS][canadian-shield-family-profile-tls] |
-| [Cloudflare 1.1.1.1][cloudflare-dns] | 🇺🇸 | 否 | 由 Cloudflare 運營 | [HTTPS][cloudflare-dns-profile-https], [TLS][cloudflare-dns-profile-tls] |
-| [Cloudflare 1.1.1.1 安全][cloudflare-dns-family] | 🇺🇸 | 是 | 由 Cloudflare 運營,攔截惡意軟體和釣魚網站 | [HTTPS][cloudflare-dns-security-profile-https] |
-| [Cloudflare 1.1.1.1 家庭][cloudflare-dns-family] | 🇺🇸 | 是 | 由 Cloudflare 運營,攔截惡意軟體、釣魚網站和成人內容 | [HTTPS][cloudflare-dns-family-profile-https] |
-| [DNSPod 公共 DNS][dnspod-dns] | 🇨🇳 | 否 | 由騰訊雲計算旗下 DNSPod 運營 | [HTTPS][dnspod-dns-profile-https], [TLS][dnspod-dns-profile-tls] |
-| [Google 公共 DNS][google-dns] | 🇺🇸 | 否 | 由 Google 運營 | [HTTPS][google-dns-profile-https], [TLS][google-dns-profile-tls] |
-| [keweonDNS][keweondns] | 🇩🇪 | 否 | 由 Aviontex. 攔截廣告和跟蹤器 | [HTTPS][keweondns-profile-https], [TLS][keweondns-profile-tls] |
-| [Mullvad DNS][mullvad-dns] | 🇸🇪 | 是 | 由 Mullvad VPN 運營 | [HTTPS][mullvad-dns-profile-https] |
-| [Mullvad DNS 廣告過濾][mullvad-dns] | 🇸🇪 | 是 | 由 Mullvad VPN 運營,攔截廣告和跟蹤器 | [HTTPS][mullvad-dns-adblock-profile-https] |
-| [OpenDNS 標準][opendns] | 🇺🇸 | 否 | 由思科 OpenDNS 運營 | [HTTPS][opendns-standard-profile-https] |
-| [OpenDNS 家庭防護][opendns] | 🇺🇸 | 是 | 由思科 OpenDNS 運營,攔截惡意軟體和成人內容 | [HTTPS][opendns-familyshield-profile-https] |
-| [Quad9][quad9] | 🇨🇭 | 是 | 由 Quad9 基金會運營,攔截惡意軟體 | [HTTPS][quad9-profile-https], [TLS][quad9-profile-tls] |
-| [Quad9 ECS][quad9] | 🇨🇭 | 是 | 由 Quad9 基金會運營,支持 ECS,攔截惡意軟體 | [HTTPS][quad9-ecs-profile-https], [TLS][quad9-ecs-profile-tls] |
-| [Tiarap][tiarap] | 🇸🇬 🇺🇸 | 是 | 由 Tiarap 運營,攔截廣告、跟蹤器、釣魚網站和惡意軟體 | [HTTPS][tiarap-profile-https], [TLS][tiarap-profile-tls] |
+| 名稱 | 區域 | 審查 | 備註 | 安裝連結 | |
+| ------------------------------------------------ | ----- | ---- | -------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------- |
+| [360 安全 DNS][360-dns] | 🇨🇳 | 是 | 由 360 數位安全集團營運 | [HTTPS][360-dns-profile-https-signed] | [HTTPS][360-dns-profile-https] |
+| [AdGuard DNS 預設][adguard-dns-default] | 🇷🇺 | 是 | 由 AdGuard 營運,阻擋廣告、追蹤器和釣魚網站 | [HTTPS][adguard-dns-default-profile-https-signed], [TLS][adguard-dns-default-profile-tls-signed] | [HTTPS][adguard-dns-default-profile-https], [TLS][adguard-dns-default-profile-tls] |
+| [AdGuard DNS 家庭保護][adguard-dns-family] | 🇷🇺 | 是 | 由 AdGuard 營運,除預設規則外,額外阻擋惡意軟體和成人內容 | [HTTPS][adguard-dns-family-profile-https-signed], [TLS][adguard-dns-family-profile-tls-signed] | [HTTPS][adguard-dns-family-profile-https], [TLS][adguard-dns-family-profile-tls] |
+| [AdGuard DNS 無過濾][adguard-dns-unfiltered] | 🇷🇺 | 否 | 由 AdGuard 營運,無過濾 | [HTTPS][adguard-dns-unfiltered-profile-https-signed], [TLS][adguard-dns-unfiltered-profile-tls-signed] | [HTTPS][adguard-dns-unfiltered-profile-https], [TLS][adguard-dns-unfiltered-profile-tls] |
+| [Alekberg 加密 DNS][alekberg-dns] | 🇳🇱 | 否 | 由個人提供 | [HTTPS][alekberg-dns-profile-https-signed] | [HTTPS][alekberg-dns-profile-https] |
+| [阿里雲公共 DNS][aliyun-dns] | 🇨🇳 | 否 | 由阿里雲計算營運 | [HTTPS][aliyun-dns-profile-https-signed], [TLS][aliyun-dns-profile-tls-signed] | [HTTPS][aliyun-dns-profile-https], [TLS][aliyun-dns-profile-tls] |
+| [BlahDNS CDN 過濾][blahdns] | 🇺🇸 | 是 | 由個人提供,阻擋廣告、追蹤器和惡意軟體 | [HTTPS][blahdns-cdn-filtered-profile-https-signed] | [HTTPS][blahdns-cdn-filtered-profile-https] |
+| [BlahDNS CDN 無過濾][blahdns] | 🇺🇸 | 否 | 由個人提供,無過濾 | [HTTPS][blahdns-cdn-unfiltered-profile-https-signed] | [HTTPS][blahdns-cdn-unfiltered-profile-https] |
+| [BlahDNS 德國][blahdns] | 🇩🇪 | 是 | 由個人提供,阻擋廣告、追蹤器和惡意軟體 | [HTTPS][blahdns-germany-profile-https-signed] | [HTTPS][blahdns-germany-profile-https] |
+| [BlahDNS 新加坡][blahdns] | 🇸🇬 | 是 | 由個人提供,阻擋廣告、追蹤器和惡意軟體 | [HTTPS][blahdns-singapore-profile-https-signed] | [HTTPS][blahdns-singapore-profile-https] |
+| [Canadian Shield 私人][canadian-shield] | 🇨🇦 | 否 | 由加拿大網際網路註冊管理局 (CIRA) 營運 | [HTTPS][canadian-shield-private-profile-https-signed], [TLS][canadian-shield-private-profile-tls-signed] | [HTTPS][canadian-shield-private-profile-https], [TLS][canadian-shield-private-profile-tls] |
+| [Canadian Shield 保護][canadian-shield] | 🇨🇦 | 是 | 由加拿大網際網路註冊管理局 (CIRA) 營運,阻擋惡意軟體和釣魚網站 | [HTTPS][canadian-shield-protected-profile-https-signed], [TLS][canadian-shield-protected-profile-tls-signed] | [HTTPS][canadian-shield-protected-profile-https], [TLS][canadian-shield-protected-profile-tls] |
+| [Canadian Shield 家庭][canadian-shield] | 🇨🇦 | 是 | 由加拿大網際網路註冊管理局 (CIRA) 營運,阻擋惡意軟體、釣魚和成人內容 | [HTTPS][canadian-shield-family-profile-https-signed], [TLS][canadian-shield-family-profile-tls-signed] | [HTTPS][canadian-shield-family-profile-https], [TLS][canadian-shield-family-profile-tls] |
+| [Cleanbrowsing 家庭過濾器][cleanbrowsing] | 🇺🇸 | 是 | 過濾惡意軟體、成人內容和混合內容 | | [HTTPS][cleanbrowsing-family-https], [TLS][cleanbrowsing-family-tls] |
+| [Cleanbrowsing 成人過濾器][cleanbrowsing] | 🇺🇸 | 是 | 過濾惡意軟體和成人內容 | | [HTTPS][cleanbrowsing-adult-https], [TLS][cleanbrowsing-adult-tls] |
+| [Cleanbrowsing 安全過濾器][cleanbrowsing] | 🇺🇸 | 是 | 過濾惡意軟體 | | [HTTPS][cleanbrowsing-security-https], [TLS][cleanbrowsing-security-tls] |
+| [Cloudflare 1.1.1.1][cloudflare-dns] | 🇺🇸 | 否 | 由 Cloudflare 公司營運 | [HTTPS][cloudflare-dns-profile-https-signed], [TLS][cloudflare-dns-profile-tls-signed] | [HTTPS][cloudflare-dns-profile-https], [TLS][cloudflare-dns-profile-tls] |
+| [Cloudflare 1.1.1.1 安全][cloudflare-dns-family] | 🇺🇸 | 是 | 由 Cloudflare 公司營運,阻擋惡意軟體和釣魚網站 | [HTTPS][cloudflare-dns-security-profile-https-signed] | [HTTPS][cloudflare-dns-security-profile-https] |
+| [Cloudflare 1.1.1.1 家庭][cloudflare-dns-family] | 🇺🇸 | 是 | 由 Cloudflare 公司營運,阻擋惡意軟體、釣魚和成人內容 | [HTTPS][cloudflare-dns-family-profile-https-signed] | [HTTPS][cloudflare-dns-family-profile-https] |
+| [DNSPod 公共 DNS][dnspod-dns] | 🇨🇳 | 否 | 由騰訊公司 DNSPod 營運 | [HTTPS][dnspod-dns-profile-https-signed], [TLS][dnspod-dns-profile-tls-signed] | [HTTPS][dnspod-dns-profile-https], [TLS][dnspod-dns-profile-tls] |
+| [FDN][fdn-dns] | 🇫🇷 | 否 | 由法國資料網路營運 | | [HTTPS][fdn-https], [TLS][fdn-tls] |
+| [Google 公共 DNS][google-dns] | 🇺🇸 | 否 | 由谷歌公司營運 | [HTTPS][google-dns-profile-https-signed], [TLS][google-dns-profile-tls-signed] | [HTTPS][google-dns-profile-https], [TLS][google-dns-profile-tls] |
+| [keweonDNS][keweondns] | 🇩🇪 | 否 | 由 Aviontex 營運,阻擋廣告和追蹤器 | [HTTPS][keweondns-profile-https-signed], [TLS][keweondns-profile-tls-signed] | [HTTPS][keweondns-profile-https], [TLS][keweondns-profile-tls] |
+| [Mullvad DNS][mullvad-dns] | 🇸🇪 | 是 | 由 Mullvad VPN AB 營運 | [HTTPS][mullvad-dns-profile-https-signed] | [HTTPS][mullvad-dns-profile-https] |
+| [Mullvad DNS 廣告阻擋][mullvad-dns] | 🇸🇪 | 是 | 由 Mullvad VPN AB 營運,阻擋廣告和追蹤器 | [HTTPS][mullvad-dns-adblock-profile-https-signed] | [HTTPS][mullvad-dns-adblock-profile-https] |
+| [OpenDNS 標準版][opendns] | 🇺🇸 | 否 | 由思科 OpenDNS 營運 | [HTTPS][opendns-standard-profile-https-signed] | [HTTPS][opendns-standard-profile-https] |
+| [OpenDNS 家庭盾][opendns] | 🇺🇸 | 是 | 由思科 OpenDNS 營運,阻擋惡意軟體和成人內容 | [HTTPS][opendns-familyshield-profile-https-signed] | [HTTPS][opendns-familyshield-profile-https] |
+| [Quad9][quad9] | 🇨🇭 | 是 | 由 Quad9 基金會營運,阻擋惡意軟體 | [HTTPS][quad9-profile-https-signed], [TLS][quad9-profile-tls-signed] | [HTTPS][quad9-profile-https], [TLS][quad9-profile-tls] |
+| [Quad9 帶 ECS][quad9] | 🇨🇭 | 是 | 由 Quad9 基金會營運,支援 ECS,阻擋惡意軟體 | [HTTPS][quad9-ecs-profile-https-signed], [TLS][quad9-ecs-profile-tls-signed] | [HTTPS][quad9-ecs-profile-https], [TLS][quad9-ecs-profile-tls] |
+| [Quad9 無過濾][quad9] | 🇨🇭 | 否 | 由 Quad9 基金會營運 | | [HTTPS][quad9-profile-unfiltered-https], [TLS][quad9-profile-unfiltered-tls] |
+| [Tiarap][tiarap] | 🇸🇬 🇺🇸 | 是 | 由 Tiarap 公司營運,阻擋廣告、追蹤器、釣魚和惡意軟體 | [HTTPS][tiarap-profile-https-signed], [TLS][tiarap-profile-tls-signed] | [HTTPS][tiarap-profile-https], [TLS][tiarap-profile-tls] |
## 安裝
@@ -114,13 +116,13 @@ New-Guid
[360-dns]: https://sdns.360.net/dnsPublic.html
[360-dns-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/360-https.mobileconfig
-[adguard-dns-default]: https://adguard-dns.io/kb/zh-TW/general/dns-providers/#default
+[adguard-dns-default]: https://adguard-dns.io/kb/general/dns-providers/#default
[adguard-dns-default-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/adguard-default-https.mobileconfig
[adguard-dns-default-profile-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/adguard-default-tls.mobileconfig
-[adguard-dns-family]: https://adguard-dns.io/kb/zh-TW/general/dns-providers/#family-protection
+[adguard-dns-family]: https://adguard-dns.io/kb/general/dns-providers/#family-protection
[adguard-dns-family-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/adguard-family-https.mobileconfig
[adguard-dns-family-profile-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/adguard-family-tls.mobileconfig
-[adguard-dns-unfiltered]: https://adguard-dns.io/kb/zh-TW/general/dns-providers/#non-filtering
+[adguard-dns-unfiltered]: https://adguard-dns.io/kb/general/dns-providers/#non-filtering
[adguard-dns-unfiltered-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/adguard-nofilter-https.mobileconfig
[adguard-dns-unfiltered-profile-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/adguard-nofilter-tls.mobileconfig
[alekberg-dns]: https://alekberg.net
@@ -131,11 +133,8 @@ New-Guid
[blahdns]: https://blahdns.com/
[blahdns-cdn-filtered-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/blahdns-cdn-adblock-doh1.mobileconfig
[blahdns-cdn-unfiltered-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/blahdns-cdn-unfiltered-doh1.mobileconfig
-[blahdns-finland-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/blahdns-finland-doh.mobileconfig
[blahdns-germany-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/blahdns-germany-doh.mobileconfig
-[blahdns-japan-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/blahdns-japan-doh.mobileconfig
[blahdns-singapore-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/blahdns-singapore-doh.mobileconfig
-[blahdns-switzerland-profile-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/blahdns-switzerland-dot.mobileconfig
[canadian-shield]: https://www.cira.ca/cybersecurity-services/canadian-shield/configure/summary-cira-canadian-shield-dns-resolver-addresses
[canadian-shield-private-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/canadianshield-private-https.mobileconfig
[canadian-shield-private-profile-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/canadianshield-private-tls.mobileconfig
@@ -143,22 +142,32 @@ New-Guid
[canadian-shield-protected-profile-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/canadianshield-protected-tls.mobileconfig
[canadian-shield-family-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/canadianshield-family-https.mobileconfig
[canadian-shield-family-profile-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/canadianshield-family-tls.mobileconfig
+[cleanbrowsing]: https://cleanbrowsing.org/filters/
+[cleanbrowsing-family-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/cleanbrowsing-family-https.mobileconfig
+[cleanbrowsing-family-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/cleanbrowsing-family-tls.mobileconfig
+[cleanbrowsing-adult-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/cleanbrowsing-adult-https.mobileconfig
+[cleanbrowsing-adult-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/cleanbrowsing-adult-tls.mobileconfig
+[cleanbrowsing-security-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/cleanbrowsing-security-https.mobileconfig
+[cleanbrowsing-security-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/cleanbrowsing-security-tls.mobileconfig
[cloudflare-dns]: https://developers.cloudflare.com/1.1.1.1/encryption/
[cloudflare-dns-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/cloudflare-https.mobileconfig
[cloudflare-dns-profile-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/cloudflare-tls.mobileconfig
-[cloudflare-dns-family]: https://developers.cloudflare.com/1.1.1.1/setup/#1111-for-families
[cloudflare-dns-security-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/cloudflare-malware-https.mobileconfig
+[cloudflare-dns-family]: https://developers.cloudflare.com/1.1.1.1/setup/#1111-for-families
[cloudflare-dns-family-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/cloudflare-family-https.mobileconfig
-[dnspod-dns]: https://www.dnspod.cn/products/publicdns
+[dnspod-dns]: https://www.dnspod.com/products/public.dns
[dnspod-dns-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/dnspod-https.mobileconfig
[dnspod-dns-profile-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/dnspod-tls.mobileconfig
-[google-dns]: https://developers.google.com/speed/public-dns/docs/secure-transports?hl=zh-tw
+[fdn-dns]: https://www.fdn.fr/actions/dns/
+[fdn-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/fdn-https.mobileconfig
+[fdn-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/fdn-tls.mobileconfig
+[google-dns]: https://developers.google.com/speed/public-dns/docs/secure-transports
[google-dns-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/google-https.mobileconfig
[google-dns-profile-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/google-tls.mobileconfig
[keweondns]: https://forum.xda-developers.com/t/keweondns-info-facts-and-what-is-keweon-actually.4576651/
[keweondns-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/keweondns-doh.mobileconfig
[keweondns-profile-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/keweondns-dot.mobileconfig
-[mullvad-dns]: https://mullvad.net/zh-hant/help/dns-over-https-and-dns-over-tls/
+[mullvad-dns]: https://mullvad.net/help/dns-over-https-and-dns-over-tls/
[mullvad-dns-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/mullvad-doh.mobileconfig
[mullvad-dns-adblock-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/mullvad-adblock-doh.mobileconfig
[opendns]: https://support.opendns.com/hc/articles/360038086532
@@ -169,6 +178,48 @@ New-Guid
[quad9-profile-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/quad9-tls.mobileconfig
[quad9-ecs-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/quad9-ECS-https.mobileconfig
[quad9-ecs-profile-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/quad9-ECS-tls.mobileconfig
+[quad9-profile-unfiltered-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/quad9-nofilter-https.mobileconfig
+[quad9-profile-unfiltered-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/quad9-nofilter-tls.mobileconfig
[tiarap]: https://doh.tiar.app
[tiarap-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/tiarapp-https.mobileconfig
[tiarap-profile-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/tiarapp-tls.mobileconfig
+[360-dns-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/360-https.mobileconfig
+[adguard-dns-default-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/adguard-default-https.mobileconfig
+[adguard-dns-default-profile-tls-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/adguard-default-tls.mobileconfig
+[adguard-dns-family-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/adguard-family-https.mobileconfig
+[adguard-dns-family-profile-tls-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/adguard-family-tls.mobileconfig
+[adguard-dns-unfiltered-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/adguard-nofilter-https.mobileconfig
+[adguard-dns-unfiltered-profile-tls-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/adguard-nofilter-tls.mobileconfig
+[alekberg-dns-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/alekberg-https.mobileconfig
+[aliyun-dns-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/alibaba-https.mobileconfig
+[aliyun-dns-profile-tls-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/alibaba-tls.mobileconfig
+[blahdns-cdn-filtered-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/blahdns-cdn-adblock-doh1.mobileconfig
+[blahdns-cdn-unfiltered-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/blahdns-cdn-unfiltered-doh1.mobileconfig
+[blahdns-germany-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/blahdns-germany-doh.mobileconfig
+[blahdns-singapore-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/blahdns-singapore-doh.mobileconfig
+[canadian-shield-private-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/canadianshield-private-https.mobileconfig
+[canadian-shield-private-profile-tls-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/canadianshield-private-tls.mobileconfig
+[canadian-shield-protected-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/canadianshield-protected-https.mobileconfig
+[canadian-shield-protected-profile-tls-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/canadianshield-protected-tls.mobileconfig
+[canadian-shield-family-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/canadianshield-family-https.mobileconfig
+[canadian-shield-family-profile-tls-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/canadianshield-family-tls.mobileconfig
+[cloudflare-dns-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/cloudflare-https.mobileconfig
+[cloudflare-dns-profile-tls-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/cloudflare-tls.mobileconfig
+[cloudflare-dns-security-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/cloudflare-malware-https.mobileconfig
+[cloudflare-dns-family-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/cloudflare-family-https.mobileconfig
+[dnspod-dns-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/dnspod-https.mobileconfig
+[dnspod-dns-profile-tls-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/dnspod-tls.mobileconfig
+[google-dns-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/google-https.mobileconfig
+[google-dns-profile-tls-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/google-tls.mobileconfig
+[keweondns-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/keweondns-doh.mobileconfig
+[keweondns-profile-tls-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/keweondns-dot.mobileconfig
+[mullvad-dns-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/mullvad-doh.mobileconfig
+[mullvad-dns-adblock-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/mullvad-adblock-doh.mobileconfig
+[opendns-standard-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/opendns-https.mobileconfig
+[opendns-familyshield-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/opendns-family-https.mobileconfig
+[quad9-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/quad9-https.mobileconfig
+[quad9-profile-tls-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/quad9-tls.mobileconfig
+[quad9-ecs-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/quad9-ECS-https.mobileconfig
+[quad9-ecs-profile-tls-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/quad9-ECS-tls.mobileconfig
+[tiarap-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/tiarapp-https.mobileconfig
+[tiarap-profile-tls-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/tiarapp-tls.mobileconfig
diff --git a/README.md b/README.md
index 590b169..7d44e50 100644
--- a/README.md
+++ b/README.md
@@ -143,11 +143,8 @@ New-Guid
[blahdns]: https://blahdns.com/
[blahdns-cdn-filtered-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/blahdns-cdn-adblock-doh1.mobileconfig
[blahdns-cdn-unfiltered-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/blahdns-cdn-unfiltered-doh1.mobileconfig
-[blahdns-finland-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/blahdns-finland-doh.mobileconfig
[blahdns-germany-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/blahdns-germany-doh.mobileconfig
-[blahdns-japan-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/blahdns-japan-doh.mobileconfig
[blahdns-singapore-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/blahdns-singapore-doh.mobileconfig
-[blahdns-switzerland-profile-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/blahdns-switzerland-dot.mobileconfig
[canadian-shield]: https://www.cira.ca/cybersecurity-services/canadian-shield/configure/summary-cira-canadian-shield-dns-resolver-addresses
[canadian-shield-private-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/canadianshield-private-https.mobileconfig
[canadian-shield-private-profile-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/canadianshield-private-tls.mobileconfig
@@ -156,17 +153,17 @@ New-Guid
[canadian-shield-family-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/canadianshield-family-https.mobileconfig
[canadian-shield-family-profile-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/canadianshield-family-tls.mobileconfig
[cleanbrowsing]: https://cleanbrowsing.org/filters/
-[cleanbrowsing-adult-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/cleanbrowsing-adult-https.mobileconfig
-[cleanbrowsing-adult-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/cleanbrowsing-adult-tls.mobileconfig
[cleanbrowsing-family-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/cleanbrowsing-family-https.mobileconfig
[cleanbrowsing-family-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/cleanbrowsing-family-tls.mobileconfig
+[cleanbrowsing-adult-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/cleanbrowsing-adult-https.mobileconfig
+[cleanbrowsing-adult-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/cleanbrowsing-adult-tls.mobileconfig
[cleanbrowsing-security-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/cleanbrowsing-security-https.mobileconfig
[cleanbrowsing-security-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/cleanbrowsing-security-tls.mobileconfig
[cloudflare-dns]: https://developers.cloudflare.com/1.1.1.1/encryption/
[cloudflare-dns-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/cloudflare-https.mobileconfig
[cloudflare-dns-profile-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/cloudflare-tls.mobileconfig
-[cloudflare-dns-family]: https://developers.cloudflare.com/1.1.1.1/setup/#1111-for-families
[cloudflare-dns-security-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/cloudflare-malware-https.mobileconfig
+[cloudflare-dns-family]: https://developers.cloudflare.com/1.1.1.1/setup/#1111-for-families
[cloudflare-dns-family-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/cloudflare-family-https.mobileconfig
[dnspod-dns]: https://www.dnspod.com/products/public.dns
[dnspod-dns-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/dnspod-https.mobileconfig
@@ -189,10 +186,10 @@ New-Guid
[quad9]: https://www.quad9.net/news/blog/doh-with-quad9-dns-servers/
[quad9-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/quad9-https.mobileconfig
[quad9-profile-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/quad9-tls.mobileconfig
-[quad9-profile-unfiltered-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/quad9-nofilter-https.mobileconfig
-[quad9-profile-unfiltered-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/quad9-nofilter-tls.mobileconfig
[quad9-ecs-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/quad9-ECS-https.mobileconfig
[quad9-ecs-profile-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/quad9-ECS-tls.mobileconfig
+[quad9-profile-unfiltered-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/quad9-nofilter-https.mobileconfig
+[quad9-profile-unfiltered-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/quad9-nofilter-tls.mobileconfig
[tiarap]: https://doh.tiar.app
[tiarap-profile-https]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/tiarapp-https.mobileconfig
[tiarap-profile-tls]: https://github.com/paulmillr/encrypted-dns/raw/master/profiles/tiarapp-tls.mobileconfig
@@ -208,11 +205,8 @@ New-Guid
[aliyun-dns-profile-tls-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/alibaba-tls.mobileconfig
[blahdns-cdn-filtered-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/blahdns-cdn-adblock-doh1.mobileconfig
[blahdns-cdn-unfiltered-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/blahdns-cdn-unfiltered-doh1.mobileconfig
-[blahdns-finland-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/blahdns-finland-doh.mobileconfig
[blahdns-germany-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/blahdns-germany-doh.mobileconfig
-[blahdns-japan-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/blahdns-japan-doh.mobileconfig
[blahdns-singapore-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/blahdns-singapore-doh.mobileconfig
-[blahdns-switzerland-profile-tls-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/blahdns-switzerland-dot.mobileconfig
[canadian-shield-private-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/canadianshield-private-https.mobileconfig
[canadian-shield-private-profile-tls-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/canadianshield-private-tls.mobileconfig
[canadian-shield-protected-profile-https-signed]: https://github.com/paulmillr/encrypted-dns/raw/master/signed/canadianshield-protected-https.mobileconfig
diff --git a/generate.js b/generate.js
new file mode 100644
index 0000000..f2603df
--- /dev/null
+++ b/generate.js
@@ -0,0 +1,272 @@
+#!/usr/bin/env node
+const fs = require('node:fs');
+const path = require('node:path');
+
+const LANGUAGES_DIR = path.join(__dirname, 'languages');
+const PROVIDERS_PATH = path.join(__dirname, 'providers');
+const DEFAULT_LANG = 'en';
+const OUTPUT_DIR = __dirname;
+const REPO_RAW = 'https://github.com/paulmillr/encrypted-dns/raw/master';
+
+const REGIONS = {
+ US: '🇺🇸',
+ CN: '🇨🇳',
+ RU: '🇷🇺',
+ NL: '🇳🇱',
+ DE: '🇩🇪',
+ SG: '🇸🇬',
+ CA: '🇨🇦',
+ FR: '🇫🇷',
+ CH: '🇨🇭',
+ SE: '🇸🇪',
+};
+
+const providerFile = (p, https, signed) => {
+ const postfix = (p, https) => {
+ if (https) {
+ if (p.doh && p.doh !== true) return `doh${p.doh}`;
+ if (p.doh) return 'doh';
+ return 'https';
+ } else {
+ if (p.doh && p.doh !== true) return `dot${p.doh}`;
+ if (p.doh) return 'dot';
+ return 'tls';
+ }
+ };
+ const name = p.name || p.id;
+ return `${signed ? 'signed' : 'profiles'}/${name}-${postfix(p, https)}.mobileconfig`;
+};
+
+const languages = fs
+ .readdirSync(LANGUAGES_DIR)
+ .filter((f) => f.endsWith('.json'))
+ .sort()
+ .map((f) => {
+ const p = path.join(LANGUAGES_DIR, f);
+ const data = JSON.parse(fs.readFileSync(p, 'utf8'));
+ return {
+ code: data.code,
+ name: data.name,
+ mdFile: p.replace('.json', '.md'),
+ jsonFile: p,
+ data: data,
+ };
+ });
+
+const providers = fs
+ .readdirSync(PROVIDERS_PATH)
+ .sort()
+ .map((i) => JSON.parse(fs.readFileSync(`${PROVIDERS_PATH}/${i}`)))
+ .map((i) => {
+ const unsigned = {
+ https: !!i.https || fs.existsSync(providerFile(i, true)),
+ tls: !!i.tls || fs.existsSync(providerFile(i, false)),
+ };
+ const signed = {
+ https: unsigned.https && fs.existsSync(providerFile(i, true, true)),
+ tls: unsigned.tls && fs.existsSync(providerFile(i, false, true)),
+ };
+ return { ...i, formats: { unsigned, signed } };
+ });
+
+const FULLWIDTH_PATTERN =
+ /[\u1100-\u115F\u2329\u232A\u2E80-\u303E\u3040-\uA4CF\uAC00-\uD7A3\uF900-\uFAFF\uFE10-\uFE19\uFE30-\uFE6F\uFF00-\uFF60\uFFE0-\uFFE6]/u;
+function chrWidth(str) {
+ let width = 0;
+ for (const char of str) width += FULLWIDTH_PATTERN.test(char) || REGIONS[char] ? 2 : 1;
+ return width;
+}
+const padEnd = (s, len, chr) => `${s}${chr.repeat(Math.max(0, len - chrWidth(s)))}`;
+
+const genTable = (rows) => {
+ // first row is header
+ const widths = rows[0].map((i) => 0);
+ // Collect cell widths
+ for (const r of rows) {
+ for (let i = 0; i < r.length; i++) widths[i] = Math.max(widths[i], chrWidth(r[i]));
+ }
+ let table = '';
+ rows.forEach((r, i) => {
+ const cells = r.map((c, j) => padEnd(c, widths[j], ' ')).join(' | ');
+ table += `| ${cells} |\n`;
+ if (i === 0) table += `| ${r.map((c, j) => padEnd('', widths[j], '-')).join(' | ')} |\n`;
+ });
+ return table;
+};
+
+const TAGS = {
+ // Language selection header
+ LANGUAGES: (currentLang) => {
+ return languages
+ .map((lang) => {
+ if (lang.code === currentLang.code) return lang.name;
+ return `[${lang.name}](https://github.com/paulmillr/encrypted-dns/${
+ lang.code === DEFAULT_LANG ? '' : `blob/master/README.${lang.code}.md`
+ })`;
+ })
+ .join(' | ');
+ },
+ PROVIDERS_TABLE: (currentLang) => {
+ const rows = [
+ // header
+ [
+ currentLang.data.table_columns.name,
+ currentLang.data.table_columns.region,
+ currentLang.data.table_columns.censorship,
+ currentLang.data.table_columns.notes,
+ currentLang.data.table_columns.install_signed,
+ currentLang.data.table_columns.install_unsigned,
+ ],
+ ];
+ const sorted = Array.from(providers).sort((a, b) => a.id.localeCompare(b.id));
+ for (const provider of sorted) {
+ const name = provider.names[currentLang.code] || provider.names[DEFAULT_LANG];
+ const note = provider.notes[currentLang.code] || provider.notes[DEFAULT_LANG];
+ const censorship = provider.censorship ? currentLang.data.yes : currentLang.data.no;
+ const regionEmoji = (Array.isArray(provider.region) ? provider.region : [provider.region])
+ .map((r) => REGIONS[r])
+ .join(' ');
+ const unsignedLinks = [];
+ if (provider.formats.unsigned && provider.formats.unsigned.https)
+ unsignedLinks.push(`[HTTPS][${provider.profile}-https]`);
+ if (provider.formats.unsigned && provider.formats.unsigned.tls)
+ unsignedLinks.push(`[TLS][${provider.profile}-tls]`);
+ const signedLinks = [];
+ if (provider.formats.signed && provider.formats.signed.https)
+ signedLinks.push(`[HTTPS][${provider.profile}-https-signed]`);
+ if (provider.formats.signed && provider.formats.signed.tls)
+ signedLinks.push(`[TLS][${provider.profile}-tls-signed]`);
+ rows.push([
+ `[${name}][${provider.id}]`,
+ regionEmoji,
+ censorship,
+ note,
+ signedLinks.join(', '),
+ unsignedLinks.join(', '),
+ ]);
+ }
+ return genTable(rows).trim();
+ },
+ PROVIDERS_LINKS: (currentLang) => {
+ let res = '';
+ const addLink = (p, https, signed) => {
+ const file = providerFile(p, https, signed);
+ if (!fs.existsSync(`./${file}`)) throw new Error('missing: ' + file);
+ res += `[${p.profile}-${https ? 'https' : 'tls'}${
+ signed ? '-signed' : ''
+ }]: ${REPO_RAW}/${file}\n`;
+ };
+ for (const p of providers) {
+ if (p.website) res += `[${p.id}]: ${p.website}\n`;
+ if (p.formats.unsigned.https) addLink(p, true);
+ if (p.formats.unsigned.tls) addLink(p, false);
+ }
+ // signed
+ for (const p of providers) {
+ if (p.formats.signed.https) addLink(p, true, true);
+ if (p.formats.signed.tls) addLink(p, false, true);
+ }
+ return res;
+ },
+};
+
+function processTemplate(templateContent, lang) {
+ let content = templateContent;
+ for (const [tag, handler] of Object.entries(TAGS)) {
+ const tagPattern = new RegExp(`<%${tag}%>`, 'g');
+ if (content.match(tagPattern)) content = content.replace(tagPattern, handler(lang));
+ }
+ return content;
+}
+
+function generateReadmes() {
+ for (const lang of languages) {
+ if (!fs.existsSync(lang.mdFile)) throw new Error(`Template file not found: ${lang.mdFile}`);
+ const tpl = fs.readFileSync(lang.mdFile, 'utf8');
+ const processed = processTemplate(tpl, lang);
+ const out = lang.code === DEFAULT_LANG ? 'README.md' : `README.${lang.code}.md`;
+ fs.writeFileSync(path.join(OUTPUT_DIR, out), processed, 'utf8');
+ console.log(`Generated ${out}`);
+ }
+}
+
+function generateSingle(x) {
+ return `
+
+
+
+ PayloadContent
+
+
+ DNSSettings
+
+ DNSProtocol
+ ${x.DNSProtocol}
+ ServerAddresses
+
+${x.ServerAddresses.map((i) => `\t\t\t\t\t${i}`).join('\n')}
+
+ ${!x.ServerURLOrName.startsWith('https://') ? 'ServerName' : 'ServerURL'}
+ ${x.ServerURLOrName}
+
+ PayloadDescription
+ Configures device to use ${x.name}
+ PayloadDisplayName
+ ${x.PayloadDisplayName}
+ PayloadIdentifier
+ ${x.PayloadIdentifier}
+ PayloadType
+ com.apple.dnsSettings.managed
+ PayloadUUID
+ ${x.PayloadUUID}
+ PayloadVersion
+ 1
+ ProhibitDisablement
+
+
+
+ PayloadDescription
+ Adds the ${x.fullName} to Big Sur and iOS 14 based systems
+ PayloadDisplayName
+ ${x.topName}
+ PayloadIdentifier
+ com.paulmillr.apple-dns
+ PayloadRemovalDisallowed
+
+ PayloadType
+ Configuration
+ PayloadUUID
+ ${x.TopPayloadUUID}
+ PayloadVersion
+ 1
+
+
+`;
+}
+
+function generateConfigs() {
+ function generate(file, parsed) {
+ if (!parsed) return;
+ fs.writeFileSync(file, generateSingle(parsed));
+ console.log(`Generated ${file}`);
+ }
+ for (const p of providers) {
+ if (p.formats.unsigned.https) generate(providerFile(p, true), p.https);
+ if (p.formats.unsigned.tls) generate(providerFile(p, false), p.tls);
+ }
+}
+// Small utility to rewrite config structure
+function patchConfigs() {
+ for (const f of fs.readdirSync(`./providers/`)) {
+ const path = `./providers/${f}`;
+ const json = JSON.parse(fs.readFileSync(path, 'utf8'));
+ fs.writeFileSync(path, JSON.stringify(json, null, 4));
+ }
+}
+
+function main() {
+ //patchConfigs();
+ generateReadmes();
+ generateConfigs();
+}
+main();
diff --git a/languages/01-en.json b/languages/01-en.json
new file mode 100644
index 0000000..2717172
--- /dev/null
+++ b/languages/01-en.json
@@ -0,0 +1,14 @@
+{
+ "code": "en",
+ "name": "English",
+ "table_columns": {
+ "name": "Name",
+ "region": "Region",
+ "censorship": "Censorship",
+ "notes": "Notes",
+ "install_signed": "Install (Signed - Recommended)",
+ "install_unsigned": "Install (unsigned)"
+ },
+ "yes": "Yes",
+ "no": "No"
+}
\ No newline at end of file
diff --git a/languages/01-en.md b/languages/01-en.md
new file mode 100644
index 0000000..dd9a002
--- /dev/null
+++ b/languages/01-en.md
@@ -0,0 +1,95 @@
+<%LANGUAGES%>
+
+# encrypted-dns-configs
+
+Configuration profiles for [DNS over HTTPS](https://en.wikipedia.org/wiki/DNS_over_HTTPS) and [DNS over TLS](https://en.wikipedia.org/wiki/DNS_over_TLS). Check out the article for more info: [paulmillr.com/posts/encrypted-dns/](https://paulmillr.com/posts/encrypted-dns/) and info about [contributing a new profile](#contributing-a-new-profile).
+
+### Caveats
+
+Check out [encrypted-dns over TOR](https://github.com/alecmuffett/dohot) if you need more privacy. Known issues (we can't fix them, maybe Apple can):
+
+- eDNS gets disabled: [Little Snitch & Lulu](https://github.com/paulmillr/encrypted-dns/issues/13), [VPN](https://github.com/paulmillr/encrypted-dns/issues/18)
+- Some traffic is exempt from eDNS: [Terminal / App Store](https://github.com/paulmillr/encrypted-dns/issues/22), [Chrome](https://github.com/paulmillr/encrypted-dns/issues/19)
+- Starting from iOS & iPadOS 15.5, [Wi-Fi captive portals](https://en.wikipedia.org/wiki/Captive_portal) in cafes, hotels, airports are exempted by Apple from eDNS rules; to simplify authentication. This is good news.
+- TLS DNS is blocked more often by ISPs than HTTPS, because TLS uses non-standard port 853, which is easy to filter out.
+ See [Google's article](https://security.googleblog.com/2022/07/dns-over-http3-in-android.html)
+
+## Providers
+
+`Censorship=yes` (also known as "filtering") means the profile will not send true information about `hostname=IP` relation for some hosts.
+
+<%PROVIDERS_TABLE%>
+
+## Installation
+
+To make settings work across all apps in **iOS**, **iPadOS** & **macOS**, you'll need to install configuration profile. This profile would tell operating system to use DoH / DoT. Note: it's not enough to simply set server IPs in System Preferences — you need to install a profile.
+
+iOS / iPadOS: Open the mobileconfig file in GitHub by using Safari (other browsers will just download the file and won't ask for installation), and then click/tap on "Allow" button. The profile should download. Go to **System Settings => General => VPN, DNS & Device Management**, select downloaded profile and tap the "Install" button.
+
+macOS [(official docs)](https://support.apple.com/guide/mac-help/mh35561/):
+
+1. Download and save the profile. After save, rename it to be in format: `NAME.mobileconfig`, not NAME.txt, or so
+2. Choose Apple menu > System Settings, click Privacy and Security in the sidebar, then click Profiles on the right. (You may need to scroll down.)
+ You may be asked to supply your password or other information during installation.
+3. In the Downloaded section, double-click the profile.
+4. Review the profile contents then click Continue, Install or Enroll to install the profile.
+
+ If an earlier version of a profile is already installed on your Mac, the settings in the updated version replace the previous ones.
+
+## Scope
+
+There seems to be an [additional option](https://github.com/paulmillr/encrypted-dns/issues/22) that allows to use system-wide profiles. To try it, add this to mobileconfig file:
+
+```xml
+PayloadScope
+System
+```
+
+## Signed Profiles
+
+In the `signed` folder we have signed versions of the profiles in this repository. These profiles have been signed by [@Xernium](https://github.com/Xernium) so that when you install the profiles,
+they will have a verified check box on the installation screen. It also ensures that these profiles have not been tampered with. However, since they were signed by a third party, they may lag behind their unsigned counterparts a little.
+The signature is valid until `2025-11-02`
+
+Previous signatures by:
+[@Xernium](https://github.com/Xernium), replaced at `2024-11-01`
+
+[@Candygoblen123](https://github.com/Candygoblen123), replaced at `2023-11-29`
+
+[comment]: <> (We recommend that you install a signed profile instead of an unsigned profile because it ensures that it was not modified while it was downloading.)
+
+To verify resolver IPs and hostnames, compare mobileconfig files to their documentation URLs. Internal workings of the profiles are described on [developer.apple.com](https://developer.apple.com/documentation/devicemanagement/dnssettings). In order to verify signed mobileconfigs, you will need to download them to your computer and open them in a text editor, because signing profiles makes GitHub think that they are binary files.
+
+## On demand activation
+
+You can optionally exclude some trusted Wi-Fi networks where you don't want to use encrypted DNS. To do so, add your SSIDs in the [OnDemandRules](https://github.com/paulmillr/encrypted-dns/blob/master/profiles/template-on-demand.mobileconfig#L22-L38) section inside the `PayloadContent` dictionary of a profile. Note: you can't edit signed profiles.
+
+## Contributing a new profile
+
+Profiles are basically text files. Copy an existing one and change its UUID, make sure you update README with new profile's info.
+
+In addition to generating online, there are many other ways to generate a random UUID:
+
+- Press `F12` to open DevTools in the browser, run this code in the console
+
+```javascript
+crypto.randomUUID();
+```
+
+- Run these commands in the macOS / Linux terminal
+
+```sh
+# Works both in macOS & Linux
+uuidgen
+
+# Works in Linux
+cat /proc/sys/kernel/random/uuid
+```
+
+- Run this cmdlet in Powershell
+
+```powershell
+New-Guid
+```
+
+<%PROVIDERS_LINKS%>
\ No newline at end of file
diff --git a/languages/02-cmn-CN.json b/languages/02-cmn-CN.json
new file mode 100644
index 0000000..90c5f98
--- /dev/null
+++ b/languages/02-cmn-CN.json
@@ -0,0 +1,14 @@
+{
+ "code": "cmn-CN",
+ "name": "简体中文",
+ "table_columns": {
+ "name": "名称",
+ "region": "区域",
+ "censorship": "审查",
+ "notes": "备注",
+ "install_signed": "安装 (已签名 - 推荐)",
+ "install_unsigned": "安装 (未签名)"
+ },
+ "yes": "是",
+ "no": "否"
+}
\ No newline at end of file
diff --git a/languages/02-cmn-CN.md b/languages/02-cmn-CN.md
new file mode 100644
index 0000000..444bcac
--- /dev/null
+++ b/languages/02-cmn-CN.md
@@ -0,0 +1,85 @@
+<%LANGUAGES%>
+
+# 加密 DNS 配置
+
+[DNS over HTTPS](https://zh.wikipedia.org/wiki/DNS_over_HTTPS) 和 [DNS over TLS](https://zh.wikipedia.org/wiki/DNS_over_TLS) 的配置描述文件。查看这篇文章以获取更多信息:[paulmillr.com/posts/encrypted-dns/](https://paulmillr.com/posts/encrypted-dns/) 以及有关[提交新描述文件](#提交新描述文件)的信息。
+
+### 注意事项
+
+根据[谷歌这篇文章](https://security.googleblog.com/2022/07/dns-over-http3-in-android.html)的介绍,DoH 似乎比 DoT 的性能更优。
+
+从 iOS 和 iPadOS 15.5 开始,为了简化咖啡厅、宾馆、机场等公共场所无线网络的身份认证,苹果将这些无线网络的[强制登录门户](https://zh.wikipedia.org/wiki/%E5%BC%BA%E5%88%B6%E9%97%A8%E6%88%B7)加入到了加密 DNS 排除规则中。这是个好消息,但还有一些其他问题我们无法修复,只有等苹果来解决:
+
+- 无法启用加密 DNS:[Little Snitch & Lulu](https://github.com/paulmillr/encrypted-dns/issues/13)、[VPN](https://github.com/paulmillr/encrypted-dns/issues/18)
+- 部分流量绕过加密 DNS:[终端和 App Store](https://github.com/paulmillr/encrypted-dns/issues/22)、[Chrome 浏览器](https://github.com/paulmillr/encrypted-dns/issues/19)
+
+如果你需要更进一步的隐私保护,请查看[使用 Tor 网络的加密 DNS](https://github.com/alecmuffett/dohot)。
+
+## 供应商
+
+“`审查=是`”表示描述文件不会发送某些主机“`主机名=IP`”关系的真实信息。
+
+<%PROVIDERS_TABLE%>
+
+## 安装
+
+要使设置在 **iOS**、**iPadOS** 和 **macOS** 中所有的应用程序上生效,你需要安装配置描述文件。此文件将指引操作系统使用 DoH 或 DoT。注意:只在系统无线局域网设置中设置 DNS 服务器 IP 是不够的——你需要安装描述文件。
+
+iOS / iPadOS:使用 Safari 浏览器(其他浏览器只会下载该文件,不会弹出安装提示)打开 GitHub 上的 mobileconfig 文件,然后点击“允许”按钮,描述文件将完成下载。打开 **系统设置 => 通用 => VPN、DNS 与设备管理**,选择已下载的描述文件并点击“安装”按钮。
+
+macOS [(官方文档)](https://support.apple.com/zh-cn/guide/mac-help/mh35561/):
+
+1. 下载并保存描述文件,将其重命名为 `NAME.mobileconfig`,而不是 txt 之类的扩展名。
+2. 选取苹果菜单 >“系统设置”,点按边栏中的“隐私和安全性” ,然后点按右侧的“描述文件”。(你可能需要向下滚动。)
+ 安装期间,系统可能会要求你提供密码或其他信息。
+3. 在“已下载”部分中,连按描述文件。
+4. 检查描述文件内容,然后点按“继续”、“安装”或“注册”以安装描述文件。
+
+ 如果 Mac 上已安装了较早版本的描述文件,其设置将替换为更新版本中的设置。
+
+## 范围
+
+这条[额外选项](https://github.com/paulmillr/encrypted-dns/issues/22)似乎可以让描述文件在系统全局范围生效。如果有兴趣尝试,请将下面的内容添加到 mobileconfig 文件中:
+
+```xml
+PayloadScope
+System
+```
+
+## 签名版描述文件
+
+在 `signed` 文件夹中,存放了*稍微过时的*签名版描述文件。这些描述文件已由 [@Candygoblen123](https://github.com/Candygoblen123) 签名,因此当你安装时,界面上会有“已验证”的提示,此举还可确保这些描述文件未被篡改。但由于这些描述文件是交由第三方签名的,因此可能会稍微落后于未签名的版本。
+
+[备注]: <> (我们建议安装签名版的描述文件,因为数字签名可以确保文件在下载时没有被修改。)
+
+如要验证 DNS 解析器的 IP 和主机名,请将描述文件内容与其官方网站的文档进行比对,描述文件内部结构和属性在[苹果开发者网站](https://developer.apple.com/documentation/devicemanagement/dnssettings)上有详细讲解。如要验证签名版的描述文件,请将其下载到本地后用文本编辑器打开,因为 GitHub 会将签名版描述文件视为二进制文件而无法直接查看。
+
+## 提交新描述文件
+
+描述文件本质上是文本文件,将现有的描述文件复制一份并修改其 UUID 即可,请确保在本 README 文件中更新描述文件的相关信息。
+
+随机 UUID 除了可以通过网站在线生成,还有很多其他获取方法:
+
+- 在浏览器中按下 `F12` 打开“开发人员工具”,在控制台中运行这段代码
+
+```javascript
+crypto.randomUUID();
+```
+
+- 在 macOS / Linux 终端中运行此命令
+
+```sh
+# 适用于 macOS 和 Linux
+uuidgen
+
+# 适用于 Linux
+cat /proc/sys/kernel/random/uuid
+```
+
+- 在 Powershell 中运行此命令
+
+```powershell
+New-Guid
+```
+
+<%PROVIDERS_LINKS%>
\ No newline at end of file
diff --git a/languages/03-cmn-TW.json b/languages/03-cmn-TW.json
new file mode 100644
index 0000000..c66e3a7
--- /dev/null
+++ b/languages/03-cmn-TW.json
@@ -0,0 +1,15 @@
+{
+ "code": "cmn-TW",
+ "name": "繁體中文",
+ "emojiLength": 1,
+ "table_columns": {
+ "name": "名稱",
+ "region": "區域",
+ "censorship": "審查",
+ "notes": "備註",
+ "install_signed": "安裝連結",
+ "install_unsigned": ""
+ },
+ "yes": "是",
+ "no": "否"
+}
\ No newline at end of file
diff --git a/languages/03-cmn-TW.md b/languages/03-cmn-TW.md
new file mode 100644
index 0000000..33ca4e0
--- /dev/null
+++ b/languages/03-cmn-TW.md
@@ -0,0 +1,85 @@
+<%LANGUAGES%>
+
+# 加密 DNS 配置
+
+[DNS over HTTPS](https://zh.wikipedia.org/zh-tw/DNS_over_HTTPS) 和 [DNS over TLS](https://zh.wikipedia.org/zh-tw/DNS_over_TLS) 的設定描述檔。查看這篇文章以獲取更多訊息:[paulmillr.com/posts/encrypted-dns/](https://paulmillr.com/posts/encrypted-dns/) 以及有關[提交新描述檔](#提交新描述檔)的訊息。
+
+### 注意事項
+
+根據 [Google 這篇文章](https://security.googleblog.com/2022/07/dns-over-http3-in-android.html)的介紹,DoH 似乎比 DoT 的性能更優。
+
+從 iOS 和 iPadOS 15.5 開始,為了簡化咖啡館、飯店、機場等公共場所 Wi-Fi 的身份認證,蘋果將這些 Wi-Fi 的[強制網路門戶](https://zh.wikipedia.org/zh-tw/%E5%BC%BA%E5%88%B6%E9%97%A8%E6%88%B7)加入到了加密 DNS 豁免清單中。這是個好消息,但還有一些其他問題我們無法修復,只有等蘋果來解決:
+
+- 無法啟用加密 DNS:[Little Snitch & Lulu](https://github.com/paulmillr/encrypted-dns/issues/13)、[VPN](https://github.com/paulmillr/encrypted-dns/issues/18)
+- 部分流量繞過加密 DNS:[終端機和 App Store](https://github.com/paulmillr/encrypted-dns/issues/22)、[Chrome 瀏覽器](https://github.com/paulmillr/encrypted-dns/issues/19)
+
+如果你需要更進一步的隱私保護,請查看[使用 Tor 網路的加密 DNS](https://github.com/alecmuffett/dohot)。
+
+## 供應商
+
+「`審查=是`」意味著描述檔不會發送某些主機「`主機名=IP`」關係的真實訊息。
+
+<%PROVIDERS_TABLE%>
+
+## 安裝
+
+要使設置在 **iOS**、**iPadOS** 和 **macOS** 中所有的應用程式上生效,你需要安裝設定描述檔。此文件將指引操作系統使用 DoH 或 DoT。注意:僅在系統 Wi-Fi 設定中設置 DNS 伺服器 IP 是不夠的——你需要安裝描述檔。
+
+iOS / iPadOS:使用 Safari 瀏覽器(其他瀏覽器只會下載該文件,不會彈出安裝提示)打開 GitHub 上的 mobileconfig 文件,然後點擊「允許」按鈕,描述檔將完成下載。打開 **系統設定 => 一般 => VPN、DNS 與裝置管理**,選擇已下載的描述檔並點擊「安裝」按鈕。
+
+macOS [(官方文檔)](https://support.apple.com/zh-tw/guide/mac-help/mh35561/):
+
+1. 下載並保存描述檔,將其重命名為 `NAME.mobileconfig`,而不是 txt 之類的副檔名。
+2. 選擇「蘋果」選單 >「系統設定」,按一下側邊欄中的「隱私權和安全性」,然後按一下右側的「描述檔」。(你可能需要向下捲動。)
+ 安裝期間,系統可能會要求你提供密碼或其他資訊。
+3. 在「已下載」區域中,按兩下描述檔。
+4. 檢視描述檔內容然後按一下「繼續」、「安裝」或「註冊」來安裝描述檔。
+
+ 若 Mac 上已安裝描述檔的較早版本,則以上版本中的設定會取代先前的設定。
+
+## 範圍
+
+這條[額外選項](https://github.com/paulmillr/encrypted-dns/issues/22)似乎可以讓描述文件在系統全域範圍生效。如果有興趣嘗試,請將下面的內容添加到 mobileconfig 文件中:
+
+```xml
+PayloadScope
+System
+```
+
+## 簽署版描述檔
+
+在 `signed` 文件夾中,存放了*稍微過時的*簽署版描述檔。這些描述檔已由 [@Candygoblen123](https://github.com/Candygoblen123) 簽署,因此當你安裝時,介面上會有「已驗證」的提示,此舉還可確保這些描述檔未被篡改。但由於這些描述檔是交由第三方簽署的,因此可能會稍微落後於未簽署的版本。
+
+[備註]: <> (我們建議安裝簽署版的描述檔,因為數位簽章可以確保文件在下載時沒有被修改。)
+
+如要驗證 DNS 解析器的 IP 和主機名,請將描述檔內容與其官方網站的文檔進行比對,描述檔內部結構和屬性在[蘋果開發人員網站](https://developer.apple.com/documentation/devicemanagement/dnssettings)上有詳細講解。如要驗證簽署版的描述檔,請將其下載到本地後用文字編輯器打開,因為 GitHub 會將簽署版描述檔視為二進位檔案而無法直接查看。
+
+## 提交新描述檔
+
+描述檔本質上是文字檔案,將現有的描述檔複製一份並修改其 UUID 即可,請確保在本 README 文件中更新描述檔的相關訊息。
+
+隨機 UUID 除了可以通過網站在線生成,還有很多其他獲取方法:
+
+- 在瀏覽器中按下 `F12` 打開“開發人員工具”,在主控台中執行這段程式碼
+
+```javascript
+crypto.randomUUID();
+```
+
+- 在 macOS / Linux 終端機中執行此指令
+
+```sh
+# 適用於 macOS 和 Linux
+uuidgen
+
+# 適用於 Linux
+cat /proc/sys/kernel/random/uuid
+```
+
+- 在 Powershell 中執行此指令
+
+```powershell
+New-Guid
+```
+
+<%PROVIDERS_LINKS%>
\ No newline at end of file
diff --git a/providers/00-360.json b/providers/00-360.json
new file mode 100644
index 0000000..4adb523
--- /dev/null
+++ b/providers/00-360.json
@@ -0,0 +1,33 @@
+{
+ "id": "360-dns",
+ "profile": "360-dns-profile",
+ "name": "360",
+ "website": "https://sdns.360.net/dnsPublic.html",
+ "region": "CN",
+ "censorship": true,
+ "names": {
+ "en": "360 Security DNS",
+ "cmn-CN": "360 安全 DNS",
+ "cmn-TW": "360 安全 DNS"
+ },
+ "notes": {
+ "en": "Operated by 360 Digital Security Group",
+ "cmn-CN": "由 360 数字安全集团运营",
+ "cmn-TW": "由 360 數位安全集團營運"
+ },
+ "https": {
+ "name": "360 Public Security DNS over HTTPS",
+ "fullName": "360 Public Security DNS over HTTPS",
+ "topName": "360 Public Security DNS over HTTPS",
+ "PayloadDisplayName": "360 Public Security DNS over HTTPS",
+ "DNSProtocol": "HTTPS",
+ "ServerURLOrName": "https://doh.360.cn/dns-query",
+ "ServerAddresses": [
+ "101.226.4.6",
+ "218.30.118.6"
+ ],
+ "PayloadIdentifier": "com.apple.dnsSettings.managed.9d6e5fdf-e404-4f34-ae94-27ed2f636ac4",
+ "PayloadUUID": "AADC443A-E6B1-4F18-9093-CEA9B406A8FF",
+ "TopPayloadUUID": "32663B5D-707C-48BD-90C5-123E84204A8C"
+ }
+}
\ No newline at end of file
diff --git a/providers/01-adguard-default.json b/providers/01-adguard-default.json
new file mode 100644
index 0000000..c809fc3
--- /dev/null
+++ b/providers/01-adguard-default.json
@@ -0,0 +1,52 @@
+{
+ "id": "adguard-dns-default",
+ "profile": "adguard-dns-default-profile",
+ "name": "adguard-default",
+ "website": "https://adguard-dns.io/kb/general/dns-providers/#default",
+ "region": "RU",
+ "censorship": true,
+ "names": {
+ "en": "AdGuard DNS Default",
+ "cmn-CN": "AdGuard DNS 默认",
+ "cmn-TW": "AdGuard DNS 預設"
+ },
+ "notes": {
+ "en": "Operated by AdGuard Software Ltd. Blocks ads, tracking & phishing",
+ "cmn-CN": "由 AdGuard 运营,拦截广告、跟踪器和钓鱼网站",
+ "cmn-TW": "由 AdGuard 營運,阻擋廣告、追蹤器和釣魚網站"
+ },
+ "https": {
+ "name": "Adguard Default Encrypted DNS over HTTPS",
+ "fullName": "Adguard Default DNS",
+ "topName": "Adguard Default DNS over HTTPS",
+ "PayloadDisplayName": "Adguard Default DNS over HTTPS",
+ "DNSProtocol": "HTTPS",
+ "ServerURLOrName": "https://dns.adguard.com/dns-query",
+ "ServerAddresses": [
+ "2a10:50c0::ad1:ff",
+ "2a10:50c0::ad2:ff",
+ "94.140.14.14",
+ "94.140.15.15"
+ ],
+ "PayloadIdentifier": "com.apple.dnsSettings.managed.e17cf1fa-0f0f-48a9-a68b-395804ed1850",
+ "PayloadUUID": "28b90644-fc1e-409a-81e7-939598fee661",
+ "TopPayloadUUID": "A4475135-633A-4F15-A79B-BE15093DC97A"
+ },
+ "tls": {
+ "name": "Adguard Default Encrypted DNS over TLS",
+ "fullName": "Adguard Default DNS",
+ "topName": "Adguard Default DNS over TLS",
+ "PayloadDisplayName": "Adguard Default DNS over TLS",
+ "DNSProtocol": "TLS",
+ "ServerURLOrName": "dns.adguard.com",
+ "ServerAddresses": [
+ "2a10:50c0::ad1:ff",
+ "2a10:50c0::ad2:ff",
+ "94.140.14.14",
+ "94.140.15.15"
+ ],
+ "PayloadIdentifier": "com.apple.dnsSettings.managed.e17cf1fa-0f0f-48a9-a68b-395804ed1850",
+ "PayloadUUID": "28b90644-fc1e-409a-81e7-939598fee661",
+ "TopPayloadUUID": "54A8F485-C9E3-4475-B651-3656DF781F4F"
+ }
+}
\ No newline at end of file
diff --git a/providers/02-adguard-family.json b/providers/02-adguard-family.json
new file mode 100644
index 0000000..8698f09
--- /dev/null
+++ b/providers/02-adguard-family.json
@@ -0,0 +1,52 @@
+{
+ "id": "adguard-dns-family",
+ "profile": "adguard-dns-family-profile",
+ "website": "https://adguard-dns.io/kb/general/dns-providers/#family-protection",
+ "name": "adguard-family",
+ "region": "RU",
+ "censorship": true,
+ "names": {
+ "en": "AdGuard DNS Family Protection",
+ "cmn-CN": "AdGuard DNS 家庭保护",
+ "cmn-TW": "AdGuard DNS 家庭保護"
+ },
+ "notes": {
+ "en": "Operated by AdGuard Software Ltd. Blocks `Default` + malware & adult content",
+ "cmn-CN": "由 AdGuard 运营,除默认规则外,额外拦截恶意软件和成人内容",
+ "cmn-TW": "由 AdGuard 營運,除預設規則外,額外阻擋惡意軟體和成人內容"
+ },
+ "https": {
+ "name": "AdGuard Family Protection Encrypted DNS over HTTPS",
+ "fullName": "AdGuard Family Protection DNS",
+ "topName": "AdGuard Family Protection DNS over HTTPS",
+ "PayloadDisplayName": "AdGuard Family Protection DNS over HTTPS",
+ "DNSProtocol": "HTTPS",
+ "ServerURLOrName": "https://dns-family.adguard.com/dns-query",
+ "ServerAddresses": [
+ "2a10:50c0::bad1:ff",
+ "2a10:50c0::bad2:ff",
+ "94.140.14.15",
+ "94.140.15.16"
+ ],
+ "PayloadIdentifier": "com.apple.dnsSettings.managed.56f69d61-c1d2-422b-989a-adeeb1b6ddc0",
+ "PayloadUUID": "1cda01f8-b05b-4b0d-8675-44eeb5290564",
+ "TopPayloadUUID": "A4475135-633A-4F15-A79B-BE15093DC97A"
+ },
+ "tls": {
+ "name": "AdGuard Family Protection Encrypted DNS over TLS",
+ "fullName": "AdGuard Family Protection DNS",
+ "topName": "AdGuard Family Protection DNS over TLS",
+ "PayloadDisplayName": "AdGuard Family Protection DNS over TLS",
+ "DNSProtocol": "HTTPS",
+ "ServerURLOrName": "dns-family.adguard.com",
+ "ServerAddresses": [
+ "2a10:50c0::bad1:ff",
+ "2a10:50c0::bad2:ff",
+ "94.140.14.15",
+ "94.140.15.16"
+ ],
+ "PayloadIdentifier": "com.apple.dnsSettings.managed.56f69d61-c1d2-422b-989a-adeeb1b6ddc0",
+ "PayloadUUID": "1cda01f8-b05b-4b0d-8675-44eeb5290564",
+ "TopPayloadUUID": "FF00A616-63CE-4078-8786-800A1F357A9C"
+ }
+}
\ No newline at end of file
diff --git a/providers/03-adguard-nofilter.json b/providers/03-adguard-nofilter.json
new file mode 100644
index 0000000..0ea0e45
--- /dev/null
+++ b/providers/03-adguard-nofilter.json
@@ -0,0 +1,52 @@
+{
+ "id": "adguard-dns-unfiltered",
+ "profile": "adguard-dns-unfiltered-profile",
+ "website": "https://adguard-dns.io/kb/general/dns-providers/#non-filtering",
+ "name": "adguard-nofilter",
+ "region": "RU",
+ "censorship": false,
+ "names": {
+ "en": "AdGuard DNS Non-filtering",
+ "cmn-CN": "AdGuard DNS 无过滤",
+ "cmn-TW": "AdGuard DNS 無過濾"
+ },
+ "notes": {
+ "en": "Operated by AdGuard Software Ltd. Non-filtering",
+ "cmn-CN": "由 AdGuard 运营,无过滤",
+ "cmn-TW": "由 AdGuard 營運,無過濾"
+ },
+ "https": {
+ "name": "Adguard No Filter Encrypted DNS over TLS",
+ "fullName": "Adguard No Filter",
+ "topName": "Adguard No Filter over HTTPS",
+ "PayloadDisplayName": "Adguard No Filter over HTTPS",
+ "DNSProtocol": "HTTPS",
+ "ServerURLOrName": "https://dns-unfiltered.adguard.com/dns-query",
+ "ServerAddresses": [
+ "2a10:50c0::1:ff",
+ "2a10:50c0::2:ff",
+ "94.140.14.140",
+ "94.140.14.141"
+ ],
+ "PayloadIdentifier": "com.apple.dnsSettings.managed.9d6e5fdf-e404-4f34-ae94-27ed2f636ac4",
+ "PayloadUUID": "35d5c8a0-afa6-4b36-a9fe-099a997b44ad",
+ "TopPayloadUUID": "A4475135-633A-4F15-A79B-BE15093DC97A"
+ },
+ "tls": {
+ "name": "Adguard No Filter Encrypted DNS over TLS",
+ "fullName": "Adguard No Filter",
+ "topName": "Adguard No Filter over TLS",
+ "PayloadDisplayName": "Adguard No Filter over TLS",
+ "DNSProtocol": "TLS",
+ "ServerURLOrName": "dns-unfiltered.adguard.com",
+ "ServerAddresses": [
+ "2a10:50c0::1:ff",
+ "2a10:50c0::2:ff",
+ "94.140.14.140",
+ "94.140.14.141"
+ ],
+ "PayloadIdentifier": "com.apple.dnsSettings.managed.C498EC0C-EF6C-44F0-BFB7-0000658B99AC",
+ "PayloadUUID": "065AB183-5E34-4794-9BEB-B5327CF61F27",
+ "TopPayloadUUID": "030E6D6F-69A2-4515-9D77-99342CB9AE76"
+ }
+}
\ No newline at end of file
diff --git a/providers/04-alekberg.json b/providers/04-alekberg.json
new file mode 100644
index 0000000..b58792c
--- /dev/null
+++ b/providers/04-alekberg.json
@@ -0,0 +1,18 @@
+{
+ "id": "alekberg-dns",
+ "profile": "alekberg-dns-profile",
+ "name": "alekberg",
+ "website": "https://alekberg.net",
+ "region": "NL",
+ "censorship": false,
+ "names": {
+ "en": "Alekberg Encrypted DNS",
+ "cmn-CN": "Alekberg 加密 DNS",
+ "cmn-TW": "Alekberg 加密 DNS"
+ },
+ "notes": {
+ "en": "Independent",
+ "cmn-CN": "由个人提供",
+ "cmn-TW": "由個人提供"
+ }
+}
\ No newline at end of file
diff --git a/providers/05-alibaba.json b/providers/05-alibaba.json
new file mode 100644
index 0000000..3373b93
--- /dev/null
+++ b/providers/05-alibaba.json
@@ -0,0 +1,52 @@
+{
+ "id": "aliyun-dns",
+ "profile": "aliyun-dns-profile",
+ "name": "alibaba",
+ "website": "https://www.alidns.com/",
+ "region": "CN",
+ "censorship": false,
+ "names": {
+ "en": "Aliyun Public DNS",
+ "cmn-CN": "阿里云公共 DNS",
+ "cmn-TW": "阿里雲公共 DNS"
+ },
+ "notes": {
+ "en": "Operated by Alibaba Cloud Ltd.",
+ "cmn-CN": "由阿里云计算运营",
+ "cmn-TW": "由阿里雲計算營運"
+ },
+ "https": {
+ "name": "AliDNS Encrypted DNS over TLS",
+ "fullName": "AliDNS",
+ "topName": "AliDNS over HTTPS",
+ "PayloadDisplayName": "AliDNS DNS over HTTPS",
+ "DNSProtocol": "HTTPS",
+ "ServerURLOrName": "https://dns.alidns.com/dns-query",
+ "ServerAddresses": [
+ "2400:3200::1",
+ "2400:3200:baba::1",
+ "223.5.5.5",
+ "223.6.6.6"
+ ],
+ "PayloadIdentifier": "com.apple.dnsSettings.managed.9d6e5fdf-e404-4f34-ae94-27ed2f636ac4",
+ "PayloadUUID": "35d5c8a0-afa6-4b36-a9fe-099a997b44ad",
+ "TopPayloadUUID": "A4475135-633A-4F15-A79B-BE15093DC97A"
+ },
+ "tls": {
+ "name": "AliDNS Encrypted DNS over TLS",
+ "fullName": "AliDNS",
+ "topName": "AliDNS over TLS",
+ "PayloadDisplayName": "AliDNS DNS over TLS",
+ "DNSProtocol": "TLS",
+ "ServerURLOrName": "dns.alidns.com",
+ "ServerAddresses": [
+ "2400:3200::1",
+ "2400:3200:baba::1",
+ "223.5.5.5",
+ "223.6.6.6"
+ ],
+ "PayloadIdentifier": "com.apple.dnsSettings.managed.9d6e5fdf-e404-4f34-ae94-27ed2f636ac4",
+ "PayloadUUID": "35d5c8a0-afa6-4b36-a9fe-099a997b44ad",
+ "TopPayloadUUID": "6C7F342C-930C-49D7-8FFF-750F38CE39DD"
+ }
+}
\ No newline at end of file
diff --git a/providers/06-blahdns-cdn-adblock.json b/providers/06-blahdns-cdn-adblock.json
new file mode 100644
index 0000000..5de2047
--- /dev/null
+++ b/providers/06-blahdns-cdn-adblock.json
@@ -0,0 +1,19 @@
+{
+ "id": "blahdns",
+ "profile": "blahdns-cdn-filtered-profile",
+ "name": "blahdns-cdn-adblock",
+ "doh": 1,
+ "website": "https://blahdns.com/",
+ "region": "US",
+ "censorship": true,
+ "names": {
+ "en": "BlahDNS CDN Filtered",
+ "cmn-CN": "BlahDNS CDN 过滤",
+ "cmn-TW": "BlahDNS CDN 過濾"
+ },
+ "notes": {
+ "en": "Independent. Blocks ads, tracking & malware",
+ "cmn-CN": "由个人提供,拦截广告、跟踪器和恶意软件",
+ "cmn-TW": "由個人提供,阻擋廣告、追蹤器和惡意軟體"
+ }
+}
\ No newline at end of file
diff --git a/providers/07-blahdns-cdn-unfiltered.json b/providers/07-blahdns-cdn-unfiltered.json
new file mode 100644
index 0000000..ab96bfe
--- /dev/null
+++ b/providers/07-blahdns-cdn-unfiltered.json
@@ -0,0 +1,18 @@
+{
+ "id": "blahdns",
+ "profile": "blahdns-cdn-unfiltered-profile",
+ "name": "blahdns-cdn-unfiltered",
+ "doh": 1,
+ "region": "US",
+ "censorship": false,
+ "names": {
+ "en": "BlahDNS CDN Unfiltered",
+ "cmn-CN": "BlahDNS CDN 无过滤",
+ "cmn-TW": "BlahDNS CDN 無過濾"
+ },
+ "notes": {
+ "en": "Independent. Non-filtering",
+ "cmn-CN": "由个人提供,无过滤",
+ "cmn-TW": "由個人提供,無過濾"
+ }
+}
\ No newline at end of file
diff --git a/providers/08-blahdns-germany.json b/providers/08-blahdns-germany.json
new file mode 100644
index 0000000..d0883bc
--- /dev/null
+++ b/providers/08-blahdns-germany.json
@@ -0,0 +1,18 @@
+{
+ "id": "blahdns",
+ "profile": "blahdns-germany-profile",
+ "name": "blahdns-germany",
+ "region": "DE",
+ "censorship": true,
+ "doh": true,
+ "names": {
+ "en": "BlahDNS Germany",
+ "cmn-CN": "BlahDNS 德国",
+ "cmn-TW": "BlahDNS 德國"
+ },
+ "notes": {
+ "en": "Independent. Blocks ads, tracking & malware",
+ "cmn-CN": "由个人提供,拦截广告、跟踪器和恶意软件",
+ "cmn-TW": "由個人提供,阻擋廣告、追蹤器和惡意軟體"
+ }
+}
\ No newline at end of file
diff --git a/providers/09-blahdns-singapore.json b/providers/09-blahdns-singapore.json
new file mode 100644
index 0000000..54ddaed
--- /dev/null
+++ b/providers/09-blahdns-singapore.json
@@ -0,0 +1,18 @@
+{
+ "id": "blahdns",
+ "profile": "blahdns-singapore-profile",
+ "name": "blahdns-singapore",
+ "doh": true,
+ "region": "SG",
+ "censorship": true,
+ "names": {
+ "en": "BlahDNS Singapore",
+ "cmn-CN": "BlahDNS 新加坡",
+ "cmn-TW": "BlahDNS 新加坡"
+ },
+ "notes": {
+ "en": "Independent. Blocks ads, tracking & malware",
+ "cmn-CN": "由个人提供,拦截广告、跟踪器和恶意软件",
+ "cmn-TW": "由個人提供,阻擋廣告、追蹤器和惡意軟體"
+ }
+}
\ No newline at end of file
diff --git a/providers/10-canadianshield-private.json b/providers/10-canadianshield-private.json
new file mode 100644
index 0000000..10ed4f9
--- /dev/null
+++ b/providers/10-canadianshield-private.json
@@ -0,0 +1,52 @@
+{
+ "id": "canadian-shield",
+ "profile": "canadian-shield-private-profile",
+ "name": "canadianshield-private",
+ "website": "https://www.cira.ca/cybersecurity-services/canadian-shield/configure/summary-cira-canadian-shield-dns-resolver-addresses",
+ "region": "CA",
+ "censorship": false,
+ "names": {
+ "en": "Canadian Shield Private",
+ "cmn-CN": "Canadian Shield 私人",
+ "cmn-TW": "Canadian Shield 私人"
+ },
+ "notes": {
+ "en": "Operated by the Canadian Internet Registration Authority (CIRA)",
+ "cmn-CN": "由加拿大互联网注册管理局 (CIRA) 运营",
+ "cmn-TW": "由加拿大網際網路註冊管理局 (CIRA) 營運"
+ },
+ "https": {
+ "name": "Canadian Shield Encrypted DNS over HTTPS",
+ "fullName": "Canadian Shield DNS",
+ "topName": "Canadian Shield DNS over HTTPS",
+ "PayloadDisplayName": "Canadian Shield DNS over HTTPS",
+ "DNSProtocol": "HTTPS",
+ "ServerURLOrName": "https://private.canadianshield.cira.ca/dns-query",
+ "ServerAddresses": [
+ "2620:10A:80BB::10",
+ "2620:10A:80BC::10",
+ "149.112.121.10",
+ "149.112.122.10"
+ ],
+ "PayloadIdentifier": "com.apple.dnsSettings.managed.9d6e5fdf-e404-4f34-ae94-27ed2f636ac4",
+ "PayloadUUID": "35d5c8a0-afa6-4b36-a9fe-099a997b44ad",
+ "TopPayloadUUID": "32E01895-86AB-40AE-ACD2-4460D584EA35"
+ },
+ "tls": {
+ "name": "Canadian Shield Encrypted DNS over TLS",
+ "fullName": "Canadian Shield DNS",
+ "topName": "Canadian Shield DNS over TLS",
+ "PayloadDisplayName": "Canadian Shield DNS over TLS",
+ "DNSProtocol": "TLS",
+ "ServerURLOrName": "private.canadianshield.cira.ca",
+ "ServerAddresses": [
+ "2620:10A:80BB::10",
+ "2620:10A:80BC::10",
+ "149.112.121.10",
+ "149.112.122.10"
+ ],
+ "PayloadIdentifier": "com.apple.dnsSettings.managed.9d6e5fdf-e404-4f34-ae94-27ed2f636ac4",
+ "PayloadUUID": "35d5c8a0-afa6-4b36-a9fe-099a997b44ad",
+ "TopPayloadUUID": "32E01895-86AB-40AE-ACD2-4460D584EA35"
+ }
+}
\ No newline at end of file
diff --git a/providers/11-canadianshield-protected.json b/providers/11-canadianshield-protected.json
new file mode 100644
index 0000000..01344a4
--- /dev/null
+++ b/providers/11-canadianshield-protected.json
@@ -0,0 +1,51 @@
+{
+ "id": "canadian-shield",
+ "profile": "canadian-shield-protected-profile",
+ "name": "canadianshield-protected",
+ "region": "CA",
+ "censorship": true,
+ "names": {
+ "en": "Canadian Shield Protected",
+ "cmn-CN": "Canadian Shield 保护",
+ "cmn-TW": "Canadian Shield 保護"
+ },
+ "notes": {
+ "en": "Operated by the Canadian Internet Registration Authority (CIRA). Blocks malware & phishing",
+ "cmn-CN": "由加拿大互联网注册管理局 (CIRA) 运营,拦截恶意软件和钓鱼网站",
+ "cmn-TW": "由加拿大網際網路註冊管理局 (CIRA) 營運,阻擋惡意軟體和釣魚網站"
+ },
+ "https": {
+ "name": "Canadian Shield Encrypted DNS over HTTPS",
+ "fullName": "Canadian Shield DNS",
+ "topName": "Canadian Shield DNS over HTTPS",
+ "PayloadDisplayName": "Canadian Shield DNS over HTTPS",
+ "DNSProtocol": "HTTPS",
+ "ServerURLOrName": "https://protected.canadianshield.cira.ca/dns-query",
+ "ServerAddresses": [
+ "2620:10A:80BB::20",
+ "2620:10A:80BC::20",
+ "149.112.121.20",
+ "149.112.122.20"
+ ],
+ "PayloadIdentifier": "com.apple.dnsSettings.managed.9d6e5fdf-e404-4f34-ae94-27ed2f636ac4",
+ "PayloadUUID": "35d5c8a0-afa6-4b36-a9fe-099a997b44ad",
+ "TopPayloadUUID": "32E01895-86AB-40AE-ACD2-4460D584EA35"
+ },
+ "tls": {
+ "name": "Canadian Shield Encrypted DNS over TLS",
+ "fullName": "Canadian Shield DNS",
+ "topName": "Canadian Shield DNS over TLS",
+ "PayloadDisplayName": "Canadian Shield DNS over TLS",
+ "DNSProtocol": "TLS",
+ "ServerURLOrName": "protected.canadianshield.cira.ca",
+ "ServerAddresses": [
+ "2620:10A:80BB::20",
+ "2620:10A:80BC::20",
+ "149.112.121.20",
+ "149.112.122.20"
+ ],
+ "PayloadIdentifier": "com.apple.dnsSettings.managed.9d6e5fdf-e404-4f34-ae94-27ed2f636ac4",
+ "PayloadUUID": "35d5c8a0-afa6-4b36-a9fe-099a997b44ad",
+ "TopPayloadUUID": "32E01895-86AB-40AE-ACD2-4460D584EA35"
+ }
+}
\ No newline at end of file
diff --git a/providers/12-canadianshield-family.json b/providers/12-canadianshield-family.json
new file mode 100644
index 0000000..f5eb0df
--- /dev/null
+++ b/providers/12-canadianshield-family.json
@@ -0,0 +1,51 @@
+{
+ "id": "canadian-shield",
+ "profile": "canadian-shield-family-profile",
+ "name": "canadianshield-family",
+ "region": "CA",
+ "censorship": true,
+ "names": {
+ "en": "Canadian Shield Family",
+ "cmn-CN": "Canadian Shield 家庭",
+ "cmn-TW": "Canadian Shield 家庭"
+ },
+ "notes": {
+ "en": "Operated by the Canadian Internet Registration Authority (CIRA). Blocks malware, phishing & adult content",
+ "cmn-CN": "由加拿大互联网注册管理局 (CIRA) 运营,拦截恶意软件、钓鱼和成人内容",
+ "cmn-TW": "由加拿大網際網路註冊管理局 (CIRA) 營運,阻擋惡意軟體、釣魚和成人內容"
+ },
+ "https": {
+ "name": "Canadian Shield Encrypted DNS over HTTPS",
+ "fullName": "Canadian Shield DNS",
+ "topName": "Canadian Shield DNS over HTTPS",
+ "PayloadDisplayName": "Canadian Shield DNS over HTTPS",
+ "DNSProtocol": "HTTPS",
+ "ServerURLOrName": "https://family.canadianshield.cira.ca/dns-query",
+ "ServerAddresses": [
+ "2620:10A:80BB::30",
+ "2620:10A:80BC::30",
+ "149.112.121.30",
+ "149.112.122.30"
+ ],
+ "PayloadIdentifier": "com.apple.dnsSettings.managed.9d6e5fdf-e404-4f34-ae94-27ed2f636ac4",
+ "PayloadUUID": "35d5c8a0-afa6-4b36-a9fe-099a997b44ad",
+ "TopPayloadUUID": "32E01895-86AB-40AE-ACD2-4460D584EA35"
+ },
+ "tls": {
+ "name": "Canadian Shield Encrypted DNS over TLS",
+ "fullName": "Canadian Shield DNS",
+ "topName": "Canadian Shield DNS over TLS",
+ "PayloadDisplayName": "Canadian Shield DNS over TLS",
+ "DNSProtocol": "TLS",
+ "ServerURLOrName": "family.canadianshield.cira.ca",
+ "ServerAddresses": [
+ "2620:10A:80BB::30",
+ "2620:10A:80BC::30",
+ "149.112.121.30",
+ "149.112.122.30"
+ ],
+ "PayloadIdentifier": "com.apple.dnsSettings.managed.9d6e5fdf-e404-4f34-ae94-27ed2f636ac4",
+ "PayloadUUID": "35d5c8a0-afa6-4b36-a9fe-099a997b44ad",
+ "TopPayloadUUID": "32E01895-86AB-40AE-ACD2-4460D584EA35"
+ }
+}
\ No newline at end of file
diff --git a/providers/13-cleanbrowsing-family.json b/providers/13-cleanbrowsing-family.json
new file mode 100644
index 0000000..1552b89
--- /dev/null
+++ b/providers/13-cleanbrowsing-family.json
@@ -0,0 +1,52 @@
+{
+ "id": "cleanbrowsing",
+ "profile": "cleanbrowsing-family",
+ "name": "cleanbrowsing-family",
+ "website": "https://cleanbrowsing.org/filters/",
+ "region": "US",
+ "censorship": true,
+ "names": {
+ "en": "Cleanbrowsing Family Filter",
+ "cmn-CN": "Cleanbrowsing 家庭过滤器",
+ "cmn-TW": "Cleanbrowsing 家庭過濾器"
+ },
+ "notes": {
+ "en": "Filters malware & adult, mixed content",
+ "cmn-CN": "过滤恶意软件、成人内容和混合内容",
+ "cmn-TW": "過濾惡意軟體、成人內容和混合內容"
+ },
+ "https": {
+ "name": "Cleanbrowsing Family Filter Encrypted DNS over HTTPS",
+ "fullName": "Cleanbrowsing Family Filter DNS over HTTPS",
+ "topName": "Cleanbrowsing Family DNS over HTTPS",
+ "PayloadDisplayName": "Cleanbrowsing Family Filter DNS over HTTPS",
+ "DNSProtocol": "HTTPS",
+ "ServerURLOrName": "https://doh.cleanbrowsing.org/doh/family-filter/",
+ "ServerAddresses": [
+ "2a0d:2a00:1::",
+ "2a0d:2a00:1::",
+ "185.228.169.168",
+ "185.228.168.168"
+ ],
+ "PayloadIdentifier": "com.apple.dnsSettings.managed.9d6e5fdf-e404-4f34-ae94-27ed2f636ac4",
+ "PayloadUUID": "35d5c8a0-afa6-4b36-a9fe-099a997b44ad",
+ "TopPayloadUUID": "3E5C292F-D880-4F69-BB49-2A4AA20BDADA"
+ },
+ "tls": {
+ "name": "Cleanbrowsing Family Filter Encrypted DNS over TLS",
+ "fullName": "Cleanbrowsing Family Filter DNS over TLS",
+ "topName": "Cleanbrowsing Family DNS over TLS",
+ "PayloadDisplayName": "Cleanbrowsing Family Filter DNS over TLS",
+ "DNSProtocol": "TLS",
+ "ServerURLOrName": "family-filter-dns.cleanbrowsing.org",
+ "ServerAddresses": [
+ "2a0d:2a00:1::",
+ "2a0d:2a00:1::",
+ "185.228.169.168",
+ "185.228.168.168"
+ ],
+ "PayloadIdentifier": "com.apple.dnsSettings.managed.9d6e5fdf-e404-4f34-ae94-27ed2f636ac4",
+ "PayloadUUID": "35d5c8a0-afa6-4b36-a9fe-099a997b44ad",
+ "TopPayloadUUID": "92BC38A9-5D7F-4F5B-BEE1-08F3BE17CED0"
+ }
+}
\ No newline at end of file
diff --git a/providers/14-cleanbrowsing-adult.json b/providers/14-cleanbrowsing-adult.json
new file mode 100644
index 0000000..6d27cf2
--- /dev/null
+++ b/providers/14-cleanbrowsing-adult.json
@@ -0,0 +1,51 @@
+{
+ "id": "cleanbrowsing",
+ "profile": "cleanbrowsing-adult",
+ "name": "cleanbrowsing-adult",
+ "region": "US",
+ "censorship": true,
+ "names": {
+ "en": "Cleanbrowsing Adult Filter",
+ "cmn-CN": "Cleanbrowsing 成人过滤器",
+ "cmn-TW": "Cleanbrowsing 成人過濾器"
+ },
+ "notes": {
+ "en": "Filters malware & adult content",
+ "cmn-CN": "过滤恶意软件和成人内容",
+ "cmn-TW": "過濾惡意軟體和成人內容"
+ },
+ "https": {
+ "name": "Cleanbrowsing Adult Filter Encrypted DNS over HTTPS",
+ "fullName": "Cleanbrowsing Adult Filter DNS over HTTPS",
+ "topName": "Cleanbrowsing Adult DNS over HTTPS",
+ "PayloadDisplayName": "Cleanbrowsing Adult Filter DNS over HTTPS",
+ "DNSProtocol": "HTTPS",
+ "ServerURLOrName": "https://doh.cleanbrowsing.org/doh/adult-filter/",
+ "ServerAddresses": [
+ "2a0d:2a00:1::1",
+ "2a0d:2a00:2::1",
+ "185.228.169.10",
+ "185.228.168.10"
+ ],
+ "PayloadIdentifier": "com.apple.dnsSettings.managed.9d6e5fdf-e404-4f34-ae94-27ed2f636ac4",
+ "PayloadUUID": "35d5c8a0-afa6-4b36-a9fe-099a997b44ad",
+ "TopPayloadUUID": "5B083B6A-F07D-4B98-AF3B-EAF9F89CAE49"
+ },
+ "tls": {
+ "name": "Cleanbrowsing Adult Filter Encrypted DNS over TLS",
+ "fullName": "Cleanbrowsing Adult Filter DNS over TLS",
+ "topName": "Cleanbrowsing Adult DNS over TLS",
+ "PayloadDisplayName": "Cleanbrowsing Adult Filter DNS over TLS",
+ "DNSProtocol": "TLS",
+ "ServerURLOrName": "adult-filter-dns.cleanbrowsing.org",
+ "ServerAddresses": [
+ "2a0d:2a00:1::1",
+ "2a0d:2a00:2::1",
+ "185.228.169.10",
+ "185.228.168.10"
+ ],
+ "PayloadIdentifier": "com.apple.dnsSettings.managed.9d6e5fdf-e404-4f34-ae94-27ed2f636ac4",
+ "PayloadUUID": "35d5c8a0-afa6-4b36-a9fe-099a997b44ad",
+ "TopPayloadUUID": "7AE40871-B9FA-4215-9AB5-E7A17505C154"
+ }
+}
\ No newline at end of file
diff --git a/providers/15-cleanbrowsing-security.json b/providers/15-cleanbrowsing-security.json
new file mode 100644
index 0000000..d1eebc4
--- /dev/null
+++ b/providers/15-cleanbrowsing-security.json
@@ -0,0 +1,51 @@
+{
+ "id": "cleanbrowsing",
+ "profile": "cleanbrowsing-security",
+ "name": "cleanbrowsing-security",
+ "region": "US",
+ "censorship": true,
+ "names": {
+ "en": "Cleanbrowsing Security Filter",
+ "cmn-CN": "Cleanbrowsing 安全过滤器",
+ "cmn-TW": "Cleanbrowsing 安全過濾器"
+ },
+ "notes": {
+ "en": "Filters malware",
+ "cmn-CN": "过滤恶意软件",
+ "cmn-TW": "過濾惡意軟體"
+ },
+ "https": {
+ "name": "Cleanbrowsing Security Filter Encrypted DNS over HTTPS",
+ "fullName": "Cleanbrowsing Security Filter DNS over HTTPS",
+ "topName": "Cleanbrowsing Security DNS over HTTPS",
+ "PayloadDisplayName": "Cleanbrowsing Security Filter DNS over HTTPS",
+ "DNSProtocol": "HTTPS",
+ "ServerURLOrName": "https://doh.cleanbrowsing.org/doh/security-filter/",
+ "ServerAddresses": [
+ "2a0d:2a00:1::2",
+ "2a0d:2a00:2::2",
+ "185.228.168.9",
+ "185.228.169.9"
+ ],
+ "PayloadIdentifier": "com.apple.dnsSettings.managed.9d6e5fdf-e404-4f34-ae94-27ed2f636ac4",
+ "PayloadUUID": "35d5c8a0-afa6-4b36-a9fe-099a997b44ad",
+ "TopPayloadUUID": "30A6F82B-5A75-40BB-B45E-04170CFEF7D3"
+ },
+ "tls": {
+ "name": "Cleanbrowsing Security Filter Encrypted DNS over TLS",
+ "fullName": "Cleanbrowsing Security Filter DNS over TLS",
+ "topName": "Cleanbrowsing Security DNS over TLS",
+ "PayloadDisplayName": "Cleanbrowsing Security Filter DNS over TLS",
+ "DNSProtocol": "TLS",
+ "ServerURLOrName": "security-filter-dns.cleanbrowsing.org",
+ "ServerAddresses": [
+ "2a0d:2a00:1::2",
+ "2a0d:2a00:2::2",
+ "185.228.168.9",
+ "185.228.169.9"
+ ],
+ "PayloadIdentifier": "com.apple.dnsSettings.managed.9d6e5fdf-e404-4f34-ae94-27ed2f636ac4",
+ "PayloadUUID": "35d5c8a0-afa6-4b36-a9fe-099a997b44ad",
+ "TopPayloadUUID": "E0B418C8-CBD7-4E7C-A176-3AC4BB62907F"
+ }
+}
\ No newline at end of file
diff --git a/providers/16-cloudflare.json b/providers/16-cloudflare.json
new file mode 100644
index 0000000..4871d0f
--- /dev/null
+++ b/providers/16-cloudflare.json
@@ -0,0 +1,52 @@
+{
+ "id": "cloudflare-dns",
+ "profile": "cloudflare-dns-profile",
+ "website": "https://developers.cloudflare.com/1.1.1.1/encryption/",
+ "name": "cloudflare",
+ "region": "US",
+ "censorship": false,
+ "names": {
+ "en": "Cloudflare 1.1.1.1",
+ "cmn-CN": "Cloudflare 1.1.1.1",
+ "cmn-TW": "Cloudflare 1.1.1.1"
+ },
+ "notes": {
+ "en": "Operated by Cloudflare Inc.",
+ "cmn-CN": "由 Cloudflare 公司运营",
+ "cmn-TW": "由 Cloudflare 公司營運"
+ },
+ "https": {
+ "name": "Cloudflare Encrypted DNS over HTTPS",
+ "fullName": "Cloudflare DNS",
+ "topName": "Cloudflare DNS over HTTPS",
+ "PayloadDisplayName": "Cloudflare DNS over HTTPS",
+ "DNSProtocol": "HTTPS",
+ "ServerURLOrName": "https://cloudflare-dns.com/dns-query",
+ "ServerAddresses": [
+ "2606:4700:4700::1111",
+ "2606:4700:4700::1001",
+ "1.1.1.1",
+ "1.0.0.1"
+ ],
+ "PayloadIdentifier": "com.apple.dnsSettings.managed.9d6e5fdf-e404-4f34-ae94-27ed2f636ac4",
+ "PayloadUUID": "35d5c8a0-afa6-4b36-a9fe-099a997b44ad",
+ "TopPayloadUUID": "A4475135-633A-4F15-A79B-BE15093DC97A"
+ },
+ "tls": {
+ "name": "Cloudflare Encrypted DNS over TLS",
+ "fullName": "Cloudflare DNS",
+ "topName": "Cloudflare DNS over TLS",
+ "PayloadDisplayName": "Cloudflare DNS over TLS",
+ "DNSProtocol": "TLS",
+ "ServerURLOrName": "one.one.one.one",
+ "ServerAddresses": [
+ "2606:4700:4700::1111",
+ "2606:4700:4700::1001",
+ "1.1.1.1",
+ "1.0.0.1"
+ ],
+ "PayloadIdentifier": "com.apple.dnsSettings.managed.9d6e5fdf-e404-4f34-ae94-27ed2f636ac4",
+ "PayloadUUID": "35d5c8a0-afa6-4b36-a9fe-099a997b44ad",
+ "TopPayloadUUID": "32E01895-86AB-40AE-ACD2-4460D584EA35"
+ }
+}
\ No newline at end of file
diff --git a/providers/17-cloudflare-malware.json b/providers/17-cloudflare-malware.json
new file mode 100644
index 0000000..bebdae3
--- /dev/null
+++ b/providers/17-cloudflare-malware.json
@@ -0,0 +1,34 @@
+{
+ "id": "cloudflare-dns-family",
+ "profile": "cloudflare-dns-security-profile",
+ "name": "cloudflare-malware",
+ "region": "US",
+ "censorship": true,
+ "names": {
+ "en": "Cloudflare 1.1.1.1 Security",
+ "cmn-CN": "Cloudflare 1.1.1.1 安全",
+ "cmn-TW": "Cloudflare 1.1.1.1 安全"
+ },
+ "notes": {
+ "en": "Operated by Cloudflare Inc. Blocks malware & phishing",
+ "cmn-CN": "由 Cloudflare 公司运营,拦截恶意软件和钓鱼网站",
+ "cmn-TW": "由 Cloudflare 公司營運,阻擋惡意軟體和釣魚網站"
+ },
+ "https": {
+ "name": "Cloudflare no Malware Encrypted DNS over HTTPS",
+ "fullName": "Cloudflare no Malware DNS",
+ "topName": "Cloudflare no Malware DNS over HTTPS",
+ "PayloadDisplayName": "Cloudflare no Malware DNS over HTTPS",
+ "DNSProtocol": "HTTPS",
+ "ServerURLOrName": "https://security.cloudflare-dns.com/dns-query",
+ "ServerAddresses": [
+ "2606:4700:4700::1112",
+ "2606:4700:4700::1002",
+ "1.1.1.2",
+ "1.0.0.2"
+ ],
+ "PayloadIdentifier": "com.apple.dnsSettings.managed.9d6e5fdf-e404-4f34-ae94-27ed2f636ac4",
+ "PayloadUUID": "35d5c8a0-afa6-4b36-a9fe-099a997b44ad",
+ "TopPayloadUUID": "A4475135-633A-4F15-A79B-BE15093DC97A"
+ }
+}
\ No newline at end of file
diff --git a/providers/18-cloudflare-family.json b/providers/18-cloudflare-family.json
new file mode 100644
index 0000000..63c1d75
--- /dev/null
+++ b/providers/18-cloudflare-family.json
@@ -0,0 +1,35 @@
+{
+ "id": "cloudflare-dns-family",
+ "profile": "cloudflare-dns-family-profile",
+ "name": "cloudflare-family",
+ "website": "https://developers.cloudflare.com/1.1.1.1/setup/#1111-for-families",
+ "region": "US",
+ "censorship": true,
+ "names": {
+ "en": "Cloudflare 1.1.1.1 Family",
+ "cmn-CN": "Cloudflare 1.1.1.1 家庭",
+ "cmn-TW": "Cloudflare 1.1.1.1 家庭"
+ },
+ "notes": {
+ "en": "Operated by Cloudflare Inc. Blocks malware, phishing & adult content",
+ "cmn-CN": "由 Cloudflare 公司运营,拦截恶意软件、钓鱼和成人内容",
+ "cmn-TW": "由 Cloudflare 公司營運,阻擋惡意軟體、釣魚和成人內容"
+ },
+ "https": {
+ "name": "Cloudflare Family Encrypted DNS over HTTPS",
+ "fullName": "Cloudflare DNS",
+ "topName": "Cloudflare Family DNS over HTTPS",
+ "PayloadDisplayName": "Cloudflare Family DNS over HTTPS",
+ "DNSProtocol": "HTTPS",
+ "ServerURLOrName": "https://family.cloudflare-dns.com/dns-query",
+ "ServerAddresses": [
+ "2606:4700:4700::1113",
+ "2606:4700:4700::1003",
+ "1.1.1.3",
+ "1.0.0.3"
+ ],
+ "PayloadIdentifier": "com.apple.dnsSettings.managed.9d6e5fdf-e404-4f34-ae94-27ed2f636ac4",
+ "PayloadUUID": "35d5c8a0-afa6-4b36-a9fe-099a997b44ad",
+ "TopPayloadUUID": "A4475135-633A-4F15-A79B-BE15093DC97A"
+ }
+}
\ No newline at end of file
diff --git a/providers/19-dnspod.json b/providers/19-dnspod.json
new file mode 100644
index 0000000..97c270e
--- /dev/null
+++ b/providers/19-dnspod.json
@@ -0,0 +1,48 @@
+{
+ "id": "dnspod-dns",
+ "profile": "dnspod-dns-profile",
+ "website": "https://www.dnspod.com/products/public.dns",
+ "name": "dnspod",
+ "region": "CN",
+ "censorship": false,
+ "names": {
+ "en": "DNSPod Public DNS",
+ "cmn-CN": "DNSPod 公共 DNS",
+ "cmn-TW": "DNSPod 公共 DNS"
+ },
+ "notes": {
+ "en": "Operated by DNSPod Inc., a Tencent Cloud Company",
+ "cmn-CN": "由腾讯公司 DNSPod 运营",
+ "cmn-TW": "由騰訊公司 DNSPod 營運"
+ },
+ "https": {
+ "name": "DNSPod Encrypted DNS over HTTPS",
+ "fullName": "DNSPod",
+ "topName": "DNSPod over HTTPS",
+ "PayloadDisplayName": "DNSPod over HTTPS",
+ "DNSProtocol": "HTTPS",
+ "ServerURLOrName": "https://doh.pub/dns-query",
+ "ServerAddresses": [
+ "1.12.12.12",
+ "120.53.53.53"
+ ],
+ "PayloadIdentifier": "com.apple.dnsSettings.managed.C498EC0C-EF6C-44F0-BFB7-0000658B99AC",
+ "PayloadUUID": "065AB183-5E34-4794-9BEB-B5327CF61F27",
+ "TopPayloadUUID": "030E6D6F-69A2-4515-9D77-99342CB9AE76"
+ },
+ "tls": {
+ "name": "DNSPod Encrypted DNS over TLS",
+ "fullName": "DNSPod",
+ "topName": "DNSPod over TLS",
+ "PayloadDisplayName": "DNSPod over TLS",
+ "DNSProtocol": "TLS",
+ "ServerURLOrName": "dot.pub",
+ "ServerAddresses": [
+ "1.12.12.12",
+ "120.53.53.53"
+ ],
+ "PayloadIdentifier": "com.apple.dnsSettings.managed.C498EC0C-EF6C-44F0-BFB7-0000658B99AC",
+ "PayloadUUID": "065AB183-5E34-4794-9BEB-B5327CF61F27",
+ "TopPayloadUUID": "3FFF1FEC-04EB-4D2B-94AB-602EE3261D1D"
+ }
+}
\ No newline at end of file
diff --git a/providers/20-fdn.json b/providers/20-fdn.json
new file mode 100644
index 0000000..2d44044
--- /dev/null
+++ b/providers/20-fdn.json
@@ -0,0 +1,52 @@
+{
+ "id": "fdn-dns",
+ "profile": "fdn",
+ "website": "https://www.fdn.fr/actions/dns/",
+ "name": "fdn",
+ "region": "FR",
+ "censorship": false,
+ "names": {
+ "en": "FDN",
+ "cmn-CN": "FDN",
+ "cmn-TW": "FDN"
+ },
+ "notes": {
+ "en": "Operated by French Data Network",
+ "cmn-CN": "由法国数据网络运营",
+ "cmn-TW": "由法國資料網路營運"
+ },
+ "https": {
+ "name": "Google Encrypted DNS over HTTPS",
+ "fullName": "FDN DNS",
+ "topName": "FDN Encrypted DNS over HTTPS",
+ "PayloadDisplayName": "FDN DNS over HTTPS",
+ "DNSProtocol": "HTTPS",
+ "ServerURLOrName": "https://ns0.fdn.fr/dns-query",
+ "ServerAddresses": [
+ "2001:910:800::12",
+ "2001:910:800::40",
+ "80.67.169.12",
+ "80.67.169.40"
+ ],
+ "PayloadIdentifier": "com.apple.dnsSettings.managed.f0ffd552-7183-4f2e-86e5-ee1ecad2a53a",
+ "PayloadUUID": "0ffcd083-5afa-4ba2-88e1-f01abd75bcc2",
+ "TopPayloadUUID": "93C5EB95-3A25-4097-B64B-02B5F1493D32"
+ },
+ "tls": {
+ "name": "FDN Encrypted DNS over TLS",
+ "fullName": "FDN DNS",
+ "topName": "FDN Encrypted DNS over TLS",
+ "PayloadDisplayName": "FDN DNS over TLS",
+ "DNSProtocol": "TLS",
+ "ServerURLOrName": "dns.fdn",
+ "ServerAddresses": [
+ "2001:910:800::12",
+ "2001:910:800::40",
+ "80.67.169.12",
+ "80.67.169.40"
+ ],
+ "PayloadIdentifier": "com.apple.dnsSettings.managed.f0ffd552-7183-4f2e-86e5-ee1ecad2a53a",
+ "PayloadUUID": "0ffcd083-5afa-4ba2-88e1-f01abd75bcc2",
+ "TopPayloadUUID": "9017B9B8-E425-4121-B99A-7081EA80EA98"
+ }
+}
\ No newline at end of file
diff --git a/providers/21-google.json b/providers/21-google.json
new file mode 100644
index 0000000..6d48a5d
--- /dev/null
+++ b/providers/21-google.json
@@ -0,0 +1,52 @@
+{
+ "id": "google-dns",
+ "profile": "google-dns-profile",
+ "name": "google",
+ "website": "https://developers.google.com/speed/public-dns/docs/secure-transports",
+ "region": "US",
+ "censorship": false,
+ "names": {
+ "en": "Google Public DNS",
+ "cmn-CN": "Google 公共 DNS",
+ "cmn-TW": "Google 公共 DNS"
+ },
+ "notes": {
+ "en": "Operated by Google LLC",
+ "cmn-CN": "由谷歌公司运营",
+ "cmn-TW": "由谷歌公司營運"
+ },
+ "https": {
+ "name": "Google Encrypted DNS over HTTPS",
+ "fullName": "Google DNS",
+ "topName": "Google Encrypted DNS over HTTPS",
+ "PayloadDisplayName": "Google DNS over HTTPS",
+ "DNSProtocol": "HTTPS",
+ "ServerURLOrName": "https://dns.google/dns-query",
+ "ServerAddresses": [
+ "2001:4860:4860::8888",
+ "2001:4860:4860::8844",
+ "8.8.8.8",
+ "8.8.4.4"
+ ],
+ "PayloadIdentifier": "com.apple.dnsSettings.managed.f0ffd552-7183-4f2e-86e5-ee1ecad2a53a",
+ "PayloadUUID": "556aa9a6-04bb-4144-9a1b-e1b20cda3b46",
+ "TopPayloadUUID": "B27E8E10-697D-4938-8745-7FFEEEED57A0"
+ },
+ "tls": {
+ "name": "Google Encrypted DNS over TLS",
+ "fullName": "Google DNS",
+ "topName": "Google Encrypted DNS over TLS",
+ "PayloadDisplayName": "Google DNS over TLS",
+ "DNSProtocol": "TLS",
+ "ServerURLOrName": "dns.google",
+ "ServerAddresses": [
+ "2001:4860:4860::8888",
+ "2001:4860:4860::8844",
+ "8.8.8.8",
+ "8.8.4.4"
+ ],
+ "PayloadIdentifier": "com.apple.dnsSettings.managed.f0ffd552-7183-4f2e-86e5-ee1ecad2a53a",
+ "PayloadUUID": "556aa9a6-04bb-4144-9a1b-e1b20cda3b46",
+ "TopPayloadUUID": "34D8FE96-E803-4E50-A1E7-94367ABBEAB8"
+ }
+}
\ No newline at end of file
diff --git a/providers/22-keweondns.json b/providers/22-keweondns.json
new file mode 100644
index 0000000..106cb67
--- /dev/null
+++ b/providers/22-keweondns.json
@@ -0,0 +1,18 @@
+{
+ "id": "keweondns",
+ "profile": "keweondns-profile",
+ "website": "https://forum.xda-developers.com/t/keweondns-info-facts-and-what-is-keweon-actually.4576651/",
+ "doh": true,
+ "region": "DE",
+ "censorship": false,
+ "names": {
+ "en": "keweonDNS",
+ "cmn-CN": "keweonDNS",
+ "cmn-TW": "keweonDNS"
+ },
+ "notes": {
+ "en": "Operated by Aviontex. Blocks ads & tracking",
+ "cmn-CN": "由 Aviontex 运营,拦截广告和跟踪器",
+ "cmn-TW": "由 Aviontex 營運,阻擋廣告和追蹤器"
+ }
+}
\ No newline at end of file
diff --git a/providers/23-mullvad.json b/providers/23-mullvad.json
new file mode 100644
index 0000000..6fa3892
--- /dev/null
+++ b/providers/23-mullvad.json
@@ -0,0 +1,34 @@
+{
+ "id": "mullvad-dns",
+ "profile": "mullvad-dns-profile",
+ "name": "mullvad",
+ "website": "https://mullvad.net/help/dns-over-https-and-dns-over-tls/",
+ "doh": true,
+ "region": "SE",
+ "censorship": true,
+ "names": {
+ "en": "Mullvad DNS",
+ "cmn-CN": "Mullvad DNS",
+ "cmn-TW": "Mullvad DNS"
+ },
+ "notes": {
+ "en": "Operated by Mullvad VPN AB",
+ "cmn-CN": "由 Mullvad VPN AB 运营",
+ "cmn-TW": "由 Mullvad VPN AB 營運"
+ },
+ "https": {
+ "name": "Mullvad DNS over HTTPS",
+ "fullName": "Mullvad DNS",
+ "topName": "Mullvad DNS over HTTPS",
+ "PayloadDisplayName": "Mullvad DNS over HTTPS",
+ "DNSProtocol": "HTTPS",
+ "ServerURLOrName": "https://doh.mullvad.net/dns-query",
+ "ServerAddresses": [
+ "2a07:e340::2",
+ "194.242.2.2"
+ ],
+ "PayloadIdentifier": "com.apple.dnsSettings.managed.C846E5BF-D246-45FB-A9E2-A9B30A153A8B",
+ "PayloadUUID": "C846E5BF-D246-45FB-A9E2-A9B30A153A8B",
+ "TopPayloadUUID": "13001589-3D36-4CC9-B16B-622C8E744FF4"
+ }
+}
\ No newline at end of file
diff --git a/providers/24-mullvad-adblock.json b/providers/24-mullvad-adblock.json
new file mode 100644
index 0000000..eb0b389
--- /dev/null
+++ b/providers/24-mullvad-adblock.json
@@ -0,0 +1,33 @@
+{
+ "id": "mullvad-dns",
+ "profile": "mullvad-dns-adblock-profile",
+ "name": "mullvad-adblock",
+ "doh": true,
+ "region": "SE",
+ "censorship": true,
+ "names": {
+ "en": "Mullvad DNS Adblock",
+ "cmn-CN": "Mullvad DNS 广告拦截",
+ "cmn-TW": "Mullvad DNS 廣告阻擋"
+ },
+ "notes": {
+ "en": "Operated by Mullvad VPN AB. Blocks ads & tracking",
+ "cmn-CN": "由 Mullvad VPN AB 运营,拦截广告和跟踪器",
+ "cmn-TW": "由 Mullvad VPN AB 營運,阻擋廣告和追蹤器"
+ },
+ "https": {
+ "name": "Mullvad DNS over HTTPS",
+ "fullName": "Mullvad DNS with ad blocking",
+ "topName": "Mullvad DNS over HTTPS",
+ "PayloadDisplayName": "Mullvad DNS over HTTPS",
+ "DNSProtocol": "HTTPS",
+ "ServerURLOrName": "https://adblock.doh.mullvad.net/dns-query",
+ "ServerAddresses": [
+ "2a07:e340::3",
+ "194.242.2.3"
+ ],
+ "PayloadIdentifier": "com.apple.dnsSettings.managed.4A06FE90-FBD6-4603-8CEC-FD1C94BF304C",
+ "PayloadUUID": "4A06FE90-FBD6-4603-8CEC-FD1C94BF304C",
+ "TopPayloadUUID": "C1B95E85-C40A-4A0F-8C80-8B44C5478171"
+ }
+}
\ No newline at end of file
diff --git a/providers/25-opendns.json b/providers/25-opendns.json
new file mode 100644
index 0000000..77ff814
--- /dev/null
+++ b/providers/25-opendns.json
@@ -0,0 +1,17 @@
+{
+ "id": "opendns",
+ "profile": "opendns-standard-profile",
+ "website": "https://support.opendns.com/hc/articles/360038086532",
+ "region": "US",
+ "censorship": false,
+ "names": {
+ "en": "OpenDNS Standard",
+ "cmn-CN": "OpenDNS 标准版",
+ "cmn-TW": "OpenDNS 標準版"
+ },
+ "notes": {
+ "en": "Operated by Cisco OpenDNS LLC",
+ "cmn-CN": "由思科 OpenDNS 运营",
+ "cmn-TW": "由思科 OpenDNS 營運"
+ }
+}
\ No newline at end of file
diff --git a/providers/26-opendns-family.json b/providers/26-opendns-family.json
new file mode 100644
index 0000000..8b2085f
--- /dev/null
+++ b/providers/26-opendns-family.json
@@ -0,0 +1,17 @@
+{
+ "id": "opendns",
+ "profile": "opendns-familyshield-profile",
+ "name": "opendns-family",
+ "region": "US",
+ "censorship": true,
+ "names": {
+ "en": "OpenDNS FamilyShield",
+ "cmn-CN": "OpenDNS 家庭盾",
+ "cmn-TW": "OpenDNS 家庭盾"
+ },
+ "notes": {
+ "en": "Operated by Cisco OpenDNS LLC. Blocks malware & adult content",
+ "cmn-CN": "由思科 OpenDNS 运营,拦截恶意软件和成人内容",
+ "cmn-TW": "由思科 OpenDNS 營運,阻擋惡意軟體和成人內容"
+ }
+}
\ No newline at end of file
diff --git a/providers/27-quad9.json b/providers/27-quad9.json
new file mode 100644
index 0000000..b060128
--- /dev/null
+++ b/providers/27-quad9.json
@@ -0,0 +1,51 @@
+{
+ "id": "quad9",
+ "profile": "quad9-profile",
+ "website": "https://www.quad9.net/news/blog/doh-with-quad9-dns-servers/",
+ "region": "CH",
+ "censorship": true,
+ "names": {
+ "en": "Quad9",
+ "cmn-CN": "Quad9",
+ "cmn-TW": "Quad9"
+ },
+ "notes": {
+ "en": "Operated by Quad9 Foundation. Blocks malware",
+ "cmn-CN": "由 Quad9 基金会运营,拦截恶意软件",
+ "cmn-TW": "由 Quad9 基金會營運,阻擋惡意軟體"
+ },
+ "https": {
+ "name": "Quad9 Encrypted DNS over HTTPS",
+ "fullName": "Quad9 DNS",
+ "topName": "Quad9 Encrypted DNS over HTTPS",
+ "PayloadDisplayName": "Quad9 DNS over HTTPS",
+ "DNSProtocol": "HTTPS",
+ "ServerURLOrName": "https://dns.quad9.net/dns-query",
+ "ServerAddresses": [
+ "2620:fe::fe",
+ "2620:fe::9",
+ "9.9.9.9",
+ "149.112.112.112"
+ ],
+ "PayloadIdentifier": "com.apple.dnsSettings.managed.1a93b54b-8541-4536-8302-c08159ca9184",
+ "PayloadUUID": "ffee2c6b-9cff-4c2a-892c-e03788bcbd64",
+ "TopPayloadUUID": "088A5DC0-0E1F-4699-A56D-A709078D7603"
+ },
+ "tls": {
+ "name": "Quad9 Encrypted DNS over HTTPS",
+ "fullName": "Quad9 DNS",
+ "topName": "Quad9 Encrypted DNS over TLS",
+ "PayloadDisplayName": "Quad9 DNS over TLS",
+ "DNSProtocol": "TLS",
+ "ServerURLOrName": "dns.quad9.net",
+ "ServerAddresses": [
+ "2620:fe::fe",
+ "2620:fe::9",
+ "9.9.9.9",
+ "149.112.112.112"
+ ],
+ "PayloadIdentifier": "com.apple.dnsSettings.managed.1a93b54b-8541-4536-8302-c08159ca9184",
+ "PayloadUUID": "ffee2c6b-9cff-4c2a-892c-e03788bcbd64",
+ "TopPayloadUUID": "36F1938F-2141-4EF1-BA24-05D12CEF440B"
+ }
+}
\ No newline at end of file
diff --git a/providers/28-quad9-ECS.json b/providers/28-quad9-ECS.json
new file mode 100644
index 0000000..77e716c
--- /dev/null
+++ b/providers/28-quad9-ECS.json
@@ -0,0 +1,51 @@
+{
+ "id": "quad9",
+ "profile": "quad9-ecs-profile",
+ "name": "quad9-ECS",
+ "region": "CH",
+ "censorship": true,
+ "names": {
+ "en": "Quad9 w/ ECS",
+ "cmn-CN": "Quad9 带 ECS",
+ "cmn-TW": "Quad9 帶 ECS"
+ },
+ "notes": {
+ "en": "Operated by Quad9 Foundation. Supports ECS. Blocks malware",
+ "cmn-CN": "由 Quad9 基金会运营,支持 ECS,拦截恶意软件",
+ "cmn-TW": "由 Quad9 基金會營運,支援 ECS,阻擋惡意軟體"
+ },
+ "https": {
+ "name": "Quad9 Encrypted DNS over HTTPS with ECS",
+ "fullName": "Quad9 with ECS DNS",
+ "topName": "Quad9 with ECS Encrypted DNS over HTTPS",
+ "PayloadDisplayName": "Quad9 DNS over HTTPS with ECS",
+ "DNSProtocol": "HTTPS",
+ "ServerURLOrName": "https://dns11.quad9.net/dns-query",
+ "ServerAddresses": [
+ "2620:fe::fe:11",
+ "2620:fe::11",
+ "9.9.9.11",
+ "149.112.112.11"
+ ],
+ "PayloadIdentifier": "com.apple.dnsSettings.managed.1a93b54b-8541-4536-8302-c08159ca9184",
+ "PayloadUUID": "ffee2c6b-9cff-4c2a-892c-e03788bcbd64",
+ "TopPayloadUUID": "088A5DC0-0E1F-4699-A56D-A709078D7603"
+ },
+ "tls": {
+ "name": "Quad9 with ECS Encrypted DNS over HTTPS",
+ "fullName": "Quad9 with ECS DNS",
+ "topName": "Quad9 with ECS Encrypted DNS over TLS",
+ "PayloadDisplayName": "Quad9 DNS over TLS with ECS",
+ "DNSProtocol": "TLS",
+ "ServerURLOrName": "dns11.quad9.net",
+ "ServerAddresses": [
+ "2620:fe::fe:11",
+ "2620:fe::11",
+ "9.9.9.11",
+ "149.112.112.11"
+ ],
+ "PayloadIdentifier": "com.apple.dnsSettings.managed.1a93b54b-8541-4536-8302-c08159ca9184",
+ "PayloadUUID": "ffee2c6b-9cff-4c2a-892c-e03788bcbd64",
+ "TopPayloadUUID": "36F1938F-2141-4EF1-BA24-05D12CEF440B"
+ }
+}
\ No newline at end of file
diff --git a/providers/29-quad9-nofilter.json b/providers/29-quad9-nofilter.json
new file mode 100644
index 0000000..d0644a8
--- /dev/null
+++ b/providers/29-quad9-nofilter.json
@@ -0,0 +1,51 @@
+{
+ "id": "quad9",
+ "profile": "quad9-profile-unfiltered",
+ "name": "quad9-nofilter",
+ "region": "CH",
+ "censorship": false,
+ "names": {
+ "en": "Quad9 Unfiltered",
+ "cmn-CN": "Quad9 无过滤",
+ "cmn-TW": "Quad9 無過濾"
+ },
+ "notes": {
+ "en": "Operated by Quad9 Foundation.",
+ "cmn-CN": "由 Quad9 基金会运营",
+ "cmn-TW": "由 Quad9 基金會營運"
+ },
+ "https": {
+ "name": "Quad9 No Filter Encrypted DNS over HTTPS",
+ "fullName": "Quad9 No Filter DNS",
+ "topName": "Quad9 No Filter Encrypted DNS over HTTPS",
+ "PayloadDisplayName": "Quad9 No Filter DNS over HTTPS",
+ "DNSProtocol": "HTTPS",
+ "ServerURLOrName": "https://dns10.quad9.net/dns-query",
+ "ServerAddresses": [
+ "2620:fe::10",
+ "2620:fe::fe:10",
+ "9.9.9.10",
+ "149.112.112.10"
+ ],
+ "PayloadIdentifier": "com.apple.dnsSettings.managed.1a93b54b-8541-4536-8302-c08159ca9184",
+ "PayloadUUID": "5b67762c-3a11-47fd-ad22-1b7810cacfc1",
+ "TopPayloadUUID": "79AE8914-AC0B-4EF9-9AA4-392584F35278"
+ },
+ "tls": {
+ "name": "Quad9 No Filter Encrypted DNS over HTTPS",
+ "fullName": "Quad9 No Filter DNS",
+ "topName": "Quad9 No Filter Encrypted DNS over TLS",
+ "PayloadDisplayName": "Quad9 No Filter DNS over TLS",
+ "DNSProtocol": "TLS",
+ "ServerURLOrName": "dns10.quad9.net",
+ "ServerAddresses": [
+ "2620:fe::10",
+ "2620:fe::fe:10",
+ "9.9.9.10",
+ "149.112.112.10"
+ ],
+ "PayloadIdentifier": "com.apple.dnsSettings.managed.1a93b54b-8541-4536-8302-c08159ca9184",
+ "PayloadUUID": "4d269f08-712f-4fd3-8c5e-273443747d0e\"",
+ "TopPayloadUUID": "64289639-1FFE-484F-8133-E3350992F2CA"
+ }
+}
\ No newline at end of file
diff --git a/providers/30-tiarapp.json b/providers/30-tiarapp.json
new file mode 100644
index 0000000..4931702
--- /dev/null
+++ b/providers/30-tiarapp.json
@@ -0,0 +1,21 @@
+{
+ "id": "tiarap",
+ "profile": "tiarap-profile",
+ "website": "https://doh.tiar.app",
+ "name": "tiarapp",
+ "region": [
+ "SG",
+ "US"
+ ],
+ "censorship": true,
+ "names": {
+ "en": "Tiarap",
+ "cmn-CN": "Tiarap",
+ "cmn-TW": "Tiarap"
+ },
+ "notes": {
+ "en": "Operated by Tiarap Inc. Blocks ads, tracking, phising & malware",
+ "cmn-CN": "由 Tiarap 公司运营,拦截广告、跟踪器、钓鱼和恶意软件",
+ "cmn-TW": "由 Tiarap 公司營運,阻擋廣告、追蹤器、釣魚和惡意軟體"
+ }
+}
\ No newline at end of file