สิ่งที่เขียนทับ /etc/resolv.conf ในทุก ๆ การบู๊ต?


23

ผมได้รับไฟล์สำหรับมินิที่รองเท้าโดยตรงในlinux firefoxมันทำงานได้ดีสำหรับทุกสิ่งที่ควรทำเท่านั้นที่ฉันไม่ได้รับการเชื่อมต่ออินเทอร์เน็ต

เรามีเซิร์ฟเวอร์ DNS 3 ตัวในเครือข่ายซึ่งใช้งานได้ทั้งหมด ฉันสามารถปิงได้เช่นกัน แต่เมื่อพยายามping google.deหรือwget google.deฉันได้รับbad addressข้อผิดพลาด

nslookup google.de ทำงานด้วยเหตุผลบางอย่าง

ฉันติดตามปัญหาที่เกิดขึ้นกับresolv.confระบบบูทที่ไม่มีเนื้อหาเดียวกันกับresolv.confที่ฉันใส่ลงใน.isoไฟล์

resolv.confผมพยายามทำความเข้าใจปัจจัยทั้งหมดที่ไปในการสร้างและการปรับเปลี่ยน ฉันไม่แน่ใจว่าฉันได้รับทั้งหมด แต่ฉันไม่พบวิธีแก้ไขปัญหาของฉันที่นั่น

ดังนั้นในความพยายามครั้งสุดท้ายฉันจึงพยายามทำให้การใช้resolv.confไฟล์ไม่เปลี่ยนรูป

:~# chattr +i /etc/resolv.conf

เมื่อสร้างขึ้นมาใหม่และทำการบูทอีกครั้งเพื่อทำให้ฉันประหลาดใจไฟล์ของฉันถูกเปลี่ยนชื่อเป็นresolv.conf~และมันก็เป็นไฟล์มาตรฐานเดียวกันกับที่หลอกหลอนฉัน

เนื้อหาของไฟล์ทำให้ฉันเชื่อว่าได้รับข้อมูลจากเครือข่ายเอง เมื่อเริ่มต้น.isoใน Virtualbox โดยไม่ใช้อินเทอร์เน็ตไฟล์ของฉันจะถูกเก็บไว้เหมือนเดิม

ฉันพยายามเปลี่ยน/etc/dhcp/dhclient.confเพื่อไม่รับข้อมูลจากเน็ตโดยการลบdomain-name-serverและdomain-name-searchจากrequestส่วนของไฟล์

ไม่ได้ทำงานอย่างน่าเสียดาย

ฉันไม่ได้ติดตั้ง NetworkManager มาตรฐาน iso นั้นใช้ Ubuntu 14.04

อาจมีข้อมูลสำคัญขาดหายไป ฉันยินดีที่จะให้มัน

UPDATE:

ฉันคิดว่าฉันพบไฟล์ที่ลบresolv.confแล้ว

มันน่าจะเป็น /usr/share/udhcpc/default.script

#!/bin/sh

# udhcpc script edited by Tim Riker <Tim@Rikers.org>

[ -z "$1" ] && echo "Error: should be called from udhcpc" && exit 1

RESOLV_CONF="/etc/resolv.conf"
[ - n "$broadcast" ] && BROADCAST="broadcast $broadcast"
[ -n "$subnet" ] && NETMASK="netmask $subnet"

case "$1" in
    deconfig)
        /bin/ifconfig $interface 0.0.0.0
        for i in /etc/ipdown.d/*; do
            [ -e $i ] && . $i $interface
        done
        ;;

    renew|bound)
        /bin/ifconfig $interface $ip $BROADCAST $NETMASK

        if [ -n "$router" ] ; then
            echo "deleting routers"
            while route del default gw 0.0.0.0 dev $interface ; do
                :
            done

            metric=0
            for i in $router ; do
                route add default gw $i dev $interface metric $((metric++))
            done
        fi

        echo -n > $RESOLV_CONF # Start ----------------  
        [ -n "$domain" ] && echo search $domain >> $RESOLV_CONF
        for i in $dns ; do
            echo adding dns $i
            echo nameserver $i >> $RESOLV_CONF
        done
        for i in /etc/ipup.d/*; do
            [ -e $i ] && . $i $interface $ip $dns 
        done # End ------------------
        ;;
esac

exit 0

มันเป็นส่วนหนึ่งของudhcpcโปรแกรม ลูกค้า DHCP เล็ก ๆ ที่เป็นส่วนหนึ่งของbusybox

จะทำการตรวจสอบเพิ่มเติม


UPDATE2 และแนวทางแก้ไข:

ฉันคอมเม้นต์เอาท์ (#Start to #End) ที่ดูเหมือนว่าจะเขียนทับ/etc/resolv.confไฟล์และนั่นเอง นั่นคือผู้ร้าย สคริปต์ที่คลุมเครือทำให้เกิดปัญหาทั้งหมดนี้

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

ขอบคุณสำหรับความช่วยเหลือที่นี่ในการหาสิ่งต่างๆ


1
การตั้งค่าแฟล็กที่ไม่เปลี่ยนรูปแบบบน resolv.conf ไม่ทำงานอย่างที่คุณคาดไว้เนื่องจากไฟล์ไม่เปลี่ยนแปลง รายการไดเร็กทอรีใน / etc ถูกเปลี่ยนเมื่อไฟล์ถูกเปลี่ยนชื่อ คุณต้องตั้งค่า / etc ให้ไม่เปลี่ยนรูป - สิ่งที่คุณไม่ต้องการทำ
doneal24

@ DougO'Neal ฉันเห็น ขอบคุณสำหรับหัวขึ้น.
Minix

คำตอบ:


24

1) คุณไม่ควรอัปเดต resolv.conf ด้วยตนเองเนื่องจากการเปลี่ยนแปลงทั้งหมดจะถูกเขียนทับโดยข้อมูลที่เซิร์ฟเวอร์ DHCP ในพื้นที่ของคุณมอบให้ หากคุณต้องการให้มันคงที่ให้เรียกใช้sudo dpkg-reconfigure resolvconfและตอบ "ไม่" ในการอัพเดทแบบไดนามิก หากคุณต้องการเพิ่มรายการใหม่ที่นั่นแก้ไข/etc/resolvconf/resolv.conf.d/baseและเรียกใช้sudo resolvconf -uมันจะผนวกรายการของคุณและรายการเซิร์ฟเวอร์ DHCP

2) ลองแก้ไข / etc / network / interfaces ของคุณและเพิ่มรายการของคุณที่นั่นเช่น

auto eth0 
iface eth0 inet dhcp 
dns-search google.com 
dns-nameservers dnsserverip 

แล้วรีสตาร์ท/etc/init.d/networking restartหรือsudo ifdown -aและsudo ifup -a

3) ระบบของคุณใช้udhcpซึ่งเป็นโปรแกรมไคลเอนต์ DHCP ขนาดเล็กมาก ไคลเอนต์ udhcp เจรจาการเช่ากับเซิร์ฟเวอร์ DHCP และแจ้งชุดของสคริปต์เมื่อได้รับหรือสัญญาเช่า คุณสามารถอ่านเกี่ยวกับการใช้งานที่นี่หรือแก้ไขสคริปต์นี้ (ตามที่คุณทำ)


1
ผมไม่เพิ่มรายการลงในและวิ่ง/etc/resolvconf/resolv.conf.d/base resolvconf -uมันใช้งานไม่ได้โชคไม่ดี
Minix

คุณได้ลองใช้ sudo dpkg-reconfigure resolvconf แล้วหรือยัง? หลังจากรัน resolvconf -u แล้วรายการของคุณไม่อยู่ในไฟล์ผลลัพธ์? คุณเพิ่มได้อย่างไรเช่น "nameserver 127.0.0.1" หรือ "search google.com"
kirill-a

dpkg-reconfigure resolvconfฉันไม่ทำงาน รายการไม่ได้อยู่ในนั้น และฉันมีรายการที่มีทั้งสองและnameserver ip search domain
Minix

ไม่การรันdpkg-reconfigure resolvconfจะไม่เพิ่มรายการ แต่คุณสามารถปิดใช้งานการอัปเดตอัตโนมัติได้ หากคุณปิดใช้งานการปรับปรุงคุณสามารถแก้ไข resolv.conf ได้ด้วยตนเองและไม่ควรเขียนทับ
kirill-a

ฉันไม่ดีที่จะใช้ถ้อยคำอย่างงุ่มง่ามฉันก็ตอบความคิดเห็นของคุณเป็นประโยค หลังจากรันresolvconf -uรายการจะไม่ถูกเพิ่ม
Minix

4

ฉันวิ่งเข้าไปในนี้ด้วย การแสดงความคิดเห็นdomain-name-serverไม่ได้แก้ไขสำหรับฉันเช่นกัน

นอกจากนี้ฉันไม่ได้ใช้เพียงแค่ธรรมดาresolvconf/etc/resolv.conf

ฉันไม่ได้ลองใช้chattr +iเพื่อล็อคresolv.confเพราะมันดูเหมือนว่าแฮ็คเกินไป นอกจากนี้ฉันต้องการให้ Puppet สามารถแก้ไขได้resolv.confเมื่อจำเป็น

ทางออกที่ดีที่สุดที่ผมพบว่าการแทนที่พฤติกรรมเริ่มต้นของdhclientการใช้ตะขอเอกสารของ

สร้างไฟล์ใหม่ที่/etc/dhcp/dhclient-enter-hooks.d/nodnsupdateมีเนื้อหาดังต่อไปนี้:

#!/bin/sh
make_resolv_conf() {
    :
}

จากนั้นทำให้ไฟล์ที่ปฏิบัติการได้:

chmod +x /etc/dhcp/dhclient-enter-hooks.d/nodnsupdate

ตอนนี้เมื่อ dhclient รัน - ไม่ว่าจะเป็นการรีบูทหรือเมื่อคุณรันด้วยตนเองsudo ifdown -a ; sudo ifup -a- มันจะโหลดสคริปต์nodnsupdateนี้ สคริปต์นี้แทนที่ฟังก์ชันภายในที่เรียกmake_resolv_conf()ว่าปกติจะเขียนทับresolv.confและไม่ทำอะไรเลย

สิ่งนี้ใช้ได้กับฉันใน Ubuntu 12.04


ไม่ทำงานบน Ubuntu 18.04 :( /etc/resolv.confถูกเขียนทับหลังจากรีบูต
Dan Dascalescu

3

Ubuntu 16.04 หากอินเตอร์เฟสเครือข่ายสำหรับอินสแตนซ์เซิร์ฟเวอร์ของคุณถูกควบคุมโดย DHCP โปรแกรม dhclient จะเขียนทับ/etc/resolv.confไฟล์ของคุณทุกครั้งที่เริ่มบริการเครือข่าย

คุณสามารถแก้ไขปัญหาโดยแก้ไข/etc/dhcp/dhclient.confไฟล์และเพิ่มคำสั่ง“ แทนที่” สำหรับชื่อโดเมน , การค้นหาโดเมนและชื่อโดเมนเซิร์ฟเวอร์ดังนี้:

supersede domain-name "local.com";
supersede domain-search "local.com";
supersede domain-name-servers 192.168.56.103;

ในกรณีนี้เซิร์ฟเวอร์ชื่อจะอยู่ที่ "192.168.56.103" และชื่อโดเมนคือ "local.com"

โปรดทราบว่าแต่ละบรรทัดจะสิ้นสุดด้วยเซมิโคลอนและชื่อโดเมนจะอยู่ในเครื่องหมายคำพูดคู่


น่าเสียดายที่นี่ไม่ได้ผลกับ Ubuntu 18.04 หลังจากรีบูตเครื่อง/etc/resolv.confถูกเขียนทับด้วย 127.0.0.53
Dan Dascalescu

อาจจะเป็นคุณสามารถลองaskubuntu.com/questions/1031279/
Sand1512

ตรวจสอบด้วยว่าคุณกำลังวิ่งอยู่หรือไม่dnsmasq
Sand1512

0

ไปที่ไดเรกทอรีนี้:

  cd /etc/resolvconf/resolv.conf.d

เปิดไฟล์ชื่อ head และใส่ DNS หรือชื่อ DNS ไว้ในนั้น เปิดไฟล์ชื่อ tail และวางโดเมนไว้ในนั้น Reboot


ไดเรกทอรีนั้นไม่มีอยู่ตามค่าเริ่มต้นบน Ubuntu 18.04 คุณต้องการติดตั้งบริการที่สร้างขึ้นหรือไม่?
Dan Dascalescu

0

ใน Azure VMs /etc/resolv.conf ไม่สามารถแก้ไขได้โดยตรง

ลองเพิ่มชื่อ DNS ในไฟล์กำหนดค่าเครือข่าย / etc / sysconfig / network-สคริปต์ / ifcfg-eth0 และอื่น ๆ เช่น:

DOMAIN = example.com

DNS1 = 10 . . *
DNS2 = 10 . . *
DNS3 = 10 . . *

และรีสตาร์ทบริการเครือข่ายหลังจากบันทึกไฟล์ คุณจะเห็นการกำหนดค่าจากนั้นจะถูกเพิ่มเข้าไปใน resol.conf เช่นกัน


0

เพื่อให้การเปลี่ยนแปลงที่เกี่ยวข้องกับ DNS ในresolv.confถาวรคุณจำเป็นต้องเปลี่ยนการตั้งค่าไฟล์ DHCP dhclient.confชื่อ /etc/dhcp/dhclient.confคุณสามารถค้นหาไฟล์ใน

เปิดไฟล์เพื่อแก้ไข (อย่าลืมใช้ sudo) คุณจะเห็นบรรทัดเช่นนี้:

#supersede domain-name "fugue.com home.vix.com";
#prepend domain-name-servers 127.0.0.1;

ลบ“ #” ก่อนหน้าและใช้โดเมนเนมและ / หรือโดเมนเนมเซิร์ฟเวอร์ที่คุณต้องการ บันทึกไว้ ตอนนี้การเปลี่ยนแปลงที่เกี่ยวข้องกับ DNS จะเป็นแบบถาวร

เครดิตไปที่: https://itsfoss.com/resolvconf-permanent-ubuntu/


คำตอบนี้ได้รับแล้วให้2 ปีก่อนหน้านี้
Dan Dascalescu

0

ใช้คำสั่งด้านล่างเพื่อป้องกันไม่ให้ resolv.conf หรือไฟล์ใด ๆ จากการเขียนทับหลังจากรีบูต

chattr -V + i ชื่อไฟล์เช่น chattr -V + i /etc/resolv.conf

หากต้องการเปลี่ยนกลับการเปลี่ยนแปลงให้ใช้คำสั่งด้านล่าง:

chattr -i ชื่อไฟล์ - เพื่อเปิดใช้งานการแทรกไฟล์อีกครั้ง

chattr (Change Attribute) เป็นบรรทัดคำสั่งของยูทิลิตี้ Linux ที่ใช้ในการตั้งค่า / ยกเลิกการตั้งค่าคุณสมบัติบางอย่างให้กับไฟล์ในระบบ Linux เพื่อความปลอดภัยในการลบโดยไม่ตั้งใจหรือการแก้ไขไฟล์และโฟลเดอร์ที่สำคัญแม้ว่าคุณจะล็อกอินด้วย


ฉันเชื่อว่าผู้ใช้ในคำถามพยายามจริง ๆchattrแต่เชื่อว่าสิ่งนี้ไม่มีผล
Kusalananda

วิธีนี้จะใช้งานได้อย่างแน่นอนตัวเลือกที่ผู้ใช้ลองใช้สำหรับแก้ไขไฟล์ไม่ใช่เพื่อทำให้ไม่เปลี่ยนรูป
Ashish Jain

โปรดเรียกใช้คำสั่งด้วย sudo chattr -V + i ชื่อไฟล์เช่น sudo chattr -V + i /etc/resolv.conf
Ashish Jain

-1

บน Ubuntu 18.04 โดยใช้ NetworkManager คุณต้องลบไฟล์ 'resolv.conf' และปล่อยให้ NetworkManager สร้างไฟล์ให้คุณ

ในการลบไฟล์ในรูปแบบขั้วsudo rm -f /etc/resolv.conf; นี่จะเป็นการลบไฟล์ให้คุณ

รีบูทระบบและ NetworkManager จะสร้างไฟล์ resolv.conf ให้คุณ

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