我正在尝试设置类似于 CDN(内容分发网络)的设置。我想要做的是使用 DNS 记录,该记录根据用户的地理位置返回 A 记录。我能够使用 RAGE4 DNS 进行设置。我无法真正将域(我们称之为 domaina.com)移动到 RAGE4,我只能更改子域。所以,我所做的是注册一个新域名(我们称之为 domainb.com),并在 RAGE4 DNS 上使用基于地理位置的 A 记录进行设置,并将子域(在 domaina.com 上)更改为指向 RAGE4 DNS 的 CNAME。这会导致访问子域(在 domainb.com 上)返回的 A 记录仅返回相同的 IP 地址,因为它使用的是 domaina.com 的名称服务器的位置(而不是执行查询的原始用户)。
也许这是一个更好的解释:
- 用户向 ns1.domaina.com 请求 xyz.domaina.com 的 DNS 记录
- xyz.domaina.com 是指向 xyz.domainb.com 的 CNAME 记录
- xyz.domainb.com 根据用户的地理位置返回 A 记录(在本例中为 ns1.domaina.com 的地理位置)
有没有办法让它使用原始用户位置而不是名称服务器位置?
答案1
你不能。
有一个名为“EDNS0”的扩展“DNS 请求中的客户端子网”,并且它已得到一些解析器(如 Google Public DNS8.8.8.8
和 OpenDNS )的支持208.67.222.222
(但 Level3 4.2.2.1
、 Dyn 216.146.35.35
、 Hurricane Electric74.82.42.42
或大多数其他提供商不支持)。上次我检查时,任何公开可用的开源软件仍然几乎没有支持此类功能,因此只有 Google 和 OpenDNS 解析器支持它。
一些相关问题:
一些相关的故障排除答案:
简而言之,尝试摆脱dig -t txt o-o.myaddr.l.google.com +short
您的潜在客户。如果您没有看到edns0-client-subnet
结果,那么一切就都结束了。
% dig -t txt o-o.myaddr.l.google.com +short
"188.40.25.3"
% dig @google-public-dns-a.google.com. -t txt o-o.myaddr.l.google.com +short
"74.125.189.17"
"edns0-client-subnet 88.198.54.0/24"
% dig @resolver1.opendns.com. -t txt o-o.myaddr.l.google.com +short
"208.69.33.21"
"edns0-client-subnet 88.198.54.0/24"
% dig @a.resolvers.level3.net. -t txt o-o.myaddr.l.google.com +short
"8.0.18.147"
% dig @resolver1.dyndnsinternetguide.com. -t txt o-o.myaddr.l.google.com +short
"91.198.22.152"
% dig @ordns.he.net -t txt o-o.myaddr.l.google.com +short
"216.66.80.30"
%