BOOTPROTO=无 |静态| dhcp 和 /etc/resolv.conf

BOOTPROTO=无 |静态| dhcp 和 /etc/resolv.conf

BOOTPROTO=none文件中说的是什么意思/etc/sysconfig/network-scripts/ifcfg-eth0

我记得曾经有过BOOTPROTO=static,它非常清楚和直接地告诉我们,如果IPADDR=<x.x.x.x>给出了 an,服务器将提供指定的 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.
  • 这是否意味着如果我们没有在 ifcfg-eth0 文件中指定 IP,它将查找 DHCP 服务器,如果指定了 IP,它将获取该静态 IP?

  • IPADDR=当 BOOTPROTO 设置为 none 时,即使指定了 IP 地址,它也会查找 DHCP 服务器并修改 /etc/resolv.conf 的可能性有多大?

背景:- 我们移动了数据中心,并且必须更改许多服务器中的 IP 地址。我们已经/etc/resolv.conf用新的 DNS 服务器的 IP 地址进行了修改,但由于某种原因,在某些服务器中,该地址/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;
}

什么情况下调用这个函数?

我知道设置PEERDNSno会阻止 /etc/resolv.conf 更改,但是,我想知道即使BOOTPROTO设置为none并指定了 IP 地址,我们的服务器是否已开始寻找 DHCP 服务器?如果是,为什么?

我重新启动了几次出现此问题的服务器以再次复制该问题,但/etc/resolv.conf现在内容没有改变。是什么导致 /etc/resolv.conf 在第一次重新启动时发生更改?

我们可以使用吗BOOTPROTO=static?我读到它已被弃用。我们的机器都是RHEL 6.5

答案1

如果您阅读过,您会发现如果设置为或,/etc/sysconfig/network-scripts/ifup-eth则网络使用 DHCP ,否则不使用:BOOTPROTOdhcpbootp

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

再往下,如果DYNCONFIG不为空(并且dhclient可用),则脚本将尝试使用 DHCP,否则将尝试静态 IP 寻址。

使用grep -r BOOTPROTO *inside/etc不会显示除上述代码片段之外的任何内容,这表明您可以使用任何 in,BOOTPROTO只要它不是上述两个之一。

您可以使用BOOTPROTO=static,但如果我们被告知它不受支持,那么您不能保证它将来会像这样工作。此外,它不会对您的问题产生影响 -static或者none会导致脚本不使用 DHCP。

相关内容