Bạn đã dựng WireGuard, đường hầm cho lưu lượng đi qua, và tên nội bộ vẫn không phân giải được. Bước tiếp theo thường là tìm một thiết lập DNS trong cấu hình WireGuard, như thể một peer có thể đẩy trình phân giải xuống như một số VPN khác làm. Nó không làm được. Bắt tay chỉ mang khóa, địa chỉ giao diện và IP được phép, và không có trường nào cho máy chủ DNS hay miền tìm kiếm. Chính sách phân giải nằm ở máy khách, và đó là nơi cần sửa.

Đường hầm và trình phân giải là hai hợp đồng riêng

WireGuard cố ý nhỏ. Nó chuyển gói cho các địa chỉ bạn liệt kê và xác thực peer; mọi thứ phía trên lớp đó là thiết kế của bạn. OpenVPN có thể đẩy dhcp-option DNS vì kênh điều khiển của nó mang cấu hình, và sự khác biệt đó làm vấp những người chuyển giữa hai bên.

Vậy một đường hầm chạy được không nói gì về phân giải tên. Máy khách có thể có tuyến hoàn hảo tới 10.90.0.1 mà vẫn gửi truy vấn tới một trình phân giải công cộng, nên triệu chứng trông như “VPN làm hỏng DNS”, trong khi DNS chưa bao giờ được trỏ vào VPN.

Phục vụ vùng mà không trở thành trình phân giải đệ quy

Phía máy chủ là một vùng có thẩm quyền nhỏ, không phải trình phân giải chung. Trong ví dụ này cổng là 10.90.0.1, máy khách là 10.90.0.0/24, và ứng dụng bạn quan tâm trả lời trên 10.60.0.20.

Gộp các thiết lập này vào khối options sẵn có thay vì tạo khối thứ hai:

options {
    listen-on { 127.0.0.1; 10.90.0.1; };
    listen-on-v6 { none; };
    allow-query { 127.0.0.1; 10.90.0.0/24; };
    allow-transfer { none; };
    recursion no;
};

Sau đó khai báo vùng và tệp của nó:

zone "corp.example" {
    type primary;
    file "/etc/bind/db.corp.example";
};
$TTL 300
@ IN SOA ns.corp.example. hostmaster.corp.example. ( 1 3600 600 604800 300 )
@      IN NS ns.corp.example.
ns     IN A  10.90.0.1
portal IN A  10.60.0.20

Kiểm tra trước khi nạp lại, vì lỗi cú pháp lúc nạp sẽ làm sập toàn bộ máy chủ cho mọi vùng mà nó phục vụ:

named-checkconf
named-checkzone corp.example /etc/bind/db.corp.example

Chỉ mở UDP và TCP 53 trên giao diện VPN. Công bố một thẩm quyền riêng trên giao diện công cộng mời gọi cả truy vấn lẫn liệt kê, và allow-transfer nên giữ đóng trừ khi một máy phụ thật sự cần.

Trỏ máy khách vào đó, theo từng liên kết

Giả định NetworkManager sở hữu kết nối và systemd-resolved là trình phân giải. Đọc chính sách hiện có trước, đặc biệt mọi miền định tuyến gốc, vì mục ~. sẽ vượt qua thứ bạn sắp thêm.

nmcli connection modify wg-office +ipv4.dns 10.90.0.1
nmcli connection modify wg-office +ipv4.dns-search '~corp.example'

Dấu ngã là ký tự quan trọng. Nó đánh dấu miền là chỉ-định-tuyến: các tên dưới corp.example đi tới máy chủ DNS của liên kết này, và miền không được nối thêm làm hậu tố tìm kiếm tên ngắn. Không có nó, gõ portal bắt đầu phân giải portal.corp.example, tiện cho bạn và gây bất ngờ cho mọi người khác. Giữ dấu ngã trong dấu ngoặc kép, vì một dấu không ngoặc là một phép mở rộng shell đang chờ trỏ tới thư mục nhà của bạn.

Áp dụng thay đổi qua trình quản lý sở hữu giao diện, rồi kết nối lại. Đừng khởi động phiên bản wg-quick thứ hai cho cùng giao diện; hai chủ sẽ tranh nhau các tuyến và một trong hai sẽ thắng vào lúc tệ nhất.

Kiểm tra tuyến trước tên

Truy vấn tên từ máy khách và xác nhận cả câu trả lời lẫn máy chủ đã tạo ra nó:

resolvectl query portal.corp.example

Nếu trả về 10.60.0.20 thì hợp đồng DNS đã xong. Nếu hết thời gian, hãy kiểm tra tuyến tới 10.90.0.1 trước, rồi tới quy tắc tường lửa, rồi tới allow-query trên máy chủ. Lỗi phân giải tên trong cách bài trí này gần như luôn là khả năng kết nối hoặc một ACL, không phải tệp vùng. Hãy làm việc từ máy khách ra ngoài, vì máy chủ không thể nói cho bạn biết vì sao một truy vấn không bao giờ tới.

Nhớ rằng ứng dụng vẫn cần tuyến riêng và quyền dịch vụ riêng. Một tên đã phân giải trỏ tới địa chỉ không tới được là một hỏng hóc khác mặc cùng bộ quần áo.

Những gì vẫn chưa tự động

Các ứng dụng có logic phân giải riêng bỏ qua hoàn toàn trình phân giải hệ thống, và không lượng nmcli nào thay đổi điều đó. Các triển khai kiểm tra DNSSEC cần một thiết kế neo tin cậy rõ ràng cho vùng riêng; câu trả lời không phải là một chỉ thị chung chung bảo tắt kiểm tra. Hãy thử bằng đúng phần mềm máy khách mà người dùng của bạn chạy, không phải bằng một công cụ tình cờ dùng trình phân giải hệ thống. Khoảng cách giữa hai thứ đó chính là toàn bộ báo cáo lỗi.

Các đội máy có thể tự động hóa chính sách máy khách này qua hệ thống cấp phát của họ, nhưng chính sách vẫn là một đối tượng riêng có chủ sở hữu. Tài liệu tham chiếu BIND 9 bao gồm các điều khiển lắng nghe và truy vấn dùng ở trên, và đó là nơi đúng để xác nhận hành vi cho phiên bản bạn đã cài.

Bước tiếp theo: thêm việc tăng số thứ tự vùng và các lệnh kiểm tra vào quy trình thay đổi của bạn, để một sửa đổi bản ghi không thể tới môi trường thật mà chưa được kiểm.

Bài viết liên quan