[CentOS 6] iptables で IPマスカレード と DNAT を設定する


Create: 2014/09/24
LastUpdate: 2014/09/24

下図のような、2つのサブネットの間にNATを置く構成があるとします。
2つのサブネットの接点はNATだけで、ボックスは全部CentOSとします。
青線は、例えば、USERが 192.168.1.92 に ssh すると、LVS(NAT) 経由で Web02 へsshログインします。
赤線は、例えば、Web01 で nslookup を実行すると、DNS に問い合わせます。



青線は、DNAT、赤線は IPマスカレードで実現できます。
まず、NAT でカーネル設定(/etc/sysctl.conf)を変更してパケットの転送を許可します。
# Kernel sysctl configuration file for Red Hat Linux
#
# For binary values, 0 is disabled, 1 is enabled.  See sysctl(8) and
# sysctl.conf(5) for more details.

# Controls IP packet forwarding
net.ipv4.ip_forward = 1

# Controls source route verification
net.ipv4.conf.default.rp_filter = 1

/etc/sysctl.conf の設定変更後は、以下を実行して変更を有効にします。
sysctl -p
青線を iptables コマンドで設定する場合は、以下のとおり。
これで、192.168.1.92 宛てのパケットは、Web02 に送られます。
iptables -t nat -A PREROUTING -d 192.168.1.92 -j DNAT --to 10.0.0.92
赤線を iptables コマンドで設定する場合は、以下のとおり。
これで NATをデフォルト・ゲートウェイにすれば、Web01とWeb02はDNSにアクセスできるようになります
iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.0/24 -j MASQUERADE
web01とweb02のデフォルト・ゲートウェイは、10.0.0.90 に設定します。
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
GATEWAY=10.0.0.90
IPADDR=10.0.0.91
NETMASK=255.255.255.0
ONBOOT=yes
TYPE=Ethernet
NM_CONTROLLED=no
IPV6INIT=no
IPV6_AUTOCONF=no
USERCTL=no

なを、この設定で、Web01/Web02からDNSにアクセスした場合、DNSから見たアクセス元のIPアドレスはNAT(192.168.1.90)になります。

iptables の設定を確認したい場合は以下のようにします。
service iptables status
iptables コマンドで実施した設定は、サーバーを停止すると消えますが、以下のようにすると設定を保存できます。
service iptables save
サーバー起動時に保存した設定を有効にしたい場合は以下のようにします。
chkconfig iptables on
手動で保存した設定を有効にしたい場合は以下のようにします。
service iptables start
iptables の設定をクリアしたい場合は以下のようにします。
service iptables stop