Một cổng chạy WireGuard cho thiết bị của bạn và một máy khách OpenVPN tới mạng của người khác. Việc chuyển tiếp giữa hai giao diện bên trong hoạt động, và thật dễ kết luận rằng subnet hạ nguồn giờ là một phần của dịch vụ thượng nguồn. Không phải vậy. Tuyến mà máy khách kéo về cho cổng của bạn biết gửi yêu cầu đi đâu; nó không nói gì về cách mạng từ xa trả lưu lượng về những thiết bị mà nó chưa từng nghe tên. Hãy chọn một mô hình trả về mà thượng nguồn thực sự hỗ trợ trước khi thêm dù chỉ một quy tắc.

Quyết định mô hình trả về trước khi chạm vào định tuyến

Trong hướng dẫn này, máy khách hạ nguồn dùng 10.90.0.0/24, địa chỉ tunnel thượng nguồn được cấp cho cổng là 10.80.0.6, và tài nguyên từ xa đã được phê duyệt là 172.20.0.30. Hai mô hình phù hợp với hình dạng đó: giữ nguyên nguồn hạ nguồn và để phía xa định tuyến nó, hoặc chuyển đổi nguồn thành địa chỉ tunnel của chính cổng. Mọi thứ sau quyết định này là máy móc, và bản thân quyết định cần chủ sở hữu dịch vụ. Một trong hai dòng trên là thỏa thuận định tuyến với phía xa; dòng kia là thay đổi chính sách cục bộ bạn có thể tự làm. Nhầm lẫn hai điều đó chính là thứ biến một thay đổi mười phút thành một cuộc đàm phán.

preserved:  10.90.0.23 -> 172.20.0.30
translated: 10.80.0.6  -> 172.20.0.30

Chọn một dòng và cam kết với nó. Các dòng là phương án thay thế, không phải các bước, và trộn chúng tạo ra một thiết kế không ai giải thích được khi rà soát.

Giữ nguyên nguồn bằng định tuyến

Phía xa nhận yêu cầu từ địa chỉ hạ nguồn, nên nó cần một tuyến được hỗ trợ và quyền sở hữu peer cho subnet đó, cộng với ủy quyền chấp nhận nó. Đây là các thiết lập từ xa, và không tuyến Linux cục bộ nào tạo ra chúng. Hãy yêu cầu chúng một cách rõ ràng và bằng văn bản, kèm tiền tố và peer tunnel sẽ mang nó, và hãy chờ rằng câu trả lời phụ thuộc vào việc dịch vụ có hỗ trợ các thỏa thuận site-to-site hay không.

Nếu câu trả lời là có, cấu hình cục bộ nhỏ: bật chuyển tiếp, các allowed-ips của peer WireGuard bao phủ dải hạ nguồn, và chính sách tường lửa cho phép đi qua theo cả hai chiều.

Chuyển đổi nguồn có chủ đích

Nếu dịch vụ chỉ trả lưu lượng về địa chỉ máy khách đã kết nối, hãy chuyển đổi nguồn thành địa chỉ đó khi ra ngoài và giữ trạng thái conntrack đảo ngược nó cho các phản hồi. Giới hạn quy tắc trong các nguồn hạ nguồn dự định, các đích từ xa dự định và giao diện thượng nguồn. Một quy tắc chuyển đổi mọi thứ rời khỏi mọi giao diện là chính sách lớn hơn nhiều so với yêu cầu này, và nó sẽ làm bạn bất ngờ về sau.

IPv6 cần thiết kế riêng; sao chép một dòng masquerade IPv4 không phải là kiến trúc. Hãy thử đường đã chuyển đổi bằng kết nối mới thay vì kết nối đã lưu trong bộ nhớ đệm.

Đường dữ liệu cục bộ vẫn phải hoạt động

Chuyển đổi không loại bỏ công việc cục bộ: cổng vẫn cần tuyến tới các đích hạ nguồn, quyền sở hữu nguồn của peer WireGuard đúng, chuyển tiếp được bật và chính sách tường lửa hẹp giữa các giao diện. Một yêu cầu sinh ra trên chính cổng không thực hành bất kỳ quyền nào trong số đó, nên các thử nghiệm cục bộ trên cổng vẫn đạt trong khi thiết bị hạ nguồn vẫn thất bại.

Hãy thử từ một thiết bị hạ nguồn thật, không phải từ cổng. Địa chỉ nguồn chính là toàn bộ mục đích của bài tập này.

Một nguồn nghĩa là một danh tính phiên

Dịch vụ từ xa thấy phiên đã xác thực của cổng và địa chỉ đã chuyển đổi của nó, không phải xác thực độc lập cho từng thiết bị hạ nguồn. Hãy giữ rõ ràng quyền theo từng thiết bị và danh tính ứng dụng, và xác nhận với chủ sở hữu dịch vụ rằng một cổng hành động thay cho nhiều thiết bị có được phép hay không. Chuyển đổi không phải cách lách yêu cầu đăng ký theo từng thiết bị; nếu dịch vụ yêu cầu mỗi thiết bị phải đăng ký, hãy dùng mô hình đó hoặc đàm phán một thỏa thuận site-to-site.

Viết xác nhận đó vào runbook bên cạnh quy tắc, vì người rà soát tiếp theo sẽ hỏi thiết kế đã được phê duyệt hay chỉ là tiện lợi.

Xác định trạng thái ngắt kết nối, rồi thử ba yêu cầu

Quyết định điều gì xảy ra khi tunnel thượng nguồn sập. Lưu lượng từ xa được ủy quyền không nên lặng lẽ theo một đường dự phòng WAN thông thường ở nơi điều đó bị cấm, nên chính sách tường lửa cho phép đi qua cũng phải thất bại theo hướng đóng. Sau đó thử ba trường hợp từ một thiết bị hạ nguồn thật: một yêu cầu được phép hoạt động, một yêu cầu không được phép thất bại, và một sự cố thượng nguồn dừng yêu cầu được phép.

Ghi lại việc hoàn tác trên một dòng cho mỗi quy tắc, để thay đổi có thể được hủy mà không phải dựng lại ý định.

Bài viết liên quan