43. VPN



Khi triển khai các dự án thực tế, trong nhiều trường hợp ta cần kết nối mạng nội bộ (on-premise) với AWS, để truy cập vào các tài nguyên trong VPC hoặc cho phép các ứng dụng trên AWS giao tiếp với hệ thống nội bộ. Bài này trình bày về 1 trong 2 giải pháp phổ biến nhất: sử dụng AWS Site-to-Site VPN. Nhưng trước hết, hãy tìm hiểu về công nghệ nền tảng của nó: giao thức IPSec, cùng thuật toán trao đổi khóa Diffie-Hellman.

Trong bài này:

1. IPSec

1.1. Tổng quan

IPSec (Internet Protocol Security) là một bộ giao thức được thiết kế để bảo vệ dữ liệu truyền qua Internet bằng cách xác thực và mã hóa các gói tin. Hiểu đơn giản, nó tạo một đường hầm bảo mật để trao đổi dữ liệu, là nền tảng của nhiều giải pháp VPN trên thị trường. IPSec hoạt động ở Network Layer (Layer 3) của mô hình OSI, mã hoá dữ liệu trên toàn bộ đường truyền, bất kể là của ứng dụng nào.

Thành phần quan trọng nhất của IPSec là IKE (Internet Key Exchange), một giao thức thiết lập và trao đổi khóa bảo mật. Bài toán tổng quát như sau: hai bên (Alice và Bob) muốn thiết lập một kết nối riêng tư (nhưng qua mạng Internet công khai), để chỉ họ có thể đọc dữ liệu gửi cho nhau. Ta sẽ nghĩ ngay đến giải pháp dùng mã hoá.

  • Nếu dùng mã hoá bất đối xứng, tức Alice và Bob mỗi người giữ private key riêng, trao đổi public key vô tư qua Internet. Alice gửi dữ liệu cho Bob thì dùng public key của Bob để mã hoá dữ liệu, Bob tự nhiên có thể giải mã do đang nắm có private key tương ứng. Cách này khả thi, tuy nhiên, chi phí tính toán vô cùng tốn kém, chậm hơn nhiều so với mã hoá đối xứng (RSA có thể chậm hơn AES tới 1000 lần), nên rõ ràng tính thực tế không cao.

  • Nếu dùng mã hoá đối xứng, tức Alice và Bob phải chia sẻ một khoá bí mật chung để mã hoá và giải mã dữ liệu. Vấn đề là làm sao để chia sẻ khoá này qua Internet một cách an toàn? Câu trả lời là dùng mã hoá bất đối xứng để trao đổi khoá đối xứng! Đây là nguyên tắc cơ bản nhất của IKE.

Dưới đây mình trình bày thuật toán trao đổi khoá phổ biến nhất, Diffie-Hellman.

1.2. Thuật toán Trao đổi Khóa Diffie-Hellman

Thuật toán này cho phép hai bên thiết lập một khóa bí mật chung qua một kênh truyền thông không an toàn mà không cần trao đổi trực tiếp khóa đó. Các bước thực hiện như sau:

  1. Thông số công khai: Alice và Bob thống nhất chọn một số nguyên tố cực lớn \(p\) và một số \(g\) là căn nguyên thủy của \(p\). Hai số này hoàn toàn có thể công khai.
  2. Tạo Private Key:
    • Alice chọn một số bí mật \(a\).
    • Bob chọn một số bí mật \(b\).
  3. Tạo Public Key:
    • Alice tính \(A = g^a \pmod{p}\) rồi gửi \(A\) cho Bob.
    • Bob tính \(B = g^b \pmod{p}\) rồi gửi \(B\) cho Alice. Lúc này cả 2 đã có được public key của nhau.
  4. Tính toán khóa đối xứng:
    • Alice nhận \(B\) và tính: \(s = B^a \pmod{p}\)
    • Bob nhận \(A\) và tính: \(s = A^b \pmod{p}\)

Cả hai sẽ nhận được cùng một giá trị \(s\) vì: \(s = (g^b)^a \equiv (g^a)^b \pmod{p}\). Đây là khóa bí mật chung mà chỉ 2 người biết, có thể được sử dụng để thiết lập kết nối mã hoá đối xứng!

Sự an toàn của thuật toán này dựa trên độ khó của bài toán Logarit rời rạc:

  • Ở phía người dùng, việc tính \(A = g^a \pmod{p}\) rất dễ và nhanh.

  • Ở phía kẻ tấn công, biết \(g\), \(p\) và \(A\), việc tìm ngược lại private key \(a\) là cực kỳ khó (gần như không thể với máy tính hiện nay nếu \(p\) đủ lớn, khoảng 2048-bit trở lên).

2. AWS Site-to-Site VPN

Site-to-Site VPN dịch vụ của AWS cho phép thiết lập một VPN an toàn giữa mạng nội bộ (on-premise) và VPC trên AWS. Cơ chế đằng sau là dựa trên IPSec đã trình bày ở trên, ở đây ta sẽ xem xét các cách triển khai và khái niệm liên quan.

2.1. Phía AWS Cloud

2.1.1. Virtual Private Gateway (VGW)

Nếu chỉ có 1 VPC cần kết nối VPN: gắn một Virtual Private Gateway (VGW) vào VPC, sau đó kết nối với Customer Gateway (đại diện cho phía on-premise bên kia) để thiết lập VPN.

VGW có khả năng phục hồi Region Resilience, trên thực tế được tự động triển khai trên nhiều AZ.

VPN Simple Setup

2.1.2. Transit Gateway (TGW)

Nếu có nhiều VPC cần kết nối VPN với mạng nội bộ, thay vì gắn VGW vào từng VPC, ta có thể sử dụng Transit Gateway để kết nối các VPC với nhau, rồi trực tiếp kết nối TGW với Customer Gateway để thiết lập VPN. Cách này cho phép mạng nội bộ truy cập vào nhiều VPC, đơn giản hoá việc quản lý và mở rộng.

VPN with Transit Gateway

2.2. Phía On-Premise

2.2.1. Customer Gateway Device

Là thiết bị vật lý ở phía mạng nội bộ, kết nối với các máy khác trong mạng, và chạy phần mềm VPN. AWS cung cấp danh sách thiết bị được hỗ trợ cùng các tệp cấu hình sẵn, nhưng về cơ bản, bất kỳ thiết bị nào tuân thủ chuẩn IPSec đều có thể sử dụng được. Một số nhà sản xuất phổ biến gồm Cisco, Juniper, Fortinet, v.v. Bạn đọc có thể tham khảo danh sách mẫu tại đây.

2.2.2 Customer Gateway

Đây đơn giản là một tài nguyên trong AWS đại diện cho Customer Gateway Device, liên kết với Virtual Private Gateway hoặc Transit Gateway để thiết lập kết nối VPN.

2.3. Định tuyến trong Site-to-Site VPN

  • Dynamic Routing: định tuyến động, sử dụng giao thức BGP (Border Gateway Protocol) để tự động “học” và cập nhật các route khả thi giữa AWS và mạng nội bộ. Cách này được khuyến khích hơn, đặc biệt khi CIDR của mạng nội bộ thay đổi thường xuyên.

  • Static Routing: định tuyến tĩnh, yêu cầu định nghĩa thủ công các route, CIDR của mạng nội bộ vào cấu hình VPN. Cách này đơn giản nhưng kém linh hoạt, thường chỉ dùng khi mạng nội bộ ít thay đổi hoặc Customer Gateway Device không hỗ trợ định tuyến động.

3. Một vài Lưu ý

Trong các kỳ thi chứng chỉ, thường có những câu hỏi yêu cầu chọn giữa Site-to-Site VPN và Direct Connect (sẽ được trình bày trong bài sau). Dưới đây là một vài điểm cần lưu ý:

  • Giới hạn Băng thông: Site-to-Site VPN có giới hạn băng thông tối đa 1.25 Gbps. Nếu cần băng thông (hoặc tốc độ) cao hơn, chọn Direct Connect.
  • Tốc độ Triển khai: thiết lập Site-to-Site VPN chỉ mất khoảng 30 phút - 1 giờ để hoàn thành nếu cấu hình đúng, nhanh hơn nhiều so với Direct Connect mất vài tuần để thiết lập.
  • Có thể kết hợp cả hai: dùng Site-to-Site VPN làm giải pháp dự phòng (backup) cho Direct Connect, đảm bảo kết nối luôn sẵn sàng khi Direct Connect gặp sự cố.

Tài liệu tham khảo

  1. Giới thiệu về IPSec - Cloudflare
  2. Thuật toán Trao đổi Khóa Diffie-Hellman
  3. Bài toán Logarit Rời rạc
  4. Cơ chế của AWS Site-to-Site VPN
  5. Các loại định tuyến trong Site-to-Site VPN
  6. Các cách triển khai Site-to-Site VPN

Trong bài tiếp theo, mình sẽ trình bày về giải pháp còn lại để kết nối mạng nội bộ với AWS: Direct Connect.

Nếu có câu hỏi, bạn có thể nhắn mình trên fanpage hoặc group. Cảm ơn bạn.