预计阅读时间:1分钟|最后更新时间: Invalid Date

# 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": {}
    }]
}