iptables で NAT

nic 2枚 持ってるlinuxをLoad Balancerとして動かしたかったので久々にやろうとしたら結構忘れていたのでメモ。
LBじゃなくて普通のrouterにしたいなら、vyattaを使えばNATの設定入れたら裏でiptablesも設定してくれて楽ですけど。

  • eth0: 192.0.2.1 (グローバルアドレス)
  • eth1: 192.168.122.0 (プライベート)

/etc/sysctl.conf

# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
# sysctl -p

iptables

LANからWANへのアクセス

linux routerでsource natする。

eth0のアドレスにsource nat させる場合は-j MASQUERADE。

# iptables -t nat -A POSTROUTING -s 192.168.122.0/24 -j MASQUERADE


任意の(aliasなどで割り当てている)アドレスを指定する場合は -j SNAT --to-source address を指定。

# ifconfig eth0:0 add 192.0.2.10
# iptables -t nat -A POSTROUTING -s 192.168.122.0/24 -j SNAT --to-source 192.0.2.10

WANからLAN (静的NAT)

linux routerでdestination natする。
割り当てた特定のグローバルアドレスへ来たパケットをLAN内のアドレスにdestination natする例。

# ifconfig eth0:1 add 192.0.2.20
# iptables -t nat -A PREROUTING -d 192.0.2.20 -j DNAT --to 192.168.122.20