1. Giới thiệu

Khi bạn có một server trong private subnet không giao tiếp được với internet (ví dụ DB server) nhưng bạn muốn cập nhật phần mềm cho server đó, đây là lúc bạn sử dụng NAT.

NAT viết tắt cho Network Address Translation là phương pháp thay đổi địa chỉ IP của các tài nguyên private. Khi các tài nguyên private request ra internet, NAT sẽ đổi IP các tài nguyên này thành IP của mình rồi đưa request ra internet, sau khi nhận response trở về từ ngoài internet, NAT sẽ lấy lại IP các tài nguyên nguồn và đưa response vào đó. 

NAT vẫn giúp cho các tài nguyên private luôn được bảo mật vì IP của các tài nguyên này không hề được công khai ra internet, NAT thay đổi địa chỉ IP các tài nguyên private một cách ngẫu nhiên và tạm thời nên chỉ cho một chiều từ trong đi ra chứ không cho chiều từ ngoài internet đi vào.

  NAT là gì?

Bạn xem bài https://blog.daovanhung.com/post/tao-vpc-va-subnetting-trong-aws để biết cách tạo các tài nguyên private trong aws.

 

2. Tạo NAT trong AWS

Chú ý: Mọi traffic từ private subnet đi vào hay ra internet đều phải qua Root Table, ta cần các traffic này đi qua NAT để giao tiếp được với internet nên ta sẽ thêm bản ghi vào Root Table của private subnet (xem bài https://blog.daovanhung.com/post/tao-vpc-va-subnetting-trong-aws).

Trong AWS, bạn có 2 cách để sử dụng NAT là NAT instance và NAT gateway

 

2.1. NAT Instance

Lúc chọn AMI, tìm từ khoá NAT trong Commutity AMIs và chọn cái đầu tiên:

  Tạo NAT instance trong aws

NAT Instance phải nằm trong public subnet:

  NAT Instance phải nằm trong public subnet

 

Khi sử dụng NAT Instance, bạn phải tắt Source / Destination Check, chọn như hình dưới và Stop chức năng đó đi:

   tắt Source / Destination Check cho NAT Instance AWS

 

Source / Destination Check là chức năng kiểm tra xem Instance có phải là nguồn hay đích của request nào đó không, mặc định của giá trị này khi tạo EC2 Instance là true. Vì NAT Instance không phải là nguồn hay đích của traffic đi tới mà chỉ là nơi kết nối private subnet với internet nên ta phải tắt flag đó đi.

 

Ta đã tạo một NAT Instance trong public subnet, giờ ta phải cho private DB instance kết nối được với NAT Instance này. Ta thêm record vào Root Table của private subnet như sau:

Trước khi thêm:

  Route Table của private subnet trong aws

Sau khi thêm:

   Thêm NAT Instance vào Route Table aws

Ở hình trên, Target mới được thêm vào chính là NAT Instance ta mới vừa tạo. Về cơ bản ta đang cho phép mọi dữ liệu vào hay ra tới bất kỳ địa chỉ IP nào đều phải đi qua NAT Instnace này.

Bạn thử vào private DB Instance và chạy câu lệnh sudo yum update để kiểm tra kết quả.

 

2.2. NAT Gateway

NAT Gateway là giải pháp mới thay thế cho NAT Instance, khi sử dụng NAT Gateway bạn sẽ không cần phải tạo EC2 Instance cũng như không cần phải tắt Source / Destination Check như NAT Instance.

Lưu ý là NAT Instance luôn nằm sau Security Group gắn với instance đó nhưng NAT Gateway không nằm sau Security Group.

Tương tự NAT Instance, bạn cũng phải tạo NAT Gateway trong public subnet:

  Tạo NAT Gateway trong public subnet aws

Ta cũng phải thêm record vào Route Table của private subnet:

   Thêm NAT Gateway vào Route Table aws

Lần này, Target không phải là Instance như trước nữa mà là NAT Gateway như hình trên.

Giờ bạn đã có thể kết nối vào private DB instance và chạy sudo yum update thử.

 

Link tham khảo:

https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html

https://en.wikipedia.org/wiki/Network_address_translation