您的位置:首页 > 其它

深入浅出DNS系列(六)- DNS解析器

2017-03-13 21:23 183 查看

4 解析器

4.1 定义

解析器是C库中的一系例程,用于访问DNS系统

4.2 解析器主要函数

具体信息请参考手册,man resolver

int res_query(const char *dname, int class, int type,

              unsigned char *answer, int anslen);

int res_search(const char *dname, int class, int type,

              unsigned char *answer, int anslen);

int res_querydomain(const char *name, const char *domain,

              int class, int type, unsigned char *answer,

              int anslen);

int res_mkquery(int op, const char *dname, int class,

              int type, char *data, int datalen, struct rrec *newrr,

              char *buf, int buflen);

int res_send(const char *msg, int msglen, char *answer,

              int anslen);

int dn_comp(unsigned char *exp_dn, unsigned char *comp_dn,

              int length, unsigned char **dnptrs, unsigned char **lastdnptr);

int dn_expand(unsigned char *msg, unsigned char *eomorig,

              unsigned char *comp_dn, char *exp_dn,

              int length);

4.3 解析器配置文件

一般为/etc/resolv.conf,关于resolv.conf的说明请参考手册,man resolv.conf

总结:解析器按照search搜索列表进行循环的搜索解析,直到解析成功为止;形成search搜索列表的方式有很多,如果显式设置search,则用search;如果没有显式设置search,如果设置了domain,则用domain作为search搜索列表;如果domain和search都没有设置,则使用gethostname返回的主机名的域名部分作为search搜索列表

4.3.1 nameserver

解析器使用的名称服务器的ip地址,如下配置:

nameserver 192.168.198.2

可以配置多个,解析器使用该选项的规则是按顺序查询,查询超时,则查询下一个,直到查询最后一个nameserver

如果没有nameserver配置项,解析器使用本地主机上的名称服务器进行解析

4.3.2 domain

本地域名设置

当查询名称时,没有使用FQDN全名称时(后缀点),查询名称时先在名称后面加上domain后查询,如下示例:

设置domain james.cn

ping apache时,实际上会查询apache.james.cn

ping apache.时,只会查询apache.(因为后缀点)

ping apache.xyz时,先查询apache.xyz,然后查询apache.xyz.james.cn

当没有设置domain时,会以gethostname函数返回的名称的域名后缀为domain,如下示例:

未设置domain

hostname为:bindforward.james.cn

ping apache时,会查询apache.james.cn

4.3.3 search

主机名搜索列表

当没有定义search时,缺省的search为本地域名domain

当定义了search时,以search为顺序进行搜索,domain一般将不起作用,示例如下:

domain james.cn

search james.com.cn james.cn

ping xyz时,会查询xyz.james.com.cn,然后查询xyz.james.cn(domain项没起做作用)

ping xyz.yy时,会查询xyz.yy,再查询xyz.yy.james.com.cn,然后查询xyz.yy. james.cn

(domain项目仍然没有起作用)

search最多可以定义6个域名搜索项

4.3.4 options

选项很多,常用的有timeout、attempts

timeout设置超时

attempts设置重试次数

如下设置:

options timeout:2 attempts:2

4.4 nsswitch.conf配置文件

nsswitch.conf配置文件中的hosts配置项目,如下

hosts: files dns

定义了主机名解析的顺序,先使用hosts文件,再使用dns解析

同样host.conf(/etc/host.conf)也有此功能,如下:

order hosts,bind

定义了解析器解析方法的顺序,先使用hosts文件,再使用bind
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  bind cdn dns dnsmasq powerdns