我们在linux下设置dns时,一般都是在/etc/resolv.conf文件进行设置,一般也就设置几条nameserver而已,其实该文件还是可以根据选项进行优化的。
resolv.conf文件中包含的信息,在他们第一次被调用的过程中被解析器例程所读取。该文件是人们可读的,包含的关键字列表值提供了不同类型的解析器信息。如果该文件不存在,name server将会查询本机的域名解析配置。
nameserver Name server IP address
name server应该是一个可以被解析的互联网地址,也就是你设置的dns服务器地址,最大应该有MAXNS (currently 3, see)个name server可以被列出来,每个name server都有nameserver关键字。如果列出多个name servers, 解析器会按照顺序解析他们,如果没有name server,则默认使用本地的配置。如果查询失败,算法会查询接下来的name server, 直到查询完所有的name server。
domain Local domain name.
设置本地域名,查询在这个domain中的names可以相对于本地domain使用短名称, 如果没有设置domain,则会使用主机名来决定domain
search Search list for host-name lookup.
定义域名的搜索列表,搜索列表通常是本地域名,默认仅包含本地域名,不过可以通过在search关键子后面跟随你希望域名来改变默认情况。如果解析器查询不到他们的点,则会查询每一个搜索路径中的设置,直到匹配为止。 如果查询的服务器不是在本地的,可能会有些慢并且会产生一些网络流量, 如果在domain中的服务器不可用,查询则会超时。search现在限制可以有6个domains,总共256个字符。
options
以下选项允许你对某些解析变量进行修改,语法类似:options xxx ...,其中xxx可以是如下选项:
debug sets RES_DEBUG in _res.options.
ndots:n
sets a threshold for the number of dots which must appear in a name given to res_query(3) before an initial absolute query will be made. The default for n is 1, meaning that if there are any dots in a name, the name will be tried first as an absolute name before any search list elements are appended to it. The value for this option is silently capped to 15. 这一段看的脑残了....
timeout:n
解析器在查询远程name server时的超时时间,默认是5秒。
attempts:n
设置解析器在查询name server失败几次后放弃该name server,默认上限是5。
rotate
这会导致在查询时循环选择nameserver中列出的服务器,从而负载均衡所有的nameserver,而不是让所有的客户端尝试第一个列出的服务器
no-check-names
禁止现代BIND检查输入的主机名和电子邮件中的无效字符
edns0 (since glibc 2.6)
使支持RFC 2671Z中的dns扩展
single-request (since glibc 2.10)
自从版本2.9之后,glibc在执行查找IPV4和IPV6时是并行执行的,但是一些DNS服务器不能很好的处理这种情况,并显示请求超时,次选项禁止glibc的并行查找,从而执行顺序查找
domain和search关键字是互相排斥的,如果同时设置了这两个关键字,则最后设置的生效。resolv.conf文件中的search关键字的值可以被LOCALDOMAIN环境变量锁改变, options关键字则可以被环境变量RES_OPTIONS所改变。