BOOTPROTO = нет | статический | dhcp и /etc/resolv.conf

17

Что это значит, когда говорится BOOTPROTO=noneв /etc/sysconfig/network-scripts/ifcfg-eth0файле.

Я помню, что раньше было, BOOTPROTO=staticи было очень ясно и прямо сказать нам, что если IPADDR=<x.x.x.x>дано, сервер придет с указанным IP-адресом. Аналогично, BOOTPROTO=dhcpбудет искать сервер DHCP для получения динамического IP-адреса. Редхат говорит:

 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.
  • Означает ли это, что если мы не указываем IP-адрес в файле ifcfg-eth0, он будет искать DHCP-сервер, а если указан IP-адрес, он получит этот статический IP-адрес?

  • Каковы шансы, что он будет искать DHCP-сервер и изменять /etc/resolv.conf, даже если IP-адрес указан, IPADDR=когда для BOOTPROTO установлено значение none?

Контекст: - Мы переместили центры обработки данных и нам пришлось менять IP-адреса на многих серверах. Мы изменили /etc/resolv.confIP-адреса новых DNS-серверов, но по некоторым причинам на некоторых серверах они /etc/resolv.confбыли отключены или пришли к старым DNS-IP-адресам. В /etc/init.d/networkсценарии я вижу, что это вызов, /etc/sysconfig/network-scripts/network-functionsкоторый имеет эту функцию. Это виновник?

# 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;
}

При каких обстоятельствах эта функция называется?

Я знаю, что установка PEERDNSна noбудет препятствовать изменению /etc/resolv.conf, однако я хотел бы знать, начал ли наш сервер искать DHCP-сервер, хотя он BOOTPROTOбыл установлен noneи был указан IP-адрес? если да, то почему?

Я перезагружал проблемы с серверами с этой проблемой несколько раз, чтобы повторить проблему, но /etc/resolv.confтеперь содержимое не меняется. Что могло вызвать изменение /etc/resolv.conf при первой перезагрузке?

Можем ли мы использовать BOOTPROTO=static? Я прочитал его не рекомендуется. Наши машины все RHEL 6.5

Sree
источник

Ответы:

21

Если вы прочтете, /etc/sysconfig/network-scripts/ifup-ethвы увидите, что в сети используется DHCP, если BOOTPROTOзадано значение dhcpили bootp, в противном случае он не используется:

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

Далее, если значение DYNCONFIGне равно нулю (и dhclientдоступно), сценарии пытаются использовать DHCP, в противном случае предпринимается попытка статической IP-адресации.

Использование grep -r BOOTPROTO *внутри /etcне показывает ничего, кроме приведенного выше фрагмента, предлагая, что вы можете использовать что угодно, BOOTPROTOесли только это не одно из двух выше.

Вы можете использовать BOOTPROTO=static, но если нам скажут, что это не поддерживается, то вы не можете гарантировать, что это будет работать так в будущем. Кроме того, это не повлияет на вашу проблему - staticили noneзаставит скрипт не использовать DHCP.

garethTheRed
источник