接上文,使用 PowerDNS 搭建根服务器后,我又想尝试搭建权威域名服务器。

首先说一下我的观点:自建权威域名服务器犀利而无用。他要求高昂的成本但几乎没有回报。我的权威域名服务器是在两台我弃用的服务器上搭建的,因此可以无视成本。但我不建议各位这么做。

利用 PowerDNS 的 Lua 支持,我们可以轻松的搭建出一套支持分线路解析的 GeoDNS 服务器。
需要:

  • 一个 Maxmind 账户
  • 至少两台 VPS 服务器(目前域名服务商要求最少需要两个权威域名服务器)

配置地理信息库

  1. Maxmind 官网 获取账户的密钥,需要密钥来更新数据库。
  2. 安装geoipupdate 工具。

    apt install geoipupdate
  3. 创建文件夹/etc/geoip,并修改/etc/GeoIP.conf

    AccountID [账户编号]
    LicenseKey [授权密钥]
    EditionIDs GeoLite2-ASN GeoLite2-City GeoLite2-Country
    DatabaseDirectory /etc/geoip
  4. 用 Cron 设置上自动更新:

    crontab -e
  5. 0 0 /usr/bin/geoipupdate

  6. 安装 GeoIP 后端

    apt install -y pdns-backend-geoip
  7. 修改配置文件/etc/powerdns/pdns.conf

    enable-lua-records=yes
    launch=gmysql,geoip
    geoip-database-files=/etc/geoip/GeoLite2-City.mmdb

配置 GeoDNS

在 PowerDNS Lua 中,用户的 IP 地址作为一个变量bestwho存在。不过如果用户的 DNS 服务器没有告知上游服务器用户的地址,那么bestwho就会指向 DNS 服务器的地址。
PowerDNS 提供了一个 lua 函数pickclosest,该函数从一个 IP 列表中选择离bestwho地理位置最近的服务器返回。
还有一个函数country,可以分辨国家。
两者的使用:

A "pickclosest({'1.1.1.1','8.8.8.8','114.114.114.114','223.5.5.5'})"
A ";if(country('CN')) then return '223.5.5.5' else return '1.1.1.1' end"
最后修改:2023 年 11 月 05 日
如果觉得我的文章对你有用,请随意赞赏