2012年9月24日月曜日

iptables を使った簡易NATルータメモ

自分用メモ

eth0 10.0.0.1/255.255.255.0(外側)
eth1 192.168.128.254/255.255.255.0(内側)

の場合。


RHEL6系の初期状態
# iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

# iptables -t nat -nL
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

# vim /etc/sysctl.conf
net.ipv4.ip_forward = 0
      ↓
net.ipv4.ip_forward = 1

設定を有効化
# sysctl -p


ルールを追加

1.まず内側からeth0に対するマスカレードを定義する。
# iptables -t nat -A POSTROUTING -o eth0 -s 192.168.128.0/24 -j MASQUERADE

2.次に内側eth1から外側eth0に対するフォワーディングを許可する。
# iptables -I FORWARD 1 -i eth1 -o eth0 -s 192.168.128.0/24 -j ACCEPT

3.最後に確立済みの接続に対する、フォワーディングを許可する(外側からの戻りパケット)
# iptables -I FORWARD 1 -m state --state ESTABLISHED,RELATED -j ACCEPT

2,3については、RHEL6系がデフォルトで全てのフォワーディングをREJECTするため必要となるルール。
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

設定後の状態
# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  287 22364 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
    3   417 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
    0     0 ACCEPT     all  --  eth1   eth0    192.168.128.0/24     0.0.0.0/0           
    0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain OUTPUT (policy ACCEPT 7 packets, 1260 bytes)
 pkts bytes target     prot opt in     out     source               destination         

# iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 2 packets, 278 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 MASQUERADE  all  --  *      eth0    192.168.128.0/24     0.0.0.0/0           

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination     

これで他の内側ホストのゲートウェイを192.168.128.254に設定して通信できるかテストする。

上手く行ったなら設定を保存しておく。

# /etc/init.d/iptables save

0 件のコメント:

コメントを投稿