![为我的域名托管我自己的 DNS 服务器,强制根据访问者的 IP 地址进行 IP 解析](https://linux22.com/image/735788/%E4%B8%BA%E6%88%91%E7%9A%84%E5%9F%9F%E5%90%8D%E6%89%98%E7%AE%A1%E6%88%91%E8%87%AA%E5%B7%B1%E7%9A%84%20DNS%20%E6%9C%8D%E5%8A%A1%E5%99%A8%EF%BC%8C%E5%BC%BA%E5%88%B6%E6%A0%B9%E6%8D%AE%E8%AE%BF%E9%97%AE%E8%80%85%E7%9A%84%20IP%20%E5%9C%B0%E5%9D%80%E8%BF%9B%E8%A1%8C%20IP%20%E8%A7%A3%E6%9E%90.png)
这是专门针对我的域名的,用户/访问者根本不会使用我的 DNS 服务器。这可能吗?
我需要设置一个可以托管我的域名的 DNS 服务器,当收到请求时,它会根据我在服务器上设置的条件为用户选择一个 IP 地址。
例如:来自加拿大的用户请求在 mydomain.com 上查找 NAME 记录,它将返回 10.0.0.20,而来自荷兰的用户执行相同查找将返回 10.0.0.21,理想情况下,我希望能够获取请求的 IP 地址(用户)并对其运行我自己的脚本/检查,甚至可以计算出请求者的 ASN 并提供特定的 IP 地址。通过托管我自己的 DNS 服务器可以实现这一点吗?
除了使用免费或第三方 DNS 服务之外,我没有太多经验。
这需要在 DNS 级别完成,而不是通过使用反向代理重定向流量来完成。
答案1
根据客户端 IP 地址返回不同结果的基本功能用行话来说就是水平分割域名系统并提供许多 DNS 服务器。
在某些 DNS 服务器中可以找到使用 Geo IP 库根据与客户端 IP 地址关联的位置返回不同记录的具体用例,例如在 PowerDNS 中“地理 IP”后端提供开箱即用的功能,在其他商业和开源 DNS 服务器中,类似的功能有时被称为“GEO DNS”,或者可以使用更具描述性的术语,如“全局 [DNS] 负载平衡”或“[全局] 流量管理器”。
如果您想创建自己的脚本,我知道 DNSmasq 和 PowerDNS 都为 LUA 脚本提供了钩子,以便您创建自己的逻辑。
答案2
是的,这至少是可能的,具体取决于您的 DNS 服务器软件。Bind 中的功能称为“视图”,允许您根据询问者管理要呈现的不同结果配置。这也称为“拆分”DNS。
具体实现取决于你的服务器。官方参考请见最新的 Bind 文档。[1]
与 DNS 查找同步执行动态脚本不是 Bind 或大多数 DNS 服务器的功能。如果您可以根据子网选择目标,那么这将适合您。
1:https://ftp.isc.org/isc/bind9/cur/9.13/doc/arm/Bv9ARM.ch05.html#view_statement