HTTPDNS
HTTPDNS 通过 HTTP 接口对外提供域名解析服务,具有域名防劫持、精准调度、实时解析生效等特性。
启用 HTTPDNS
在
全局配置
/DNS
页面启用 DNS:在
全局配置
/配置分区端口
页面添加分区端口,类型选择HTTPDNS
:在
应用
页面添加HTTP/HTTPS
应用:在应用内添加
上游
,上游选择 node 节点的环回地址,端口输入上面步骤添加的HTTPDNS
分区端口:在应用内添加
页面规则
:- 设置 HTTP 头部,使 HTTPDNS 能正确获取客户端 IP 。选择
动作
,添加动作设置代理头
,报头填写X-Real-IP
,值设置为内置变量
-客户端地址
: - 选择
代理
,上游选择上一步添加的上游:
- 设置 HTTP 头部,使 HTTPDNS 能正确获取客户端 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": {}
}]
}