วิธีการคงอยู่ของตัวเลือก resolv.conf เช่นหมุน, หมดเวลาใน CentOS?


9

CentOS จะล้างการเปลี่ยนแปลงที่ทำ/etc/resolv.confด้วยตนเองเป็นระยะ ค่าเริ่มต้นใน Linux ไม่ดีในแง่ของความล้มเหลวในเวลาที่เหมาะสม (เซิร์ฟเวอร์ชื่อแบบสอบถามในลำดับเดียวกันทุกครั้ง, หมดเวลา 5 วินาที, 2 ครั้งลอง)

ดังนั้น DNS แรกของคุณresolv.confจึงเป็นเส้นทางที่สำคัญ หากล้มเหลวคุณสามารถดูได้ 10 วินาทีก่อนที่คุณจะล้มเหลว

ค่าเริ่มต้นเหล่านี้สามารถปรับแต่งได้ (ดูหน้าresolv.conf ) แต่การเปลี่ยนแปลงใด ๆ ที่จะเกิดขึ้นอย่างถาวรใน CentOS และยังคงอยู่ผ่านการรีบูตเป็นต้น

คำตอบ:


12

คำตอบสามารถพบได้ใน/sbin/dhclient-script:

if [ -n "${RES_OPTIONS}" ]; then
    echo "options ${RES_OPTIONS}" >> ${rscf}
fi

แต่มันไม่ชัดเจนมากนักที่คุณสามารถตั้งค่าRES_OPTIONSให้สคริปต์รับมันได้ - บางอย่างเช่นโดเมนการค้นหาสามารถตั้งค่าในifcfg-ethXไฟล์ได้ แต่ตัวเลือกตัวแก้ไขจะถูกตั้งค่าไว้ที่อื่น /etc/sysconfig/networkไฟล์ที่คุณต้องการในความเป็นจริง ในการตั้งค่าตัวเลือกที่เกี่ยวข้องให้เพิ่มบางอย่างเช่นบรรทัดนี้ลงในไฟล์:

RES_OPTIONS="rotate timeout:1 retries:1"

นั่นจะตั้งค่าการหมดเวลาเป็น 1 วินาทีใช้การลองใหม่ครั้งเดียวและแจ้งให้ไคลเอนต์หมุนตัวแก้ปัญหาต่อคำขอแทนการเรียงลำดับตามรายการในแต่ละครั้ง

หากคุณต้องการให้การเปลี่ยนแปลงมีผลทันทีให้ออกservice network restartคำสั่งและตรวจสอบสิ่งใหม่ของคุณ/etc/resolv.confในทุกด้าน นี่คือสิ่งที่ฉันดูเหมือนเมื่อทดสอบสิ่งนี้:

# cat /etc/resolv.conf 
; generated by /sbin/dhclient-script
search example.com
options rotate timeout:1 retries:1
nameserver 10.1.1.2
nameserver 10.1.1.1

1

คำตอบที่ยอมรับคือเมื่อใช้สคริปต์เครือข่ายดั้งเดิม ถ้าคุณใช้NetworkManagerคุณอาจไม่ได้มี/etc/sysconfig/networkและถ้าคุณทำมันจะยังคงไม่สามารถใช้สำหรับการเชื่อมต่อการจัดการโดยNetworkManager

หากคุณใช้NetworkManager :

ในการเพิ่มตัวเลือกให้เพิ่มrotateในbond0:

nmcli con mod bond0 +ipv4.dns-options rotate

วิธีลบตัวเลือกนั้น:

nmcli con mod bond0 -ipv4.dns-options rotate

+เป็นสิ่งที่ดีที่จะเปลี่ยนแปลงตัวเลือกเกินไป NetworkManagerฉลาดพอที่จะตรวจจับตัวเลือกที่มีอยู่และอัปเดตพวกเขา ตัวอย่างเช่นการเปลี่ยนค่าการหมดเวลา:

root@debian:~# nmcli con show bond0 |grep ipv4.dns-options
ipv4.dns-options:                       "rotate,timeout:5"
root@debian:~# nmcli con mod bond0 +ipv4.dns-options timeout:3
root@debian:~# nmcli con show bond0 |grep ipv4.dns-options
ipv4.dns-options:                       "rotate,timeout:3"

ซึ่งหมายความว่าค่าจะถูกละเว้นสำหรับการลบและไม่จำเป็นต้องมีแม้แต่ หากต้องการลบการหมดเวลา:

nmcli con mod bond0 -ipv4.dns-options timeout

มันจะทำงานร่วมกับค่าการหมดเวลาด้วย แต่ค่านั้นจะถูกละเว้นดังนั้นการลบtimeout:5จะเป็นการลบค่าการหมดเวลาอื่น ๆ ด้วย

หมายเหตุ: ในขณะที่ผมมองเข้าไปในนี้มาข้ามข้อผิดพลาดที่เกี่ยวข้องที่ได้รับการแก้ไขในเครือข่ายผู้จัดการ v1.14.6 , v1.15.2-devและv1.16 หากคุณพบปัญหาใด ๆ ให้ตรวจสอบเวอร์ชันผู้จัดการเครือข่ายของคุณก่อน


1
เมื่อเพิ่มคำตอบใหม่ให้กับคำตอบที่ยอมรับแล้วเป็นความคิดที่ดีที่จะทราบว่าคำถามและคำตอบนั้นเก่าแค่ไหน สิ่งที่ถือว่าเป็นมรดกในขณะนี้ไม่จำเป็นต้องเป็นอย่างนั้นเมื่อ 4+ ปีก่อนเมื่อถูกถามคำถาม แทนที่จะติดแท็กเป็นแบบดั้งเดิมหากคุณบันทึกไว้เมื่อค่าเริ่มต้นเปลี่ยนไป (อาจเป็นรุ่น CentOS เวอร์ชัน 8 - 8) จากนั้นดำเนินการเพิ่มข้อมูลของคุณซึ่งจะเป็นคำตอบที่มีประโยชน์มากกว่า อีกทางเลือกหนึ่งถามและตอบรุ่นของคุณเอง (เช่น CentOS รุ่นใหม่กว่าหรือเมื่อใช้ตัวจัดการเครือข่าย) และเชื่อมโยงกลับไปยังรุ่นเก่ากว่านี้เพื่อการอ้างอิง
อดัมซี

วิธีการแบบเก่าอาจยังคงใช้ได้แม้ว่า ... NetworkManager ทำงานมาเป็นเวลานาน แต่คุณยังสามารถกำหนดค่าแบบเดิมได้ทั้ง Debian และ CentOS
Thomas Guyot-Sionnest

0

หากคุณต้องการทำสิ่งนี้กับไฟล์ flat แทนที่จะเป็นnmcliคำสั่ง (เช่นด้วยเครื่องมือการจัดการการกำหนดค่า) Red Hat ให้โซลูชันอื่น

สร้างสคริปต์/etc/NetworkManager/dispatcher.d/15-resolvซึ่งคัดลอกแบบกำหนดเอง/etc/resolv.confเข้าที่

#!/bin/bash
#
# Description : script to override default resolv.conf file
# with customized file.
cp -f /etc/resolv.conf.custom /etc/resolv.conf

หลังจากรีสตาร์ท NetworkManager สคริปต์นี้จะถูกดำเนินการแทนที่ไฟล์ด้วยตัวคุณเอง

https://access.redhat.com/solutions/61921


0

คุณสามารถบอก NetworkManager ไม่ให้จัดการ/etc/resolv.confไฟล์ทั้งหมดเข้าด้วยกัน

  1. สร้าง/etc/NetworkManager/conf.d/90-dns-none.confไฟล์ด้วยเนื้อหาต่อไปนี้:

    [main]
    dns=none
    
  2. โหลดบริการ NetworkManager อีกครั้ง:

    systemctl reload NetworkManager
    

เอกสารนี้มาจากมีทางออกที่สองซึ่งเกี่ยวข้องกับการแทนที่/etc/resolv.confด้วย symlink ไปยังไฟล์ของคุณ

ให้อ่านนี้: 22. การกำหนดค่าไฟล์ /etc/resolv.conf ด้วยตนเอง


-1

เพียงเพิ่ม

resolv_conf_options=rotate\ timeout:1\ retries:1

ในของคุณ resolvconf.conf


คุณแน่ใจหรือว่าเป็นตัวเลือกใน CentOS (มีลิงก์ไปยังเอกสาร / บางอย่างเพื่อแสดง) ฉันเห็นว่าเป็นตัวเลือก FreeBSD และ Ubuntu แต่ไม่พบใน CentOS
Adam C

เป็นส่วนหนึ่งของแพ็คเกจopenresolv
Evgeny F

1
ที่ดูเหมือนจะไม่เป็นแพคเกจมาตรฐานดังนั้นจึงไม่ใช่ตัวเลือกสำหรับ CentOS โดยเฉพาะอย่างยิ่งในสภาพแวดล้อมที่มีการควบคุมไม่ใช่ตัวเลือกที่ไม่ดีในที่อื่น
Adam C

-3

ฉันประสบปัญหาเดียวกันครั้งล่าสุดกับ linux VPS ที่สมัครใหม่ของฉัน วิธีที่ฉันแก้ไขมันคือการใช้คำสั่ง chattr + i เพื่อทำให้ไฟล์ไม่เปลี่ยนรูป เพียงไปที่โฟลเดอร์ / etc และเรียกใช้สิ่งนี้หลังจากที่คุณทำการเปลี่ยนแปลงที่จำเป็นในไฟล์ resolv.conf:

chattr + i resolv.conf

หากคุณต้องการคืนค่าการตั้งค่าให้ทำดังนี้

chattr -i resolv.conf

แนวทางแบบเต็มสำหรับการอ้างอิงของคุณ: http://boxtutor.com/fix-etcresolv-conf-is-not-saving-after-server-reboot/


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