Bạn thêm một dòng để giữ tuyến mặc định cục bộ, và sau đó đường hầm không còn đến được máy chủ DNS nội bộ. Dòng đó là pull-filter ignore "route", không có nghĩa là "bỏ qua tuyến này". Nó có nghĩa là "loại bỏ mọi tùy chọn được đẩy xuống mà văn bản bắt đầu bằng năm chữ cái đó", và trên một máy chủ thông thường điều đó bao gồm route-gateway, route-metric và route-ipv6 cùng với chính các tuyến. Danh sách kiểm tra bên dưới là những gì tôi chạy trước khi chạm vào một hồ sơ mà người khác phải dùng.

Bộ lọc chỉ áp dụng cho các tùy chọn được đẩy xuống

pull-filter chỉ tác động lên các dòng tùy chọn mà máy chủ gửi sau khi đường hầm được thiết lập, và không tác động lên gì khác. Các tùy chọn ghi trong tệp cục bộ của bạn không bị ảnh hưởng, lưu lượng ứng dụng cũng vậy. Nếu bạn hy vọng ngăn một tiến trình dùng đường hầm, đây hoàn toàn là công cụ sai và không tổ hợp bộ lọc nào làm được điều đó.

Phạm vi đó hữu ích, vì nó có nghĩa là bạn có thể để nguyên cấu hình của máy chủ và vẫn từ chối một phần của nó ở cục bộ. Đó cũng là một giới hạn đáng ghi vào phiếu: bộ lọc thay đổi thứ máy khách này chấp nhận, không phải thứ máy chủ cung cấp. Nó không ảnh hưởng đến người dùng khác của cùng hồ sơ. Nó cũng không tồn tại khi chuyển sang máy khách khác không triển khai tùy chọn này, điều đáng biết trước khi xây dựng quy trình làm việc dựa trên nó.

Hãy xác nhận máy chủ thực sự gửi gì trước khi viết mẫu. Ở mức chi tiết cao, máy khách in chuỗi tùy chọn được đẩy xuống mà nó nhận được, và đó là nguồn trung thực duy nhất cho văn bản chính xác mà bạn đang so sánh:

sudo openvpn --config /etc/openvpn/corp.ovpn --verb 4
sudo grep -n 'pull-filter' /etc/openvpn/corp.ovpn

Đọc dòng được đẩy xuống như một danh sách các tùy chọn phân tách bằng dấu phẩy, và lưu ý rằng tên tùy chọn và đối số của chúng được phân tách bằng dấu cách. Văn bản bộ lọc của bạn được so sánh với luồng đó, vì thế dấu cách quan trọng đến vậy ở bước tiếp theo.

Khớp là tiền tố, nên dấu cách quyết định tất cả

Việc so sánh là một tiền tố chuỗi, không phải tên tùy chọn đã phân tích. Vì vậy "route" khớp với route-gateway 10.8.0.1, route-ipv6 2001:db8::/32 và route-metric 100. Thêm một dấu cách ở cuối sẽ thu hẹp nó vào họ mà bạn có lẽ đã định, và tiền tố đầy đủ thu hẹp hơn nữa vào một đích cụ thể.

Filter textWhat it actually matchesTypical outcome
"route"Every option beginning with those lettersRoutes, gateway, metric and IPv6 routes all dropped
"route "Route entries only, not the hyphenated siblingsThe routes go, the rest survives
"route 10.60."A single destination rangeThe narrowest rule, and the easiest to audit
"dhcp-option DNS"Pushed DNS settingsResolver stays local, internal names stop resolving

Hàng cuối là hàng bắt được người ta khi làm việc với đường hầm chia đôi. Giữ trình phân giải của riêng bạn là lựa chọn chính đáng, và nó có nghĩa là mọi tên nội bộ giờ phụ thuộc vào một trình phân giải không thấy được vùng riêng. Đó là hệ quả được chấp nhận có chủ đích, không phải tác dụng phụ phát hiện trong sản xuất.

Khớp theo tiền tố cũng có nghĩa là một quy tắc có thể âm thầm mở rộng về sau. Khi máy chủ thêm một tùy chọn mới bắt đầu bằng văn bản của bạn, bộ lọc của bạn bắt đầu áp dụng cho nó mà không ai sửa hồ sơ của bạn. Đó là chế độ hỏng cần phải thiết kế để chống lại, và cách giảm thiểu là khớp càng nhiều phần của tùy chọn càng tốt, không phải càng ít càng tốt.

Ba động từ với ba kết quả khác nhau

accept, ignore và reject không phải ba cách viết của cùng một ý. Chúng khác nhau ở việc máy khách làm gì với một kết quả khớp và ở việc có ai biết được điều đó hay không.

ignore âm thầm bỏ tùy chọn khớp, đó là điều bạn muốn cho một thiết lập mà bạn đã thay thế có chủ đích. reject bỏ nó và khiến máy khách phàn nàn, đó là điều bạn muốn khi sự vắng mặt của nó phải hiện ra trong nhật ký thay vì bị phát hiện sau này. accept là dạng khẳng định, dùng khi bạn xây dựng danh sách cho phép thay vì loại bỏ từng tùy chọn riêng lẻ.

Dù bạn dùng động từ nào, các bộ lọc được áp dụng theo thứ tự xuất hiện, nên hai quy tắc chồng lên nhau tạo ra kết quả phụ thuộc thứ tự và rất khó rà soát. Hãy giữ một quy tắc cho mỗi ý định và đặt văn bản cụ thể nhất vào mỗi quy tắc. Nếu cần danh sách cho phép, hãy chọn vài quy tắc accept thay vì một đống quy tắc ignore cộng lại thành điều tương tự. Khi đó người rà soát có thể đọc tệp từ trên xuống dưới và dự đoán kết quả, và đó là bài kiểm tra duy nhất có thể mở rộng.

Kiểm tra tuyến và trình phân giải đã áp dụng, không phải hồ sơ

Một bộ lọc trông đúng trong tệp vẫn có thể để bạn lại với một đường hầm không định tuyến được gì hữu ích. Hãy xác minh tác động trên hệ thống đang chạy, nơi các tùy chọn được đẩy xuống đã được áp dụng hoặc bỏ đi:

ip route show default
ip route show | grep -c 'proto static'
resolvectl status | grep -A4 'Link.*tun0'
curl -sS -o /dev/null -w '%{http_code}\n' --max-time 5 https://intranet.example.internal/

Hai dòng đầu cho bạn biết tuyến mặc định được đẩy xuống có đến hay không và bao nhiêu mục tĩnh sống sót. Truy vấn trình phân giải cho thấy giao diện đường hầm thực sự dùng máy chủ nào, và thường đó là nơi bất ngờ DNS xuất hiện. Dòng cuối trả lời câu hỏi duy nhất quan trọng với người dùng.

Hãy thử cả hai chiều khi bạn ở đó. Một quy tắc giữ internet cục bộ hoạt động nhưng âm thầm phá vỡ việc phân giải tên nội bộ sẽ qua được kiểm tra bề mặt và thất bại ở nhiệm vụ thật đầu tiên, nên hãy đưa một tài nguyên nội bộ và một trang công khai vào cùng một bài kiểm tra.

Ghi lại ngoại lệ và người sở hữu nó

Bộ lọc là một ngoại lệ đối với thiết kế của người vận hành, nên hãy ghi nó kèm lý do và điểm rà soát. "Bỏ qua các tuyến được đẩy xuống để giữ mặc định cục bộ" có thể rà soát được; một dòng trống trong hồ sơ thì không, và người tiếp theo sẽ xóa nó hoặc mở rộng nó bằng phỏng đoán.

Phiên bản cũng quan trọng ở đây. Hành vi khớp và cú pháp được chấp nhận chính xác đã được tinh chỉnh trong OpenVPN 2.4, 2.5 và 2.6, nên hãy xác nhận mẫu theo hướng dẫn của bản dựng bạn phát hành chứ không phải theo một bài đăng diễn đàn về phiên bản cũ. Hướng dẫn OpenVPN 2.6 ghi lại tùy chọn này và quy tắc khớp của nó.

Cuối cùng, hãy thống nhất ngoại lệ với người quản lý máy chủ. Một bộ lọc phía máy khách mâu thuẫn với chính sách máy chủ có chủ đích là một sự cố hỗ trợ đang chờ lần kiểm toán tiếp theo, và giải quyết trước khi hồ sơ được phát hành rẻ hơn nhiều so với sau khi ai đó nhận ra các tuyến bị thiếu.

Bài viết liên quan