Định tuyến chính sách trên OpenWrt: chuỗi bắt được DNS cục bộ
Truy vấn của máy khách và truy vấn của chính router đi vào các móc khác nhau. Một chính sách nhắm vào prerouting mang mọi truy vấn LAN và để router ở đường uplink của ISP.
Các máy khách trên LAN phân giải qua đường hầm còn truy vấn của chính router thì lặng lẽ không làm vậy. Cập nhật gói, đồng bộ thời gian và DNS động đều đi ra qua đường uplink thông thường, trong khi mọi truy vấn được chuyển tiếp đều đi qua VPN, và không có gì trong giao diện gợi ý rằng tồn tại hai đường khác nhau. Lời giải thích không phải là lỗi trong chính sách mà là câu hỏi móc nào nhìn thấy gói tin. Hai luồng, một địa chỉ trình phân giải, và chỉ một trong hai đi qua router. Tách chúng ra là toàn bộ cách sửa.
Hai luồng, một địa chỉ trình phân giải
Luồng thứ nhất là luồng mọi người hình dung. Máy khách hỏi trình phân giải của router, trình phân giải chuyển tiếp lên trên, và gói được chuyển tiếp đó đi qua router khi ra ngoài. Gói đó hiển thị với bất kỳ thứ gì quan sát lưu lượng được chuyển tiếp.
Luồng thứ hai không bao giờ đến từ đâu cả. Router tạo ra nó, nên không có gói đi vào và không có bước chuyển tiếp nào để khớp.
Cả hai có thể nhắm cùng một địa chỉ trình phân giải, và chính vì thế mà rất dễ bỏ sót sự khác biệt. Cùng đích, khác nguồn gốc, khác chuỗi. Khi thấy nguồn gốc, phần còn lại của chẩn đoán sẽ theo sau.
Gói được chuyển tiếp và gói được tạo cục bộ đi vào khác nhau
Lưu lượng được chuyển tiếp được đánh giá khi nó đến từ một giao diện khác. Các gói định tuyến chính sách phơi bày điều đó như một chuỗi prerouting, và một quy tắc đặt ở đó nhìn thấy mọi gói đi qua router. Đó là lý do các truy vấn của máy khách hoạt động đúng như chính sách mô tả, và cũng là lý do router bỏ qua nó. Quy tắc không sai, nó chỉ được gắn vào một móc mà router không bao giờ chạm tới. Di chuyển nó, và cùng phép khớp đó bắt đầu hoạt động.
Lưu lượng được tạo cục bộ do một tiến trình trên router tạo ra và đi vào đường ra. Router tự quyết định tuyến cho nó và chỉ gặp chính sách nếu chính sách bao phủ chuỗi đó. Không có giao diện vào để khớp và không có quyết định chuyển tiếp để quan sát.
Đó là thuộc tính của nơi các gói sinh ra, không phải của một gói cụ thể. Một quy tắc viết cho một chuỗi đơn giản là không có ý kiến về chuỗi kia. Không mức tinh chỉnh quy tắc nào thay đổi được điều đó.
Chọn chuỗi ra, rồi thu hẹp phép khớp
Cách sửa là gắn cùng ý định đó vào chuỗi ra nữa, hoặc chuyển quy tắc tới đó khi điều bạn quan tâm là truy vấn của chính router. Trong một thiết lập OpenWrt dựng trên gói định tuyến chính sách, điều đó có nghĩa là chọn output thay vì prerouting trong phần cài đặt chuỗi của quy tắc. Giữ cả hai quy tắc nếu cả hai nhóm đều cần được bao phủ.
Sau đó thu hẹp thứ mà quy tắc khớp. Địa chỉ trình phân giải đích trên cổng mà trình phân giải thực sự dùng là một quyết định nhỏ hơn nhiều so với việc gửi mọi thứ router tạo ra vào đường hầm.
Giữ hai quy tắc rõ ràng thay vì cố viết một quy tắc bao phủ cả hai chuỗi. Các quy tắc riêng dễ đọc hơn, và cho phép bạn tắt đường của router mà không làm phiền lưu lượng máy khách khi gỡ lỗi. Chúng cũng làm cho các bộ đếm có ý nghĩa từng cái một.
Giữ vận chuyển của chính đường hầm ngoài quy tắc
Kết nối bên ngoài của đường hầm cũng do router tạo ra. Một quy tắc gửi mọi lưu lượng được tạo cục bộ vào đường hầm sẽ định tuyến đường hầm qua chính nó, và nó sẽ không hề khởi lên.
Truy cập quản trị là nạn nhân thứ hai. Các phiên quản trị bắt nguồn từ router, hoặc các phản hồi cho chúng, có thể bị một quy tắc cục bộ quá rộng kéo vào đường hầm và trở nên không thể truy cập từ LAN.
Loại điểm cuối của đường hầm khỏi phép khớp, và giữ quy tắc giới hạn trong các địa chỉ trình phân giải. Như vậy là đủ cho yêu cầu DNS và đủ nhỏ để suy luận.
Kiểm tra cả hai nhóm, không chỉ một
Quan sát router thực hiện truy vấn của chính nó và ghi lại giao diện nào đã mang nó. Lặp lại việc tra cứu từ một máy LAN và ghi lại đường mà nó đã đi. Các bộ đếm trên quy tắc chính sách làm cả hai câu trả lời hiển thị mà không cần đoán.
Coi kết quả là hai phát hiện riêng biệt. Một máy khách phân giải qua đường hầm không nói gì về router, và một router phân giải đúng không nói gì về một máy khách trên bộ lắng nghe khác. Ghi chúng thành các dòng riêng trong hồ sơ thay đổi.
Cũng kiểm tra cổng: một quy tắc khớp cổng đích 53 sẽ bỏ sót trình phân giải được tiếp cận qua DNS over TLS trên 853 hoặc điểm cuối HTTPS. Khớp đúng vận chuyển mà upstream đã cấu hình thực sự dùng, và rò rỉ đóng lại vì lý do đúng.