Tập nftables nạp từ DNS tới WireGuard: cách chuyển giao hoạt động
Câu trả lời DNS có thể nạp một tập nftables, nhưng tập không định tuyến gì cả. Hãy theo bốn lần chuyển giao và ba vòng đời quyết định việc điều hướng có hoạt động hay không.
Tên được phân giải thành địa chỉ, và những địa chỉ đó có thể rơi vào một tập của tường lửa mà sau đó ảnh hưởng tới định tuyến, khiến điều hướng dựa trên tên trở nên khả thi mà không cần proxy. Cái bẫy là bốn thành phần phải chuyển giao đúng: bộ phân giải, tập, bộ phân loại đánh dấu luồng mới và đối tác mang nó. Mỗi lần chuyển giao hỏng theo cách khác nhau và mỗi bên giữ thời gian của riêng mình.
Hãy xem thiết kế là một chuỗi chứ không phải một cấu hình. Câu hỏi ở mỗi bước là thành phần nào sở hữu quyết định và điều gì xảy ra khi đầu vào của nó thiếu.
Câu trả lời DNS làm được gì và không làm được gì
dnsmasq có thể sao chép địa chỉ từ các câu trả lời vào một tập nftables, đó là nạp dữ liệu chứ không phải quyết định định tuyến. Tùy chọn đó, được ghi trong hướng dẫn dnsmasq, nêu họ địa chỉ, bảng và tập, và 4# ở đầu chỉ chọn bản ghi A, nên các đích v6 cần cách bố trí riêng. Tập phải tồn tại trước, vì bộ phân giải thêm phần tử vào thứ do chủ tường lửa tạo ra. Không có gì ở bước đó chọn giao diện, bảng hay đối tác.
Máy khách cũng phải dùng bộ phân giải đó cho tên. Một ứng dụng có DNS mã hóa riêng, hoặc câu trả lời đã lưu đệm từ trước khi có chính sách, kết nối mà không tạo mục nào trong tập.
Tập là đầu vào, không phải tuyến
Một phần tử trong tập là điều kiện khớp. Một cái gì đó phải nhìn vào nó, quyết định rằng gói này bắt đầu một luồng mới và áp dụng chính sách gửi luồng qua đường hầm. Trên Linux điều đó thường có nghĩa là một đường ra có khả năng định tuyến có thể đặt dấu, một quy tắc gửi các gói đã đánh dấu tới một bảng riêng, và một tuyến trong bảng đó trỏ tới thiết bị WireGuard. Chỉ riêng tư cách thành viên không cài đặt bất cứ điều gì trong số đó.
nft add set inet vpn_select office_v4 { type ipv4_addr\; }
ip rule add fwmark 0x40 table 200
ip route add default dev wg0 table 200
wg show wg0 allowed-ips
Đối tác áp dụng một lần kiểm tra độ phủ thứ hai mà người ta quên. WireGuard chỉ mã hóa gói cho một đối tác có địa chỉ được phép bao gồm đích, nên tuyến theo chính sách vào giao diện là không đủ khi danh sách của đối tác loại trừ tiền tố đó. Hãy giữ danh sách dưới quyền kiểm soát của chủ định tuyến thay vì tin vào việc tạo tuyến mà trình quản lý tình cờ thực hiện.
Dấu, bảng và độ phủ của đối tác
Dấu là một không gian tên chia sẻ, nên cả giá trị và mặt nạ đều phải được thống nhất với mọi thứ khác dùng chúng. Một quy tắc gửi lưu lượng đã đánh dấu tới bảng riêng cần một kết quả xác định khi bảng đó không có tuyến khớp, vì một lần tra cứu không có câu trả lời có thể tiếp tục sang quy tắc kế tiếp và đưa gói ra ngoài qua giao diện vật lý. Một tuyến mặc định blackhole bên trong bảng riêng biến cuộc trốn thoát im lặng đó thành một lần bị bỏ rơi hữu hình. Điều thiết kế vẫn chưa làm được là đóng lại khi hỏng đối với một đích chưa bao giờ vào tập.
Các gói bên ngoài của chính đường hầm phải thoát khỏi bộ phân loại. Công cụ WireGuard cung cấp dấu socket đúng cho mục đích đó, và dùng nó ngăn việc đóng gói bị định tuyến ngược vào giao diện mà nó đang xây.
Kiểm tra từng vòng đời riêng
Ba kho lưu trữ già đi theo ba lịch trình: bộ nhớ đệm của bộ phân giải, các phần tử của tập và kết nối được theo dõi. Hãy kiểm tra chúng theo thứ tự đó và xem mỗi thứ có dịch chuyển khi cần không. Các lệnh dưới đây đọc bộ phân giải, tập, bảng kết nối và các quy tắc chính sách mà không thay đổi gì.
dig +short office.example
nft list set inet vpn_select office_v4
conntrack -L -d 10.60.8.15
ip rule show
Một lần tra cứu mới thêm phần tử chứng minh việc nạp hoạt động, trong khi một phần tử cũ sống lâu hơn câu trả lời của nó là sự lệch vòng đời đáng ghi lại. Một kết nối mới xuất hiện trong bảng kết nối với dấu mong đợi cho thấy bộ phân loại đã chạy, và một kết nối cũ giữ dấu ban đầu là hành vi đúng chứ không phải lỗi. Danh sách quy tắc trả lời việc tra cứu chính sách có tồn tại hay không, đó là câu hỏi khác với việc nó có khớp hay không. Hãy đọc bốn đầu ra theo thứ tự đó và lần chuyển giao hỏng sẽ tự lộ diện.
Khi yêu cầu là một tên cụ thể luôn dùng một đường, một tập nạp từ DNS không thể chứng minh điều đó, vì địa chỉ chia sẻ cũng mang tên khác. Proxy hoặc cơ chế ở mức ứng dụng là công cụ cho bảo đảm đó.