Tra cứu DNS không thành công với ví dụ `ping`, nhưng hoạt động với` host`


35

Tôi đang sử dụng pfSense 2.0rc3 và tôi đã thiết lập nó như một công cụ chuyển tiếp DNS và kích hoạt "Đăng ký thuê DHCP trong chuyển tiếp DNS" và những gì tôi hiểu là tất cả các cài đặt phù hợp để có được máy chủ DNS cho tra cứu cục bộ.

Nó hoạt động như mong đợi với Linux và đặc biệt tôi có thể chạy host abcping abc(và các ứng dụng khác) và tất cả chúng đều hoạt động như mong đợi.

Tuy nhiên, trong Mac OS X Lion 10.7, nó không hoạt động như mong đợi. Cụ thể, chỉ có tra cứu với hostlệnh dường như hoạt động, tức là

$ ping abc
ping: cannot resolve abc: Unknown host

$ host abc
abc.local has address 192.168.1.128

$ ping abc.local
ping: cannot resolve abc.local: Unknown host

$ host abc.local
abc.local has address 192.168.1.128

Tại sao việc tra cứu abccông việc khi sử dụng hostlệnh nhưng không thành công với ping(và các ứng dụng khác)?

Cảm ơn vì đã đọc.


Tôi đã kết thúc với tình huống tương tự trên MBP Yosemite mới (10.10). Sau khi tìm kiếm và định cấu hình nhiều, đây là câu trả lời có hiệu quả: apple.stackexchange.com/a/152892 Đối với bản ghi không có cấu hình
AlwaysAppendSearchDomains

Câu trả lời:


26

Tại sao họ thực hiện thay đổi này, tôi không biết, nhưng nó khiến tôi phát điên trong một thời gian.

Tôi không biết tại sao mọi thứ hoạt động cho máy chủ, nhưng không phải ping, nhưng tôi nghĩ nó liên quan đến bản chất của hai tiện ích này. Ping là một tiện ích chẩn đoán đơn giản (mặc dù rất hữu ích) để thả các gói trên dây sẽ được trả lại cho bạn. Chức năng tra cứu tên máy chủ chỉ là tác dụng phụ của công việc và được chuyển cho trình giải quyết đệ quy của hệ thống (Tôi tin rằng - Tôi chưa xác minh bằng cách kiểm tra các thư viện được liên kết hoặc bất cứ thứ gì thuộc loại đó). Công việc chính của máy chủ là thực hiện phân giải tên DNS, do đó, nó thực hiện trình phân giải đệ quy của chính nó.

Bộ giải quyết đệ quy của Apple là mDNSResponder. Vì một số lý do, phiên bản mDNSResponder trong Lion cần tùy chọn dòng lệnh "-AlwaysAppendSearchDomains" để hoạt động như trong Snow Leopard (ít nhất).

Đây là một cách nhanh chóng để khắc phục nó:

sudo sed -i .orig '/ProgramArguments/,/<\/array>/ {
s/\(<string>-launchd<\/string>\)/\1\
                <string>-AlwaysAppendSearchDomains<\/string>/
}' /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist

(Cần có hai ký tự tab ở đầu dòng thứ hai đến cuối cùng ở trên, nhưng tôi không thể tìm ra cách để trình soạn thảo nhỏ này chèn các tab, vì vậy tôi đã thêm 16 khoảng trắng. Hoặc nên hoạt động, nhưng các tab phù hợp với khoảng cách của tệp gốc tốt hơn.)

Điều này sẽ thêm đối số "-AlwaysAppendSearchDomains" vào tệp plist khởi động mDNSResponder (và lưu bản sao lưu), nhưng vì điều này được điều khiển bởi launchd, hệ thống đó cần được yêu cầu khởi động lại mDNSResponder.

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist

Bây giờ, nếu bạn kiểm tra quá trình mDNSResponder đang chạy của mình, bạn sẽ thấy nó chạy với đối số mới của mình:

ps auxww | grep mDNSResponder

(Đạo cụ cho http://www.makingitscale.com/2011/fix-for-broken-search-domain-resolution-in-osx-lion.htmlhttp://kavassalis.com/2011/07/wtf-orms -in-os-x-10-7 / , nơi tôi tìm thấy câu trả lời của mình cho vấn đề này.)


Bản sửa lỗi này cũng hoạt động cho Mountain Lion (10.8). Tôi chỉ áp dụng nó vào máy tính xách tay của tôi.
Sigsegv

Mát mẻ! Rất vui vì tôi có thể giúp.
Sigsegv

1
FYI: Điều này đã không hoạt động dưới Yosemite. Nếu bạn cần Luôn luôn Tìm kiếm các tên miền trên Yosemite, hãy thử: apple.stackexchange.com/a/157017/65787 Điều đó KHÔNG giải quyết được vấn đề .local cho tôi trên Yosemite, nhưng điều này đã làm =) apple.stackexchange.com/a/152892
Stan Kurdziel

Không làm việc trong El Captain. Và cách dễ dàng hơn để làm dường nhưsudo defaults write /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist ProgramArguments -array-add "–AlwaysAppendSearchDomains"
Dmitry Verkhoturov

9

Từ trang chủ (1) man:

THÔNG BÁO Mac OS X

Lệnh máy chủ không sử dụng độ phân giải tên và địa chỉ máy chủ hoặc các cơ chế định tuyến truy vấn DNS được sử dụng bởi các quy trình khác đang chạy trên Mac OS X. Kết quả của các truy vấn tên hoặc địa chỉ được in bởi máy chủ có thể khác với các quy trình được sử dụng bởi Mac OS X tên cơ chế và cơ chế phân giải địa chỉ. Kết quả của các truy vấn DNS cũng có thể khác với các truy vấn sử dụng thư viện định tuyến DNS của Mac OS X.

Thật không may, không có thông tin về cách chính xác lệnh máy chủ giải quyết tên máy chủ. Hành vi này làm cho nó hơi vô dụng để gỡ lỗi, IMHO.


6

Lịch sử cơ bản ... nslookup là mệnh lệnh, nhưng nó đã tự thực hiện tất cả các thói quen giải quyết. Điều bắt đầu xảy ra là các bộ phân giải hệ thống trên các nền tảng khác nhau hoạt động khác với nslookup. Đôi khi, điều này sẽ tạo ra một số kết quả khá khác nhau.

Các lệnh máy chủ và đào được tạo ra như là "viết lại" cho nslookup. Họ liên kết tĩnh trong các chức năng giải quyết hệ thống. Bộ giải quyết hệ thống là một tập hợp các hàm trong thư viện C tiêu chuẩn của một hệ thống tương tự UNIX hoặc UNIX (trên Mac OS X, các hàm này là một phần của thư viện netdb). Bằng cách này, các lệnh máy chủ và máy đào luôn hoạt động giống như cách trình phân giải hệ thống thực hiện đối với bất kỳ hệ điều hành nào chúng được xây dựng cho, nhưng chúng không phụ thuộc vào nó. Theo cách này, chúng là các công cụ chẩn đoán tuyệt vời trong trường hợp bộ giải quyết hệ thống bị trục trặc.

LƯU Ý: Lưu trữ và đào cả hai đều đọc danh sách máy chủ tên từ /etc/resolv.conf trừ khi chúng được cung cấp một máy chủ tên cụ thể để nói chuyện. Chỉ lệnh máy chủ sử dụng danh sách tìm kiếm trong tệp /etc/resolv.conf; đào không, đó là lý do tại sao người ta luôn phải cung cấp cho đào FQDN để giải quyết bất cứ điều gì. Cả hai lệnh đều hoàn toàn tự cung cấp; ví dụ: tệp /etc/resolv.conf là thứ duy nhất không có trong tệp nhị phân mà họ sử dụng.

mDNSresponder là Bonjour. Tôi đã không đào sâu vào nó quá sâu, nhưng tôi nghi ngờ rằng cài đặt cấu hình này không khắc phục được điều này hoặc ít nhất, không trực tiếp. Tôi vừa gặp vấn đề tương tự trên Mac OS X 10.9.1 và chỉ cần khởi động lại mDNSresponder đã khắc phục nó cho tôi. Tôi chưa bao giờ thấy vấn đề này trước đây vào ngày 10.5 -> 10.8 / 10.9 trên bất kỳ hệ thống nào khác. Ngoài ra, các ứng dụng GUI không bị ảnh hưởng bởi nó, nó chỉ là các công cụ dòng lệnh, như ping và ssh đã bị hỏng.

Nếu tôi tìm thấy thời gian để tìm hiểu thêm về thư viện, tôi sẽ xem liệu tôi có thể tìm thấy một lời giải thích đầy đủ hơn không.


4

Tôi đã kết hợp một tập lệnh shell để tự động sửa lỗi (và trình gỡ cài đặt nếu bạn cần sau), tại đây:

https://github.com/michthom/AlwaysAppendSearchDomains

Điều này là để cung cấp cho người dùng ít kỹ thuật tại nơi làm việc có thể né tránh việc chỉnh sửa các tệp hệ thống theo cách thủ công.


4

.local được dành riêng cho phát đa hướng. mDNS và máy chủ DNS trên cùng một mạng sử dụng .local có thể có vấn đề.


1
Tôi muốn giải thích nhiều hơn ở đây hoặc liên kết đến một số tài liệu. Cảm ơn vì miếng ngon!
bmike

3

Máy chủ đang nối thêm hậu tố .local dns. Ping thì không. Nếu bạn thấy điều này gây bối rối, bạn có thể thêm .local làm hậu tố mặc định trong tùy chọn hệ thống mạng và hệ thống sẽ thêm điều đó khi cố gắng giải quyết tên máy chủ.


Đó là một điểm tốt, và xin lỗi tôi đã không nói như vậy trong câu hỏi, nhưng ping abc.localcũng không hoạt động (mặc dù host abc.localvậy). Tôi đã sửa câu hỏi. pfSense tự động thêm tên miền cục bộ làm miền tìm kiếm khi gửi hợp đồng thuê DHCP, vì vậy đó sẽ không phải là vấn đề.
Brian M. Hunt

Wow - lạ thật. Điều gì xảy ra nếu bạn hoàn toàn đủ điều kiện địa phương với một dấu vết. ? ping abc.local.
bmike

1
Cùng một kết quả. Rõ ràng có hai cơ chế tra cứu trong Mac. Tại sao chúng khác nhau là khó tưởng tượng.
Brian M. Hunt

Tôi không chắc chắn câu trả lời này hoạt động trên Yosemite và các hệ điều hành mới hơn khác. Có lẽ chúng ta có thể có được một câu trả lời tốt hơn đi ?
bmike

Có tài liệu cảnh báo rằng tập tin / etc / hosts chỉ được sử dụng trong chế độ người dùng đơn. Không đúng. Tôi ngăn chặn vô tình truy cập vào nhiều kẻ xấu bằng cách đặt tên của họ vào / etc / hosts, định tuyến đến 127.0.0.1 Tôi không nghĩ vấn đề này cho câu hỏi này, mặc dù điều đó chắc chắn cho thấy Apple có một vài điều kỳ lạ. Tôi cũng lưu ý rằng OS X thường xuyên thay đổi độ phân giải của tôi, vì vậy tôi đã đặt một công việc định kỳ để khôi phục nó thành những gì tôi muốn cứ sau mười phút.
WGroleau

2

Trong trường hợp bạn đã thử tất cả các cách trên và không có gì hoạt động thì bạn có thể thêm máy chủ tênđường dẫn tìm kiếm vàoSystem Preferences>Network>Advance(bottom right of the window)>DNS tab nhập mô tả hình ảnh ở đây

Bản cập nhật /etc/resolv.conf và ping này sẽ hoạt động. Cập nhật đường dẫn tìm kiếm bằng cách chỉnh sửa /etc/resolv.conf không thực sự hoạt động nhưng vì một số lý do.

CẬP NHẬT:

Chỉnh sửa /etc/resolv.conf không hoạt động vì HĐH viết lại tệp dựa trên cài đặt khung Tùy chọn hệ thống.


1
"Chỉnh sửa /etc/resolv.conf không thực sự hoạt động" vì HĐH viết lại nó dựa trên khung pref.
WGroleau

1
Điều này thực sự đã lừa tôi đối nghịch với câu trả lời được chấp nhận.
Artem Pyanykh

1

Tôi không đủ danh tiếng để bình luận về bài viết của Lamont Peterson . Khởi động lại mDNSresponder làm việc cho tôi trên Mac OS X 10.7 (Lion). Không giống như Lamont Peterson, vấn đề này gây ra sự cố với một ứng dụng GUI cho tôi - Safari không thể giải quyết tên máy chủ công cộng hoặc riêng tư. Dưới đây là các bước cụ thể mà tôi đã làm và tôi nghi ngờ Lamont Peterson cũng đã làm:

sudo launchctl unload /System/Library/LaunchDaemons/com.apple.mDNSresponder.plist
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.mDNSresponder.plist

Các unloadtắt mDNSResponder và loadbắt đầu nó lên một lần nữa.

Điều này giải quyết vấn đề ngay lập tức; không cần khởi động lại.

Bạn có thể kiểm tra xem nó đã khởi động lại thành công hay chưa bằng cách sử dụng listlệnh:

$ sudo launchctl list | grep '^PID\|mDNSResponder'
PID     Status  Label
708     -       com.apple.mDNSResponder
-       0       com.apple.mDNSResponderHelper

Sự hiện diện của ID tiến trình (PID) có nghĩa là nó đang chạy. 708sẽ thay đổi khi được chỉ định bởi HĐH. Nếu trạng thái hiển thị một cái gì đó không phải là dấu gạch ngang hoặc số không, thì đã xảy ra lỗi.

Tôi không biết làm thế nào để mDNSResponderHelpertương tác với mDNSResponder; Tôi chỉ phải khởi động lại mDNSResponder.


1

Trong một dòng:

sudo kill $(ps ax | grep mDNSResponder | grep -v grep | grep -v Helper | awk '{ print $1 }')

0

vui lòng lưu ý tên OSX có thể không chuẩn, vì vậy để hoàn thiện:

  • FQDN có thể ping
  • Tên trong tệp "máy chủ" có thể ping được

Tên Mac KHÔNG nói chung: phải thực hiện hai sửa lỗi: a) thay đổi khoảng trắng thành "-" b) thêm .local

ví dụ Mac của tôi: MacBook Pro của ingconti's

sẽ có thể ping được tại: ingcontis-MacBook-Pro.local

Và mở prefs bạn có thể thấy:

nhập mô tả hình ảnh ở đây

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.