Có cách nào để thiết lập Avahi để thực hiện độ phân giải tên anycast trên mạng LAN không?


9

Đầu tiên, một số thông tin cơ bản: Chúng tôi đã có một phòng thí nghiệm chứa một số máy chủ Linux chuyên dụng chạy trên mạng LAN bị cô lập. Tất cả các máy chủ chạy cùng một hệ điều hành (Debian Linux) và cùng một phần mềm máy chủ độc quyền và các quy trình máy chủ liên lạc với nhau để giữ cho dữ liệu của chúng được đồng bộ hóa. Điều đó có nghĩa là theo như bất kỳ máy khách nào có liên quan, thì máy khách đó kết nối với máy chủ nào - bất kỳ máy chủ nào cũng sẽ trả về cùng một dữ liệu như bất kỳ máy chủ nào khác.

Tất cả các máy chủ Linux này đều chạy avahi-daemon để xuất bản tên máy chủ mDNS, điều đó có nghĩa là máy khách có thể nhập, ví dụ: " http: //linux-server-1.local ." vào trình duyệt web của mình và kết nối với máy chủ Linux # 1, v.v.

Điều này rất tốt và tốt, ngoại trừ điều đó có nghĩa là người dùng ngồi ở máy khách (thường là máy tính xách tay Mac hoặc Windows đã cài đặt Bonjour) phải biết (hoặc tìm hiểu) máy chủ Linux nào hiện đang trực tuyến và anh ta phải hãy chắc chắn rằng anh ấy kết nối với một trong những người đó. Ví dụ: nếu máy chủ số 2 ngoại tuyến hôm nay và máy khách nhập " http: //linux-server-2.local ." vào thanh URL của anh ấy, anh ấy sẽ không nhận được phản hồi. Tất nhiên, đó không phải là ngày tận thế, nhưng thật khó chịu cho những người dùng mới, những người hy vọng mọi thứ sẽ "chỉ hoạt động", và nó cũng làm cho việc phát triển kịch bản phía máy khách mạnh mẽ trở nên phức tạp hơn (vì kịch bản phía máy khách sẽ cần phải biết cách đối phó với các máy chủ ngoại tuyến một cách rõ ràng).

Với ý nghĩ đó, câu hỏi của tôi là: có thể định cấu hình Avahi để xuất bản bí danh tên máy chủ mDNS kiểu anycast không? Mục tiêu là bất cứ ai cũng có thể ngồi xuống với máy tính xách tay của mình, nhập " http: //any-linux-server.local ." (hoặc tương tự) và được kết nối với một trong các máy chủ hiện đang hoạt động (một lần nữa, không quan trọng là máy chủ nào).

Lưu ý rằng điều này cần phải hoạt động mà không có bất kỳ cấu hình đặc biệt nào của máy tính xách tay khách, vì chúng tôi không có quyền kiểm soát chúng (ngoài yêu cầu chúng đã cài đặt Bonjour).

Cũng lưu ý rằng chúng ta không thể dựa vào sự hiện diện của một máy chủ tên hoặc hộp proxy riêng biệt hoặc vào sự hiện diện của bất kỳ máy chủ Linux cụ thể nào, vì điều đó sẽ gây ra một điểm thất bại duy nhất mà chúng ta đang cố gắng tránh.

Câu trả lời:


13

Trent Lloyd ở đây, một trong những tác giả của dự án Avahi.

Đây là lý thuyết có thể, nhưng nó không dễ thực hiện. Thật không may, cơ chế mặc định để xuất bản tên máy chủ trong Avahi, cũng đã xuất bản bản ghi DNS ngược được liệt kê là độc quyền. Do đó, nếu bạn thử và xuất bản 2 tên máy chủ trỏ đến cùng một IP, bạn sẽ gặp xung đột trên bản ghi DNS ngược.

Có thể thực hiện việc này nếu bạn sử dụng API Avahi để xuất bản bản ghi A theo cách thủ công và đánh dấu nó là không độc quyền. Bạn sẽ phải viết một quy trình nền nhỏ cho mỗi máy chủ bằng Python, C hoặc tương tự.

Cuộc gọi API để sử dụng là avahi_entry_group_add_record và bạn cần chuyển AVAHI_PUBlish_ALLOW_MULTIPLE vào trường cờ. Điều này sau đó nên làm việc.

Một cách khác là sử dụng khám phá dịch vụ theo cách nó được dự định và mỗi khách hàng xuất bản một dịch vụ HTTP và sử dụng plugin firefox hoặc tương tự để duyệt các dịch vụ web được công bố. Hoặc một số loại trình duyệt dịch vụ khác.

Bonjour đã từng bao gồm một plugin cho Internet Explorer để làm điều này giống như một thanh dấu trang, tôi không chắc liệu nó có còn không.


2
Tôi đã nhận nó để làm việc, cảm ơn! Trong trường hợp có ai quan tâm, tôi đã đăng mã nguồn C tại đây: public.msli.com/lcs/jaf/publish_cnames.c
Jeremy Friesner

hm điều đó dường như không hoạt động với các phiên bản mới hơn của avahi :( Chương trình in ra rằng nó đã xuất bản thành công tên, nhưng chúng không hiển thị khi duyệt từ một máy chủ khác trên mạng.
Frederick Nord
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.