CentOS 6でNAPT(IPマスカレード)¶
はじめに¶
クローズLANから外部LANにNATで接続する場合、外部LANからは通常クローズLANのマシンに接続することはできません。
しかし、NAPT(IPマスカレード)を使うことで、外部LANからクローズLANのマシンに接続することが可能になります。
この場合、外部LANから接続に使用する宛先は、NATルーターの外部LAN側のIPアドレスと特定のポート番号となります。特定のポート番号はあらかじめNAPTによってクローズLANのアドレス・ポートに対応付けしておきます。
このNATルーターをCentOS 6で実現するには、iptablesを使います。
設定¶
NIC間のIP転送を許可する¶
CentOS 6はデフォルトではNIC間のIP転送がカーネルパラメータで禁止になっています。そこで、カーネルパラメータを変更してIP転送を許可します。
- /etc/sysctl.conf の変更
@@ -4,7 +4,7 @@ # sysctl.conf(5) for more details. # Controls IP packet forwarding -net.ipv4.ip_forward = 0 +net.ipv4.ip_forward = 1 # Controls source route verification net.ipv4.conf.default.rp_filter = 1
- カーネルパラメータの反映
# sysctl -p
iptablesでIPマスカレードを設定する¶
現状のNAT設定の確認¶
# iptables -t nat -L --line Chain PREROUTING (policy ACCEPT) num target prot opt source destination Chain POSTROUTING (policy ACCEPT) num target prot opt source destination 1 MASQUERADE tcp -- 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535 2 MASQUERADE udp -- 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535 3 MASQUERADE all -- 192.168.122.0/24 !192.168.122.0/24 Chain OUTPUT (policy ACCEPT) num target prot opt source destination
- KVMホストとして設定しているマシンでは、KVMゲスト向けに既にIPマスカレード設定があります。
これは、libvirtdサービスを起動した時点でiptablesに設定が追加されたものです。libvirtdサービスが稼働中のままiptablesサービスを再起動すると、NATの設定が空となります。その後libvirtdを再起動すると再びマスカレード設定が追加されます。
# iptables -nvL --line Chain INPUT (policy ACCEPT 536K packets, 61M bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT udp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53 2 0 0 ACCEPT tcp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53 3 0 0 ACCEPT udp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67 4 0 0 ACCEPT tcp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT all -- * virbr0 0.0.0.0/0 192.168.122.0/24 state RELATED,ESTABLISHED 2 0 0 ACCEPT all -- virbr0 * 192.168.122.0/24 0.0.0.0/0 3 0 0 ACCEPT all -- virbr0 virbr0 0.0.0.0/0 0.0.0.0/0 4 0 0 REJECT all -- * virbr0 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable 5 0 0 REJECT all -- virbr0 * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable Chain OUTPUT (policy ACCEPT 240K packets, 237M bytes) num pkts bytes target prot opt in out source destination