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;
}
この関数はどのような状況で呼び出されますか?
PEERDNS
をno
に設定すると、/ etc/resolv.confが変更されないことを知っていますが、私たちのサーバーがBOOTPROTO
がnone
に設定され、IPアドレスが指定されましたか?はいの場合、なぜですか?
この問題のサーバーの問題を数回再起動して問題を再現しましたが、/etc/resolv.conf
の内容は現在変更されていません。最初の再起動で/etc/resolv.confが変更される原因は何ですか?
BOOTPROTO=static
を使用できますか?私はその非推奨を読んだ。私たちのマシンはすべてRHEL 6.5です
/etc/sysconfig/network-scripts/ifup-eth
を読むと、BOOTPROTO
がdhcp
または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を使用しないようにします。