4 解析器
4.1 定义
解析器是C库中的一系例程,用于访问DNS系统4.2 解析器主要函数
具体信息请参考手册,man resolverint 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、attemptstimeout设置超时
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