SNAT,是源地址转换,其作用是将ip数据包的源地址转换成另外一个地址。

中文名

源地址转换

外文名

SNAT

作用

将ip数据包的源地址

区分

简单的由连接发起者是谁来区分

名词解释

SNAT,可能有人觉得奇怪,好好的为什么要进行ip地址转换啊,为了弄懂这个问题,我们要看一下局域网用户上公网的原理,假设内网主机A(192.168.2.8)要和外网主机B(61.132.62.131)通信,A向B发出IP数据包,如果没有SNAT对A主机进行源地址转换,A与B主机的通讯会不正常中断,因为当路由器将内网的数据包发到公网IP后,公网IP会给你的私网IP回数据包,这时,公网IP根本就无法知道你的私网IP应该如何走了。所以问它上一级路由器,当然这是肯定的,因为从公网上根本就无法看到私网IP,因此你无法给他通信。为了实现数据包的正确发送及返回,网关必须将A的址转换为一个合法的公网地址,同时为了以后B主机能将数据包发送给A,这个合法的公网地址必须是网关的外网地址,如果是其它公网地址的话,B会把数据包发送到其它网关,而不是A主机所在的网关,A将收不到B发过来的数据包,所以内网主机要上公网就必须要有合法的公网地址,而得到这个地址的方法就是让网关进行SNAT(源地址转换),将内网地址转换成公网址(一般是网关的外部地址),所以大家经常会看到为了让内网用户上公网,我们必须在routeros的firewall中设置snat,俗称IP地址欺骗或伪装(masquerade)。

区分

如何区分SNAT和DNAT

从定义来讲它们一个是源地址转换,一个是目标地址转换。都是地址转换的功能,将私有地址转换为公网地址。

要区分这两个功能可以简单的由连接发起者是谁来区分:

内部地址要访问公网上的服务时(如web访问),内部地址会主动发起连接,由路由器或者防火墙上的网关对内部地址做个地址转换,将内部地址的私有IP转换为公网的公有IP,网关的这个地址转换称为SNAT,主要用于内部共享IP访问外部。

当内部需要提供对外服务时(如对外发布web网站),外部地址发起主动连接,由路由器或者防火墙上的网关接收这个连接,然后将连接转换到内部,此过程是由带有公网IP的网关替代内部服务来接收外部的连接,然后在内部做地址转换,此转换称为DNAT,主要用于内部服务对外发布。

在配置防火墙或者路由acl策略时要注意这两个NAT一定不能混淆。

配置

基础网络配置:AX3000(config)#vlan 10

AX3000(config-vlan:10)#untagged ethernet 1 to 2

AX3000(config-vlan:10)#router-interface ve 10

AX3000(config-vlan:10)#exit

AX3000(config)#int ve 10

AX3000(config-if:ve10)#ip add 192.168.222.101 255.255.255.0

AX3000(config-if:ve10)#exit

添加服务器:

AX3000(config)#slb server S1 192.168.222.11

AX3000(config-real server)#port 80 tcp

AX3000(config-real server-node port)#slb server S2 192.168.222.12

AX3000(config-real server)#port 80 tcp

AX3000(config-real server-node port)#exit

AX3000(config-real server)#exit

添加服务器组:

AX3000(config)#slb service-group S_80_HTTP_G tcp

AX3000(config-slb svc group)# member S1:80

AX3000(config-slb svc group)# member S2:80

AX3000(config-slb svc group)#end

创建SNAT地址池:

AX3000(config)#ip nat pool SNAT 192.168.222.102 192.168.222.102 netmask /24

添加虚拟服务器:

AX3000(config)# slb virtual-server ⅥP 192.168.222.100

AX3000(config-slb vserver)#port 80 http

AX3000(config-slb vserver-vport)#service-group S_80_HTTP_G

AX3000(config-slb vserver-vport)#source-nat pool

SNAT

AX3000(config-slb vserver-vport)#end

观察会话:

AX3000#show session | in 192.168.222.100

Tcp 192.168.222.244:59414 192.168.222.100:80 192.168.222.11:80

192.168.222.102

:2070 600 2 NS

服务器看到的源地址是我们创建的SNAT池地址,说明会话从A10返回了,工作正常。