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状态码 描述
MethodNotAllowed 405 不允许的 HTTP 请求方法。
MissingArgument 400 缺少查询参数,如 host 。
UnsupportedType 400 URL 参数 type 指定了不支持的类型。
InvalidHost 400 URL 参数 host 指定的域名不合法。
InvalidIP 400 URL 参数 IP 指定的客户 IP 不合法。
InvalidQuery 400 URL 参数 query 指定的 IP 版本不合法。
InternalError 500 服务器内部错误。
QueryError 500 域名查询错误。

查询示例

单结果查询示例:仅指定单个 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": {}
    }]
}