NAT表的应用: (Network AddressTranslation网络地址转换)linux
数据包在局域网中的传输步骤:网络
先通过NAT表的PREROUTING 链tcp
路由判断是不是发送给本机的包,如不是则转发出去(前提是要开启路由转发).net
再通过Filter表的FORWARD 链rest
经过NAT表的POSTROUTING 链发出去code
NAT的重点在于上面流程的第 1/4 步骤,也就是 NAT表的两条重要的链:PREROUTING 与POSTROUTING。 这两条链重要功能在于修改IP,而这两条链修改的IP又是不同的,POSTROUTING在修改来源IP,PREROUTING则在修改目标IP 。因为修改的 IP 不同,因此就称为来源NAT (Source NAT, SNAT) 及目标 NAT (Destination NAT, DNAT)。ip
SNAT:源地址转换,可以让多个内网用户经过一个外网地址上网路由
DNAT:目标地址转换,可以让外网用户访问局域网的内网地址虚拟机
应用案例:io
A机器有两块网卡,分别是外网网卡eth1(192.168.234.130)和内网网卡eth2(192.168.0.10),B机器有一块内网网卡eth2(192.168.0.20),A与B机器能够经过内网进行通讯。
需求一(SNAT):让B机器能链接外网
1.在A机器上打开路由转发:echo "1">/proc/sys/net/ipv4/ip_forward
2.在A机器上添加nat表规则: iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth1 -j MASQUERADE
3.在B机器上设置网关 route add default gw 192.168.0.10便可
#该操做至关于将A机器当作路由器,转发局域网到外网中的数据包
需求二(DNAT):C机器只能和A通讯,让C机器能够直接连通B机器的22端口
1.在A机器上打开路由转发echo "1">/ proc/sys/net/ipv4/ip_forward
2.在A机器上添加nat表规则:iptables -t nat -A PREROUTING -d 192.168.234.130 -p tcp --dport 1122 -j DNAT --to 192.168.0.20:22
3.在A机器上添加nat表规则:iptables -t nat -A POSTROUTING -s 192.168.0.20 -j SNAT --to 192.168.234.130
4.在B机器上设置网关 route add default gw 192.168.0.10便可
#A、B能够看作两台虚拟机,C为Windows主机,C能与A通讯,却不能与B通讯,经过A作端口映射,C访问A机器的1122端口时就转向B机器的22端口
iptables规则备份和恢复:
备份:(将规则保存到指定文件)
[root@linux ~]# iptables-save > /tmp/ipt.bak
恢复:
[root[@linux](https://my.oschina.net/tjxlinux) ~]# iptables-restore < /tmp/ipt.bak