2020/4/24更新:以下にUbuntu 20.04LTSの場合の手順を記載しました。
前提条件(事前準備)
- Ubuntu 18.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 --list
あわせて、他のインスタンスより、NATインスタンス経由で通信が行える(インターネット側のリソースにアクセスできる)ことを確認します。
最後に、以下のコマンドを実行し、設定を保存します。
# service netfilter-persistent save
参考
- Ubuntuでiptablesを再起動後にも保持する方法
- https://qiita.com/yas-nyan/items/e5500cf67236d11cce72
- natテーブルを利用したLinuxルータの作成 (2/6)
- http://www.atmarkit.co.jp/ait/articles/0505/17/news131_2.html