NATゲートウェイを使ってインターネットに抜ける環境を作る

こんにちは。
株式会社クラスアクト インフラストラクチャ事業部の大塚です。
今回は、AWSのNATゲートウェイを使ってPrivateサブネットに存在するEC2からインターネットに接続する環境を用意してみたいと思います。

# 環境イメージ
イメージとしては以下です。
プライベートサブネットのEC2からインターネットに抜けるか検証する時には、パブリックサブネットにある踏み台を経由していきたいと思います。
![growi-ページ29.drawio (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/2daed279-b22d-4147-bd3c-2a24338dd5a3.png)

# 構築
まずVPCやらサブネットやらを用意していきたいと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/f4f98a25-0f56-4ce2-a13a-406b2488b8d4.png)

kensyo-vpcという名前でVPCを作成していきます。
![image (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/1e7a137c-f751-4162-b49c-316f68ba7e15.png)

次にVPC内のパブリック/プライベートサブネットを作成していきます。
![image (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/02d0b225-20c4-4c2a-8c20-d8e7a8b7f33b.png)

以下のように作成しました。
![screencapture-ap-northeast-1-console-aws-amazon-vpcconsole-home-2025-05-03-19_52_25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/c286a693-ee1a-486f-afe1-cb8e0c546c7f.png)
![image (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/eccb2f88-43f1-4d04-8af7-60f5028a6931.png)

作成したsubnetに紐づけるRTを作成していきます。
詳細なルーティング情報はNATゲートウェイ周りの環境が整った後にまとめていれます。
![image (5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/046ba0dd-a75f-4a1a-adbe-09f813fa6667.png)

パブリック用とプライべート用のRTを作成しました。
![image (6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/a4816aa0-29d9-4da5-9887-71d5fde72a82.png)
![image (7).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/c6641242-00ef-4c9f-941f-e663fc699f71.png)

次にVPCに紐づけるIGWを作成します。
![image (8).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/3bf3888b-2705-4b15-94a7-61db63162193.png)
![image (9).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/04779287-7d62-4b98-b9d8-95ed9b6dcafe.png)
作成したIGWをVPCにアタッチします。
![image (10).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/e2eed161-bde6-496b-9790-260103ba31cf.png)
![image (11).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/e43da62d-2ca7-48e5-b84b-998d4dfd38d0.png)

privateサブネットに立ち上げるEC2を起動します。
![image (12).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/6e32faaf-ce96-40a6-857c-cf3b6e543ebb.png)
![screencapture-ap-northeast-1-console-aws-amazon-ec2-home-2025-05-03-19_59_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/bb5cf8f6-6a1f-4296-919e-ce18f12a946e.png)

ここまでの状態を一旦イメージに起こします。
![growi-ページ30.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/1da99633-42da-4b86-af48-478564642bda.png)

NATゲートウェイをpublicサブネットに用意します。
※お金がかかってくるので気を付けます。

EIPを確保していきます。
![image (13).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/ddb9fe25-f008-478f-847b-91dd35915703.png)
![image (14).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/c97ae126-8008-4c78-b2a7-d4218d439b46.png)
![image (15).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/132498ee-4c62-46cb-a8b8-b4750ee3ece6.png)

NATゲートウェイを作成していきます。
![image (16).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/c5e8ff83-8290-47b3-945b-43c65d477366.png)
NATゲートウェイを配置したいサブネットと割り当てたいEIPを指定して作成していきます。
![screencapture-ap-northeast-1-console-aws-amazon-vpcconsole-home-2025-05-03-20_07_53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/93ee108b-bbe4-48cd-a0e5-6ea930208dbc.png)
作成出来たことを確認します。
![image (17).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/fcbf8b60-e22e-4d69-ba27-73ee6c9ed51f.png)

RTの設定を行っていきます。
まずはパブリック用。
![image (18).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/8f01d3ec-9f4e-4f5b-ba26-1d9170fc0f5d.png)
こちらのRTはIGWをデフォルトゲートウェイに設定していきます。
こうすることで、NATゲートウェイがインターネットに抜けられるようになります。
![image (19).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/4c252264-08cb-4580-bd32-41003aed5081.png)
併せてパブリックのサブネットを明示的に割り当てます。
![image (20).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/68eefe23-c21f-4353-b048-04cfa79536f2.png)

次にprivate用。
![image (21).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/4e78265c-961a-4dcc-8f0f-4a56680487a3.png)
こちらのRTはNATゲートウェイをデフォルトゲートウェイに設定していきます。
こうすることで、EC2がNATゲートウェイを経由してIGWにアクセスでき、インターネットに抜けられるようになります。
![image (22).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/0fc76270-d3ec-44ae-80fe-a5c5be2cfe39.png)
併せてプライベートのサブネットを明示的に割り当てます。
![image (24).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/b2680805-3f0a-4526-a131-92e28915cf7e.png)

# 検証
プライベートサブネットのEC2にアクセスして、インターネットに抜けることが出来るかを確認します。
そのためにまず、パブリックサブネット上に踏み台サーバを用意して、そこからプライベートのサーバにアクセスします。
![screencapture-ap-northeast-1-console-aws-amazon-ec2-home-2025-05-03-20_24_21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/58004d5b-b1dd-49d4-8938-7caa6959b56f.png)

作成出来たことを確認します。
![image (25).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/43410c02-1855-451c-8693-a65e4448e8c4.png)

Teratermを使って踏み台にアクセスして、その踏み台からプライベートのEC2にアクセスします。
```
   ,     #_
   ~\_  ####_        Amazon Linux 2023
  ~~  \_#####\
  ~~     \###|
  ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
    ~~~         /
      ~~._.   _/
         _/ _/
       _/m/'
[ec2-user@ip-192-168-100-12 ~]$ sudo su -
[root@ip-192-168-100-12 ~]# cd /tmp
[root@ip-192-168-100-12 tmp]# ls | grep -i *.pem
ohtsuka-key.pem
[root@ip-192-168-100-12 tmp]# ssh -i ohtsuka-key.pem ec2-user@192.168.100.107
The authenticity of host '192.168.100.107 (192.168.100.107)' can't be established.
ED25519 key fingerprint is SHA256:a5YHNTt3STV1rEohFSq4sz4N2xbqGnYDkiiybMmm1dU.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.100.107' (ED25519) to the list of known hosts.
   ,     #_
   ~\_  ####_        Amazon Linux 2023
  ~~  \_#####\
  ~~     \###|
  ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
    ~~~         /
      ~~._.   _/
         _/ _/
       _/m/'
[ec2-user@ip-192-168-100-107 ~]$

```

インターネットに抜けるかを確認します。
google.comに対してpingが飛んでいることからNATゲートウェイを経由してインターネットに抜けていることがわかります。
検証が出来たらEIPやNATゲートウェイを削除しましょう。
```
[ec2-user@ip-192-168-100-107 ~]$ ping google.com
PING google.com (142.250.207.46) 56(84) bytes of data.
64 bytes from nrt13s55-in-f14.1e100.net (142.250.207.46): icmp_seq=1 ttl=57 time=2.06 ms
64 bytes from nrt13s55-in-f14.1e100.net (142.250.207.46): icmp_seq=2 ttl=57 time=1.63 ms
64 bytes from nrt13s55-in-f14.1e100.net (142.250.207.46): icmp_seq=3 ttl=57 time=1.33 ms
64 bytes from nrt13s55-in-f14.1e100.net (142.250.207.46): icmp_seq=4 ttl=57 time=1.84 ms
64 bytes from nrt13s55-in-f14.1e100.net (142.250.207.46): icmp_seq=5 ttl=57 time=1.52 ms
^C
--- google.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 1.334/1.678/2.062/0.252 ms
```