Đặt máy chủ DNS trên OS X ngay cả khi không có kết nối internet


17

Tôi đã cài đặt, cấu hình máy chủ DNS (phiên bản cục bộ của Dnsmasq) để phân giải thành localhost như tôi muốn, tất cả đều ổn.

Khi tôi ngoại tuyến, nó sẽ ngừng hoạt động, vì OS X có nội dung trống của decv.conf và bỏ qua nỗ lực phản ánh các thay đổi trong tệp này.

Bất cứ ý tưởng, làm thế nào để cấu hình DNS ngay cả khi ngoại tuyến?

Vấn đề tương tự (chưa được giải quyết): http://blog.steamshift.com/geek/leopard-lookupd-and-local-web-development-sites

Động lực chính là sự phát triển dễ dàng của ứng dụng RoR sử dụng tên miền phụ làm khóa tài khoản. Và bạn không thể sử dụng 127.0.0.1 * .yourapp.local trong / etc / hosts. Một số anh chàng đã đăng ký tên miền smackaho.st và srt DNS cho nó như .smackaho.st tại 127.0.0.1 nhưng vẫn không thể sử dụng nó khi bạn đang làm việc ngoại tuyến.

EDIT: đã thử lệnh scutil, nhưng có vẻ như bạn có thể thay đổi DNS nếu ngoại tuyến

LƯU Ý: khi bạn tắt tất cả giao diện, bạn không thể đặt máy chủ DNS trong Pref. bảng điều khiển.


Liên quan: dnsmasq không hoạt động mà không có kết nối internet trong OS X Yosemite trên Super User (không có giải pháp nhưng có một số tài liệu tham khảo).
Arjan

Câu trả lời:


29

XEM CẬP NHẬT DƯỚI ĐÂY!

Tôi cũng thích sử dụng Dnsmasq trên máy cục bộ của mình và tôi cũng gặp vấn đề này. Đây là giải pháp:

Từ man 5 resolver:

The configuration for a particular client may be read from a file
having the format described in this man page. These are at present
located by the system in the /etc/resolv.conf file and in the files
found in the /etc/resolver directory.

/etc/resolver/không có mặt theo mặc định; bạn phải tự tạo ra nó

Cũng từ trang người đàn ông:

domain
  Domain name associated with this resolver configuration. This
  option is normally not required by the Mac OS X DNS search system
  when the resolver configuration is read from a file in the
  /etc/resolver directory. In that case the file name is used as the
  domain name.

Vì vậy, nếu bạn muốn tất cả các truy vấn dns cho tên miền cấp cao nhất devđược định tuyến đến máy chủ tên cục bộ, bạn sẽ:

# mkdir /etc/resolver
# echo 'nameserver 127.0.0.1' > /etc/resolver/dev

configdkhông thay đổi tập tin trong /etc/resolver/, vì vậy cài đặt này sẽ tồn tại thông qua thay đổi và khởi động lại mạng.

CẬP NHẬT 17 tháng 7 năm 2012

Thật không may, kể từ OS X Lion, trình phân giải hàng đầu (như được hiển thị bởi scutil --dns) biến mất khi không có giao diện nào được kích hoạt:

# scutil --dns # Online
DNS configuration

resolver #1
  nameserver[0] : 127.0.0.1

...

resolver #8
  domain   : dev
  nameserver[0] : 127.0.0.1

# scutil --dns # Offline
DNS configuration

resolver #1

...

resolver #8
  domain   : dev
  nameserver[0] : 127.0.0.1

Lưu ý rằng trình phân giải số 1 trống, nhưng mục nhập máy chủ tên dẫn xuất / etc / decver vẫn còn.

Hóa ra là vì bạn có thể chỉ định miền phân giải trực tiếp trong tệp / etc / decver /, việc chỉ định miền gốc Internet đặc biệt . gây ra việc tạo một mục nhập trình phân giải toàn cầu trông giống như:

resolver #8
  nameserver[0] : 127.0.0.1

Bây giờ tất cả các truy vấn DNS được định tuyến đến localhost, ngay cả khi ngoại tuyến.

Tất nhiên, bạn vẫn sẽ phải giải quyết các tên miền đã chọn của mình là 127.0.0.1 bằng cách sử dụng tùy chọn nào đó như tùy chọn --address của dnsmasq:

# dnsmasq --address=/dev/127.0.0.1

Tóm tắt:

  • Đặt tất cả các máy chủ dns giao diện mạng của bạn thành 127.0.0.1:
    bộ cài đặt mạng -setdnsservers Ethernet 127.0.0.1
    bộ cài đặt mạng -setdnsservers Wi-Fi 127.0.0.1
    ...
  • Tạo một tập tin / etc / decver / bất cứ điều gì:
    máy chủ tên 127.0.0.1
    miền .
  • Thiết lập một máy chủ DNS cục bộ và hạnh phúc.

xem http://opensource.apple.com/source/configd/configd-395.11/dnsinfo/dnsinfo_flatfile.c


Đó chính xác là những gì pow đang sử dụng ( pow.cx ).
daeltar

nhưng thật không may, nó không hoạt động - github.com/37signals/pow/issues/104
daeltar

3
@guns giải pháp này vẫn hoạt động trong yosemite? dnsmasq đã hoạt động tốt cho tôi ngoại tuyến cho đến khi tôi nâng cấp. Bây giờ tất cả những gì tôi nhận được khi chạy scutil --dnskhi không kết nối với internet, tất cả những gì tôi nhận được là No DNS configuration available tôi đã làm theo hướng dẫn của bạn ở trên nhưng không gặp may
MatthewLee

1
@MatthewLee, vâng bạn đúng, có vẻ như công việc duy nhất xung quanh là thêm các mục trong tệp máy chủ.
Lenciel

1
Bất cứ ai cũng tìm thấy một giải pháp cho Yosemite chưa?
jmagnusson

2

Tại sao không thực hiện các mục trong / etc / hosts thay thế? Tôi đang gặp khó khăn khi nghĩ về một tình huống mà bạn thực sự cần phải chạy một máy chủ DNS đầy đủ. Tôi sử dụng các mục nhập tệp máy chủ mọi lúc để thực hiện những việc như thế này trên máy Mac của mình.

Bộ giải quyết trong OS X hoạt động khác với Linux hoặc các Unix khác. Đây có lẽ là một phần của những gì khiến bạn đau buồn. Ví dụ, nó có một ưu tiên cho phương pháp phân giải nào được sử dụng trước tiên và nó lưu trữ kết quả của tất cả các truy vấn trong một khoảng thời gian.

Bạn đã thêm máy chủ DNS vào giao diện trong ngăn tùy chọn Mạng chưa? Điều này sẽ đảm bảo rằng trình phân giải sử dụng máy chủ đó cho các truy vấn của nó nếu nó quyết định tìm kiếm một mục DNS.


Một lý do để sử dụng trình chuyển tiếp DNS trên máy khách là để duy trì một danh sách đen lớn các miền quảng cáo / phần mềm độc hại mà không phải chịu hình phạt hiệu suất của trình nền trình phân giải greping tệp lưu trữ hiện đang bị cồng kềnh theo mỗi yêu cầu. Ưu điểm của phương pháp này mặc dù, dnsmasq tải / etc / hosts vào bộ nhớ trong đó thời gian tra cứu sẽ rất nhỏ. Ngoài ra, nếu bạn phát triển web, nó cho phép bạn tránh những phiền toái nhỏ khi thêm tên miền cục bộ cho mọi trang web bạn đang làm việc.
súng

1

(trả lời b / c Tôi chưa thể nhận xét ...)

Làm thế nào bạn sẽ ngoại tuyến?

(câu trả lời tốt nhất tôi nhận được ngay bây giờ)

# man -S 5 resolver
 .
 .
 .
 Note that the /etc/resolv.conf file,
 which contains configuration for the default (or "primary") DNS resolver
 client, is maintained automatically by Mac OS X and should not be edited manu-
 ally.  Changes to the DNS configuration should be made by using the Network
 Preferences panel.

Vì vậy, bạn sẽ có thể nhập một cái gì đó vào giao diện người dùng và nó sẽ dính vào. Tôi đã làm điều này một vài lần khi tôi không thích máy chủ DNS mà máy chủ DHCP cục bộ của tôi cung cấp.


Thay đổi cấu hình DNS trong NetworkPreferences thay đổi tệp /etc/resolv.conf.
Fabian Zeindl

0

OSX có tệp cấu hình /etc/dhcp3/dhclient.conf mà các cấu hình máy khách Linux / UNIX DHCP bình thường có không?

Nếu vậy, nó nên có một dòng bạn có thể bỏ qua cho

prepend domain-name-servers 127.0.0.1;

để có ứng dụng khách DHCP luôn thêm dòng đó vào tệp phân giải của bạn


Việc thêm vào giải phápvv không giúp ích gì cho OS X. Nội dung của decv.conf được tạo và chính nó là symlink trên /var/run/resolv.conf và ngay cả khi tôi thay đổi /var/run/resolv.conf, nó không phản ánh các thay đổi .
daeltar

0

Hãy thử thêm dịch vụ ethernet thứ hai được định cấu hình với địa chỉ tĩnh và 127.0.0.1 làm máy chủ DNS của bạn. Hoặc, thêm Vị trí mạng đặt máy chủ DNS của bạn thành 127.0.0.1. Cả hai thay đổi này sẽ được thực hiện trong "Tùy chọn hệ thống" trong bảng "Mạng".


-2

Nó có thể giúp chỉ để đặt

127.0.0.1       localhost

vào / etc / hosts, vì vậy không cần phải phân giải để tìm localhost.


1
Tôi cần nó cho tên miền phụ, vì vậy điều này là không.
daeltar
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.