tabimoba.net

とあるエンジニアの雑記帳

Ubuntu 20.04LTSでAWS EC2のNATインスタンスを構築する

前提条件(事前準備)

基本的には、やることは以下の内容(Ubuntu 18.04LTS)と変わりません。 www.tabimoba.net

  • Ubuntu 20.04LTS がインストールされたEC2インスタンスを用意します。
  • インスタンスタイプは最初はt2.nanoやt2.micro(あるいはt3,t3a系の同等タイプ)で問題ありません。(パフォーマンスが出ない場合は、上位のインスタンスタイプへ変更します)
  • ストレージは8GB(デフォルト)で十分足ります。
  • 無くても動きますが、必要に応じてSWAPも追加します。
  • NATインスタンスを配置するVPCサブネットに関連付けられたルートテーブルの0.0.0.0/0には、インターネットゲートウェイをアタッチしておきます。
  • EC2インスタンスの「送信元/送信先チェック」を無効にします

sysctl.confの設定

IPv6の無効化と、IPフォワーディングの有効化を行います。

# echo "net.ipv4.ip_forward = 1 >> /etc/sysctl.conf"
# echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
# echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf
# sysctl -p

iptablesの設定

NAPT(IPマスカレード)の設定を行います。

最初に、iptablesの設定永続化のために、iptables-persistentをaptインストールします。

# apt update && apt install -y iptables-persistent

次に、以下のコマンドを実行します。

iptables -t nat -A POSTROUTING  -s <IPv4 CIDR> -j MASQUERADE
  • <IPv4 CIDR>には、VPC全体のIPアドレス範囲を、IPアドレス(ネットワークアドレス)/サブネットマスク(マスクbit数) で指定します。例えば、10.0.0.0/16というVPCが存在する場合は、それを<IPv4 CIDR>として指定します。
  • NATインスタンス経由で通信させたいサブネットを限定したい場合は、AWSマネジメントコンソールのVPCダッシュボードの「ルートテーブル」で次の通り設定を行います。
  • 「ルート」で、送信先を0.0.0.0/0、ターゲットをNATインスタンスのEC2 インスタンスIDとするルートを追加します。
  • 「サブネットの関連付け」で、 NATインスタンス経由で通信させたいサブネットの関連付けを行います。

設定完了後、iptablesに正しく設定されたことを以下のコマンドを実行して確認します。

# iptables -t nat --list

あわせて、他のインスタンスより、NATインスタンス経由で通信が行える(インターネット側のリソースにアクセスできる)ことを確認します。

最後に、以下のコマンドを実行し、設定を保存します。

# service netfilter-persistent save