web-dev-qa-db-ja.com

BOOTPROTO = none |静的| dhcpおよび/etc/resolv.conf

BOOTPROTO=noneファイルに/etc/sysconfig/network-scripts/ifcfg-eth0とあるのはどういう意味ですか。

以前はBOOTPROTO=staticでしたが、IPADDR=<x.x.x.x>が指定された場合、サーバーは指定されたIPアドレスで起動することを伝えるのは非常に明確で簡単でした。同様に、BOOTPROTO=dhcpはDHCPサーバーを探して動的IPアドレスを取得します。 Redhatさんのコメント:

 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を取得しますか?

  • BOOTPROTOがnoneに設定されているときに、IPアドレスがIPADDR=で指定されている場合でも、DHCPサーバーを探して/etc/resolv.confを変更する可能性はありますか?

コンテキスト:-データセンターを移動し、多くのサーバーでIPアドレスを変更する必要がありました。新しいDNSサーバーのIPアドレスを使用して/etc/resolv.confを変更しましたが、何らかの理由で一部のサーバーで/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が変更されないことを知っていますが、私たちのサーバーがBOOTPROTOnoneに設定され、IPアドレスが指定されましたか?はいの場合、なぜですか?

この問題のサーバーの問題を数回再起動して問題を再現しましたが、/etc/resolv.confの内容は現在変更されていません。最初の再起動で/etc/resolv.confが変更される原因は何ですか?

BOOTPROTO=staticを使用できますか?私はその非推奨を読んだ。私たちのマシンはすべてRHEL 6.5です

18
Sree

/etc/sysconfig/network-scripts/ifup-ethを読むと、BOOTPROTOdhcpまたはbootpに設定されている場合、ネットワークがDHCPを使用していることがわかります。それ以外の場合は使用されません。

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

さらに、DYNCONFIGがnullでない場合(およびdhclientが使用可能な場合)、スクリプトはDHCPの使用を試み、そうでない場合は静的IPアドレス指定が試みられます。

grep -r BOOTPROTO *内で/etcを使用しても、上記のスニペット以外は表示されないため、BOOTPROTOで上記の2つのうちのいずれかでない限り、何でも使用できることを示唆しています。

BOOTPROTO=staticを使用することもできますが、サポートされていないことが通知された場合、将来的にこのように動作することを保証できません。さらに、それは問題に影響を与えません-staticまたはnoneは、スクリプトがDHCPを使用しないようにします。

23
garethTheRed