/etc/gai.conf Fails To Prefer IPv4 Over IPv6 For NFS

Home » CentOS » /etc/gai.conf Fails To Prefer IPv4 Over IPv6 For NFS
CentOS 3 Comments

Using CentOS 6.9 with IPv4 configured, and _not_ disabling IPv6 yet, we want this NFS client system to prefer the IPv4 address of a dual-stack remote NFS server, which has both A and AAAA records in DNS.

Otherwise we get a minutes long pause while automounter tries to mount the IPv6 address — I can see automounter’s ‘/bin/mount’ running, using the AAAA record of the server, until that times-out and the IPv4 address of the server mounts successfully.

Disabling IPv6 altogether works around the problem as expected, but is a bigger hammer than we wanted to use. :-)

I found posts from others in a similar situation, and proposed solutions included modifying /etc/gai.conf to use:

precedence ::ffff:0:0/96 100

I cp’d /usr/share/doc/glibc-common-2.12/gai.conf to /etc/ and tried that, with several other permutations (e.g. uncommenting other blocks of “label”
and “precedence” settings) but none achieved the desired effect.

Am I misunderstanding how this is supposed to work?

Cheers, sr.

3 thoughts on - /etc/gai.conf Fails To Prefer IPv4 Over IPv6 For NFS

  • From my reading of that file, you’d need to uncomment all of the default precedence lines, and modify the last one.  You couldn’t use that one line, alone.  It’s hard to tell if that’s what you did.
    /etc/gai.conf would contain:

    precedence  ::1/128       50
    precedence  ::/0          40
    precedence  2002::/16     30
    precedence ::/96          20
    precedence ::ffff:0:0/96  100

    …also of note is that gai.conf should only affect the getaddrinfo()
    API.  If the client is using an older API like gethostbyname(), it won’t order DNS results correctly.

  • Have you tried specifying “proto=tcp” as a mount option?  That *should*
    limit the client to IPv4.

  • gai.conf works as intended for most applications, here.  For example, if I uncomment the block of “precedence” lines, and swap between “10” and
    “100” for the last line, then “telnet http://www.google.com 80″ will connect to either the IPv4 or IPv6 address based on that value.  Have you verified that works for you?  Do the results for that test not match the results for NFS mounts?