DNS 解析超时配置

DNS 解析超时配置

Intro

最近发现我们内网的服务器连接外网有时候会解析域名失败,直接在服务器上跑 nslookup 有时候会出现 DNS 解析超时,于是在网上找如何配置 DNS 超时时间,然后看到阿里云上的一篇文章,设置后有点效果,记录一下,

Solution

设置 /etc/resolv.confoptions 配置

options timeout:5 attempts:3 rotate single-request-reopen

通过上面的 options 指定 dns 解析的超时及重试配置, options 详细配置参数可以参考下面完整的说明

**options**
              Options allows certain internal resolver variables to be
              modified.  The syntax is

                     **options** *option ...*

              where *option* is one of the following:

              **debug** Sets **RES_DEBUG** in *_res.options* (effective only if glibc
                     was built with debug support; see [resolver(3)](http://man7.org/linux/man-pages/man3/resolver.3.html)).

              **ndots:***n*
                     Sets a threshold for the number of dots which must
                     appear in a name given to [res_query(3)](http://man7.org/linux/man-pages/man3/res_query.3.html) (see
                     [resolver(3)](http://man7.org/linux/man-pages/man3/resolver.3.html)) 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*
                     Sets the amount of time the resolver will wait for a
                     response from a remote name server before retrying the
                     query via a different name server. This may **not** be the
                     total time taken by any resolver API call and there is
                     no guarantee that a single resolver API call maps to a
                     single timeout.  Measured in seconds, the default is
                     **RES_TIMEOUT** (currently 5, see **).  The value
                     for this option is silently capped to 30.

              **attempts:***n*
                     Sets the number of times the resolver will send a query
                     to its name servers before giving up and returning an
                     error to the calling application.  The default is
                     **RES_DFLRETRY** (currently 2, see **).  The value
                     for this option is silently capped to 5.

              **rotate** Sets **RES_ROTATE** in *_res.options*, which causes round-
                     robin selection of name servers from among those
                     listed.  This has the effect of spreading the query
                     load among all listed servers, rather than having all
                     clients try the first listed server first every time.

              **no-check-names**
                     Sets **RES_NOCHECKNAME** in *_res.options*, which disables
                     the modern BIND checking of incoming hostnames and mail
                     names for invalid characters such as underscore (_),
                     non-ASCII, or control characters.

              **inet6** Sets **RES_USE_INET6** in *_res.options*.  This has the
                     effect of trying an AAAA query before an A query inside
                     the [gethostbyname(3)](http://man7.org/linux/man-pages/man3/gethostbyname.3.html) function, and of mapping IPv4
                     responses in IPv6 "tunneled form" if no AAAA records
                     are found but an A record set exists.  Since glibc
                     2.25, this option is deprecated; applications should
                     use [getaddrinfo(3)](http://man7.org/linux/man-pages/man3/getaddrinfo.3.html), rather than [gethostbyname(3)](http://man7.org/linux/man-pages/man3/gethostbyname.3.html).

              **ip6-bytestring** (since glibc 2.3.4)
                     Sets **RES_USEBSTRING** in *_res.options*.  This causes
                     reverse IPv6 lookups to be made using the bit-label
                     format described in RFC 2673; if this option is not set
                     (which is the default), then nibble format is used.
                     This option was removed in glibc 2.25, since it relied
                     on a backward-incompatible DNS extension that was never
                     deployed on the Internet.

              **ip6-dotint**/**no-ip6-dotint** (glibc 2.3.4 to 2.24)
                     Clear/set **RES_NOIP6DOTINT** in *_res.options*.  When this
                     option is clear (**ip6-dotint**), reverse IPv6 lookups are
                     made in the (deprecated) *ip6.int* zone; when this option
                     is set (**no-ip6-dotint**), reverse IPv6 lookups are made
                     in the *ip6.arpa* zone by default.  These options are
                     available in glibc versions up to 2.24, where **no-**
                     **ip6-dotint** is the default.  Since **ip6-dotint** support
                     long ago ceased to be available on the Internet, these
                     options were removed in glibc 2.25.

              **edns0** (since glibc 2.6)
                     Sets **RES_USE_EDNSO** in *_res.options*.  This enables
                     support for the DNS extensions described in RFC 2671.

              **single-request** (since glibc 2.10)
                     Sets **RES_SNGLKUP** in *_res.options*.  By default, glibc
                     performs IPv4 and IPv6 lookups in parallel since
                     version 2.9\.  Some appliance DNS servers cannot handle
                     these queries properly and make the requests time out.
                     This option disables the behavior and makes glibc
                     perform the IPv6 and IPv4 requests sequentially (at the
                     cost of some slowdown of the resolving process).

              **single-request-reopen** (since glibc 2.9)
                     Sets **RES_SNGLKUPREOP** in *_res.options*.  The resolver
                     uses the same socket for the A and AAAA requests.  Some
                     hardware mistakenly sends back only one reply.  When
                     that happens the client system will sit and wait for
                     the second reply.  Turning this option on changes this
                     behavior so that if two requests from the same port are
                     not handled correctly it will close the socket and open
                     a new one before sending the second request.

              **no-tld-query** (since glibc 2.14)
                     Sets **RES_NOTLDQUERY** in *_res.options*.  This option
                     causes **res_nsearch**() to not attempt to resolve an
                     unqualified name as if it were a top level domain
                     (TLD).  This option can cause problems if the site has
                     ``localhost'' as a TLD rather than having localhost on
                     one or more elements of the search list.  This option
                     has no effect if neither RES_DEFNAMES or RES_DNSRCH is
                     set.

              **use-vc** (since glibc 2.14)
                     Sets **RES_USEVC** in *_res.options*.  This option forces the
                     use of TCP for DNS resolutions.

              **no-reload** (since glibc 2.26)
                     Sets **RES_NORELOAD** in *_res.options*.  This option
                     disables automatic reloading of a changed configuration
                     file.

       The *domain* and *search* keywords are mutually exclusive.  If more than
       one instance of these keywords is present, the last instance wins.

       The *search* keyword of a system's *resolv.conf* file can be overridden
       on a per-process basis by setting the environment variable
       **LOCALDOMAIN** to a space-separated list of search domains.

       The *options* keyword of a system's *resolv.conf* file can be amended on
       a per-process basis by setting the environment variable **RES_OPTIONS**
       to a space-separated list of resolver options as explained above
       under **options**.

       The keyword and value must appear on a single line, and the keyword
       (e.g., **nameserver**) must start the line.  The value follows the
       keyword, separated by white space.

       Lines that contain a semicolon (;) or hash character (#) in the first
       column are treated as comments.

Reference

  • http://man7.org/linux/man-pages/man5/resolv.conf.5.html
  • https://help.aliyun.com/document_detail/111842.html?spm=a2c4g.11186623.2.7.6c1c4c07q84KYh#title-ir4-ukr-wp0

你可能感兴趣的:(DNS 解析超时配置)