ไม่สามารถแก้ไขชื่อโดเมน. foo.local


15

สถานที่ทำงานของฉันมีอินทราเน็ตที่มีชื่อโดเมนเช่นserver01.foo.local, server02.foo.localฯลฯ ฉันเพิ่ง booted หมวก 16 สภาพแวดล้อมที่อยู่ในการทดสอบมันออกมาและพบว่าชื่อโดเมนเหล่านี้ไม่สามารถแก้ไข

ตัวอย่างเช่น:

$ ping server01.foo.local
ping: ไม่รู้จักโฮสต์ server01.foo.local
$ ping server01
PING server01.foo.local (XXXX) ...

ทำไมจะserver01แก้ไข (และพิมพ์ชื่อเป็นserver01.foo.local) แต่server01.foo.localจะไม่?


พบปัญหาเดียวกันกับที่ Ubuntu ทำงานใน VMBox โซลูชันของ @ adam820 ก็ใช้ได้สำหรับฉันเช่นกัน
jimbo

คำตอบ:


22

ในขณะที่ฉันไม่ได้ 100% ขึ้นอยู่กับเหตุผลที่อยู่เบื้องหลังว่าทำไมมันไม่ทำงานตามที่คาดไว้ดูเหมือนจะมีความขัดแย้งขนาดใหญ่มากกับบริการ mDNS (Avahi ใน Linux, Bonjour / Zeroconf ใน Mac / Windows) และเครือข่าย Windows ที่ ใช้. local เป็นชื่อการเราต์ภายในสำหรับโดเมน สิ่งที่น่าจะเกิดขึ้นคือเมื่อ pinging server01 มันข้ามโดยใช้ mDNS เพื่อการแก้ปัญหาจากนั้นผนวกโดเมนการค้นหา (foo.local) ต่อท้ายคำขอเพื่อค้นหาเซิร์ฟเวอร์ DNS สำหรับ server01.foo.local อย่างไรก็ตามเมื่อใช้ mDNS (ซึ่งใช้. local เป็นส่วนขยายชื่อเครื่องเริ่มต้น) เมื่อคุณพยายาม ping server01.foo.local จริง ๆ แล้วมันจะแพร่กระจายผ่าน mDNS เพื่อค้นหาเครื่องที่มีชื่อ "server01.foo"; เมื่อล้มเหลวมันจะไม่ย้ายไปที่ DNS แบบตรงไม่ว่าด้วยเหตุผลใดก็ตาม วิธีแก้ปัญหาขนาดใหญ่นี้ไม่ใช่การตั้งชื่อโดเมนของคุณ. local ซึ่งอาจขัดกับการฝึกอบรมผู้ดูแลระบบ Windows ส่วนใหญ่เกี่ยวกับการสร้างโครงสร้างโดเมน ที่ถูกกล่าวว่า:

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

สามารถพบได้ใน /etc/nsswitch.conf ส่วนสำหรับโฮสต์จะแสดงรายการคำสั่งซื้อซึ่งสำหรับค่าเริ่มต้นของ Fedora 16 คือ:

hosts:      files mdns4_minimal [NOTFOUND=return] dns myhostname

หากคุณเปลี่ยนเป็น:

hosts:      files dns mdns4_minimal [NOTFOUND=return] myhostname

ที่ที่คุณกำลังเคลื่อนย้าย DNS ไปข้างหน้าในลำดับการค้นหาซึ่งควรแก้ไขสิ่งต่างๆในตอนนี้ หรือถ้าคุณรู้ว่าคุณไม่ต้องการ mDNS เลยให้ลบส่วน "mdns4_minimal [NOTFOUND = return]"

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


การลบส่วน mdns แก้ไขปัญหา
rhollencamp

ขอบคุณมากสำหรับการเพิ่มนี้ มีปัญหาเดียวกันอย่างแน่นอนและการย้ายรายการ DNS ก่อนแก้ไขมัน ในกรณีของฉันฉันใช้ Ubuntu รุ่นล่าสุดไม่ใช่ Fedora แต่โซลูชันนั้นเหมือนกันทุกประการ
jimbo

ไม่มีอะไรคุ้มค่าผมก็พยายามนี้และพบว่า Cisco VPN โดยใช้vpncไม่สามารถเชื่อมต่อหลังจากออกรายการเหล่านั้นบนเส้นhosts: .* /etc/nsswitch.confการแทนที่การตั้งค่าเหล่านี้แก้ไขปัญหาได้
dobbs

"เมื่อล้มเหลวจะไม่ย้ายไปยัง DNS แบบตรงไม่ว่าด้วยเหตุผลใดก็ตาม" . เหตุผลนั้นชัดเจน [NOTFOUND=return]หมายถึง "ถ้า mDNS บอกคุณไม่พบชื่อ. local นั่นก็เป็นสิทธิ์และไม่มีประเด็นที่จะถามเพิ่มเติม" การย้าย DNS มาก่อน mDNS เป็นการแก้ไข แต่การทำให้ mDNS ล้มเหลวผู้ที่ไม่ได้รับอนุญาตก็เพียงพอแล้ว
MSalters

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

2

ฉันขอแนะนำวิธีแก้ไขปัญหาอื่นในกรณีที่คุณใช้.localโดเมน ครั้งแรกมันไม่ใช่ความคิดที่ดีเพราะมันดูเหมือนว่าเป็นมาตรฐาน / การประชุมที่ใช้.localสำหรับการค้นพบมัลติคาสต์ไดนามิก

แต่ถ้าคุณยืนยันจะเป็นการง่ายกว่าที่จะลบnss-mdnsแพ็กเกจหรือlibnss-mdnsแพ็คเกจตาม distro ของคุณและคุณจะได้รับการแก้ไขปัญหา หากคุณไม่ต้องการฟังก์ชั่นนั้นทำไมมันถึงยังคงอยู่ในนั้น

ที่นี่yum info nss-mdns:

Summary     : glibc plugin for .local name resolution
URL         : http://0pointer.de/lennart/projects/nss-mdns/
License     : LGPLv2+
Description : nss-mdns is a plugin for the GNU Name Service Switch (NSS)
            : functionality of the GNU C Library (glibc) providing host name
            : resolution via Multicast DNS (aka Zeroconf, aka Apple Rendezvous,
            : aka Apple Bonjour), effectively allowing name resolution by common
            : Unix/Linux programs in the ad-hoc mDNS domain .local.
            : 
            : nss-mdns provides client functionality only, which means that you
            : have to run a mDNS responder daemon separately from nss-mdns if
            : you want to register the local host name via mDNS (e.g. Avahi).

1

บางสิ่งที่คุณสามารถตรวจสอบได้:

  • มีคำสั่งใน /etc/host.conf ที่ระบุให้ตรวจสอบ / etc / hosts ก่อนทำการสืบค้น DNS หรือไม่

  • server01 ใน / etc / hosts คืออะไร

  • มีsearch foo.localใน / etc / resolv, conf? นั่นจะผนวก foo.local กับชื่อโฮสต์ที่คุณค้นหา

ฉันสงสัยว่าเนมเซิร์ฟเวอร์ของคุณตั้งค่าไว้ถูกต้องหรือไม่ หากคุณยังมี nslookup สิ่งที่ไม่ได้กลับมาserver01, server01.foo.localและที่อยู่ IP (ย้อนกลับ)?


* host.conf ไม่มีอะไรเกี่ยวกับการสั่งซื้อ * server01 ไม่ได้อยู่ใน / etc / hosts * search foo.local อยู่ใน /etc/resolv.conf (NetworkManager วางไว้ที่นั่น) แต่การลบไม่ได้ช่วยอะไร ฉันพยายามป้องกันการเขียน /etc/resolv.conf หลังจากแก้ไขมันเพื่อให้ NM ไม่สามารถเขียนทับและรีบูตเครื่องได้ ไม่มีลูกเต๋า
rhollencamp

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