سؤال كيف أقوم بتضمين الخطوط في resolv.conf التي لن تضيع عند إعادة التشغيل؟


لقد هاجرت أخيرا إلى 12.04 من 7.10. لدي جزء واحد أخير لإكمال ولكن أنا متعكز. أنا أستخدم العرائس على كل خادم ، وفي الماضي قمت بتضمين عنوان خادم الأسماء واسم مجال البحث الخاص بالعميل في resolv.conf.

search puppetmaster.com
nameserver 192.168.1.XXX

في 12.04 يتم الكتابة فوق resolv.conf عند إعادة التشغيل. لا يمكنني استخدام IP ثابت لهذه ، لذلك فإن استخدام / etc / network / interfaces لمساعدتي هو نقطة تلخيص.

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.0.1

هل هناك طريقة للحصول على resolvconf للتعامل مع هذا إما في الرأس والذيل أو القاعدة؟ إذا كان هناك ، هل هناك أي أمثلة يمكنني استخدامها لتعديل خادمي.

أي مساعدة هي محل تقدير كبير.


148
2018-06-28 13:54


الأصل




الأجوبة:


من الأفضل أن يكون خادم DNS الخاص بك قادرًا على حل "الدمية" على العنوان الصحيح ، وإما أن يقوم خادم DHCP بتوزيع عنوان خادم أسماء النطاقات DNS وقائمة البحث أو آخر (إذا كان لديك عناوين IP ثابتة) للحصول على شيء مثل ما يلي في / 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

ولكن إذا كنت تريد القيام بذلك عبر ملفات تهيئة resolvconf ، فستحتاج إلى تحريرها /etc/resolvconf/resolv.conf.d/base. في هذا الملف ، ضع معلوماتك كما تفعل resolv.conf.

nameserver 192.168.1.XXX

ثم أخبر resolvconf لتجديد resolv.conf.

sudo resolvconf -u

120
2018-06-28 15:35



على الرغم من أن هذا الجواب له أصوات ، والجزء الأول صحيح بشكل أو بآخر ، فإن الجزء الثاني من الإجابة غير صحيح. (1) هل ليس وضع خط "بحث" في /etc/resolvconf/resolv.conf.d/head. إذا وضعت سطر "بحث" هناك ، فسيتم تجاهل هذا السطر إذا تضمن resolvconf خط "بحث" في الجزء الديناميكي من ملف resolv.conf. يتجاهل المحلل glibc جميع ما عدا سطر "البحث" أو "النطاق" الأخير. انظر resolv.conf (5). (2) إذا تم تغيير توصيف resolvconf يجب عدم إعادة تشغيل مهمة resolvconf ولكن فقط قم بتشغيل تحديث ، "resolvconf -u". - jdthood
لقد قمت بإزالة الخط. الخيار الآخر سيكون استخدام الذيل بدلاً من الرأس. - tgm4883
يتم إعادة كتابة القاعدة ، الرأس أو الذيل (بدءًا من 12.04) تمامًا مثل resolv.conf ، حتى أتمكن من تأكيد صحة تعليقjdthood. لذا ، فإن الإجابة الكاملة ستقول - لا تقم بتحرير أي من ملفات resolv.conf ، ومجرد تشغيل: sudo /etc/init.d/networking restart كما واقع الأمر ، فإن ذلك سوف يكتب تغييرات واجهة ل resolv.conf. - tishma
@ tishma: مرحبًا. أولاً ، لمنع أي سوء فهم: لا شيء يكتب إلى ملفات القاعدة أو الرأس أو الذيل. لا يكتب أي شيء إلى أي ملفات في /etc/resolvconf/resolv.conf.d/ في وقت التشغيل. تتم قراءة هذه الملفات بواسطة resolvconf الذي يقوم بتجميع محتواها في الملف الذي تكتبه --- /run/resolvconf/resolv.conf --- الذي يشير إلى نقاط symlink /etc/resolv.conf. ثانيًا ، فيما يتعلق بما يجب القيام به بعد تغيير خيارات dns- * في / etc / network / interfaces. فعل ليس تشغيل "/etc/init.d/networking إعادة التشغيل" ؛ هذا هو الآن مهمل. بدلا من ذلك ifdown الواجهة في السؤال واذا كان مرة أخرى. - jdthood
في 14.04 ، لم تفعل هذه الإجابة شيئا بالنسبة لي. - Jay Sullivan


أعتقد أن الإجابة هي التحقق من /etc/dhcp/dhclient.conf، أي لا تطلب ذلك dns-nameservers منك DHCP زبون.

ثم قم بتحديث الخاص بك /etc/network/interfaces

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

ثم الخاص بك resolv.conf ستتم تهيئة الإعدادات التلقائية بالطريقة التي تريدها.

أضف الى dns-search ثم قم بتشغيل /etc/init.d/networking restart  (على الرغم من إهمال هذا البرنامج النصي ، إلا أنه لا يزال يعمل).


32
2017-11-26 01:58



قواعد dhclient على أي إعدادات resolvconf لذلك يجب أن يكون هذا هو أفضل إجابة. - Alex R
/etc/init.d/networking restart لم يعمل على جهازي ، ولكن sudo ifdown -a وثم sudo ifup -a فعل. (كما استغرق الأمر بعض الوقت لأدرك أنه كان علي استبداله dnsserverip مع شيء من هذا القبيل 8.8.8.8. أشعر سخيفة بعض الشيء). - Jason Gross
محاولة systemctl restart networking.service - Pavel Sayekat


من المحتمل أن يكون السبب في ذلك هو تكوين DHCP عند تثبيت Ubuntu لأول مرة. جرب هذه العملية المكونة من 3 خطوات لمعالجة مشكلة التهيئة التلقائية هذه.

أول

تحرير تكوين الواجهة الخاصة بك ، والذي يقع في: /etc/network/interfaces

أضف هذا السطر أدناه iface lo inet loopback:

dns-nameservers yourdns youraltdns

كمثال على Google DNS ، قد ترغب في استخدام هذا:

dns-nameservers 8.8.8.8 8.8.4.4

ثانيا

قم بتحرير ملف تكوين DHCP الخاص بك ، الموجود في:

/etc/dhcp/dhclient.conf

ضع علامة على الجملة كتعليق يستخدم # على كل سطر أو ببساطة إزالة كل خادم اسم الطلب. في 16.04 ، قد لا يُطلب منك إجراء أي تغييرات هنا.

الثالث

أعد تشغيل شبكة الاتصال الخاصة بك باستخدام هذا الأمر:

/etc/init.d/networking restart

في 16.04:

sudo ifdown -a
sudo ifup -a

18
2018-06-20 01:50



/etc/init.d/networking restart لم يعمل على جهازي ، ولكن sudo ifdown -a وثم sudo ifup -a فعل. - Jason Gross
هذا بسيط ويعمل على الرغم من أنه هو نوع من الاختراق! مشكلة مع أشياء مثل أوبونتو هو وجود 1000 طريقة لفعل شيء واحد! - Willa O Ng'wana
ومن ثم يمكنك التحقق من ذلك /etc/resolv.conf يحتوي على إدخالات DNS 2 الجديدة على أول خطوط مفيدة. - ROMANIA_engineer


رجاءا إنظر على resolvconfصفحة الرجل. يمكنك فرض تضمين بعض إعدادات DNS عن طريق إنشاء مثال. /etc/resolvconf/resolv.conf.d/base:

  /etc/resolvconf/resolv.conf.d/base
          File containing basic resolver information.  The lines  in  this
          file  are  included in the resolver configuration file even when
          no interfaces are configured.

هناك ملفات خاصة أخرى (الرأس والذيل) ، وهذه قد تساعدك على تحقيق ما تريد.


7
2017-09-04 14:26



يمكنك إضافة خطوط إلى /etc/resolvconf/resolv.conf.d/base ، ولكن نظرًا لأنه يمكن الوصول إلى كل خادم خوادم من خلال واجهة ويمكن الوصول إليها فقط عندما تكون هذه الواجهة مرتفعة ، فمن الأفضل ربط معلومات خادم الأسماء بتلك الواجهة. إذا تم تكوين الواجهة مع ifup ، فهذا يعني: وضع المعلومات على خطوط "dns-search" و "dns-nameservers" في / etc / network / interfaces stanzas. إذا تم تكوين الواجهة عبر DHCP ، فهذا يعني: تكوين خادم DHCP لتوفير أسماء البحث وعناوين خوادم الأسماء للعملاء. إلخ. استخدم الملف "الأساسي" فقط كاختراق مؤقت أو كحل أخير. - jdthood


بالنسبة لي ، كانت الإجابات المذكورة أعلاه غير كافية للأسباب التالية:

  • أنا لا أستعمل resolvconf، خطه فقط /etc/resolv.conf.
  • عن طريق chattr +i لتأمين resolv.conf يبدو جدا hacky. أحتاج إلى دمية لتكون حرة في إجراء تغييرات عند الضرورة.
  • AFAIK ، التحرير /etc/network/interfaces لا يمنع resolv.conf من الكتابة ؛ إنه يحدد ببساطة خوادم الأسماء التي يجب كتابتها. بالنسبة لي ، تحديد خوادم الأسماء لم يكن الهدف. أحاول أن أضبط options timeout:1 و options attempts:1 في 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 وبدلا من ذلك لا يفعل شيئا.

هذا العمل بالنسبة لي على أوبونتو 12.04.


4
2018-03-05 22:12



يعمل بشكل جيد على دبيان 8. حل أنيق! - Artur Bodera
فقط للاكتمال: manpage dhclient النصي يحمل المعلومات حول البرنامج النصي تكوين شبكة عميل DHCP المذكورة على الجواب أعلاه. - hecke
هذا لم يعمل على 16.04 ، أضفت أشياء إلى /etc/network/interfaces.d أيضا ، بدون أي تأثير ، وأضاف تجاوز فارغ من make_resolv_conf الموصى به هنا ، أي تأثير .... لكن لم يتم تعديل / etc / dhcp / dhclient.conf - هل أنا حقا بحاجة إلى تعديل ملف التكوين الثابت لإصلاح هذا؟ - silverjam


كما العديد من الإجابات الأخرى لهذا علاقة بهذا resolvconf يجري تثبيتها في النظام الخاص بك.

لذلك أفضل طريقة للحفاظ على شيء ما resolv.conf التي لن تضيع أثناء إعادة التشغيل هي تضمينها في ملفات تهيئة resolvconf الموجودة في:

/etc/resolvconf/resolv.conf.d/

في هناك تذهب ل head ملف. كل ما وضعت هناك ستكتب في الجزء العلوي من /etc/resolv.conf

كل شيء سيذهب إلى شيء كهذا:

# echo nameserver 8.8.8.8 >> /etc/resolvconf/resolv.conf.d/head
# resolvconf --enable-updates
# resolvconf -u

3
2017-10-17 13:59





إضافة خادم الأسماء الخاص بك إلى ملف /etc/resolvconf/resolv.conf.d/head. يحتوي الملف على رسالة تلقيتها:

يجب أن يبدو هذا الملف بعد إضافة 8.8.8.8

root@hvnatvcc: ~ # cat /etc/resolvconf/resolv.conf.d/head 
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 8.8.8.8

2
2017-10-23 10:43



تعد إضافة خطوط إلى /etc/resolvconf/resolv.conf.d/head حلًا سيئًا ، بل أسوأ من إضافة خطوط إلى /etc/resolvconf/resolv.conf.d/base. الحل الصحيح للواجهات التي تمت تهيئتها باستخدام ifup هو إضافة خطوط "dns-search" و "dns-nameservers" إلى stanzas في / etc / network / interfaces. انظر أيضا تعليقاتي على الإجابات الأخرى. - jdthood
إنه الشيء الوحيد الذي عمل في الواقع بالنسبة لي ... ويبدو أنه من الصعب معرفة السبب في عدم نجاح أي من الحلول "الصحيحة". - silverjam


قد يكون هذا مجرد بعض الغرابة الغريبة في الجهاز ، لكن شخص آخر قد يكون لديه نفس حالة الزاوية.

جربت العديد من الطرق للحصول على خوادم أسماء مقدمي خدمة الإنترنت المدرجين في /etc/resolv.conf دون أي نجاح:

  • أدرجتها في /etc/network/interfaces وإعادة تشغيل الشبكات. لم تظهر في /etc/resolv.conf.

  • أضعهم فيها /etc/resolv.conf صراحة ، ولكن بالطبع تم الكتابة فوقها. لقد ظهرت في /run/resolvconf/interface/eth0.inet، ولكن لم يحدث ذلك /etc/resolv.conf.

  • حاولت تكوين resolvconf للتحديثات الحيوية. لا تغيير.

وأخيرا قرأت في مكان ما إذا كان الجهاز المحلي (127.0.0.1) يظهر في /etc/resolv.conf لا يتم تضمين أي خوادم أسماء أخرى.

في اليأس أنا تحريرها /run/resolvconf/interface/lo.named، حذف السطر الوحيد في ذلك (nameserver 127.0.0.1) وإعادة التشغيل: ifdown eth0 && ifup eth0.

قام /etc/resolv.conf بتضمين خوادم أسماء مقدمي خدمة الإنترنت لأول مرة! ركضت service network-manager restart لمعرفة ما إذا كانت مستقرة و /etc/resolv.conf لا يزال يتضمن خوادم أسماء مقدمي خدمة الإنترنت. أعيد تشغيلها فقط للتأكد وأنها لا تزال هناك لكن  /run/resolvconf/interface/lo.named تمت إعادة التعيين إلى: nameserver 127.0.0.1.

إعادة تشغيل الشبكات لا تزال تعمل: /etc/resolv.conf لا يزال يحتوي على خوادم أسماء مقدمي خدمة الإنترنت. لا يمكنني شرح ذلك (هل يمكن لشخص ما؟) ولكن هذا قد يساعد شخصًا ما في نفس المكان.


2
2018-06-26 05:18



هذا ربما بسبب dnsmasq. يمكنك ببساطة إزالته باستخدام apt-get remove dnsmasq أو تحديث التكوين في /etc/dnsmasq.conf. - Tombart


الحلول الأخرى لم تنجح بالنسبة لي على نظام فيدورا 20 الخاص بي. كانت مشكلتي الخاصة أن سطر "البحث" في /etc/resolv.conf كان يتم الكتابة فوقه. هنا هو ما الثابتة. (هذا يفترض أن NetworkManager ينتج الخط search rn.yourcompany.com  وتريد أن تكون كذلك search rn.yourcompany.com yourcompany.com intnet.yourcompany.com:

1. استخدم الأمر "ifconfig" لمعرفة الواجهة التي تهمك:

$ ifconfig
  :
  :

em2:  <this was the one which was connected>

2. الجذر الجذر وتغيير إلى دليل أجهزة شبكة تكوين النظام:

$ sudo su -[sudo] 
password for youruser:
# cd /etc/sysconfig/networking/devices`
  1. استخدم محرر المفضلة المفضل لديك لإضافة Domain مع المجالات الإضافية للبحث:

DOMAIN="yourcompany.com intnet.yourcompany.com"

حفظ ، تسجيل الخروج ، وإعادة تسجيل الدخول. يجب أن يكون لدى NetworkManager السطر الآن \etc\resolve.conf:

search rn.yourcompany.com yourcompany.com intnet.yourcompany.com

1
2017-08-29 14:54



لا تمطر على العرض الخاص بك ، ولكن هذا هو اسأل أوبونتو ، وهكذا فيدورا خارج الموضوع. - Flimm