はじめに
NATゲートウェイをプライベートで使うとなると、料金が少し高いなと思い、NATインスタンスをつくってみた。
調べてみると、AWS公式のNATインスタンスのAMIは、サポートが終了したAmazon Linuxをベースにしている様。
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/VPC_NAT_Instance.html
NAT AMI は、2020 年 12 月 31 日に標準サポートが終了した Amazon Linux の最新バージョン 2018.03 に基づいて構築されています。
また、自作するのを調べてみた感じAmazon Linux 2でNATインスタンスを自作するものは多くあったが、UbuntuでNATインスタンスをつくるものはあまり多くなかった気がする。
UbuntuでNATインスタンスが動くところまではできたので記事として残す。
なお、検証したのはUbuntu 22.04。
手順
概ねAmazon Linux2でのNATインスタンスの作成と同じで、違うところは再起動後もiptablesの設定を保持してくれるようにiptables-persistent
を使うところ。
他はほぼ同じなので、iptablesに追加するルールのところの192.168.0.0/24
、ens5
は環境に合わせたものにすれば動く(はず)。
$ sudo sh -c 'sysctl -w net.ipv4.ip_forward=1 | tee /etc/sysctl.d/99-sysctl.conf'
$ sudo sysctl --system
$ sudo apt update
$ sudo apt install iptables-persistent -y
$ sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ens5 -j MASQUERADE
$ sudo netfilter-persistent save
$ sudo systemctl enable netfilter-persistent.service
PackerテンプレートにしてAMIを焼いておけば複数の構築も楽かもしれない。
(僕は複数のNATインスタンスが必要なことをやってないので、不要だが...)
# 略...
build {
sources = [
# 略...
]
provisioner "shell" {
inline = [
"sudo sh -c 'sysctl -w net.ipv4.ip_forward=1 | tee /etc/sysctl.d/99-sysctl.conf'",
"sudo sysctl --system",
"sudo apt update",
"sudo DEBIAN_FRONTEND=noninteractive apt-get install iptables-persistent -y",
"sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ens5 -j MASQUERADE",
"sudo netfilter-persistent save",
"sudo systemctl enable netfilter-persistent.service"
]
}
}
Ref
- NAT インスタンス - Amazon Virtual Private Cloud
- 令和なのに NAT インスタンスを手作りして使ってみた | DevelopersIO
- NAT インスタンス用の AMI を Packer で作ってみた | DevelopersIO
- sysctl - ArchWiki
- iptables - ArchWiki
- NAT ゲートウェイの設定 | シンプルなステートフルファイアウォール - ArchWiki
- 雑記 - iptablesによるNAT
- Ubuntu20.04でルータを作成 | 日々修行
- 送信元/送信先チェックを無効にする | NAT インスタンス - Amazon Virtual Private Cloud
- NATインスタンスをAmazonLinux2で構築する - 雲のメモ帳
- NATゲートウェイが高いのでNATインスタンスを立てる【金欠シリーズ】 - Qiita