BOOTPROTO=None|static|dhcp 및 /etc/resolv.conf

BOOTPROTO=None|static|dhcp 및 /etc/resolv.conf

BOOTPROTO=none문서에는 무엇이라고 적혀 있나요 /etc/sysconfig/network-scripts/ifcfg-eth0?

나는 그것이 주어지면 서버가 지정된 IP 주소를 제공할 것이라는 BOOTPROTO=static것을 매우 명확하고 직접적으로 알려주었던 것을 기억합니다 . IPADDR=<x.x.x.x>마찬가지로 BOOTPROTO=dhcp동적 IP 주소를 얻기 위해 DHCP 서버를 찾습니다. 레드햇은 이렇게 말했습니다.

 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 서버를 찾고 DHCP 서버가 지정되면 해당 고정 IP를 얻음을 의미합니까?

  • IPADDR=BOOTPROTO를 없음으로 설정하면 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;
}

이 함수는 어떤 상황에서 호출되나요?

PEERDNS로 설정하면 /etc/resolv.conf가 변경되지 않는다는 것을 알고 있지만 , 로 설정되고 IP 주소가 지정된 경우에도 우리 서버가 DHCP 서버를 찾기 시작할지 no궁금합니다 . 그렇다면 왜 그렇습니까?BOOTPROTOnone

문제를 다시 재현하기 위해 이 문제로 서버를 몇 번 다시 시작했지만 /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한 내부를 사용할 수 있음을 보여줍니다 .BOOTPROTO

사용할 수는 있지만 BOOTPROTO=static지원되지 않는다는 메시지가 표시되면 나중에 이와 같이 작동한다고 보장할 수 없습니다. 또한 문제에 영향을 미치지 않거나 스크립트가 DHCP를 사용하지 않게 만듭니다 static.none

관련 정보