Phân biệt public subnet và private subnet?

  • Public Subnet: là 1 subnet được định tuyến tới 1 internet gateway. 1 instance trong public subnet có thể giao tiếp với internet thông qua địa chỉ IPv4 (public IPv4 address hoặc Elastic IP address).
  • Private Subnet: Ngược với Public Subnet, Private Subnet là một subnet không được định tuyến tới một internet gateway. Bạn không thể truy cập vào các instance trên một Private Subnet từ internet.

Lưu ý: Bài viết này có sử dụng NAT Gateway - 1 dịch vụ có tính phí, hãy xoá sau khi thực hành để không phát sinh chi phí

1. Tạo VPC

  • Tạo VPC CIDRs 10.0.0.0/24
    VPC

2. Tạo public và private subnet

  • Có thể tạo nhiều subnet ở nhiều AZ khác nhau, ở đây sẽ chỉ demo tại một AZ
  • Lưu ý: CIDRs của subnet phải nhỏ hơn của VPC, nếu không thì sẽ không tạo được
  • Public subnet: Sau khi tạo xong, hãy vào mục edit subnet và tick vào Enable auto-assign public IPv4 address để VPC tự assign public IP cho nhưng tài nguyên sử dụng subnet này.
    Public subnet
    Auto assign ipv4
  • Private subnet: Tạo giống public subnet nhưng không tick vào mục Enable auto-assign public IPv4 address
    Private subnet

3. Tạo Route table cho public và private subnet

  • Route table cho public subnet: Sau khi tạo xong route table,

    • Tại tab Subnet associations chúng ta thêm public subnet vào mục Explicit subnet associations
      Igw
    • Tại tab Routes sẽ phải thêm định tuyến đi ra ngoài Internet thông qua Internet Gateway
      • Mở tab mới và tạo 1 Internet Gateway, sau đó attach IGW đó vào VPC (nếu không attach thì sẽ không thể thêm vào Route table được)
      • Mở lại phần Routes, tại đây sẽ thêm 1 route mới có destination là 0.0.0.0 và target là Internet Gateway, hãy điền đúng id của IGW vừa mới tạo ở bước trên
        Igw2
  • Route table cho public subnet: Sau khi tạo xong route table

    • Tại tab Subnet associations chúng ta thêm private subnet vào mục Explicit subnet associations
    • Tại tab Routes sẽ phải thêm định tuyến đi ra ngoài Internet thông qua NAT Gateway
      • Mở tab mới và tạo 1 NAT GateWay, chọn đúng public subnet và nhấn vào nút Allocate Elastic IP để tạo mới một Elastic IP (Xoá sau khi thực hành để không bị tính phí, NGW chúng ta cần chọn public subnet, nếu chọn private subnet thì gói tin gửi đi sẽ bị lặp trong VPC mà không thể đi ra ngoài internet được)
      • Mở lại phần Routes, tại đây sẽ thêm 1 route mới có destination là 0.0.0.0 và target là NAT Gateway, hãy điền đúng id của NAT Gateway vừa mới tạo ở bước trên
        Ngw

4. Tạo 2 instance EC2

  • Bây giờ, ta cần tạo 1 instance ở public subnet và 1 instance ở private subnet
  • Đối với instance ở public subnet, chúng ta tạo như bình thường và chọn đúng VPC, đúng public subnet, mở SG port 22 để có thể SSH.
    • Sau khi tạo xong, hãy SSH vào và tạo SSH Key:
      • sudo ssh-keygen
      • sudo cat /root/.ssh/id_rsa.pub
      • Hãy copy/lưu lại public key này và vào mục Key Pair trong EC2 rồi import key vừa tạo ở bên trên, lát nữa sẽ chọn Key Pair này cho instance trong private subnet (Action -> Import key pair)
  • Đối với instance ở private subnet, cũng tạo như bình thường vào mở và chọn đúng VPC, đúng private subnet, mở SG port 22 để có thể SSH, tại mục Key Pair, hãy chọn đúng tên của Key Pair mà vừa import ở bước trên
    • Sau khi to xong, chúng ta sẽ thấy instance này không có public IPv4 Address

5. SSH và kết nối ra ngoài internet

  • Đầu tiên, hãy SSH vào instance trong public subnet bằng lệnh ssh user_name@ip_address
    • Ví dụ: ssh ec2_user@10.0.0.38
  • Sau khi SSH thành công vào private instance, thử lệnh ping google.com và xem kết quả. Nếu gói tin gửi đi và nhận về thành công tức là chúng ta đã setup thành công
    Ping
  • Bây giờ, hãy thử sửa lại route table mà đã config cho private subnet, bỏ NAT Gateway đi và thử ping lại, chúng ta sẽ thấy private instance không thể kết nối ra ngoài internet được nữa.

— The end —