+86 135 410 16684Mon. - Fri. 10:00-22:00

AWS 內 VPC 與 Subnet 規劃、理解

AWS 內 VPC 與 Subnet 規劃、理解

AWS 內 VPC 與 Subnet 規劃、理解

Intro

參考文件:

Prerequisites

  • AWS::EC2
  • Network Basics:

What is VPC ?

  • Virtual Private Cloud
  • 擬似傳統機房的網路環境
  • 作為 EC2 的 網路層
  • 老賬號可以選擇將機器開在 EC2-Classic 或 EC2-VPC 下;新用戶只能選 EC2-VPC
  • 不額外收費,但正常使用情境下,應該會想切 Private subnet;那低消 NAT 一台
  • Management Console 功能完備,不太需要打 API

A Closer look into VPC

EC2-Classic 與 EC2-VPC 之比較

EC2-Classic

  • 雖然現在不建議使用,還是介紹一下,緬懷過去的環境
  • 每台 Instance 會透過 DHCP 取得 AWS 內部 (10.0.0.0/8) IP
  • 同 AZ 下的機器都能用 internal IP 互通 (假設 Security Group 允許)
  • 重開機 (stop -> start) 後 IP 會刷新
  • 若綁定 Elastic IP,則該 IP 會綁定到網卡 (eth0) 上;否則 DHCP 派發 Public IP
  • 使用 Security Group 管理連入封包;更深入的安全設定只能到 vm 裡搞
  • Security Group 綁上 instance 之後,只能透過 snapshot -> launch 的手段更改

EC2-VPC

  • 在建機器時有可選擇啓用 Public IP,則使用與 EC2-Classic 相近
  • 也可以綁 Elastic IP (EIP) 到網卡 (eth0) 上
  • 若使用 Public IP 或 EIP,則該主機僅能有一張網卡 (ENI)
  • 只有在 Public Subnet 下的 instance 能使用 Public IP / EIP 對外通信
  • ENIElastic Network Interface
    • 可以動態更改綁定的 Security Group
    • 可以給一台 instance 動態插拔多張 ENI (第一張 eth0 除外)
    • 可以派發多個同一個子網域下的 Secondary IP。給定後無法變動,但可以 Remove 再重 Assign。
  • 提供 Dedicate Instance 的功能,讓這些 instance 跑在獨佔的 host 下
  • DHCP Options Sets
    • 每個 subnet 可設定一組,管理 DHCP, DN, DNS, NTP, Netbios 等設定;適合以 DN 區隔 stage 的專案。

網路功能

Subnet

  • 不限制只能鎖 24 bits,但建立後不給改
  • Route Tables
    • 同一個 VPC 下的封包預設互通
    • Route Table 決定往特定網段 (Destination) 的封包怎麼走 (Target)
    • 常見 Target 有:
      • local
      • NAT Portal
      • igw (internet gateway)
      • vgw (virtual gateway) 用於串接企業內部 vpn
    • 每個 subnet 只能指定零或一張 routing table
    • 有一張 route table 可以設為預設;未指定的 subnet 都參照它
  • Public / Private Subnet
    • 以 igw (Internet Gateway) 作為外送封包 target 的 instance,若綁有 EIP / Public IP 則可外連,並自外部訪視。否則無法對外
    • 以 NAT Portal 為外送封包 target 的 instance 可以向外連線,但綁定的 EIP / Public IP 無法作用
  • /** 感謝好同事提醒,應是 VPC 的設定而非 Subnet */
    DHCP Options Sets

    • 每個 subnet 可設定一組,管理 DHCP, DN, DNS, NTP, Netbios 等設定;適合以 DN 區隔 stage 的專案。

NAT

  • 在建立 VPC 的時候,有精靈可以引導建立
  • 不小心搞爛的話,AWS 提供一系列的 AMI 供選用;搜尋 ami-vpc-nat 即可
  • 自幹關鍵:
    • 轉址:執行下列指令,透過 ipfilter 轉址
    • 設定 Security Group,接受來自 VPC 內部(才能做 port redirect)與外部 ssh(用於從外部連入管理)的連線
    • 關閉該主機 eth0 的 Source/Dest Checking (外連封包的 Dest 不是該 ENI 的 IPAWS 預設從 host drop 這類封包)
    • 給 eth0 綁上 EIP (照理說 public IP 應該也能用,徵求勇者測試 XD)
    • 記下 ENI 編號,設定為 Route Table 中的 target
    • 搞定收工

DNS

若 DN 設定不一致,可能會無法透過 internal DN 對連(Manual 中 描述應該是這意思);但還是能透過 ip access。

Security

  • Private Network
    除非綁定 EIP / Public IP 或設定 NAT 轉發,外部連線進不來。相當於有防火牆
  • IAM
    • API 的管理權限,目前無法針對 IAM 給 instance access
  • Security Group
    • 綁定在 ENI 上,多對多對應
    • 可針對 Inbound or Outbound 設定
    • 預設為 Allow, Deny;但若未設定 Outbound Rule,則 Outbound 為 Allow All
    • Inbound Packet 的 Response 會自動 allow
  • Net ACL
    • 對 subnet 綁定的機制與 Route Table 相同
    • 可針對 Inbound or Outbound 設定
    • 依照優先權比對規則,可能是 Allow 或 Deny
    • 不自動 allow 回覆封包,因此要根據 ephemeral port 設置

Dedicate Instance

  • launch instance 的時候可以選擇 tenancy: [ dedicated | default ]
  • VPC 也可以設定 tenancy,若是 dedicated 則所有 instance 會被設為 dedicated
  • 某些服務,如 RDS,無法以 dedicated instance 運行
  • 帶 tenancy 的 Reserved instance 與一般 RI 是分開賣的,無法轉換

整合其他服務

費用

  • 基於 endpoint (dn) 的服務,例如 DynamoDBS3GlacierSQSSimpleDB,都算 intra AZ 的外連流量,抽 $USD 0.01 per GB
  • Instance-based SaaS 如 RDSEC2ElastiCacheELB (有 ENI 的) 如果使用 Private IP (在同一個 VPC 下),區內免費;如果不在 VPC 內只能用 Public IP / EIP 連,就要付 $USD 0.01 per GB
  • 註:某些服務會對經手流量收費,例如 ELB;這部分的費用與 Transfer 要分開計算

Scenarios for VPC

註:底下用例摘自 Manual,大多描述僅適用於預設值。

Public Subnet Only

  • 新建 igw
  • 建立預設 Route Table,以 igw 為 target
  • 切網段, 切網段, 切網段
  • 設定 Security group / Net ACL
  • 開機器並啟用 Public IP / Elastic IP
  • 沒有 Public IP / Elastic IP 的 instance 無法與外部溝通,但能與 VPC 下的其他機器對連

Public and Private Subnets

  • 事前準備
    • 新建 igw
    • 建立 NAT portal
    • 切網段
    • 設定 Security group / Net ACL
  • Public 網段
    • 建立以 igw 為 default target 的 route table
    • 把這 route table 綁到某個 subnet
    • 在這個 subnet 內開機器,則:
      • 有 Public IP 或 Elastic IP 的 instance 可以對外連線,並接受外部連線(若 Security group / Net ACL 允許)
      • 沒有 Public IP 或 Elastic IP 的 instance 無法從外部直連(但可以透過其他 instance),也無法對外訪視,除非手動進去改 route table (理論可行,徵求勇者)
  • Private 網段
    • 建立以 NAT portal 的 ENI 為 default target 的 route table
    • 把這 route table 綁到某個 subnet
    • 這個 subnet 內的 instance 可對外連線(若 Security group / Net ACL 允許),但外部無法直連這些主機

Hardware VPN with Private and Public Subnets

Hardware VPN with Public Subnets

以後再談,先寫些個人認知;很可能有錯,請各位指正。官方文件為 VPC Network Admin Guide

  • 基本架構
    • 用戶先在 VPC 端,建立 Virtual Gateway (VGW) 虛擬網路設備。
    • 輸入位於企業私有網路的 Customer Gateway ,並在 VGW 與之間,建立 VPN Connection
    • VGW 可以作為 Route Table 中的 Target,因此能指派特定 Destination 的連線走向該 VGW,從而將封包導向私有網路。
  • 猜想
    • VPN Connection 支援 IPSec 協定
    • 無論是否有啟用的 VPN ConnectionVGW 都可以被 Route Table 引用;猜想網路不通會直接噴 destination unreachable
    • VPC 文件範例中的 Route Table 都只有兩條規則;實際上 [VPC CIDR] -> local; 192.168.0.0/16 -> vgw; 0.0.0.0/0 -> nat 這樣的設定應可行

小結

VPC 讓工程師對網路有更多控制,除了能簡化機器安全控管,也能運用運用網路技巧,使服務更加快速、穩定。
而網路設定中最麻煩的幾項 (iptablesrouteNIC 等,出事往往只能跑機房) ,也能透過 API 或 Management Console 輕鬆惡搞。

 

 

在你進入 AWS 首要先規劃的一定是 VPC,AWS 把 VPC 建構在一個 “邏輯上隔離” 的環境,讓你可以把自己的放在 VPC 內跑並且可用來建立 Private 環境

 

一般來說在你的機房環境會切 WAN / DMZ,而在 Subnet 的用法也是一樣,一般可以分為 Public / NAT / Private subnet

 

不提到 LAN 是因為在 AWS 上通常不會有使用者主機 (放 EC2 也太貴了!!),都會是以 Server 的形式存在,所以以下都是以 Server 為討論方向。

 

VPC 的可用範圍:

  • AWS 允許你對 VPC 可以從最小 /28 到最大 /16 的網段,也就是說你可以擁有最小 14 個 hosts 的 VPC,以及最大 65534 個 hosts 的 VPC。
  • 設定之後不能改,要改只能重建 VPC
  • 每個 VPC 都是獨立環境,但可透過 NAT 來串接不同的 VPC,但你的 Routing 必須不同,即不同 CIDR,否則無法路由。

 

首先必須對 subnet 有以下認知

  • Route Tables
    • 同一個 VPC 下的封包預設互通
    • Route Table 決定往特定網段 (Destination) 的封包怎麼走 (Target)
      • 常見 Target 有:
        • local
        • NAT Portal
        • igw (internet gateway)
        • vgw (virtual gateway) 用於串接企業內部 vpn
    • 每個 subnet 只能指定零或一張 routing table
    • 有一張 route table 可以設為預設;未指定的 subnet 都參照它 (main)
    • 每個 subnet 的 CIDR 區塊不能重疊,不能大於 VPC。
    • 支援 IPv6
    • 提供 ACL,但通常預設夠用。

 

我會這樣定義 subnet 類型:

  • Public subnet:直接對外服務,擁有 EIP,透過 Internet Gateway 可直接訪問 Internet。
    • 視需求而定,一般較少定義 Server 在這個 subnet,但會是 NAT Gateway 的出口,所以是必要項。
  • NAT subnet:必須透過 ELB/ALB 來訪問,綁定 EIP 沒有作用,僅擁有 Private IP,透過 NAT Gateway 出去 Internet。
    • 通常用於必須經常訪問 Internet 的 Server,如:DNS、Proxy、NTP ..
  • Private subnet:必須透過 ELB/ALB 來訪問,綁定 EIP 沒有作用,僅擁有 Private IP,不能直接訪問 Internet,但可透過 Proxy、Tunnel 等方式訪問 Internet。

 

subnet 可用的範圍:

為什麼會說是可用的 subnet 範圍,不是切好了就全部可用嗎 ? 實際上在應用時 AWS 會有一些預設保留項:

  • AWS 對於每個 subnet 有定義保留位置 (前4後1)
    • 10.0.0.0: Network address.
    • 10.0.0.1: Reserved by AWS for the VPC router.
    • 10.0.0.2: Reserved by AWS. The IP address of the DNS server is always the base of the VPC network range plus two; however, we also reserve the base of each subnet range plus two. For more information, see Amazon DNS Server.
    • 10.0.0.3: Reserved by AWS for future use.
    • 10.0.0.255: Network broadcast address. We do not support broadcast in a VPC, therefore we reserve this address.
  • 如果有使用 ELB/ALB,選擇的可用 subnet 實際上會在你的 subnet 內啟動一台 EC2 接地,而當你的使用量到達一定程度,將會自動增長你的 ELB EC2 數量,也就是當你的 ELB 用量大,ELB 就會在你的 subnet autoscaling 啟動相對可用的 EC2 數量,而 subnet 可用的 IP 位置也就減少,當你的 subnet IP 數量用完則不會再增長 ELB EC2 的數量,也到達你的 ELB 瓶頸。

 

subnet 的可用性:

一般 subnet 除了切開 CIDR 以外,還會針對不同的 AZ 切分,以避免單點(機房) 失效的問題,如果你有不可失效的服務,通常會選擇兩個以上的 AZ 建置相同的 Service,並且透過 ELB 來串接。

 

AWS 拒絕提供的服務:

  • 不允許 multicast 和 broadcast
  • 不提供 VIP (但你可以自幹 HA 服務)

 

AWS 對於 infra 的建置提供非常完善的配置,能夠快速的建立想要的環境,隨開即用,如果你夠熟,花個半天的時間你就可以搞定一個 VPC,這是傳統機房所做不到的,也是雲端所帶來的便利性。

 

但在使用雲端之前有許多入門的門檻是相對重要,否則貿然進入你將會花許多冤枉錢,以及重新建置的成本