Memo

メモ > サーバ > サービス: AWS > AWS NAT

AWS NAT
NATゲートウェイを作成できる。 できることは通常のNATと同じだが、AWSのマネージドサービスなので可用性が高い。 利用料金や帯域幅については、使用する際に改めて確認する。 【新機能】ついに登場!Amazon VPC NAT GatewayでNATがAWSマネージドに http://dev.classmethod.jp/cloud/aws/introduce-to-amazon-vpc-nat-gateway/ Amazon VPCにNAT Gatewayが追加されたので試してみた http://yoshidashingo.hatenablog.com/entry/2015/12/18/041217 AWS NAT構成の作り方(NATゲートウェイ編) - Qiita https://qiita.com/TK1989/items/5d9bd5d49708c02dff3f AWS NATインスタンスを作成したメモ - Qiita https://qiita.com/hc_isobe/items/3520173b1065aeae884b NAT Gatewayによるアクセス元IPアドレスの固定 | DevelopersIO https://dev.classmethod.jp/articles/fix-sender-ip-address-with-nat-gateway/ 【AWS】NATゲートウェイとインターネットゲートウェイの違い - Hanatare's PaPa https://www.hanatare-papa.jp/entry/technology-aws-natgateway-1-446 NATゲートウェイ構成時の注意事項 | Oji-Cloud https://oji-cloud.net/2019/09/19/post-3085/ 以下、環境構築の検証。以下のような環境を作成する。 ・VPCはパブリックとプライベートのサブネットを持つ。 ・パブリックなサブネットに踏み台サーバ、プライベートなサブネットにWebサーバを置く。 ・WebサーバにSSHでアクセスする場合、踏み台サーバを経由する。 ・Webサーバにブラウザでアクセスする場合、ロードバランサーを経由する。 ロードバランサーを経由しないブラウザアクセス(テスト時など)は、ポートフォワーディングを使用する。 ・プライベートなサブネットに置かれたWebサーバからインターネットにアクセスする場合、NATゲートウェイを経由する。 ■VPC環境の作成 このテキストの「VPC」の項目をもとに。 ・VPCの作成 ・サブネットの作成 ・インターネットゲートウェイの作成 ・ルートテーブルの作成 ・セキュリティグループの作成 を行う。(RDSやElastiCache用のVPC設定も、必要に応じて行う。) ここまでは通常のVPC作成と同じ。 以降はNAT環境のための手順。 ■踏み台サーバの作成 踏み台用にEC2を作成する。 自動割り当てパブリックIPは「有効化」にする。もしくはEIPを割り当てる。(外部からアクセスできるようにする。) 名前は今回は「Develop-Bastion」とする。EIPは 203.0.113.1 とする。 ここではテストのために、まずは最低限Webサーバとして使えるようにする。(NATの利用にWebサーバは必須ではない。) あらかじめセキュリティグループで、22番ポートと80番ポートのアクセスを許可しておく。 ・SSHでサーバ 203.0.113.1 に接続。 ・必要に応じて日本語設定にしておく。 ・必要に応じてホスト名を設定しておく。(デフォルトでは「ip-10-1-0-87」のようなホスト名。このままでもいい。) ・必要に応じてタイムゾーンを設定しておく。 ・以降は以下を設定。
# yum -y install nginx # service nginx start # chkconfig nginx on
ブラウザで以下にアクセスできることを確認する。 http://203.0.113.1/ SSHの設定ファイルを以下のようにしておけば、「ssh refirio-dev」でアクセスできる。
Host refirio-dev Hostname 203.0.113.1 User ec2-user IdentityFile C:/Users/refirio/Documents/SSH/refirio/AWS.pem IdentitiesOnly yes
■NATゲートウェイの作成 VPC → NATゲートウェイ → NATゲートウェイの作成 サブネット: Develop-DMZ-A(作成済みのパブリックなサブネットを選択する。) Elastic IP 割り当て ID: (作成済みのEIPを設定するか、新しく作成する。) と入力してNATゲートウェイを作成する。 VPC → ルートテーブル → ルートテーブルの作成 名前タグ: Develop-NAT VPC : Develop と入力してルートテーブルを作成する。 作成したルートテーブルの「ルート」を編集し、以下を追加する。 接続先: 0.0.0.0/0 ターゲット: (作成したNATゲートウェイ) これで、ルートテーブルに設定されていないIPアドレス宛てのすべてのパケットは、作成したNATゲートウェイに向く。 VPC → サブネット 作成済みのプライベートなサブネットを選択し、各サブネットの「ルートテーブル」を上で作成したものに変更する。 ※NATゲートウェイは、作成してもしばらくは「保留中」となって割り当てたEIPも表示されない。 この状態だとNATとして機能していない。 5〜10分程度待つと「使用可能」になり、EIPも表示される。 ■NATゲートウェイの動作確認 パブリックなサーバからtracerouteを試す。 curlなどで外部のサーバにアクセスすると、アクセス先のサーバのログにはEC2のIPアドレスが記録されている。
$ traceroute www.google.com traceroute to www.google.com (172.217.25.68), 30 hops max, 60 byte packets 1 ec2-175-41-192-146.ap-northeast-1.compute.amazonaws.com (175.41.192.146) 17.190 ms ec2-175-41-192-148.ap-northeast-1.compute.amazonaws.com (175.41.192.148) 13.897 ms ec2-175-41-192-154.ap-northeast-1.compute.amazonaws.com (175.41.192.154) 17.141 ms 2 100.64.2.206 (100.64.2.206) 13.185 ms 100.64.1.206 (100.64.1.206) 13.061 ms 100.64.2.10 (100.64.2.10) 14.259 ms 3 100.66.2.98 (100.66.2.98) 21.632 ms 100.66.2.10 (100.66.2.10) 17.852 ms 100.66.3.98 (100.66.3.98) 14.524 ms 〜以下略〜
プライベートなサーバからtracerouteを試す。 NATゲートウェイのプライベートIPは 10.0.0.154 なので、NATを通じて外にアクセスしていることが分かる。 curlなどで外部のサーバにアクセスすると、アクセス先のサーバのログにはNATのパブリックIPアドレスが記録されている。
$ traceroute www.google.com traceroute to www.google.com (172.217.24.132), 30 hops max, 60 byte packets 1 10.0.0.154 (10.0.0.154) 0.244 ms 0.237 ms 0.222 ms 2 ec2-175-41-192-148.ap-northeast-1.compute.amazonaws.com (175.41.192.148) 20.865 ms ec2-175-41-192-144.ap-northeast-1.compute.amazonaws.com (175.41.192.144) 18.352 ms ec2-175-41-192-148.ap-northeast-1.compute.amazonaws.com (175.41.192.148) 20.835 ms 3 100.64.3.14 (100.64.3.14) 16.225 ms 100.64.2.12 (100.64.2.12) 16.641 ms 100.64.1.202 (100.64.1.202) 13.434 ms 〜以下略〜
■Webサーバの作成 名前は今回は「Develop-Web1」とする。プライベートIPは 10.0.2.63 とする。 まずは最低限Webサーバとして使えるようにしておく。 踏み台サーバからHTTPリクエストを送り、Webサーバにアクセスできることを確認する。 SSHの設定ファイルを以下のようにしておけば、「refirio-dev-web1」でアクセスできる。 (Poderosaは多段接続に対応していないようなので、Git Bash や ConEmuで試した。)
Host refirio-dev Hostname 203.0.113.1 User ec2-user IdentityFile C:/Users/refirio/Documents/SSH/refirio/AWS.pem IdentitiesOnly yes Host refirio-dev-web1 Hostname 10.0.2.63 User ec2-user IdentityFile C:/Users/refirio/Documents/SSH/refirio/AWS.pem IdentitiesOnly yes ProxyCommand ssh refirio-dev -W %h:%p
■ポートフォワーディングで確認 Git Bash で以下を実行してポートフォワーディング。 ブラウザから http://localhost/ にアクセスすると、Develop-Web1 サーバの内容が表示される。
$ ssh -fNCL 0.0.0.0:80:localhost:80 refirio-dev-web1
■ロードバランサーの作成 以降は通常の手順で大丈夫のはず。

Advertisement