AWS NAT Gateway 使用簡記

最近項目遇到個需求,需要將後端的服務器出口統一成一個 IP,服務器在 AWS 上,這個可以用 AWS 的 NAT Gateway 實現,調研實施的過程中發現如果對 AWS 相關概念的話不熟悉還是會繞點路的,簡單整理下 NAT Gateway 的使用,希望對需要的小夥伴有幫助。

一. 相關概念簡介

1. NAT Gateway

NAT Gateway(網絡地址轉換網關) 主要用來對一組私有子網內的服務器進行代理,被代理的所有服務器的對外請求都將通過 NAT 網關發出,這樣目標服務所看到的請求 IP 也都是 NAT 網關的 IP。這麼做有兩個好處:

  • 應用服務器只能在內網訪問,提高了安全性
  • 如果要訪問的服務存在 IP 白名單的話,只需要將 NAT 網關的 IP 加進去即可,不需要挨個添加服務器地址。(自己之前和一家公司對接數據接口,對方就有 IP 白名單,當時沒有統一網關導致添加了 20 幾個 IP,一旦服務器 IP 變了還得重加,都是淚。。。)

下圖是 AWS 官網中給出一個包含 NAT 網關的 VPC 架構圖:

簡單講解一下,在 10.0.0.0 VPC 下有兩個子網:公共子網 10.0.0.0/24 和 私有子網 10.0.1.0/24。NAT 網關位於公共子網中,因此可以訪問公網。私有子網的三臺機器連接到了 NAT 網關,對公網的訪問全部通過 NAT 網關實現。

公共子網與私有子網

AWS 的 VPC 網絡配置關係是:實例與子網關聯,子網關聯路由表,路由表設置網關。所謂公共子網就是其對應的路由表中配置了規則將請求路由到了 Internet Gateway,這樣公共子網內的服務器實例、NAT 網關就可以對外訪問。而私有子網就是其關聯的路由表中沒有配置到 Internet Gatway 的路由規則,因此無法對外訪問。

清楚了公共子網、私有子網的概念,就可以進行 NAT 網關的相關設置了。私有子網中的服務器通過 NAT 網關對外訪問需要做下面幾步操作:

  • VPC 下創建公共子網和私有子網
  • 在私有子網中開通服務器實例
  • 在公共子網中開通 NAT 網關和登陸到私有服務器的跳板機
  • 修改私有子網的路由表規則,配置路由地址到 NAT 網關
  • 執行測試。

下面是具體的操作,

二. NAT 網關設置

1. 設置私有子網

上面提到,AWS 中網絡配置的關係:實例與子網關聯,子網關聯路由表,路由表設置網關。我在 AWS 香港地區有三個子網如下

所有子網的默認路由表配置一般都是指向了 Internet Gateway,如圖所示:

圖中 0.0.0.0/0 的規則就表示將所有的請求路由到默認的 Internet Gateway,從而可以與公網通信。爲了將使得子網變爲私有,我們需要自己新建路由表,並將指向 Internet Gateway 的路由規則給去掉,這樣子網就無法直接訪問公網了。如圖所示:

  • 創建路由表

  • 修改子網關聯

可以看到新建好的路由表並沒有關聯子網,點擊 編輯子網關聯subnet-1f2a2767 子網關聯上,這樣這個子網下的服務器就無法和公網通信了。

2. 創建私有服務器與跳板機

我選擇第上面關聯到自定義路由表的自我一個子網 subnet-1f2a2767 作爲私有子網,第二個 f500f 作爲公有子網。在私有子網下開了兩臺服務器,在公有子網下設置了一臺服務器作爲跳板機,步驟如下,注意在 「配置示例」模塊選擇對應的子網,並將在私有子網中的服務器禁用公網 IP。

  • 選擇服務器

01

02

  • 選擇子網,啓動實例。

03

此時子網中的兩臺服務器是無法與公網通信的。跳板機的創建也是上面的步驟,只是要選擇公共子網並設置公網 IP,這裏不再贅述。

3. 創建 NAT 網關

在 AWS 的 VPC 控制面板,選擇 「NAT 網關」,點擊創建,需要選擇子網,這裏一定要選擇公共子網,保證 NAT 網關是可以與公網通信。

  • 創建 NAT 網關,選擇公共子網並分配 IP

可以看到創建的 NAT 網關 IP 爲 18.162.217.123,待 NAT 網關的狀態變爲可用之後就可以修改路由表,將子網中的請求路由到 NAT 網關了。

4. 修改私有子網的路由表

創建完成 NAT 網關之後,修改我們自己創建的私有子網的路由表,將子網中所有的請求路由到 NAT 網關了。如圖:

  • 選擇之前新建的路由表,選擇「編輯路由」

  • 第一欄目標設置爲 0.0.0.0/0 表示除第一條外所有的請求都路由向設置的網關,第二欄目標選擇 NAT 網關,就會出現可選的 NAT 網關列表

  • 選擇上面新建的 NAT 網關

5. 測試網絡

默認情況下,私有網絡內的服務器是無法訪問公網的,可以先用 ping 或者 curl 命令試下。配置完成之後就可以測試我們的私網服務器是否可以與外界通信了,我在騰訊雲開了一臺新的服務器並運行了 Nginx,訪問情況如下:

可以看到私網內的服務器可以訪問其他網絡內的服務器了,然後看下騰訊雲上的 Nginx 日誌,如下:

日誌中請求的源 IP 爲 18.162.217.123,是我們設置的 NAT 網關的 IP 地址,由此通過 NAT 網關實現私有子網內服務器對外統一訪問的設置就完成了。


老鐵,都看到這了來一波點贊、評論、關注三連可好

我是 AhriJ鄒同學,前後端、小程序、DevOps 都搞的炸棧工程師。博客持續更新,如果覺得寫的不錯,歡迎來一波老鐵三連,不好的話也歡迎指正,互相學習,共同進步。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章