Làm cách nào tôi có thể nhận được độ phân giải DNS trực tuyến và ngoại tuyến cho máy ảo và ứng dụng cục bộ bằng dnsmasq hoặc tương tự


1

Tôi đã đọc tất cả các câu trả lời tôi có thể tìm thấy về việc thiết lập dnsmasq làm máy chủ DNS cục bộ để phát triển. Nhưng tôi không thể làm cho nó hoạt động cho trường hợp của tôi. Hầu hết ngoài kia muốn 127.0.0.1 được giải quyết cho các tên trong miền .dev.

Trong trường hợp của tôi, tôi có một máy ảo VirtualBox chạy windows trong MacBook Air. Windows này chạy máy chủ SQL express. Nó được thiết lập với hai giao diện - cầu nối mạng - để chia sẻ giao diện wifi bên ngoài và là mạng ngang hàng trên mạng cục bộ của tôi khi tôi trực tuyến. Tôi cũng có VirtualBox thiết lập một host-only mạng. Mạng con là 192.168.56.0/24 với máy Mac của tôi là .1 và máy ảo Windows là .2.

dnsmasq chạy trên MacBook hỗ trợ điều này và từ góc độ Windows, nó thực hiện mọi thứ một cách hoàn hảo, trực tuyến và tắt. Sử dụng khả năng của nó để gán tên miền hoàn chỉnh một địa chỉ, nó cung cấp cho

Trên máy Mac, tôi đang phát triển một ứng dụng nodejs, đó là một máy chủ web (vì vậy nó cần một tên miền - giả sử abc.rab - Mac của tôi được gọi là Rabbit) và để xử lý cơ sở dữ liệu của máy Windows (được gọi là abc.tig - Windows máy được gọi là Tigger). Ở đây mọi thứ dường như không hoạt động.

Tôi đã viết một chương trình nodejs nhỏ để kiểm tra tra cứu DNS

'use strict';
const dns = require('dns');
dns.lookup('abc.tig',(err,add,family) =>{
    console.log('addresses:',add);
});

và nó không thể tìm thấy địa chỉ. Tuy nhiên, trên thiết bị đầu cuối, tra cứu DNS này hoạt động

alan@rabbit:~/Documents$nslookup abc.tig
Server:     127.0.0.1
Address:    127.0.0.1#53

Name:   abc.tig
Address: 192.168.56.2

alan@rabbit:~/Documents$

Trong trình duyệt web, abc.rab cũng cho tôi biết nó không thể tìm thấy tên miền.

Như tôi đã nói, tôi đã thiết lập dnsmasq để chạy trên tất cả các giao diện. Trong các thuộc tính mạng cho giao diện Wi-Fi của tôi, tôi đã đặt máy chủ tên là 127.0.0.1 và 8.8.8.8

Trong / vân vân

nameserver 127.0.0.1
domain .

trong đó

Rõ ràng có hai quá trình giải quyết tên tại chỗ. Cả mDNSResponder và dnsmasq đều được hiển thị đang chạy trong bảng hoạt động của tôi. Tôi đoán rằng những cái khác nhau đang được sử dụng bởi thiết bị đầu cuối và bởi ứng dụng của tôi

Tôi làm gì sai ở đây? (viết và kiểm tra cái này tôi hiện đang online)

(Tái bút

Câu trả lời:


2

mDNSResponder và dnsmasq phải chạy cả hai: dnsmasq là máy chủ DNS nhẹ (và DHCP / Router) và mDNSResponder chịu trách nhiệm cho tất cả các truy vấn cục bộ.


Để thiết lập dnsmasq trong OS X trong môi trường của bạn, hãy làm như sau:

Xóa mọi máy chủ DNS trong tùy chọn mạng của máy chủ dnsmasq (MacBook Air của bạn) ngoại trừ 127.0.0.1.

Xóa mọi máy chủ DNS trong tùy chọn mạng của VM đang sử dụng và thay thế chúng bằng địa chỉ IP của máy chủ VM (MacBook Air của bạn).

Xóa bất kỳ tệp nào trong / etc / decver /. Thông thường họ không cần thiết. Bạn có thể giữ chúng nhưng có lẽ chúng nên có dạng này:

/ etc / decver / rab với nội dung

nameserver    127.0.0.1

/ etc / decver / tig với nội dung

nameserver    127.0.0.1

Logic đằng sau điều này được đề cập trong người giải quyết (5) :

miền
Tên miền liên quan đến cấu hình trình phân giải này. Tùy chọn này thường không được hệ thống tìm kiếm Mac OS X DNS yêu cầu khi cấu hình trình phân giải được đọc từ một tệp trong / etc / decver        danh mục. Trong trường hợp đó, tên tệp được sử dụng làm tên miền. Tuy nhiên, tên miền phải được cung cấp        khi có nhiều máy khách phân giải cho cùng một tên miền, vì nhiều tệp có thể không tồn tại        có cùng tên. Xem phần CHIẾN LƯỢC TÌM KIẾM để biết thêm chi tiết.

Sau đó chỉnh sửa /usr/local/etc/dnsmasq.conf và thêm / sửa đổi

server=/rab/192.168.0.2 #your main IP-address or 127.0.0.1
server=/tig/192.168.0.2 #your main IP-address or 127.0.0.1
server=8.8.8.8 #forwarder
addn-hosts=/usr/local/etc/hosts/hosts.conf

Bây giờ hãy thêm tệp hosts.conf vào / usr / local / etc / hosts / với nội dung:

127.0.0.1   localhost
192.168.56.1    abc.rab
192.168.56.2    abc.tig

Sau đó khởi động lại dnsmasq với launchctl để tải các tệp conf mới.


Vì Windows VM của bạn đã có trong mạng Wi-Fi được bắc cầu, bạn hoàn toàn có thể kết xuất mạng chỉ lưu trữ và sửa đổi /usr/local/etc/hosts/hosts.conf:

127.0.0.1   localhost
192.168.0.2 abc.rab #IP-address of the MacBook Air Wi-Fi interface
192.168.0.3 abc.tig #IP-address of the Windows bridge interface

Trên thực tế - mặc dù tôi chỉ hiểu về logic của những gì bạn đề xuất, bạn phải có một mục trong / etc / decver - và mục của tôi sử dụng tên miền. như dòng thứ hai cho phép bạn linh hoạt hơn nhiều. Nó là cần thiết cho chế độ ngoại tuyến vì mặc dù tất cả các yêu cầu đầu cuối cho miền hoạt động, chương trình kiểm tra nút của tôi đã không cho đến khi tôi thêm lại vào whatever tập tin. Tôi đã tìm thấy một vấn đề với dnsmasq.conf ban đầu của tôi, nơi tôi đang giới hạn các dịch vụ dns cho localhost và máy chủ lưu trữ cục bộ. Tôi không chắc chắn nếu đó là hoặc chỉ thị addn-host của bạn đã làm cho tất cả hoạt động
akc42

@akc Hmm Trong OS X, các tệp trình phân giải thường không cần thiết ( nguồn ). Tôi đã không kiểm tra cấu hình của tôi với chương trình nodejs của bạn mặc dù. Tôi đã thêm một lời giải thích trong phần giải quyết câu trả lời của tôi.
klanomath

Nếu bạn tắt TẤT CẢ các giao diện của mình và sau đó bạn sẽ không thấy trình giải quyết trừ khi bạn thêm tên miền. đường dây serverfault.com/questions/22419/ câu trả lời được chấp nhận với bản cập nhật ngày 17 tháng 7
akc42

@ akc42 Hmm Tôi đã kiểm tra câu trả lời của mình trong môi trường Parallels. Nếu tôi tắt tất cả ifs thì chỉ có máy chủ và giao diện nat của Parallels cũng biến mất (điều này sẽ khiến toàn bộ env trở nên vô dụng). Có lẽ tôi đã không thực sự hiểu những gì ngoại tuyến trong câu hỏi của bạn có nghĩa là ... ;-). Tại sao bạn đi ngoại tuyến hoặc "ngoại tuyến" thực sự có nghĩa là gì?
klanomath

0

Nếu bạn muốn loại bỏ tất cả cài đặt DNS - chỉ cần chọn IP tĩnh cho tất cả các máy ảo của bạn và để ứng dụng của bạn kết nối với tên máy chủ được cung cấp bởi xip.io

$ host 192.168.56.2.xip.io
192.168.56.2.xip.io has address 192.168.56.2

Nếu bạn thực sự cần abc.tig để giải quyết, bạn có thể quá tải /etc/hosts tập tin với sudo -e /etc/hosts và chỉ ra những điều như sau:

abc.tig       192.168.56.2.xip.io

Hy vọng rằng ai đó có lời khuyên dnsmasq sẽ thấy bài đăng của bạn và cung cấp một số hướng dẫn, nhưng đối với thời gian của tôi - chỉ cần sử dụng IP qua xip.io sẽ dễ dàng hơn để gỡ lỗi, duy trì, thiết lập và tìm kiếm. Hãy dành năng lượng của bạn cho ứng dụng chứ không phải cơ sở hạ tầng để thiết lập VM nếu vm của bạn không xử lý tất cả các mạng cho bạn như docker và xhyve đang hoạt động để tự động hóa (nhưng vẫn chưa có IMO).


cái này có hoạt động khi tôi ngoại tuyến không?
akc42

1
@ akc42 không - đó là DNS trực tuyến / mạng thực tế. Bộ nhớ đệm có thể giúp ích trong một thời gian, nhưng đây không phải là một công cụ bị cô lập. Bạn cũng có thể xem xét triển khai mdns nếu bạn muốn các công cụ của mình hoạt động mà không cần máy chủ DNS. node / npm có một gói mdns đẹp để sử dụng thay vì DNS.
bmike

Tôi cũng không thực sự cần cái khác. dnsmasq hoạt động tốt bình thường (tôi có nó cung cấp năng lượng cho mạng gia đình của tôi không có vấn đề). Mối quan hệ giữa nó và các cơ chế tra cứu mac dns là vấn đề ở đây. Tôi nghĩ rằng tôi đã làm theo tất cả các hướng dẫn đúng, nhưng dường như không phải vì nó không hoạt động
akc42

Nghe có vẻ hay - Tôi +1 câu hỏi của bạn với hy vọng rằng dnsmasq chuyên gia có thông tin gỡ lỗi. Vui lòng gửi câu trả lời nếu bạn biết phải làm gì - nó sẽ giúp người khác :-)
bmike
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.