🦶
これが踏み台サーバか
「踏み台サーバ」という言葉、どこか強そうな響きがある。
名前からしても、本来アクセスしたい場所に直接行けないときに、いったん立ち寄る中継地点として置くサーバなのだろうと想像できる。
踏み台サーバについて、Ping-t AWS SAA問題集の解説では次のように説明されている。
踏み台サーバーとは、例えばインターネットからプライベートサブネット内にあるサーバーの保守をしたい場合に、一旦NATインスタンスへSSH接続をした後、NATインスタンスから目的のサーバーへ再度SSH接続をすることで、VPC外からは直接接続できないプライベートサブネット内のサーバーへの接続を可能にするものです。
インフラ初学者の自分にとっては、この説明もいまいちピンとこない。そこで、AWS上で実際に踏み台サーバを構築しながら、その役割や動きを自分の手で確かめてみることにした。
1. VPCの作成
- AWSマネジメントコンソールで「VPC」サービスに移動
- 「VPCを作成」を選択
- 名前タグ:
MyNATVPC
- IPv4 CIDR ブロック:
10.0.0.0/16
- 「VPCのみ」を選び「作成」
2. サブネットの作成
2-1. パブリックサブネット
- VPC画面→「サブネット」→「サブネットを作成」
- 名前タグ:
PublicSubnet
- VPC:
MyNATVPC
- アベイラビリティゾーン:任意
- IPv4 CIDR ブロック:
10.0.1.0/24
- 作成
2-2. プライベートサブネット
- 名前タグ:
PrivateSubnet
- VPC:
MyNATVPC
- アベイラビリティゾーン:任意
- IPv4 CIDR ブロック:
10.0.2.0/24
- 作成
3. インターネットゲートウェイ(IGW)の作成・アタッチ
- 「インターネットゲートウェイ」→「作成」
- 名前タグ:
MyNATIGW
- 名前タグ:
- 作成したIGWを選択し、「アクション」→「VPCにアタッチ」
- 対象VPC:
MyNATVPC
インターネットゲートウェイと似たサービスとしてNATゲートウェイがある。インターネットゲートウェイは、パブリックサブネットに配置したリソースがインターネットと直接通信できるようにするための出入口となる一方、NATゲートウェイはプライベートサブネット内のリソースがインターネットへのアウトバウンド通信を行う際に利用されるが、外部からの直接アクセスは遮断される。
今回は、パブリックサブネットのNATインスタンスを経由してプライベートサブネットからインターネットへアクセスさせる構成とするため、NATゲートウェイではなく、インターネットゲートウェイを作成しVPCにアタッチする。
4. ルートテーブルの設定
4-1. パブリックサブネット用ルートテーブル
- 「ルートテーブル」→「作成」
- 名前タグ:
PublicRouteTable
- VPC:
MyNATVPC
- 名前タグ:
- 「ルート」タブで「ルートの追加」
- 宛先:
0.0.0.0/0
- ターゲット:IGW(作成した
MyNATIGW
)
- 宛先:
- 「サブネットの関連付け」で
PublicSubnet
を関連付け
4-2. プライベートサブネット用ルートテーブル
- 「ルートテーブル」→「作成」
- 名前タグ:
PrivateRouteTable
- VPC:
MyNATVPC
- 名前タグ:
- いったんデフォルトのままでOK(後ほどNATインスタンス追加)
5. NATインスタンスの作成
5-1. Amazon Linux 2 EC2インスタンスの作成
- 「EC2」サービスで「インスタンスを起動」
- 名前:
NATInstance
- AMI:Amazon Linux 2(t2.microでOK)
- ネットワーク:
MyNATVPC
- サブネット:
PublicSubnet
- パブリックIPの自動割当:有効化
- ストレージ・キーペアは適宜
- セキュリティグループ:
- SSH(22)自分のIP
- ALL traffic(0.0.0.0/0)一時的に許可(本番は必要な範囲に絞る)
5-2. NAT用のOS設定
- 作成したインスタンスにSSHでログイン
- IPフォワーディング有効化(2つとも実行):
sudo sysctl -w net.ipv4.ip_forward=1
sudo sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'
- iptablesでNAT動作の設定
※ens5
等、正しいNIC名を使用
sudo iptables -t nat -A POSTROUTING -o ens5 -s 10.0.2.0/24 -j MASQUERADE
- iptables設定を永続化(Amazon Linux 2の場合)
sudo yum install iptables-services
sudo service iptables save
- Source/Destination Checkの無効化
- EC2管理画面で
NATInstance
を選択 - アクション→ネットワーキング→「送信元/送信先チェック中」を停止
6. プライベートサブネット用ルートテーブルの編集
- 先ほど作成した
PrivateRouteTable
を開く - 「ルート」タブで「ルートの追加」
- 宛先:
0.0.0.0/0
- ターゲット:NATインスタンスのネットワークインターフェイス(ENI)
- 宛先:
- 「サブネットの関連付け」で
PrivateSubnet
を関連付け
7. プライベートサブネット内にテスト用EC2を作成
- 「EC2」→「インスタンスを起動」
- 名前:
PrivateInstance
- AMI:Amazon Linux 2
- ネットワーク:
MyNATVPC
- サブネット:
PrivateSubnet
- パブリックIPの自動割当:なし
- セキュリティグループ:SSHはパブリックサブネットの踏み台経由用
8. NATインスタンス経由でプライベートEC2にSSHログイン
- まずNATインスタンスへSSHログイン
- そこからプライベートサブネット内のテスト用EC2インスタンスにSSHログイン
9. インターネット接続の確認
- プライベートサブネット内のテスト用EC2インスタンスで下記コマンドを実行
curl https://www.google.co.jp/
- インターネット経由で応答が返ればNATインスタンス経由での接続に成功!
Discussion