Máy chủ VPN trên Pi: hãy bắt đầu từ ứng dụng điện thoại, không phải từ công thức
Ứng dụng trên điện thoại quyết định giao thức, quá trình trao đổi và định dạng hồ sơ. Hãy ghi lại thỏa thuận bốn phần trước khi cài đặt bất cứ thứ gì trên Pi.
Phần lớn các bản dựng VPN trên Pi đều bắt đầu bằng công thức cài máy chủ và kết thúc bằng một chiếc điện thoại không thể kết nối. Thứ tự đã bị đảo ngược. Một ứng dụng khách trên điện thoại triển khai một giao thức cụ thể với một quá trình xác thực cụ thể, và máy chủ phải khớp với quá trình đó chứ không phải ngược lại. Quyết định ứng dụng trước sẽ biến một buổi chiều gỡ lỗi thành một danh sách kiểm tra ngắn.
Thứ tự giúp tránh phải làm lại
Hãy ghi lại hệ điều hành của điện thoại và đúng ứng dụng VPN trước khi cài đặt bất cứ thứ gì trên Pi. Cặp thông tin đó quyết định giao thức nào thậm chí còn khả thi. Một ứng dụng khách không trở thành một ứng dụng khách khác chỉ vì tệp hồ sơ tình cờ chứa một trường quen thuộc.
Một khóa chia sẻ trong hồ sơ, hay một số cổng trông quen mắt, không biến giao thức này thành giao thức khác. Quá trình trao đổi hoặc khớp với những gì ứng dụng triển khai, hoặc thất bại ở một giai đoạn để lại cho bạn rất ít thông tin để đọc. Không có chẩn đoán nào nói thẳng "sai giao thức". Bạn chỉ nhận được một lần hết thời gian chờ, một lỗi chứng chỉ hoặc một vòng thử lại im lặng, và cả ba đều trông như lỗi máy chủ.
Khi ứng dụng đã được chốt, lựa chọn máy chủ thu hẹp lại và phần còn lại của bản dựng có mục tiêu rõ ràng.
Ứng dụng trên điện thoại thực sự triển khai điều gì
Một danh sách ứng dụng khách được công bố mô tả một ứng dụng, không phải một dịch vụ. Ứng dụng OpenVPN Connect cho Android cần một máy chủ OpenVPN; nó không cung cấp phía máy chủ. Nó cũng không trở thành ứng dụng khách IPsec hay L2TP khi một hồ sơ trông có vẻ tương tự.
Sự phân biệt đó quan trọng nhất khi làm theo một hướng dẫn cũ. Những công thức viết cho một giao thức mà ứng dụng hiện tại đã bỏ vẫn sẽ cài đặt trơn tru trên Pi và vẫn sẽ thất bại trên điện thoại, điều này đọc ra như một lỗi cấu hình chứ không phải một sự không khớp giao thức.
Hãy kiểm tra tài liệu hiện hành của ứng dụng về các định dạng hồ sơ mà nó nhập được trước khi chốt gói máy chủ. Năm phút đọc còn hơn phải làm lại.
Thỏa thuận bốn phần
Ghi lại bốn điều và giữ chúng bên nhau: hệ điều hành và phiên bản ứng dụng trên điện thoại, cách triển khai máy chủ trên Pi, chính sách xác thực và tin cậy, và điểm cuối bên ngoài. Mỗi một trong bốn điều đều có thể vô hiệu hóa ba điều còn lại.
Một lần nâng cấp ứng dụng, một lần đổi gói máy chủ hay một tổ chức cấp chứng chỉ mới đều phá vỡ thỏa thuận, và lần nào thất bại cũng trông giống hệt nhau từ điện thoại. Việc có bốn điều được ghi ra chính là thứ cho phép bạn xác định phần nào đã thay đổi.
Thông tin đăng nhập có nhiệm vụ riêng
Hãy quyết định xem hồ sơ dùng chứng chỉ ứng dụng khách, tên người dùng và mật khẩu, hay một kết hợp được hỗ trợ, rồi làm cho hai đầu khớp nhau. Danh tính của máy chủ và tài liệu CA được tin cậy cũng phải khớp với những gì ứng dụng khách chấp nhận.
Chứng chỉ công khai của CA và khóa riêng dùng để ký là hai đối tượng khác nhau. Chỉ phần công khai mới thuộc về hồ sơ trên điện thoại. Đặt khóa ký trên điện thoại là trao đi khả năng tạo ra danh tính, đúng ngược lại với mục đích của một CA. Hãy coi tệp đó là đối tượng nhạy cảm nhất trong toàn bộ bản dựng.
Hãy dùng quy trình xuất và nhập được dịch vụ hỗ trợ thay vì tự ghép hồ sơ bằng tay. Những hồ sơ ghép tay thường mang theo các chỉ thị chỉ dành cho máy tính để bàn mà ứng dụng di động bỏ qua hoặc từ chối.
Trên hết, đừng thay việc kiểm tra chứng chỉ bằng "chấp nhận mọi máy chủ" để làm cho một ví dụ cũ kết nối được. Điều đó biến một vấn đề tương thích thành một lần vượt qua xác thực, và nó thường sống sót vào môi trường vận hành vì nó vẫn chạy được.
Khả năng kết nối là một hợp đồng riêng
Điện thoại phải đến được điểm cuối bên ngoài của máy chủ thông qua cách bố trí thượng nguồn thực tế. Việc chuyển địa chỉ ở bộ định tuyến gia đình, việc lọc và NAT của nhà mạng đều nằm giữa hai đầu. Một tên DNS động chỉ cho điểm cuối một cái tên ổn định; nó không tạo ra một đường vào.
Sau đó hãy xác định ứng dụng khách có thể đến được gì khi đã kết nối: các tiền tố riêng tư hay một lối ra internet đầy đủ, các đường chuyển tiếp và đường phản hồi của chúng, hành vi DNS, và liệu IPv6 có nằm trong phạm vi. Một lần đăng nhập thành công không chứng minh được điều nào trong số đó.
Hãy nghiệm thu trực tiếp chiếc điện thoại và hồ sơ dự định dùng, bao gồm việc kiểm tra rằng một tài nguyên không được phép vẫn không thể truy cập và rằng việc thu hồi thực sự loại bỏ quyền truy cập. Thành công với một ứng dụng khách trên máy tính chỉ chứng thực cho ứng dụng khách đó, không phải chiếc điện thoại trong tay bạn. Trang OpenVPN Connect là một ví dụ cụ thể về một ứng dụng khách mong đợi một dịch vụ tương ứng.