Trege DNS-oppslag med ny glibc under Linux

Jeg har vært ille plaget med trege DNS-oppslag på linux-boksene i hjemmenettet mitt i det siste. Veldig ofte har det tatt ganske nøyaktig 5 sekunder (plus 2-15ms) å gjøre et DNS-oppslag med curl, opera, ssh, og andre programmer. Kort fortalt er løsningen å legge “options single-request” i /etc/resolv.conf.

Jeg fant endelig forklaringen under headingen “DNS NSS improvement” i  glibc 2.10 news. Selv om IPv6 er slått av så gjør altså dns nss oppslag både for IPv4 og IPv6. Har man da en feilkonfigurert brannvegg, eller en DNS-tjener med feil, så henger DNS-oppslag i ganske nøyaktig 5 sekunder mens dns nss venter på et svar for IPv6 som aldri kommer. Løsningen er som nevnt å legge til en linje med

  options single-request
  

i /etc/resolv.conf.

Men da kommer problem nr. 2: NetworkManager! Der finnes det ikke noen mulighet til å gjøre det i en nettverksprofil. Typisk GUI. 🙁

Så jeg har laget meg en  /etc/NetworkManager/dispatcher.d/06-dhclientoptions:

  #!/bin/sh
  # This is for adding any custom dhclient options to the
  # end of /etc/resolve.conf file
  if [ "$2" = "up" ]; then
    INET=`/sbin/ifconfig $1 | egrep "inet addr" | sed -e "s/:/ /g"`
    IP=`echo $INET | awk '{ print $3 }'`
    MA=`echo $INET | awk '{ print $7 }'`
    NET=`ipcalc -n $IP $MA | sed -e "s/=/ /g" | awk '{ print $2 }'`
    case $NET in
      129.242.237.144 | 192.168.2.0 )
        echo "options single-request" >> /etc/resolv.conf
        ;;
    esac
  fi
  

Her har jeg lagt til de to nettene hvor jeg har dette problemet.

Siden jeg er inne på IPv6 så bruker jeg “options ipv6 disable=1” i en eller annen modprobe.conf fil for å disable IPv6 under Fedora 13, CentOS 5 og RHEL 5. Dette virker nemlig også når bonding-driveren er brukt. For CentOS 4 og RHEL4 funker det fint med den gamle

  alias net-pf-10 off
  alias ipv6 off
  

metoden selv om bonding-driveren er i bruk.

Leave a Reply

Your email address will not be published. Required fields are marked *