Không thể giải quyết tên miền .foo.local


15

Nơi làm việc của tôi có một mạng nội bộ với các tên miền như server01.foo.local, server02.foo.localv.v. Gần đây tôi đã khởi động môi trường trực tiếp Fedora 16 để kiểm tra và phát hiện ra rằng các tên miền này không giải quyết được.

Ví dụ:

$ ping server01.foo.local
ping: máy chủ lưu trữ không xác định01.foo.local
$ ping server01
PING server01.foo.local (XXXX) ...

Tại sao sẽ server01giải quyết (và in tên là server01.foo.local), nhưng server01.foo.localsẽ không?


Có chính xác vấn đề tương tự với Ubuntu chạy trong VMBox. Giải pháp của adam820 cũng làm việc cho tôi.
jimbo

Câu trả lời:


22

Mặc dù tôi không hiểu rõ lý do đằng sau lý do tại sao nó không hoạt động như mong đợi, nhưng dường như có một cuộc xung đột rất lớn với dịch vụ mDNS (Avahi trong Linux, Bonjour / Zeroconf trong Mac / Windows) và các mạng Windows sử dụng .local làm tên định tuyến nội bộ cho tên miền. Điều dường như xảy ra là khi ping máy chủ01, nó bỏ qua việc sử dụng mDNS để phân giải và sau đó nối thêm miền tìm kiếm (foo.local) vào yêu cầu, truy vấn thành công máy chủ DNS cho server01.foo.local. Tuy nhiên, khi sử dụng mDNS (sử dụng .local làm phần mở rộng tên máy mặc định), khi bạn cố gắng ping server01.foo.local, nó thực sự phát trên mDNS đang tìm kiếm một máy có tên "server01.foo"; khi thất bại, nó không chuyển sang DNS thẳng vì bất kỳ lý do gì. Một cách giải quyết lớn cho vấn đề này là không đặt tên miền .local của bạn, điều này có thể đi ngược lại với đào tạo của hầu hết các quản trị viên Windows về cấu trúc miền. Điều đó đang được nói:

Nếu mDNS không có kết quả trong mạng của bạn (như thường thấy trong doanh nghiệp, có xu hướng chạy các máy chủ DNS chuyên dụng so với mạng gia đình, nơi đôi khi mDNS được sử dụng), thì việc thay đổi thứ tự tìm kiếm là cách giải quyết dễ dàng nhất.

Điều này có thể được tìm thấy trong /etc/nsswitch.conf. Phần dành cho máy chủ lưu trữ sẽ liệt kê thứ tự, mặc định của Fedora 16 là:

hosts:      files mdns4_minimal [NOTFOUND=return] dns myhostname

Nếu bạn thay đổi điều đó thành:

hosts:      files dns mdns4_minimal [NOTFOUND=return] myhostname

nơi bạn đang di chuyển về phía trước theo thứ tự tìm kiếm, điều đó sẽ khắc phục mọi thứ ngay bây giờ. Ngoài ra, nếu bạn biết bạn sẽ không cần mDNS, chỉ cần xóa phần "mdns4_minimal [NOTFOUND = return]".

Nhìn vào lỗi này trên trình theo dõi của Red Hat , có vẻ như đây là một vấn đề tồn tại lâu dài và không có cách khắc phục rõ ràng vào lúc này. Mặc dù, nếu ai đó có thể cung cấp cái nhìn sâu sắc hơn về lý do tại sao điều này xảy ra theo cách này, nó sẽ được đánh giá cao.


xóa phần mdns đã giải quyết vấn đề
rhollencamp

Cảm ơn bạn rất nhiều vì đã thêm điều này. Có chính xác cùng một vấn đề và di chuyển mục dns đầu tiên giải quyết nó. Trong trường hợp của tôi, tôi đang sử dụng Ubuntu mới nhất, không phải Fedora, nhưng giải pháp hoàn toàn giống nhau.
jimbo

không có giá trị gì, tôi chỉ thử điều này và thấy rằng việc sử dụng VPN của cisco vpnckhông thể kết nối sau khi xóa các mục trên hosts: .*dòng /etc/nsswitch.conf. Thay thế các cài đặt này đã khắc phục sự cố.
dobbs

"khi thất bại, nó không chuyển sang DNS thẳng vì bất kỳ lý do gì." . Lý do khá rõ ràng. [NOTFOUND=return]có nghĩa là "nếu mDNS cho bạn biết tên .local không được tìm thấy, thì đó là có thẩm quyền và không có lý do gì để hỏi thêm". Di chuyển DNS trước mDNS là một công việc xung quanh, nhưng chỉ cần thực hiện các lỗi mDNS không có thẩm quyền là đủ.
MSalters

Vâng, đó là một nhận xét hợp lệ; điều này đã 7 năm trước và tôi không biết điều đó vào thời điểm đó. Nhưng có, loại bỏ nó, loại bỏ gói như được lưu ý dưới đây, hoặc thay đổi thứ tự là tất cả các giải pháp / giải pháp hợp lệ.
adam820

2

Tôi muốn đề xuất một giải pháp khác trong trường hợp bạn đang sử dụng .localtên miền. Đầu tiên, đó không phải là một ý tưởng hay vì có vẻ như là một tiêu chuẩn / quy ước được sử dụng .localcho một số khám phá động đa hướng.

Nhưng nếu bạn khăng khăng, việc gỡ bỏ nss-mdnsgói hoặc libnss-mdnsgói tùy thuộc vào bản phân phối của bạn cũng sẽ dễ dàng hơn và bạn sẽ giải quyết được vấn đề. Nếu bạn không cần chức năng đó, vậy thì tại sao nó lại tồn tại trong đó?

Đây là 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

Một số điều bạn có thể kiểm tra:

  • Có một đơn đặt hàng trong /etc/host.conf, chỉ định kiểm tra / etc / hosts trước khi truy vấn DNS không?

  • là server01 trong / etc / hosts?

  • Có một search foo.local/ etc / giải quyết, conf? Điều đó sẽ nối thêm foo.local vào bất kỳ tên máy chủ nào bạn đang tìm kiếm

Tôi tự hỏi nếu máy chủ tên của bạn được thiết lập chính xác. Nếu bạn vẫn còn có nslookup, những gì hiện nó trở lại cho server01, server01.foo.localvà các địa chỉ IP (reverse lookup)?


* host.conf không có gì về thứ tự Tôi đã thử /etc/resolv.conf chống ghi sau khi chỉnh sửa nó để NM không thể ghi đè và khởi động lại; không có xúc xắc
rhollencamp

@rhollencamp: bạn có nslookup trên hệ thống của mình không?
ott--
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.