在传统的标准的TCP/IP通信过程中,所有的路由器仅仅是充当一个中间人的角色,也就是通常所说的存储转发,路由器并不会对转发的数据包进行修改,更为确切的说,除了将源MAC地址换成自己的MAC地址以外,路由器不会对转发的数据包做任何修改。NAT (Network Address Translation,网络地址转换)恰恰是出于某种特殊需要而对数据包的源ip地址、目标ip地址、源端口、目标端口进行改写的操作。利用iptables的内置表NAT可以实现上述功能
iptables NAT的三个链:PREROUTING,POSTROUTING,OUTPUT
PREROUTING:可以在这里定义进行目标地址NAT的规则,因为路由器进行路由时只检查数据包的目标ip地址,所以为了使数据包得以正确路由,我们必须在路由之前就进行目的NAT
POSTROUTING:可以在这里定义进行源地址NAT的规则,系统在决定了数据包的路由以后在执行该链中的规则
OUTPUT:定义对本地产生的数据包的目的NAT规则
注:在CentOS 7中NAT表增加了INPUT链,源地址转换(SNAT)也可以写在INPUT链上
NAT处理的动作选项
SNAT:源地址转换,改变数据包的源地址,常接选项--to-source
DNAT:目标址转换,改变数据包的目标地址,常接选项--to-destination
MASQUERADE:地址伪装,适用于ADSL等动态拨号上网的IP伪装
REDIRECT:端口映射,通常用实现透明代理和对外开放内网某些服务,常接选项--to