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;
}
什么情况下调用这个函数?
我知道设置PEERDNS
为no
会阻止 /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 ,否则不使用:BOOTPROTO
dhcp
bootp
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。