iptables nat原理
同filter表一样,nat表也有三条缺省的“链”(chains
):
1)PREROUTING:目的DNAT规则
把从外来的访问重定向到其他的机子上,比如内部SERVER
,或者DMZ
。
因为路由时只检查数据包的目的ip
地址,所以必须在路由之前就进行目的PREROUTING DNAT
;
系统先PREROUTING DNAT翻译 --> 再过滤(FORWARD) --> 最后路由。
路由和过滤(FORWARD
)中match
的目的地址,都是针对被PREROUTING DNAT之后的。
2)POSTROUTING :源SNAT规则
在路由以后再执行该链中的规则。
系统先路由 --> 再过滤(FORWARD
)--> 最后进行POSTROUTING SNAT 地址翻译其 match
源地址是翻译前的。
3)OUTPUT 定义对本地产生的数据包的目的NAT规则
内网访问外网:
-j SNAT
源网络地址转换,SNAT
就是重写包的源IP
地址
SNAT 只能用在nat表的POSTROUTING链里
-j MASQUERADE
用于外网口public地址
是DHCP
动态获取的(如ADSL
)
固定public 地址(外网接口地址)的最基本内访外SNAT
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT --to 你的eth0地址
多个内网段SNAT,就是多条SNAT语句即可
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
外网访问内网 : –J DNAT
DNAT:目的网络地址转换,重写包的目的IP地址
典型的DNAT的例子: