Trong OS X, làm cách nào tôi có thể thêm 127.0.0.1 vào danh sách các máy chủ DNS thu được qua DHCP?


2

Tôi đang cố gắng sử dụng dnsmasq để giải quyết một số miền đã biết bằng cách sử dụng cấu hình của nó, nhưng hãy để phần còn lại của các yêu cầu chuyển đến máy chủ DNS bình thường được chỉ định bởi DHCP. Tôi không thể làm điều này để làm việc. Khi tôi đặt DNS thành 127.0.0.1 thông qua bảng điều khiển Mạng, tôi phải mã hóa cứng các máy chủ DNS được gán DHCP thành cấu hình của dnsmasq. Tuy nhiên, khi tôi ở một mạng khác, ví dụ như tại nơi làm việc, tại máy khách, các địa chỉ này khác nhau. Tôi phải cấu hình lại bất cứ khi nào tôi thay đổi mạng.

Làm cách nào tôi có thể định cấu hình OS X để sử dụng 127.0.0.1 VÀ bất kỳ máy chủ DNS nào được chỉ định qua DHCP?

Nếu điều đó là không thể, thì làm sao tôi có thể nói với dnsmasq để có được các máy chủ DNS ngược dòng thông qua DHCP?

Đây là những gì tôi biết cho đến nay.

  1. /etc/resolv.conf trên OS X là động, nó thay đổi theo những gì bạn đặt trong tùy chọn Mạng hoặc sử dụng DHCP. Nó thay đổi bất cứ lúc nào bạn kết nối lại. Nó thậm chí còn bị xóa khi bạn ngoại tuyến. Vì vậy, ngay sau khi tôi sử dụng 127.0.0.1, điều này được phản ánh trong /etc/resolv.conf và tôi không biết có nơi nào có thể tìm thấy địa chỉ DNS được gán DHCP trước đây không.

  2. OS X không sử dụng /etc/resolv.conf.head.

  3. OS X không sử dụng /etc/dhclient.conf nơi bạn có thể thêm các máy chủ DNS vào danh sách được cung cấp DHCP.

  4. /etc/resolver/tld.conf không phải là một giải pháp, bởi vì điều đó cố gắng sử dụng máy chủ DNS dựa trên việc khớp với một tld (thật tốt nếu bạn sử dụng .dev hoặc một cái gì đó).

Chỉnh sửa: Có một ảnh chụp màn hình của cài đặt DNS Mạng ở đây trông giống như những gì tôi muốn, nhưng tôi không biết tác giả của bài viết đó đã đạt được như thế nào.

Câu trả lời:


5

Đầu tiên, sử dụng 127.0.0.1 VÀ máy chủ DNS được gán DHCP sẽ không hoạt động. Nếu OS X có nhiều máy chủ DNS được cấu hình, thì nó không thử chúng theo trình tự, nó sẽ thực hiện một số thứ giống như vòng tròn - gửi các yêu cầu khác nhau đến các máy chủ khác nhau ít nhiều một cách ngẫu nhiên. Kết quả cuối cùng: một số tra cứu mà bạn muốn được xử lý bởi dnsmasq sẽ chuyển đến máy chủ thông thường (và nhận kết quả sai) và một số kết quả mà bạn muốn gửi đến máy chủ thông thường sẽ chuyển đến dnsmasq (và không thành công). Không tốt.

Có thể nói dnsmasq sử dụng máy chủ DNS do DHCP cung cấp, nhưng tôi không thấy cách nào rõ ràng để làm điều đó. Thay vào đó, những gì tôi khuyên bạn nên sử dụng cấu hình DNS ghi đè cấu hình DNS thông thường cho các miền bạn muốn xử lý đặc biệt. Có hai lựa chọn cho việc này:

  1. Bỏ qua dnsmasq và đặt các máy chủ bạn muốn xử lý đặc biệt vào / etc / hosts (xem bài viết này chẳng hạn).
  2. Sử dụng / etc / decver / file để truy vấn trực tiếp các tên miền cụ thể tới 127.0.0.1, ghi đè máy chủ DNS chung (do DHCP cung cấp) (xem trang hướng dẫn cho / etc / decverbài viết Gợi ý Mac OS X này . thư mục / etc / decver và đặt một tệp vào đó cho mỗi tên miền bạn muốn ghi đè. Ví dụ: /etc/resolver/somedomain.com sẽ chứa "máy chủ tên 127.0.0.1".

Tôi hiểu, cảm ơn. Và bạn không nghĩ có cách nào để viết ra các máy chủ DHCP thành một tệp văn bản cho dnsmasq khi kết nối với mạng?
Michiel van Oosterhout

1
@michielvoo: Có, nhưng nó sẽ lộn xộn. Bạn sẽ cần một cách để phát hiện khi cấu hình mạng thay đổi (khó khăn), sau đó phát hiện giao diện mạng nào là chính (cũng khó, tôi không nghĩ networksetupcó cách nào để hiển thị thứ tự dịch vụ trực tiếp; có thể sử dụng scutil?), Sau đó sử dụng một cái gì đó như ipconfig getpacket en1 | grep domain_name_serverđể tìm các máy chủ DNS (đó là phần dễ dàng) và cuối cùng đặt dnsmasq (cũng dễ dàng, AIUI).
Gordon Davisson

1

Sử dụng câu trả lời của Gordon làm điểm khởi đầu, tôi có thể giải quyết vấn đề này cho mục đích của mình, đó là tạo tên máy chủ cho các dự án phát triển web. Điều này đã được thử nghiệm trên OS X 10.9 (Mavericks).

Tôi sử dụng một .devhậu tố cho các trang web thử nghiệm của tôi (ví dụ project1.dev, project2.dev). Cách tiếp cận này cho phép tôi tạo nhiều .devtên miền tùy ý , nhưng không phải tạo một tệp cho mỗi tên miền /etc/resolver. Đó là sự cải thiện nhỏ so với câu trả lời của Gordon; bạn chỉ cần tạo một tệp một lần cho mỗi hậu tố.

Điều này hoạt động cho dù tôi đang ở trên mạng làm việc, mạng gia đình hoặc VPN.

  1. Trong ngăn tùy chọn Mạng, đi đến Nâng cao, DNS và xóa mọi máy chủ DNS tùy chỉnh được thêm vào, do đó bạn chỉ cần sử dụng các giá trị được gán DHCP.
  2. sudo mkdir /etc/resolver/
  3. sudo sh -c 'echo nameserver 127.0.0.1 > /etc/resolver/dev'
  4. Nếu bạn chưa có, hãy thêm phần sau vào /usr/local/etc/dnsmasq.conf(giả sử bạn đã cài đặt dnsmasq với homebrew; vị trí của nó có thể khác):

    address=/dev/127.0.0.1
    

Nếu bạn sử dụng các hậu tố bổ sung (ví dụ project1.loc:), chỉ cần lặp lại bước 3 và 4, thay thế hậu tố cho devcả hai bước.

Cố gắng giải quyết tên máy chủ bằng dig, hosthoặc nslookupsẽ thất bại, nhưng tên máy chủ sẽ giải quyết trong trình duyệt web hoặc, ví dụ , curl. curl http://project1.devhoạt động như mong đợi.


có vẻ như phương thức này đã bị hỏng sau khi cập nhật lên mac OSX 10.10: khi bạn ngoại tuyến, các máy chủ .dev sẽ "không tìm thấy".
Lenciel
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.