CentOS 6.3 NAT

星期三, 28th 十一月 2012

今天嘗試要做一個NAT 轉換, 不過發現出不去, 最後才發現是iptables 沒設定完成.

我們首先再回顧一下iptables的圖表

如果我要做 NAT的話, 需要經過 nat PREROUTING -> filter FORWARD -> nat POSTROUTING (mangle我們用不到, 忽略)

在CentOS 6.3 的預設firewall規則沒有開啟任何Forward的 port

所以我們除了要在nat table設定好 MASQUERADE 外也需要額外增加forward的資訊

下面就是我們所需的所有指令

#vi /etc/sysctl.conf

修改 net.ipv4.ip_forward = 1

#sysctl -p

#iptables -t nat -A POSTROUTING -s 192.168.xx.xx/24 -o eth1 -j MASQUERADE

下面分別開啟icmp, udp 53, tcp ALL 視各別需要自行調整

#iptables -A FORWARD -p icmp -j ACCEPT
#iptables -A FORWARD -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT
#iptables -A FORWARD -m state --state NEW -m tcp -p tcp --dport 1:65535 -j ACCEPT

預設FORWARD Policy預設第一行是禁止所有的icmp, 把這行刪除 icmp才過得去.
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

#iptables -L --line-numbers
#iptables -D FORWARD 1


確認沒有問題後儲存這個設定

#/etc/init.d/iptables save
確認是否重新啟動沒有問題
#/etc/init.d/iptables restart

icmp reject 回應有 1、icmp-net-unreachable 2、icmp-host-unreachable 3、 icmp-port-unreachable 4、icmp-proto-unreachable 5、icmp-net-prohibited 6、icmp-host-prohibited