VM được tạo mà không có chuyển tiếp IP, nó đã chạy phần mềm VPN, và bản năng là dựng lại nó từ mẫu với cờ được bật. Việc dựng lại đó là không cần thiết. Compute Engine công bố canIpForward như một thuộc tính có thể cập nhật, và đường cập nhật được tài liệu hóa sẽ áp dụng nó với refresh thay vì khởi động lại. Điều mà cờ thực sự kiểm soát thì hẹp: không có nó, nền tảng sẽ bỏ các gói tin đến instance nhưng không được gửi đến địa chỉ của chính instance. Một cổng chuyển tiếp lưu lượng của các máy khác làm đúng điều đó, nên cờ phải được bật. Mọi thứ sau đó là cấu hình của khách và định tuyến, mà cờ không đụng tới.

Cờ cho phép gì, và không cho phép gì

Khi tắt chuyển tiếp, nền tảng coi instance là điểm cuối. Các gói tin có đích là địa chỉ của chính instance được giao; các gói tin mà instance phải chuyển tiếp thay người khác thì không.

Khi bật chuyển tiếp, instance có thể đóng vai trò chặng kế tiếp cho một tuyến VPC, và đó là vai trò mà một thiết bị VPN cần. Cờ không nói gì về tường lửa, định tuyến của khách, cấu hình đường hầm hay đường quay về, và một giá trị true trên cổng hỏng vẫn là cổng hỏng.

Đọc thuộc tính hiện tại

Kiểm tra thiết lập trước khi thay đổi bất cứ điều gì, dùng describe chỉ đọc trên instance, dự án và vùng dự định:

gcloud compute instances describe VM_NAME --project PROJECT_ID --zone ZONE --format='value(canIpForward)'

Giá trị false chỉ quan trọng nếu VM này phải là chặng kế tiếp. Nếu đúng như vậy, phần còn lại của đường vẫn phải được kiểm tra riêng, vì thuộc tính chỉ là một dòng trong chuỗi dài hơn.

Cập nhật instance hiện có

Quy trình cập nhật thuộc tính instance của Google xuất tài nguyên hiện tại, sửa thuộc tính và gửi kết quả. Đó là một luồng công việc khác với cờ --can-ip-forward lúc tạo, và chính nó là thứ hoạt động trên một VM đang chạy.

Trước tiên hãy xuất định nghĩa ra một tệp cục bộ, và giữ một bản sao không đổi để so sánh:

gcloud compute instances export VM_NAME --project PROJECT_ID --zone ZONE --destination=instance.yaml

Trong tệp đã xuất đó, đặt thuộc tính và không thay đổi gì khác:

canIpForward: true

Giữ toàn bộ tài nguyên, kể cả dấu vân tay của nó. Thay tệp bằng một tài liệu YAML một dòng, hoặc gộp các sửa đổi không liên quan về loại máy, đĩa hay giao diện vào cùng một lần gửi, chính là cách một thay đổi thuộc tính trở thành sự cố.

Yêu cầu cơ chế cập nhật xác thực tệp và báo cáo những gì nó sẽ yêu cầu, trước khi cho phép bất kỳ thay đổi thực tế nào:

gcloud compute instances update-from-file VM_NAME --project PROJECT_ID --zone ZONE --source=instance.yaml --most-disruptive-allowed-action=NO_EFFECT

Lần chạy xác thực đó không bật chuyển tiếp. Đọc phản hồi về các thuộc tính không hợp lệ và về hành động được nói là cần thiết. Với thay đổi tách biệt này, hành động được tài liệu hóa là REFRESH. Nếu kết quả yêu cầu khởi động lại, tệp chứa nhiều hơn thuộc tính bạn định đổi, nên hãy kiểm tra nó thay vì chấp nhận khởi động lại.

Áp dụng tệp đã xem xét với giới hạn refresh:

gcloud compute instances update-from-file VM_NAME --project PROJECT_ID --zone ZONE --source=instance.yaml --most-disruptive-allowed-action=REFRESH

Kiểm tra rằng thao tác đã hoàn tất và chạy lại lệnh describe. Nếu dấu vân tay không còn khớp, ai đó khác đã thay đổi instance trong khi bạn đang sửa, nên hãy xuất một bản sao mới và xem xét lại thay đổi thay vì ép tệp cũ của bạn đi qua.

Khách vẫn phải định tuyến gói tin

Quyền trên đám mây không biến thiết bị thành bộ định tuyến. Xác nhận rằng một tuyến VPC chọn VM này làm chặng kế tiếp cho tiền tố đích, và khách định tuyến giữa đường hầm và giao diện đúng với chính sách chuyển tiếp của nó được bật.

Chính sách tường lửa phải cho phép luồng bên trong cũng như trình lắng nghe bên ngoài. Chỉ mở cổng VPN mô tả phần vận chuyển được mã hóa và không nói gì về trao đổi ứng dụng bên trong nó.

Cuối cùng, đích cần một đường quay về tới nhóm máy khách, hoặc thiết kế phải dịch nguồn một cách có chủ đích. Nếu đích thấy lưu lượng đã dịch, hãy kiểm tra nguồn đã dịch; nếu thiết kế giữ nguyên nhóm, hãy kiểm tra nhóm đó trong tuyến quay về và các quy tắc truy cập. Thêm NAT trước khi quyết định thiết kế nào bạn muốn sẽ che một tuyến bị thiếu và thay đổi chính sách mà đích nhìn thấy.

Trên một cổng Linux, chuyển tiếp trong nhân là một phần cấu hình của khách. Thiết bị pfSense có tương đương riêng, và sao chép một lệnh sysctl của Linux vào đó không phải bước tương ứng.

Xác minh từ máy khách cần truy cập

Thử từ một máy khách VPN tới một dịch vụ đích, không phải từ chính cổng. Một kết nối khởi tạo trên cổng dùng nguồn khác và không bao giờ thực thi các quy tắc chuyển tiếp bạn vừa bật.

Ghi lại thuộc tính trong bất cứ thứ gì quản lý thiết bị. Một VM được sửa thủ công sẽ hoạt động cho đến khi lần thay thế tiếp theo âm thầm đưa thiết lập ban đầu trở lại, và sự cố đó sẽ trông như một hồi quy trong phần mềm VPN.

Thứ tự công việc: đọc thuộc tính, xuất và sửa một dòng, xác thực với NO_EFFECT, áp dụng với REFRESH, xác nhận khách chuyển tiếp, rồi thử từ một máy khách.

Bài viết liên quan