Ubuntu では ufw という「簡単に iptables を扱えるようにラップしたツール」が入っていて、iptables を使ってよくやることはおよそ ufw で設定することができる。
今回は ufw を使って Ubuntu が NAT1 サーバとして動くように設定したのでその手順をメモしておく。
NAT の設定
OS は Ubuntu 18.04 でやった。
SSH を許可する
ufw を有効にした際に SSH が拒否されるとログインできなくなってしまうので許可しておく。
# ufw allow ssh
フォワーディングを許可する
/etc/default/ufw
DEFAULT_FORWARD_POLICY="ACCEPT"
/etc/ufw/sysctl.conf
net/ipv4/ip_forward=1
ルーティングの方法を定義する
/etc/ufw/before.rules
*nat
:POSTROUTING ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
-F
-A POSTROUTING -s 10.0.0.0/16 -j MASQUERADE
COMMIT
-F
があると ufw reload
を複数回やっても NAT 設定が重複しなくなる。
NIC が複数ある場合は -o eth0
のように指定する。
ufw を有効にする
# ufw enable
ちゃんと設定されているか確認する
# iptables -t nat -nL
AWS の場合
- NAT 用の EC2 インスタンスを作る
- パブリックサブネットに作る (= グローバル IPv4 アドレスを割り当てる)
- インスタンスサイズは t2.nano でも動くっちゃ動く
- ネットワーク設定で「送信元/送信先の変更チェック」を無効にする
- 送信元となるリソースが所属するプライベートサブネットのルートテーブルを設定する
- デフォルトルート
0.0.0.0/0
を NAT 用 EC2 インスタンス (の NIC) 宛に飛ばす
- デフォルトルート
Azure の場合
- NAT 用の VM を作る
- VM は NAT 用のサブネット内に作る (少なくとも NAT のアクセス元となるリソースとは別のサブネットにする必要がある)
- グローバル IPv4 アドレスを割り当てる
- NIC の設定で IP 転送を有効にする
- NIC の NSG (ネットワークセキュリティグループ) で以下の2つの通信を許可する
- 受信: VirtualNetwork → Internet
- 送信: Internet → VirtualNetwork
- アクセス元となるリソースが所属するサブネットのルートテーブルを設定する
- デフォルトルート
0.0.0.0/0
を NAT 用 VM (プライベート IPv4 アドレス) 宛に飛ばす
- デフォルトルート
-
正確には NAPT (IP マスカレード) ↩