HTTPDNS

HTTPDNS 通过 HTTP 接口对外提供域名解析服务,具有域名防劫持、精准调度、实时解析生效等特性。

启用 HTTPDNS

  • 全局配置/DNS页面启用 DNS:

  • 全局配置/配置分区端口页面添加分区端口,类型选择 HTTPDNS

  • 应用 页面添加 HTTP/HTTPS 应用:

  • 在应用内添加 上游,上游选择 node 节点的环回地址,端口输入上面步骤添加的 HTTPDNS 分区端口:

  • 在应用内添加 页面规则:

    • 设置 HTTP 头部,使 HTTPDNS 能正确获取客户端 IP 。选择 动作,添加动作 设置代理头,报头填写 X-Real-IP,值设置为 内置变量-客户端地址

    • 选择 代理,上游选择上一步添加的上游:

至此,HTTPDNS 配置已经完成,在 DNS 中添加 DNS 应用及记录,即可使用 HTTPDNS 进行查询。

HTTPDNS 查询

请求 URL:http://{your app}/?host={your domain}&query=4,6&ip={client ip}

请求方法:GET

请求参数:

名称必选描述
host要解析的域名。
ip用户的来源 IP,如果没指定这个参数,默认使用请求连接的源 IP 。
query指定解析结果 IP 的类型,可以选择 6(IPv6) 或 4(IPv4)。默认为 4 。
type指定查询结果的格式,当前仅支持“json”。

请求返回:

名称描述
host查询的域名。
ips该域名的 IPv4 解析结果,是一个列表,可能包括 0 个、 1 个或多个 IP 地址。
ipsv6该域名的 IPv6 解析结果,是一个列表,可能包括 0 个、 1 个或多个 IP 地址。
ttl该域名解析结果的 TTL 缓存时间。
origin_ttl域名原始 TTL,即权威 NS 上配置的域名 TTL 值。

请求错误码:

错误码HTTP状态码描述
MethodNotAllowed405不允许的 HTTP 请求方法。
MissingArgument400缺少查询参数,如 host 。
UnsupportedType400URL 参数 type 指定了不支持的类型。
InvalidHost400URL 参数 host 指定的域名不合法。
InvalidIP400URL 参数 IP 指定的客户 IP 不合法。
InvalidQuery400URL 参数 query 指定的 IP 版本不合法。
InternalError500服务器内部错误。
QueryError500域名查询错误。

查询示例

单结果查询示例:仅指定单个 host 及单个 IP,则为单结果查询。

  • 请求示例 1: http://www.test.com:80/?host=www.a.com
  • 请求示例 2: http://www.test.com:80/?host=www.a.com&ip=1.2.3.4
  • 请求示例 3: http://www.test.com:80/?host=www.a.com&ip=1.2.3.4&query=6
  • 请求示例 4: http://www.test.com:80/?host=www.a.com&ip=1.2.3.4&query=4,6

结果示例:

{
    "client_ip": "1.2.3.4",
    "ips": ["127.0.0.1"],
    "host": "www.a.com",
    "ttl": 300,
    "origin_ttl": 300
}

多结果查询示例:指定了多个 host 或多个 IP,则为多结果查询。

  • 请求示例 1: http://www.test.com:80/?host=www.a.com,www.b.com
  • 请求示例 2: http://www.test.com:80/?host=www.a.com&ip=1.1.1.1,2.2.2.2&query=4,6
  • 请求示例 3: http://www.test.com:80/?host=www.a.com,www.b.com&ip=1.1.1.1,2.2.2.2&query=4,6
  • 请求示例 4: http://www.test.com:80/?host=www.a.com,www.b.com&ip=1.1.1.1&query=4,6

结果示例:

{
    "dns": [{
        "client_ip": "1.1.1.1",
        "ipsv6": {},
        "host": "www.a.com",
        "ttl": 300,
        "ips": {}
    }, {
        "client_ip": "2.2.2.2",
        "ipsv6": {},
        "host": "www.a.com",
        "ttl": 300,
        "ips": {}
    }]
}