プロジェクト

全般

プロフィール

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


ほぼ10年前に更新