ฉันจะหา resolvconf เพื่อสร้าง resolv.conf ได้อย่างไรหลังจากฉันเปลี่ยน / etc / network / interfaces?


92

หลังจากอัปเดต/etc/network/interfacesด้วยสิ่งที่คล้ายกับด้านล่างฉัน/etc/resolv.confจะอัปเดตได้อย่างไร ฉันพยายาม (เป็น root) resolver -u, service networking restartแต่พวกเขาไม่ได้ทำงาน ฉันยังแก้ไข symlink resolv.confแล้วลองresolver -uใหม่อีกครั้ง /etc/resolv.confในที่สุดผมแห้วรีบูตซึ่งได้แก้ไขปัญหาโดยการสร้างใหม่

Ubuntu 12.04, เซิร์ฟเวอร์ 64 บิตติดตั้งแพตช์ล่าสุดทั้งหมด

ตัวอย่าง/etc/network/interfaces:

iface eth0 inet static
    address 192.168.3.3
    netmask 255.255.255.0
    gateway 192.168.3.1
    dns-search example.com
    dns-nameservers 192.168.3.45 192.168.8.10


คุณพยายามทำอะไร resolv.conf ทำให้คุณไม่สามารถทำอะไรได้
kingmilo

คำตอบ:


106

service networking restart ไม่ได้เป็นวิธีที่เชื่อถือได้ในการลดทุกอินเตอร์เฟส

resolvconf -uคำสั่งเพียงการปรับปรุงresolv.confจากฐานข้อมูลของตัวเอง resolvconf ของ คุณต้องอัพเดตฐานข้อมูล

ในการอัพเดทฐานข้อมูลคุณต้องเรียกใช้ resolvconf ด้วยตัวเลือก-aหรือ -dที่เกิดขึ้นเบื้องหลังเมื่อคุณเรียกใช้ ifup หรือ ifdown ดังนั้นโดยปกติเช่นเดียวกับการเปลี่ยนแปลงอื่น ๆ/etc/network/interfacesเพื่อเปิดใช้งานการเปลี่ยนแปลงตัวเลือก dns- * คุณต้อง ifdown อินเทอร์เฟซที่มีปัญหาและ ifup อีกครั้ง หรือคุณสามารถรีบูต

หากคุณต้องการเปลี่ยนแปลงอินเทอร์เฟซโดยไม่ต้องกดลง (อาจเป็นเพราะคุณกำลังจัดการเครื่องจากระยะไกลและเกิดการเชื่อมต่อผ่านอินเตอร์เฟซนั้น natch) จากนั้นคุณสามารถบรรลุผลลัพธ์เดียวกันโดยเรียกใช้ resolvconf โดยตรงจากบรรทัดคำสั่ง สิ่งนี้ต้องการความรู้เพิ่มเติมเล็กน้อยเกี่ยวกับความหมายของ resolvconf สมมติว่าเกี่ยวข้อง / e / n / i stanza คือ

iface IIII FFFF static
    address ...
    ...
    dns-nameservers X.X.X.X Y.Y.Y.Y
    dns-search SSSS

โดยที่ FFFF เป็นตระกูลที่อยู่ ("inet" หรือ "inet6")

เพื่อเปิดใช้งานตัวเลือก dns- * เหล่านี้ให้คุณเรียกใช้ resolvconf ดังต่อไปนี้ (ใช่โดยขึ้นบรรทัดใหม่ในสตริง piped ไปที่ resolvconf)

echo "nameserver X.X.X.X
nameserver Y.Y.Y.Y
search SSSS" | sudo resolvconf -a IIII.FFFF

สำหรับบทที่ให้ไว้ในคำถามนี้จะเป็นดังต่อไปนี้

echo "nameserver 192.168.3.45
nameserver 192.168.8.10
search example.com" | sudo resolvconf -a eth0.inet

ศึกษาหน้าคู่มือ resolvconf (8) และไฟล์ README ของแพ็กเกจ resolvconf (/usr/share/doc/resolvconf/README.gz) สำหรับข้อมูลเพิ่มเติม


"Don't do" service networking restart "; นั่นไม่ใช่วิธีที่เชื่อถือได้ในการลดการอินเทอร์เฟซทั้งหมด" ทำงานได้ดีสำหรับฉัน ดีใจที่ได้ทราบวิธีการทำความสะอาด
Aki

11
หากคุณไม่ควรทำ "เริ่มบริการเครือข่ายบริการ" ฉันขอแนะนำให้คุณอย่าใส่ไว้ในบรรทัดแรกของคำถามนี้ เมื่อรีบหาทางออกสิ่งแรกที่ฉันทำคือคัดลอกและวางคำสั่งแรกที่ฉันเห็น
Robin Winslow

4
@RobinWinslow +1 สำหรับทำวันของฉัน
Pete

8
คำตอบนี้จากคนของตัวเองที่ได้มีการพัฒนาresolvconf :)
heemayl

2
หากต้องการรีสตาร์ท / อ่านซ้ำ/etc/network/interfacesคุณสามารถทำได้: ifdown eth0 && ifup eth0; มันทำงานได้แม้ในเซสชั่น ssh ระยะไกล
Pierre-Damien


5

สำหรับผู้ที่จัดการเซิร์ฟเวอร์ของคุณจากระยะไกลคุณสามารถ:

  1. อัปเดตdns-nameserversบรรทัดใน/etc/network/interfaces
  2. # ifdown eth01; ifup eth01

โปรดสังเกตว่าสิ่งนี้จะต้องเป็นหนึ่งบรรทัดหารด้วย; (ตัวคั่นบรรทัดคำสั่ง linux) คุณไม่ควรสูญเสียการเชื่อมต่อปัจจุบัน ข้อยกเว้นคือการพิมพ์ผิดในไฟล์อินเตอร์เฟส หากเกิดเหตุการณ์นี้ifupจะล้มเหลวและคุณจะต้องมีการเข้าถึงทางกายภาพหรือethxxการเชื่อมต่ออื่น


2

service resolvconf restartจะสร้าง/etc/resolv.confไฟล์ใหม่โดยไม่ยุ่งยากมาก


2
ฉันได้รับFailed to restart resolvconf.service: Unit resolvconf.service not found.
Mobigital

คำสั่งเสร็จสมบูรณ์ แต่ไม่ได้สร้างใหม่/etc/resolv.confบนเซิร์ฟเวอร์ ubuntu 14.04
Jossef Harush

1

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

แก้ไข/etc/network/interfaces:

iface eth0 inet static
    address 192.168.3.3
    netmask 255.255.255.0
    gateway 192.168.3.1
    dns-search example.com
    dns-nameserver 192.168.3.45
    dns-nameserver 192.168.8.10

การเปลี่ยนแปลงเหล่านี้จะไม่เกิดขึ้นจนกว่าคุณจะรีบูตหรือโหลดไฟล์การกำหนดค่าใหม่:

เพื่ออัพเดตไฟล์อินเตอร์เฟส live จำเป็นต้องรันคำสั่งต่อไปนี้:

echo "nameserver 192.168.3.45
nameserver 192.168.8.10
search example.com" | sudo resolvconf -a eth0.inet

สิ่งนี้อนุญาตให้อัปเดตอินเทอร์เฟซโดยไม่ต้องรีบูตหรือโหลดซ้ำ

อย่างไรก็ตามการเปลี่ยนแปลงคำสั่งดังกล่าวจะหายไปหลังจากรีบูตหากมีการเปลี่ยนแปลงในส่วน/etc/network/interfacesที่ไม่ได้ทำ

โดยวิธีการที่คำตอบสุดท้ายจาก BDenis ในรายการนี้ใช้งานได้จริงแทนที่คำสั่งสุดท้ายโดยการแยก/etc/network/interfacesไฟล์และไพพ์บรรทัดเหล่านั้นลงในคำสั่งsudo resolvconf -a eth0 จริง ๆ แล้วมันเป็นครึ่งคำตอบและเป็นตัวอย่างที่ดีของการแยกวิเคราะห์แบบอินไลน์ หากคุณต้องการที่จะดูว่ามันทำงานเพียงแค่เรียกใช้ส่วนแรกของคำสั่งและดูมันแยก/etc/network/interfacesไฟล์และคายข้อมูลที่จำเป็นทั้งหมดที่คุณต้องใช้ในการเรียกใช้sudo resolvconf -a eth0คำสั่ง:

sed 's/#.*$//' /etc/network/interfaces | grep dns- | sed 's/dns-//g'

แจ้งให้ทราบนี้จะผลิตออกมาวางเหมือนกันเป็นคำสั่ง:

echo "nameserver 192.168.3.45
nameserver 192.168.8.10
search example.com"

โดยมีเงื่อนไขว่า/etc/network/interfacesไฟล์ถูกกำหนดค่าด้วยข้อมูลนี้:

iface eth0 inet static
    address 192.168.3.3
    netmask 255.255.255.0
    gateway 192.168.3.1
    dns-search example.com
    dns-nameserver 192.168.3.45 
    dns-nameserver 192.168.8.10

น่าเศร้าที่ไม่สามารถใช้สิ่งนั้นได้ อินเทอร์เฟซของฉันได้รับการจัดการโดยตัวจัดการเครือข่ายและ DHCP ดังนั้นการเพิ่มลงใน/etc/network/interfacesนั้นไม่ใช่ตัวเลือกที่ถูกต้องในกรณีนั้น (Ubuntu 14.04)
Tino

1

คำตอบง่ายๆ:

เพียงแค่ติดตั้ง resolvconf apt install resolvconf

หลังจากนั้นifup eth0การปรับปรุง DNS ในetc/resolv.confตาม สายในdns-nameservers/etc/network/interfaces


อินเทอร์เฟซที่ไม่รู้จัก ทุกคนรู้วิธีทำให้งงงวยรายละเอียดที่นี่ ... ฉันคิดว่าเราควรตั้งเป้าหมายคำสั่งทั้งหมด สคริปต์เต็มรูปแบบสำหรับแต่ละไม่มีร้อยแก้ว
mathtick

1

บน 18.04 งานต่อไปนี้น่าเชื่อถือ (รันเป็นรูท):

systemctl stop networking
ip address flush dev <device> # just to be safe
systemctl start networking

สำคัญ:ตรวจสอบให้แน่ใจว่าคุณได้resolvconfติดตั้งแพ็คเกจแล้ว
ดูเหมือนว่าจะไม่เป็นค่าเริ่มต้นและหากไม่มีการเปลี่ยนแปลง (!) จาก/etc/network/interfacesจะถูกเพิกเฉยอย่างเงียบ ๆ (เช่นdns-*)


0

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

sed -re '/nameservers|dns-search/ !d' -e 's/dns-nameservers/nameserver/' -e 's/dns-search/search/' /etc/network/interfaces  | resolvconf -a eth0.inet && resolvconf -u

ปรับเปลี่ยนให้เหมาะสม


0

ใน Ubuntu รุ่นเดสก์ท็อป 18.04 ที่ไม่มีบริการnetworkingและresolvconfไม่ได้รับการติดตั้งโดยค่าเริ่มต้นฉันประสบความสำเร็จในการสร้างใหม่resolv.confโดยการรีสตาร์ทnetwork-manager:

sudo service network-manager restart

-3

นอกจากนี้คุณสามารถลองใช้คำสั่งนี้:

cat /etc/network/interfaces |sed 's/#.*$//'|grep dns-|sed 's/dns-//g'|sudo resolvconf -a eth0.inet

3
คุณช่วยอธิบายได้ไหมว่าทำไมคำสั่งนี้จึงใช้งานได้?
αғsнιη

1
นี้ทำงานไม่ถูกต้องถ้าคุณมีมากกว่าหนึ่ง nameserver IP dns-nameserver IP1 IP2ในบรรทัด ต้องทำซ้ำบรรทัดresolv.confแต่ไม่ใช่
Tino

นอกจากนี้/etc/network/interfacesการใช้งานdns-nameservers(แจ้งให้ทราบsในตอนท้าย) ในขณะที่การใช้งานresolvconf nameserverคำสั่งไม่ได้จัดการกับมัน และแม้ว่าทุกอย่างถูกต้องไปป์ไลน์sed | grep | sedแน่นอนจะไม่เป็นวิธีที่มีประสิทธิภาพมากที่สุด
Melebius
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.