BOOTPROTO = brak | statyczny | dhcp i /etc/resolv.conf

17

Co to znaczy, kiedy mówi BOOTPROTO=nonew /etc/sysconfig/network-scripts/ifcfg-eth0pliku.

Pamiętam, że kiedyś tak było BOOTPROTO=statici było to bardzo jasne i proste, mówiąc nam, że jeśli IPADDR=<x.x.x.x>zostanie podany, serwer wymyśli określony adres IP. Podobnie BOOTPROTO=dhcpwyszuka serwer DHCP, aby uzyskać dynamiczny adres IP. Redhat mówi:

 BOOTPROTO=protocol
    where protocol is one of the following:

        none — No boot-time protocol should be used.
        bootp — The BOOTP protocol should be used.
        dhcp — The DHCP protocol should be used.
  • Czy to znaczy, że jeśli nie podamy adresu IP w pliku ifcfg-eth0, poszuka serwera DHCP, a jeśli zostanie podany adres IP, to wykryje ten statyczny adres IP?

  • Jakie są szanse, że wyszuka serwer DHCP i zmodyfikuje plik /etc/resolv.conf, nawet jeśli adres IP jest określony IPADDR=przy ustawieniu BOOTPROTO na none?

Kontekst: - przenieśliśmy centra danych i musieliśmy zmienić adresy IP na wielu serwerach. Zmodyfikowaliśmy /etc/resolv.confadresy IP nowych serwerów DNS, ale z jakiegoś powodu niektóre serwery /etc/resolv.confzostały wykasowane lub pojawiły się stare adresy IP DNS. /etc/init.d/networkWidzę, że w skrypcie jest to wywołanie, /etc/sysconfig/network-scripts/network-functionsktóre ma tę funkcję. Czy to winowajca?

# Invoke this when /etc/resolv.conf has changed:
change_resolv_conf ()
{
    s=$(/bin/grep '^[\ \        ]*option' /etc/resolv.conf 2>/dev/null);
    if [ "x$s" != "x" ]; then
       s="$s"$'\n';
    fi;
    if [ $# -gt 1 ]; then
       n_args=$#;
       while [ $n_args -gt 0 ];
         do
            if [[ "$s" = *$1* ]]; then
               shift;
               n_args=$(($n_args-1));
               continue;
            fi;
            s="$s$1";
            shift;
            if [ $# -gt 0 ]; then
                s="$s"$'\n';
            fi;
            n_args=$(($n_args-1));
         done;
    elif [ $# -eq 1 ]; then
       if [ "x$s" != "x" ]; then
          s="$s"$(/bin/grep -vF "$s" $1);
       else
          s=$(cat $1);
       fi;
    fi;
    (echo "$s" > /etc/resolv.conf;) >/dev/null 2>&1;
    r=$?
    if [ $r -eq 0 ]; then
        [ -x /sbin/restorecon ] && /sbin/restorecon /etc/resolv.conf >/dev/null 2>&1 # reset the correct context
        /usr/bin/logger -p local7.notice -t "NET" -i "$0 : updated /etc/resolv.conf";
        [ -e /var/lock/subsys/nscd ] && /usr/sbin/nscd -i hosts; # invalidate cache
    fi;
    return $r;
}

W jakich okolicznościach nazywana jest ta funkcja?

Wiem, że to ustawienie PEERDNSdo nozapobiegnie /etc/resolv.conf zmianę, jednak chciałbym wiedzieć czy nasz serwer zaczął patrząc na serwerze DHCP, chociaż BOOTPROTObył ustawiony nonei adres IP został określony? jeśli tak, dlaczego?

Ponownie uruchomiłem problemy z serwerami z tym problemem, aby powtórzyć problem ponownie, ale zawartość /etc/resolv.confsię nie zmienia. Co mogło spowodować zmianę pliku /etc/resolv.conf przy pierwszym uruchomieniu?

Czy możemy użyć BOOTPROTO=static? Przeczytałem jego przestarzałe. Wszystkie nasze maszyny to RHEL 6.5

Sree
źródło

Odpowiedzi:

21

Po przeczytaniu /etc/sysconfig/network-scripts/ifup-ethzobaczysz, że sieć korzysta z DHCP, jeśli BOOTPROTOjest ustawiona na dhcplub bootp, w przeciwnym razie nie jest używana:

if ["${BOOTPROTO}" = "bootp" -o "${BOOTPROTO}" = "dhcp" ]; then DYNCONFIG=true

Dalej, jeśli DYNCONFIGnie jest pusty (i dhclientjest dostępny), wówczas skrypty próbują użyć DHCP, w przeciwnym razie podejmowane są próby statycznego adresowania IP.

Użycie grep -r BOOTPROTO *wewnątrz /etcnie pokazuje niczego innego niż powyższy fragment, co sugeruje, że możesz użyć czegokolwiek, BOOTPROTOo ile nie jest to jeden z dwóch powyższych.

Możesz użyć BOOTPROTO=static, ale jeśli powiedziano nam, że jest nieobsługiwany, nie możesz zagwarantować, że będzie działać w ten sposób w przyszłości. Ponadto nie wpłynie to na twój problem - staticlub nonespowoduje, że skrypt nie będzie korzystał z DHCP.

garethTheRed
źródło