IPtables之四:NAT原理和配置

本文涉及的产品
公网NAT网关,每月750个小时 15CU
简介:

 

NAT一般情况下分为SNAT,DNAT和PNAT

此篇主要讲述的是使用iptables配置NAT,所以这3种NAT的区别和应用场景就简单的说明一下

 

SNAT:源地址转换

目标地址不变,重新改写源地址,并在本机建立NAT表项,当数据返回时,根据NAT表将目的地址数据改写为数据发送出去时候的源地址,并发送给主机

目前大多都是解决内网用户用同一个公网地址上网的情况

DNAT:目标地址转换

和SNAT相反,源地址不变,重新修改目标地址,在本机建立NAT表项,当数据返回时,根据NAT表将源地址修改为数据发送过来时的目标地址,并发给远程主机

在DNAT的基础上,可以根据请求数据包的端口做PNAT(端口转换,也称为端口映射),可以更句请求数据包不同的端口改写不同的目标地址,从而发送给不同的主机

这在用一个公网地址做不同服务时用的比较多,而且相对来说,用NAT的方式可以隐藏后端服务器的真实地址,更加的安全

 

在使用iptables实现nat之前,再来回头说说iptables的基础原理

wps_clip_image-8909

在这个模型中,完成nat的实现,数据要经过prerouting—forword--postrouting这3个链

 

分析SNAT的数据流向过程

首先进入prerouting,发现不是本网段的地址,而后开始查找路由表(查找路由的过程在prerouting和forword之间),于是经过forword链进行转发,在通过postrouting时进行NAT转换。

在这个流程中,NAT转换的步骤在postrouting链上实现,之所以不再prerouting上做nat是因为数据包在进来之前,还不知道是本网段地址还是外网地址

 

再分析DNAT的数据流向过程

在DNAT中,NAT要在prerouting链上做。之前提到过,在数据进入主机后,路由选择过程是在prerouting和forword之间的,所以应该先做地址转换之后,再进行路由选择,而后经过forword,最后从postrouting出去

 

理论说了一堆,接下来用实验环境来验证下(用dia画的图,比较搓。。。在ubuntu下将就用下了。)

wps_clip_image-5955

其中pc1是我本机,系统是ubuntu12.04,NAT和PC2是vmware虚拟机

 

nat主机网络配置

wps_clip_image-30602

 

SNAT

在做nat之前,要先把路由功能打开,不然数据包连forword都过不了

[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/ip_forward

 

添加nat表项

[root@localhost ~]# iptables -t nat -A POSTROUTING -s 172.16.93.0/24  -j SNAT --to-source 10.0.0.1

表示在postrouting链上,将源地址为172.16.93.0/24网段的数据包的源地址都转换为10.0.0.1

 

查看下表项

wps_clip_image-21165

 

验证效果:

先看下本机的网络配置

wps_clip_image-28305

添加一条去往10.0.0.0/24网段的静态路由

lust@host:~$ sudo route add -net 10.0.0.0/24 gw 172.16.93.129

 

然后在主机上对vmnet1网段进行抓包

lust@host:~$ sudo tcpdump -i vmnet1 –v

 

在主机上ping 10.0.0.2,观察抓到的包

wps_clip_image-28528

通过抓包可以发现,去往10.0.0.2的源地址为10.0.0.1,说明nat成功的将源地址改写

 

以上是实验验证部分

 

这里再介绍一个SNAT的常用选项:MASQUERADE

此选项可以用在动态获取IP地址的主机,常用在家庭adsl拨号上

iptables -t nat -A POSTROUTING -s 172.16.93.0/24 -o eth1 -j MASQUEREADE

在这里最好使用 -o 接口来明确指定从哪个接口出去,MASQUEREADE会调用该接口的地址作为源地址出去(不指定接口也可以,不过在主机上有多个IP地址的情况下最好配置一下)

 

 

DNAT

对于DNAT就不再做实验验证了,和SNAT是差不多的,这里介绍下常用的几种用法

 

在DNAT中,要把规则定义在PREROUTING链中

iptables -t nat -A PREROUTING -d 10.0.0.1 -j DNAT –-to-destination 172.16.93.1

此条规则将请求IP为10.0.0.1的数据包转发到后端172.16.93.1主机上

 

iptables -t nat -A PREROUTING -d 10.0.0.1 -p tcp –-dport 80 -j DNAT –-to-destination 172.16.93.1

此条规则将请求IP为10.0.0.1并且端口为80的数据包转发到后端的172.16.93.1主机上,通过定义不同的端口,就可以实现PNAT,将同一个IP不同的端口请求转发到后端不同的主机

 

iptables -t nat -A PREROUTING -d 10.0.0.1 -p tcp –-dport 80 -j DNAT –-to-destination 172.16.93.1:8080

此条规则在上条规则的基础上,发往后端的数据包的目标端口改为8080,在后端主机的web服务器上使用8080端口接收访问, 这样能更好的保护后端主机

 

iptables系列NAT部分就写到这里,有什么不明白的可以留言探讨。下一篇将会讲述使用iptables的7lay实现7层的访问控制,也就是在第一篇中所说的网关代理型防火墙,可以实现控制qq,bt等应用程序的网络访问


本文转自lustlost 51CTO博客,原文链接:http://blog.51cto.com/lustlost/943110,如需转载请自行联系原作者

相关文章
|
6月前
|
Linux
centos使用iptables实现nat端口转发
centos使用iptables实现nat端口转发
245 4
|
16天前
|
Linux 虚拟化
VMware workstation 中centos7虚拟机在nat模式下怎么配置网卡,指定我想要的IP并且可以联网
https://blog.csdn.net/2302_78534730/article/details/132825156?spm=1001.2014.3001.5502
131 0
|
2月前
|
弹性计算 Linux 网络安全
三步搭建VPC专有网络NAT网关,配置SNAT和DNAT规则(补充版)
申明:该文档参考于用户 “帅宝宝”的文档进行的优化,新增永久生效的方式
291 1
|
5月前
|
网络安全 Docker 容器
ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule
ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule
|
8月前
|
弹性计算 运维 网络架构
【运维知识进阶篇】用阿里云配置NAT网关配置
【运维知识进阶篇】用阿里云配置NAT网关配置
333 0
|
8月前
|
运维 Shell 网络安全
【运维知识进阶篇】iptables防火墙详解(iptables执行过程+表与链概述+iptables命令参数+配置filter表规则+NAT表实现共享上网、端口转发、IP映射)(三)
【运维知识进阶篇】iptables防火墙详解(iptables执行过程+表与链概述+iptables命令参数+配置filter表规则+NAT表实现共享上网、端口转发、IP映射)(三)
1373 0
|
8月前
|
运维 网络协议 网络安全
【运维知识进阶篇】iptables防火墙详解(iptables执行过程+表与链概述+iptables命令参数+配置filter表规则+NAT表实现共享上网、端口转发、IP映射)(二)
【运维知识进阶篇】iptables防火墙详解(iptables执行过程+表与链概述+iptables命令参数+配置filter表规则+NAT表实现共享上网、端口转发、IP映射)(二)
232 0
|
8月前
|
运维 网络协议 Linux
【运维知识进阶篇】iptables防火墙详解(iptables执行过程+表与链概述+iptables命令参数+配置filter表规则+NAT表实现共享上网、端口转发、IP映射)(一)
【运维知识进阶篇】iptables防火墙详解(iptables执行过程+表与链概述+iptables命令参数+配置filter表规则+NAT表实现共享上网、端口转发、IP映射)
781 0
|
8月前
|
运维 网络安全 Docker
docker报错ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule
docker报错ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule
296 0
|
9月前
|
域名解析 网络协议
NAT实验和配置
NAT实验和配置
67 0