AWS Client VPN hay bastion để đến một VPC có peering
Cả hai đường đều hoạt động nhưng hỏng ở những chỗ khác nhau. So sánh tuyến endpoint, định tuyến trả về và ba trường hợp bastion là ranh giới trung thực.
Một endpoint Client VPN có thể đến một VPC đang peering với VPC liên kết của nó, và bạn không cần bastion để làm điều đó hợp lệ. Lựa chọn đáng làm là nơi lưu lượng đổi chủ: một tuyến endpoint đáp xuống subnet liên kết và vượt qua kết nối peering, hoặc một host trong VPC đang peering chấm dứt phiên. Cả hai đường đều hoạt động và chúng hỏng ở những chỗ khác nhau, nên quyết định là về quyền sở hữu và kiểm toán, không phải về điều AWS cho phép. Đây là cách tôi chọn giữa hai đường, và bốn mục khiến tuyến được định tuyến hoạt động.
Hai đường, một endpoint, chủ khác nhau
Trên tuyến được định tuyến, lưu lượng của máy khách đến endpoint, được dịch sang địa chỉ của giao diện mạng Client VPN trong subnet liên kết, và rời subnet đó qua kết nối peering từ A đến B. VPC B không chấm dứt phiên VPN nào; nó thấy lưu lượng thông thường từ VPC A, vì vậy tuyến trả về của nó trỏ đến VPC A chứ không phải nhóm máy khách.
Trên đường bastion, máy khách đến một host trước. Một bastion ở A vẫn để bước nhảy cuối cùng vượt kết nối peering, vì vậy bạn giữ công việc peering và thêm một phiên. Một bastion ở B cũng cần một đường từ máy khách, và khi đường đó chính là tuyến endpoint, bạn có thiết kế định tuyến cộng thêm một bước nhảy. Bastion chỉ bớt việc khi nó đã tồn tại, đã được phê duyệt, và thứ phía sau nó cần ranh giới phiên chứ không phải ranh giới mạng.
Bốn mục khiến tuyến được định tuyến hoạt động
AWS ghi tài liệu cho tình huống này trên trang Client VPN how-it-works, và trên thực tế nó quy về bốn mục do hai hoặc ba nhóm sở hữu. Các dải chỉ là ví dụ; dải peering phải duy nhất và dải trả về phải khớp với kế hoạch của bạn.
| Control | What it must say |
|---|---|
| Endpoint route | 10.70.0.0/16 targets the association subnet |
| Authorization rule | The approved group may reach 10.70.0.0/16 |
| VPC A association-subnet table | 10.70.0.0/16 targets the peering connection |
| VPC B resource-subnet table | VPC A's range targets the same peering connection |
Tuyến và quyền là hai kiểm soát riêng biệt. Một tuyến endpoint đúng mà không có quy tắc cấp quyền khớp thì không cho máy khách gì; một quy tắc cấp quyền cho đích mà endpoint không thể định tuyến sẽ cho nó một lỗ đen. Cả hai phải nêu cùng một dải.
Tuyến endpoint trỏ đến một subnet trong chính VPC của endpoint, không bao giờ trỏ đến kết nối peering. Bảng tuyến của VPC trỏ đến kết nối peering, không bao giờ trỏ đến instance hay giao diện. Sao chép một giá trị giữa hai bên được lưu không phàn nàn và không định tuyến gì cả.
Vì subnet liên kết dịch nguồn của máy khách, B phải định tuyến trở lại VPC A, không phải nhóm máy khách. Gửi dải máy khách qua kết nối peering trông có vẻ đối xứng, qua được bước xem xét và hỏng âm thầm vì B không bao giờ thấy gói có nguồn là máy khách.
Nhóm bảo mật và mét cuối cùng của quyền
Định tuyến đưa gói vào B; B vẫn quyết định. Với một kết nối peering đang hoạt động trong cùng khu vực, một nhóm bảo mật ở B có thể tham chiếu nhóm được áp dụng cho liên kết Client VPN, điều này giữ quy tắc hẹp và chịu được thay đổi địa chỉ. Ở nơi không thể tham chiếu nhóm, hãy cho phép rõ ràng dải của subnet liên kết thay vì mở rộng đến 0.0.0.0/0, vì điều đó biến một lỗi định tuyến thành thời gian chờ không giải thích được.
Sau đó kiểm tra những gì định tuyến không bao giờ chạm: ACL mạng trên hai subnet, danh sách cho phép hoặc đối tượng của token ứng dụng, và DNS. Peering không sao chép các vùng được lưu trữ riêng, nên máy tính xách tay có thể giữ một tuyến hoạt động đến địa chỉ mà nó không thể phân giải, và kết nối peering không thêm tin cậy cho chứng chỉ. Trỏ endpoint đến một resolver trả lời cho B, rồi xác nhận tên riêng và chứng chỉ khớp nhau.
Khi bastion là câu trả lời trung thực
Tôi giữ ba điểm kích hoạt để chọn bastion một cách có chủ đích. VPC đang peering thuộc về một nhóm sẽ không thêm tuyến trả về cho dải của bạn hoặc không chấp nhận tham chiếu nhóm. Quyền truy cập phải được phê duyệt hoặc ghi lại theo từng phiên và ứng dụng không thể tự mang điều đó. Hoặc bước nhảy cuối cùng phải ở trong B vì dịch vụ chỉ phân giải ở đó và danh tính TLS của nó được ghim vào một tên nội bộ.
Không điều nào trong số đó là lách khỏi sự thật rằng peering không có tính bắc cầu. Tính không bắc cầu giới hạn những gì tài nguyên trong B được làm: chúng không thể dùng A làm trung chuyển đến VPC thứ ba mà A đang peering. Điều đó chưa bao giờ có nghĩa là người dùng VPN không thể đến trực tiếp một VPC đang peering, và một bastion được xây để lách cách đọc sai đó là host bị vá mà không có lý do.
Lỗi ngược lại tốn kém hơn theo thời gian: đẩy mọi nhóm qua bastion duy nhất đã tồn tại, rồi phát hiện rằng nhóm bảo mật, bảng tuyến và cửa sổ vá của nó là phụ thuộc sản xuất. Ghi lại host phục vụ điểm kích hoạt nào, và cho nó nghỉ khi điểm kích hoạt biến mất.
Transit Gateway và nhiều liên kết thay đổi phép tính
Nếu endpoint được gắn trực tiếp vào Transit Gateway thay vì vào một subnet, mô hình thay đổi: máy khách không còn được dịch sang địa chỉ giao diện trong subnet liên kết, và bảng tuyến của cổng phải mang dải máy khách cùng với điểm gắn dẫn đến VPC đang peering. Điều đó sạch hơn ở quy mô lớn, nhưng công việc chuyển từ bốn mục sang bảng tuyến của cổng.
Nhiều liên kết nhân số kiểm tra lên. Tuyến endpoint thuộc về endpoint, nhưng mỗi subnet liên kết cần một bảng tuyến với bước nhảy peering thật. Một phiên có thể thành công qua một liên kết trong khi liên kết khác không có đường trả về, nên hãy thử từng cái.
Thứ tự xác minh tìm ra chỗ hỏng nhanh
Chạy những bước này theo thứ tự; mỗi bước có thể qua trong khi bước sau hỏng, và thời gian chờ của máy khách hầu như không bao giờ nói cái nào đã hỏng.
- Phân giải tên ứng dụng từ máy khách và kiểm tra địa chỉ nằm trong dải peering.
- Kết nối, rồi đọc nhật ký kết nối của endpoint cho liên kết đã chấm dứt phiên.
- Trên subnet liên kết đó, xác nhận bảng tuyến trỏ dải peering đến một kết nối peering đang hoạt động.
- Trên subnet tài nguyên ở B, xác nhận một mục trả về cho dải giao diện và các quy tắc nhóm khớp.
- Thử một thao tác được phép và một tài nguyên phải tiếp tục không thể truy cập; cái thứ hai bắt được tàn dư gỡ lỗi.
- Kết nối lại sau mọi thay đổi tuyến split-tunnel, vì một đường hầm đang chạy sẽ không nhận bộ tuyến mới.
Hai triệu chứng đáng nhớ. Một SYN đến B mà không có trả lời gần như luôn là tuyến trả về bị thiếu. Một kết nối hoàn tất rồi bị đặt lại thường là nhóm, ACL hoặc ứng dụng. Không cái nào xuất hiện trong nhật ký endpoint như nguyên nhân, nên hãy giữ bốn mục với một chủ sở hữu bên cạnh mỗi mục.
Nếu không điểm kích hoạt nào trong ba điểm áp dụng, hãy hoàn tất tuyến được định tuyến và ghi lại bốn mục đó. Nếu một điểm áp dụng, hãy giữ bastion chỉ cho ranh giới đó và để tuyến endpoint cho các dịch vụ không cần phiên phía trước.