Cấu hình VPN công khai ngừng hoạt động? Đọc giai đoạn thất bại
Một hồ sơ đã tải mô tả một máy chủ trong một ngày. Đọc xem khẳng định nào đã vỡ, kiểm tra chứng chỉ mà phía kia trình bày, và đừng bao giờ tắt xác minh.
Hồ sơ hoạt động vào thứ Ba, và đến thứ Sáu máy khách quay ba mươi giây rồi bỏ cuộc. Không có gì thay đổi trên máy của bạn. Đó chính là điểm mấu chốt: một cấu hình đã tải mô tả một máy chủ tại một thời điểm, và người vận hành ở đầu bên kia không có nghĩa vụ giữ cho mô tả đó luôn đúng. Cám dỗ là bắt đầu sửa các thiết lập bảo mật cho đến khi đường hầm hoạt động lại. Chính bản năng đó khiến người ta cuối cùng chạy một hồ sơ đã tắt xác minh chứng chỉ, điều này còn tệ hơn là không có đường hầm nào.
Tệp mô tả một khoảnh khắc, không phải một hợp đồng
Tệp cấu hình là một tập hợp các khẳng định: tên máy chủ này lắng nghe trên cổng này với giao thức này, trình bày chứng chỉ khớp với tên này và chấp nhận các thông tin đăng nhập này. Khi bất kỳ điều nào trong số đó không còn đúng, tệp đã lỗi thời và việc sửa chữa thuộc về phía người vận hành ở ranh giới, không phải thiết lập của bạn.
Danh sách nút công khai khiến điều này hiển nhiên do bản chất của chúng. Các nút do tình nguyện viên vận hành, chúng xuất hiện và biến mất, địa chỉ được tái sử dụng và cổng bị chặn bởi mạng mà chúng nằm sau. Danh sách là một ảnh chụp được tạo lại, và bản sao trên đĩa của bạn là một bức ảnh của ảnh chụp cũ hơn.
Các dịch vụ thương mại thay đổi chậm hơn, nhưng không phải không bao giờ. Các tổ chức phát hành chứng chỉ luân chuyển, một trình lắng nghe chuyển từ địa chỉ dùng chung sang địa chỉ riêng, một giao thức cũ bị loại bỏ và một danh sách mật mã mới xuất hiện. Mỗi thay đổi đó đều vô hình cho đến khi máy khách của bạn thử kết nối và nhận được câu trả lời khác với điều tệp mong đợi.
Đọc giai đoạn thất bại trước khi chạm vào một thiết lập
Thông báo lỗi cho biết khẳng định nào đã vỡ, và mỗi khẳng định có cách sửa hoàn toàn khác nhau. Sửa mật mã khi tên máy chủ không còn phân giải được chỉ làm mất một buổi chiều và không dạy được ai điều gì.
| What happens | The assertion that broke | Supported response |
|---|---|---|
| Name never resolves | The host still exists under that name | Get a current endpoint from the operator |
| TCP connect times out | The listener is on that port and reachable | Check the current published port, then the local network |
| TLS or key exchange fails | The peer presents the expected identity | Compare the certificate, not the cipher list |
| Authentication rejected | The account is still valid | Get credentials reissued or stop using the service |
dig +short vpn.example.net
curl -sS -o /dev/null -w 'connect=%{time_connect} tls=%{time_appconnect}\n' --max-time 8 https://vpn.example.net:443/
openssl s_client -connect vpn.example.net:443 -servername vpn.example.net -brief </dev/nullDòng giữa phân biệt một đường bị chặn với một bắt tay bị hỏng, và dòng thứ ba cho thấy nhà phát hành cùng ngày hiệu lực của chứng chỉ thực sự được trình bày. Nếu nhà phát hành đó không phải là nhà phát hành mà hồ sơ đã ghim, chứng chỉ đã thay đổi, và không tùy chọn nào phía máy khách làm cho ghim cũ đúng trở lại.
Những thay đổi chứng chỉ và danh tính là những thứ im lặng
Hầu hết các lỗi tự báo hiệu. Thay đổi danh tính thì không, vì một máy khách ghim tên chứng chỉ sẽ từ chối một chứng chỉ mới hoàn toàn tốt với thông báo mà nhiều người đọc là lỗi phần mềm. Đường hầm vẫn ổn. Ghim đã lỗi thời.
Tìm các tùy chọn danh tính trước khi kết luận bất cứ điều gì:
grep -nE '^(remote|proto|auth|verify-x509-name|tls-crypt|key-direction|ca) ' profile.ovpn
openssl x509 -in profile-ca.crt -noout -subject -datesNếu hồ sơ mang CA nhúng và người vận hành đã chuyển sang một tổ chức mới, tệp cũ không thể xác thực máy chủ mới. Thay khối CA bằng khối do người vận hành công bố là một cách sửa chính đáng. Xóa chỉ thị xác minh thì không, và đó là cùng những lần gõ phím với kết quả rất khác.
Một bản nâng cấp máy khách có thể tạo ra cùng triệu chứng mà không có bất kỳ thay đổi nào từ người vận hành. Những tùy chọn từng được âm thầm chấp nhận nay bị từ chối, hoặc một giao thức lỗi thời bị loại bỏ. Đó là giới hạn tương thích trong phần mềm của bạn, và đáng để thử hồ sơ thứ hai với cùng máy khách trước khi đổ lỗi cho máy chủ.
Chỉ người vận hành mới có thể công bố một sản phẩm thay thế hợp lệ
Khi một nút biến mất, sản phẩm thay thế phải đến từ cùng nguồn đã công bố bản gốc. Một hồ sơ đến trong tin nhắn trực tiếp vì «dùng cùng tên máy chủ» là cấu hình chưa được xác minh từ một bên không rõ, và việc nhập nó trao cho bên đó quyền kiểm soát định tuyến của bạn.
Việc kiểm tra rất rẻ. Lấy tệp hiện tại từ vị trí đã công bố, so sánh điểm cuối và giao thức với danh sách, và xác nhận dấu vân tay của vật liệu CA thay vì tin vào tên tệp:
curl -sS -o current.ovpn https://example.org/nodes/current.ovpn
sha256sum current.ovpn profile.ovpn
grep -nE '^(remote|proto) ' current.ovpnNếu hai hàm băm chỉ khác nhau ở khoảng trắng, bạn có thay đổi định dạng. Nếu chúng khác nhau ở điểm cuối, người vận hành đã di chuyển thứ gì đó và tệp đã công bố là thẩm quyền. Nếu tệp đã công bố cũ hơn tệp bạn giữ, có lẽ bạn đang xem bộ nhớ đệm, và câu trả lời lỗi thời sẽ đưa bạn đi sai hướng.
Ngừng dùng mục cũ và ghi lại điều đã xảy ra
Sau khi xác minh một sản phẩm thay thế hoạt động, hãy xóa hồ sơ cũ thay vì giữ nó làm dự phòng. Một mục cũ kết nối nửa vời là một cái bẫy: nó sẽ được chọn trong lúc sự cố, nó sẽ thất bại chậm, và người gỡ lỗi sẽ dành mười phút đầu với tệp sai.
Giữ một ghi chép ngắn bên ngoài cấu hình: ngày tháng, điểm cuối cũ, giai đoạn thất bại và thứ đã thay thế nó. Các nút công khai thay đổi, và sáu tuần sau cùng câu hỏi đó lại đến với một người khác. Một dòng trong tệp ghi chú trả lời nó trong vài giây.
Nếu từ một mạng mọi nút đều thất bại theo cùng một cách và từ một mạng khác không nút nào thất bại, hãy ngừng sửa hồ sơ và nhìn vào đường đi cục bộ. Một cổng chặn bắt, một dải cổng bị lọc hoặc một proxy chặn ngang sẽ tạo ra lỗi giống hệt nhau ở những nhà cung cấp không liên quan, và chính mẫu đó là dấu hiệu duy nhất cho thấy vấn đề chưa bao giờ nằm ở tệp.