Lệnh tra cứu DNS của Mac OSX Lion [đã đóng]


96

Sau khi nâng cấp lên Mac OSX Lion, tôi phát hiện ra rằng / etc / hosts không được tìm kiếm ở vị trí đầu tiên để phân giải tên nữa. Điều này dẫn đến một số tác dụng phụ như:

  1. Các mục nhập trong / etc / hosts được giải quyết rất chậm
  2. Bạn không thể ghi đè các miền hiện có, ví dụ: 127.0.0.1 www.google.com
  3. Nếu bạn nhận được các mục nhập tên miền tìm kiếm từ DHCP, giả sử .lan, và một số anh chàng hài hước đã cấu hình localhost.lan thành một thứ khác thì 127.0.0.1 trong DNS cục bộ, bạn không thể truy cập localhost của mình nữa.

Hành vi này có chủ đích không? Liệu no co y nghia gi? Và quan trọng nhất, làm thế nào để tôi có thể quay lại hành vi cũ.


12
Siêu hữu ích câu hỏi - bất ngờ, ngạc nhiên đóng của nó như là off topic
Sebastian Patten

Ít nhất thì họ vẫn chưa xóa chủ đề .. chưa. Điều này đã cứu thịt xông khói của tôi. Tôi đã thay đổi tất cả các máy chủ của mình từ X.local sang X.lhost và sự cố đã biến mất. Một lưu ý nhỏ là tôi là một fan hâm mộ lớn của xip.io, ví dụ: foo.127.0.0.1.xip.io
Tim

Câu trả lời:


78

Tôi nghĩ vấn đề của anh ấy là Lion xử lý .local TLD khác vì nó được dành riêng cho một số tính năng Multicast DNS (được Bonjour sử dụng). Cách duy nhất tôi tìm thấy để giải quyết vấn đề này là sử dụng TLD khác cho máy chủ phát triển (ví dụ: .dev). Nó hoạt động tốt cho tôi, hy vọng nó sẽ hữu ích cho người khác!


Cảm ơn bạn. Thực sự rất hữu ích.
Cade

5
Suy nghĩ đầu tiên của tôi là "khập khiễng". Tuy nhiên, sau đó tôi vấp vào đống bài này khác và thay đổi lập trường của tôi: serverfault.com/questions/17255/...
Matt Beckman

Một lưu ý - nếu bạn sử dụng chrome để phát triển, các miền cấp cao nhất không chuẩn sẽ được hiểu là tìm kiếm. Bạn có thể cần phải làm gì đó như .dev.com để làm cho nó thực hiện tra cứu tên miền thực tế. Tôi không chắc làm thế nào để làm điều này một cách thanh lịch.
bbrame

5
@bbrame: Bạn có thể nhập tên miền cục bộ của bạn với giao thức url: http://foo.dev/; Sau đó, Chrome sẽ nhận ra đó foo.devlà miền chứ không phải truy vấn.
súng

Ngoài ra, bạn có thể sử dụng công cụ dscl để thêm một ngoại lệ.
Artur Bodera

51

Liên quan đến việc ghi đè các miền trong tệp máy chủ, tôi nhận thấy rằng trong một số trường hợp, Lion truy vấn địa chỉ IPv6 cho một miền nếu nó nhận thấy rằng miền không thể truy cập được qua mạng IPv4.

Tôi phát hiện ra điều này khi nhận thấy một số quảng cáo mà tôi chưa từng thấy trước đây trên Snow Leopard vì tôi đã chuyển hướng các miền quảng cáo đến 127.0.0.1. Tôi đã kích hoạt wirehark và nhận thấy AAAAcác Atruy vấn ( bản ghi DNS IPv6) theo sau các truy vấn IPv4 (IPv4). Các máy chủ quảng cáo thực sự có địa chỉ IPv6 và có thể cung cấp cho tôi nội dung của chúng.

Giải pháp cho điều này là có một

::1 mydomain.com

mục nhập cho mọi

127.0.0.1 mydomain.com

mục nhập trong tệp máy chủ của bạn.

Điều thú vị là, nếu bạn tình cờ có một máy chủ web cục bộ đang chạy 127.0.0.1:80và trình duyệt của bạn nhận được phản hồi từ máy chủ web (lỗi hoặc cách khác), thì không có AAAAtruy vấn nào được đưa ra, vì có vẻ như bạn hài lòng rằng ít nhất có thể có kết nối TCP.


Một lưu ý liên quan, nếu bạn sử dụng nhiều tệp máy chủ (để chặn quảng cáo, phát triển web cục bộ, v.v.), bạn có thể muốn chạy trình phân giải DNS cục bộ của riêng mình. Có một tác động đáng kể đối với đĩa / CPU khi phải đọc /etc/hoststheo mọi yêu cầu, vì vậy lợi ích tốt nhất của bạn là giữ cho tệp đó thật nhẹ.

Một lợi thế của việc chạy một cái gì đó như dnsmasqcục bộ (bên cạnh việc tăng hiệu suất đáng kể) là bạn có thể chuyển hướng toàn bộ các miền cấp cao nhất trở lại máy cục bộ của mình. Điều này cho phép bạn có toàn bộ không gian tên * .dev để phát triển (ví dụ), mà không cần phải nhập riêng từng miền bạn muốn được giải quyết cục bộ thành/etc/hosts


3
Cảm ơn rất nhiều vì điều này. Chờ đợi 10-30 giây để kiểm tra các thay đổi đối với mã của tôi đã khiến tôi phát điên và bạn đã tiết kiệm cho tôi rất nhiều thời gian bằng cách không phải tự mình tìm ra điều này.
Zack Angelo

1
Tôi đã gặp vấn đề tương tự và điều này đã khắc phục sự cố của tôi ngay lập tức! Đẹp.
cstrat

1
+1 Đây là một mẹo nhỏ tuyệt vời cho bất kỳ ai đang tìm kiếm "tại sao tệp máy chủ của tôi không hoạt động". Tôi có thể hỏi câu hỏi đó ở đây chỉ để bạn có thể đặt câu trả lời tương tự ở đó và giúp tìm kiếm dễ dàng hơn qua công cụ tìm kiếm!
cape1232

Sẽ không có sự gia tăng đáng kể nào về I / O của đĩa khi đọc /etc/hosts- hệ điều hành sẽ lưu vào bộ nhớ cache của tệp nếu nó được sử dụng thường xuyên.
Dan Pritts

Người dùng có mạng LAN hỗ trợ IPv6 (gần như là năm 2016!) Sẽ gặp sự cố này từ bây giờ cho đến khi IPv4 biến mất hoàn toàn .... hoặc cho đến khi Apple phát hiện ra vấn đề và giải quyết nó trong nội bộ! Phản hồi của Jean-Baptiste cũng nên được xem xét (tức là sử dụng .dev thay vì .local cho môi trường dev của bạn).
vô song,

17

Vấn đề là tôi đã liên kết với tệp / etc / hosts. Nếu / etc / hosts là một tệp đơn giản, mọi thứ đều ổn.


1
Im có cùng một vấn đề. Tuy nhiên, tệp / etc / hosts của tôi là một tệp bình thường. Bất kỳ sự giúp đỡ nào về điều này sẽ được đánh giá cao.
matt

4
Đây dường như cũng là vấn đề của tôi. Tôi đã có một liên kết tượng trưng đến một tệp trong thư mục hộp kéo thả của mình, nó từng hoạt động và tôi nghĩ nó rất thông minh. Có vẻ như Apple không còn thấy điều này thông minh nữa. Tôi cũng đã khởi động lại hoàn toàn thực sự bằng cách sử dụng Option-restart sau khi chuyển nó từ một liên kết tượng trưng sang một tệp thực. Mọi thứ có vẻ hạnh phúc bây giờ.
Tom S.

2
Các mục nhập trong tệp máy chủ được liên kết tượng trưng sẽ ổn nếu chúng không thể được giải quyết theo cách khác, điều này cho thấy rằng tệp máy chủ được liên kết biểu tượng chỉ được kiểm tra khi một địa chỉ không thể được giải quyết. Khi tệp máy chủ lưu trữ là tệp bình thường, nó sẽ được kiểm tra trước bất kỳ hình thức phân giải nào khác. Vì vậy, nếu bạn cần ghi đè các miền thực sự có mục nhập DNS hợp lệ, tệp máy chủ lưu trữ của bạn phải là tệp chứ không phải liên kết biểu tượng.
cerberos

1
Đối với hồ sơ, đây vẫn là trường hợp trong Mavericks (10.9), sẽ là hữu ích nếu ai đó có thể xác nhận những gì Yosemite không ...
William Turrell

1
Yosemite cũng làm điều đó, chỉ gặp phải vấn đề này. Đây là hành vi cực kỳ kỳ quặc.
Vytautas Gimbutas,

14

Cập nhật (2): OSX 10.10.5 mang đến sự trở lại của mDNSResponder.

Cập nhật: OSX 10.10 Yosemite đã thay thế mDNSResponder bằng "explored". Tôi chưa nâng cấp nên tôi không chắc về hành vi explored với các tra cứu DNS và /etc/hosts.

Quá trình phân giải DNS của hệ thống trên Lion mDNSResponder.

Có thể bạn đang nghĩ "nhưng mDNSResponder là trình phản hồi dns đa hướng." Bạn đúng; đó là những gì ban đầu nó dành cho và nó vẫn đáp ứng chức năng này. Tuy nhiên, trên các phiên bản MacOS mới hơn, nó cũng thực hiện tra cứu máy chủ lưu trữ tiêu chuẩn.

Ở Lion, nó không có vẻ tự động đọc lại /etc/hostskhi nó thay đổi, ít nhất là không phải lúc nào cũng vậy. Killing mDNSResponder(và cho phép nó tự động khởi động lại) dường như khắc phục được sự cố.

sudo killall mDNSResponder

nên làm thủ thuật.

dưới đây là câu trả lời ban đầu của tôi cho hậu thế. Tôi cho rằng nó vẫn có thể là một vấn đề trong một số trường hợp.

Đảm bảo rằng /etc/hoststệp của bạn là tệp văn bản kiểu unix, với nguồn cấp dữ liệu là phần cuối chứ không phải của cr.

Chỉnh sửa bằng TextWrangler hoặc trình soạn thảo văn bản unix sẽ bảo toàn tệp.

Nếu tệp của bạn đã bị rối, hãy thử cách này để khắc phục

tr '\015' '\012' < /etc/hosts > /tmp/hosts.$$
mv /etc/hosts /etc/hosts.bad
mv /tmp/hosts.$$ /etc/hosts
# fix up permissions while we are at it
chown root:wheel /etc/hosts
chmod 644 /etc/hosts

tín dụng cho bản sửa lỗi này cho:

http://techpatio.com/2011/guides-how-to/fixed-mac-osx-lion-etc-hosts-bugs-dns


Điều này có thể giải quyết vấn đề với daemon trình phân giải DNS bị lỗi, nhưng nó không giải quyết vấn đề phân giải máy chủ đến địa chỉ IP LAN thường gặp trong môi trường nhà phát triển. Phản hồi @guns, bên dưới, sẽ là giải pháp phù hợp cho hầu hết mọi người khi tìm kiếm câu hỏi này; mặc dù Jean-Baptiste-MONIN cũng có câu trả lời xứng đáng.
vô song,

Nó có thể giải quyết vấn đề thay đổi đối với / etc / hosts không được nhận thấy.
Dan Pritts

Tôi đang sử dụng sierra cao và câu trả lời quyết này vấn đề bí danh, nhờ
Absolutkarlos

4

Tôi đã gặp vấn đề này trong một thời gian, vì tôi đang làm việc với một nhóm các nhà phát triển, nên thực sự cần thiết phải sử dụng .local thay vì .dev hoặc .localhost, tôi thấy bài viết này rất hữu ích.

iTand.me - Tên miền cục bộ Lion và các máy chủ lưu trữ v.v ..

Tóm tắt;

Nhưng nếu bạn phải sử dụng .local, giải pháp thanh lịch nhất mà tôi đã tìm thấy là tiện ích dscl. Sử dụng nó rất đơn giản. Để thêm một máy chủ có tên mydev.local và trỏ nó đến máy chủ cục bộ, chỉ cần làm như sau:

sudo dscl localhost -create /Local/Default/Hosts/mydev.local IPAddress 127.0.0.1

Để xem tất cả các máy chủ hiện được xác định và IP của chúng

sudo dscl localhost -list /Local/Default/Hosts IPAddress

Và để xóa máy chủ:

sudo dscl localhost -delete /Local/Default/Hosts/mydev.local

Nhìn chung, khá đơn giản và hoạt động tốt. Thay vào đó, tôi vẫn muốn có thể chỉnh sửa / etc / hosts, nhưng đây là một giải pháp thay thế tốt hơn cho việc phải đổi tên tất cả các máy chủ .local của chúng tôi.


3
Khi thêm tên máy chủ theo cách này, nó dường như không làm được gì cả. Không thể ping địa chỉ. Ví dụ: sudo dscl localhost -tạo / địa phương / Default / Hosts / test1 IPAddress 127.0.0.1 ping test1 ping: không thể quyết test1: Unknown chủ
oligofren

3

Trước khi chuyển từ Snow Leopard sang Lion, tôi đã có một số mục nhập dành riêng cho ứng dụng /etc/hosts, như sau:

127.0.0.1 foo.bar.local

Sau khi cập nhật, tải các ứng dụng cục bộ của tôi RẤT chậm. Tôi nhận thấy rằng sự chậm trễ đã xảy ra trước khi yêu cầu hiển thị trong tệp nhật ký và khi nó xảy ra, bản thân ứng dụng vẫn nhanh như bình thường.

Bây giờ tôi có hai dòng cho mỗi ứng dụng, như thế này:

127.0.0.1 foo.bar.local
::1       foo.bar.local

... và mọi thứ lại nhanh chóng.

Rõ ràng điều này thêm địa chỉ IPv6? Tôi thực sự không hiểu lắm, nhưng nó hoạt động.


Không có gì khác làm việc cho tôi nhưng điều này đã làm ngay lập tức - cảm ơn Nathan!
foiseworth

3

Tình huống của tôi cũng tương tự, nhưng độ trễ, chính xác là 5 giây, chỉ xảy ra đối với các URL kết thúc bằng '.local'. Khi xem các trang web kết thúc bằng '.dev', không có sự chậm trễ nào.

Một số nhà phát triển khác trong văn phòng của tôi gặp sự cố này, trong khi một số ít thì không. Tôi đã hy vọng có một bản sửa lỗi đơn giản và tôi không muốn đổi tên trang web thành '.local' do các phụ thuộc khác.

Tôi đã chạy lệnh sau trong Terminal và khác biệt kết quả đầu ra của mình với một số người dùng khác trong văn phòng.

scutil --dns

Phần này là sự khác biệt duy nhất:

resolver #2
  domain   : 00000000.members.btmm.icloud.com
  options  : pdns
  timeout  : 5
  order    : 150000

Máy Mac của tôi đã được liên kết với tài khoản iCloud của tôi và tôi đã bật Back To My Mac. Sau khi tôi tắt Back To My Mac, trình giải quyết bổ sung biến mất và độ trễ 5 giây biến mất.


1

Wow, thật là một cơn ác mộng. Tôi đã đọc hoàn toàn mọi thứ về chủ đề này và mọi thứ được gợi ý cho đến nay đều gần giống với những gì tôi đã trải qua, nhưng không có giải pháp nào phù hợp với tôi.

Và tôi đã tìm ra lý do tại sao.

Không giống như những người khác, tôi không sử dụng / etc / hosts để thiết lập miền cục bộ. Tệp / etc / hosts của tôi đã có sẵn, chỉ chứa các mục nhập cần thiết cho giao diện loopback và máy chủ phát sóng. Hơn nữa, nó là một tệp unix được mã hóa chính xác, vì tôi là loại người chỉ chỉnh sửa nó từ dòng lệnh bằng cách sử dụng emacs. Và, cảm ơn Chúa, tôi không phải sử dụng máy chủ DNS của riêng mình như DNSmasq để khắc phục sự cố.

(Nói rõ hơn, triệu chứng đưa tôi đến đây với vấn đề này là emacs mất khoảng 10 giây để khởi động, nhưng chỉ khi tôi đang bật wifi. Nếu tôi tắt wifi, emacs sẽ khởi động ngay lập tức như mong đợi.)

Giải pháp của tôi: máy tính xách tay của tôi có tên, "terminator". (Vâng, vỏ ngoài bằng nhôm sáng bóng của nó khiến tôi liên tưởng đến nhân vật Arnold Schwarzenegger.) Tôi chỉ cần thêm các mục vào / etc / hosts cho chính tên của chiếc máy:

127.0.0.1   terminator
::1         terminator

Tôi đã tìm thấy tên máy chủ của mình bằng cách chạy một lệnh đơn giản trong thiết bị đầu cuối:

hostname

... mà trở lại với đầu ra: "terminator". Sau khi thay đổi / etc / hosts để chứa hai mục nhập đó, emacs hiện có thể nhanh chóng giải quyết tên máy tính xách tay của tôi.

Tôi hi vọng điêu nay se giup được ai đo.


1
điều này dường như đã làm việc cho tôi ngay bây giờ. Chúng tôi sẽ xem liệu điều này có đúng không. Tôi RẤT RỒI bạn đã tìm ra điều này, bởi vì tôi đã liên tục thấy vấn đề này xuất hiện cảnh báo.
Jeremy Carlson

Bắn. Đây không phải là một giải pháp vĩnh viễn đối với tôi. Vấn đề trở lại. Phiền bạn, khi tôi đọc lại điều này, vấn đề của tôi không phải của bạn ...
Jeremy Carlson

0

Tôi đã gặp vấn đề về tốc độ khi sử dụng OSX Lion làm hộp phát triển web ... Sử dụng kết hợp các đề xuất, tôi đã sử dụng đến việc tắt mạng ipv6 và định tuyến ipv6 đến localhost6 ... mọi thứ đã tăng lên khá nhiều ...

sudo networksetup -setv6off Ethernet

/ etc / hosts ...

127.0.0.1    localhost
127.0.0.1    dev.aliasdomain.com
... 
::1          localhost6 

0

Tôi nghĩ rằng đã có một số bản sửa lỗi. Tôi đã thấy rất nhiều vấn đề được đề cập và không có vấn đề nào trong số này hiện đang áp dụng (ví dụ: đặt nhiều bí danh trên một dòng hiện giờ hoạt động tốt đối với tôi).

Có vẻ như với Lion, Apple đã thực hiện một số thay đổi mạnh mẽ đối với mDNSResponder để xử lý tất cả các tra cứu DNS và (ít nhất là với Lion) cũng xử lý / etc / hosts cache. Đối với tôi, tra cứu về phía trước cũng hoạt động. Nhưng tra cứu ngược lại (ví dụ: tra cứu 1.2.3.4 thay vì google.com) không hoạt động.

Sau rất nhiều khó khăn, có vẻ như mDNSResponder chuyển đổi tra cứu này thành 4.3.2.1.in-addr.arpa và thực hiện tra cứu tên. Đây cũng có thể là cách DNS thích hoạt động hơn, nhưng nó hoàn toàn không hoạt động với / etc / hosts.

Tất nhiên, trừ khi bạn thêm bí danh 4.3.2.1.in-addr.arpa cho mỗi máy chủ lưu trữ, trong đó 4.3.2.1 là địa chỉ ip theo thứ tự ngược lại mà bạn đã quen nhìn thấy nó. Điều này sửa chữa mọi thứ cho tôi. Đây là một mục nhập ví dụ / etc / hosts:

1.2.3.4 foo foo.example.com alias.example.com 4.3.2.1.in-addr.arpa

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.