BOOTPROTO = none | คงที่ | dhcp และ /etc/resolv.conf


17

มันหมายความว่าอย่างไรเมื่อมันบอกว่า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.
  • มันหมายความว่าถ้าเราไม่ได้ระบุ IP ในไฟล์ ifcfg-eth0 มันจะค้นหาเซิร์ฟเวอร์ DHCP และหากมีการระบุ IP มันจะรับ IP แบบคงที่นั้นหรือไม่

  • โอกาสที่จะค้นหาเซิร์ฟเวอร์ DHCP และแก้ไข /etc/resolv.conf แม้ว่าที่อยู่ IP จะถูกระบุด้วยIPADDR=เมื่อ BOOTPROTO ถูกตั้งค่าเป็น none หรือไม่

บริบท: - เราย้ายศูนย์ข้อมูลและต้องเปลี่ยนที่อยู่ IP ในเซิร์ฟเวอร์จำนวนมาก เราได้ปรับเปลี่ยน/etc/resolv.confด้วยที่อยู่ IP ของเซิร์ฟเวอร์ DNS ใหม่ แต่ด้วยเหตุผลบางประการในเซิร์ฟเวอร์บางแห่ง/etc/resolv.confก็ถูกทำให้ว่างเปล่าหรือเกิดขึ้นกับที่อยู่ IP DNS เก่า ใน/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;
}

ฟังก์ชั่นนี้เรียกว่า cicumstances อะไร?

ฉันรู้ว่าการตั้งค่าPEERDNSที่noจะป้องกันไม่ให้ /etc/resolv.conf เปลี่ยนอย่างไรก็ตามฉันต้องการทราบว่าเซิร์ฟเวอร์ของเราเริ่มค้นหาเซิร์ฟเวอร์ DHCP หรือไม่แม้ว่าจะBOOTPROTOถูกตั้งค่าเป็นnoneและที่อยู่ IP ถูกระบุไว้หรือไม่ ถ้าใช่ทำไม

ฉันรีบูตเซิร์ฟเวอร์ปัญหาเกี่ยวกับปัญหานี้สองสามครั้งเพื่อทำซ้ำปัญหาอีกครั้ง แต่เนื้อหาของ/etc/resolv.confไม่เปลี่ยนแปลงในขณะนี้ สิ่งที่อาจทำให้ /etc/resolv.conf มีการเปลี่ยนแปลงในการรีบูตครั้งแรก?

เราสามารถใช้BOOTPROTO=static? ฉันอ่านเลิกแล้ว เครื่องของเรามี RHEL ทั้งหมด 6.5

คำตอบ:


21

ถ้าคุณอ่าน/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 *ภายใน/etcไม่แสดงสิ่งใดนอกจากตัวอย่างด้านบนแนะนำว่าคุณสามารถใช้อะไรก็ได้BOOTPROTOตราบใดที่ไม่ใช่หนึ่งในสองข้อด้านบน

คุณสามารถใช้BOOTPROTO=staticแต่ถ้าเราบอกว่ามันไม่ได้รับการสนับสนุนคุณไม่สามารถรับประกันได้ว่ามันจะทำงานเช่นนี้ในอนาคต นอกจากนี้จะไม่สร้างความแตกต่างให้กับปัญหาของคุณ - staticหรือnoneจะทำให้สคริปต์ไม่ใช้ DHCP

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.