有人问到SNAT地址集是什么,自动SNAT是什么。一般都会回答说:在单臂部署AD时候解决服务器回包来回路径一致的问题。那么,具体是什么样,我来说说自己的一点理解。
举个例子,看看简单的网络拓扑:
这个过程就是:
第一步: 外用用户,IP地址是X.X.X.X来访问服务器,经过了DNS解析之后,解析到的地址是服务器所在区域出口网关设备的外网口地址124.205.208.112。 注意:外网口可能有多个地址,112这个地址用来做地址映射,映射到AD的WAN口IP192.168.2.2. 这个时候,源地址是X.X.X.X,目的地址是124.205.208.112
第二步: 数据到了出口网关设备之后经过地址映射,源地址还是X.X.X.X,目的地址变成了192.168.2.2,
第三步: AD做了服务器负载,启用虚拟服务器的功能从节点池里面选择一个服务器来应答请求,假设选择了S1,IP地址是192.168.1.2 这个时候,AD转发外网用户的请求,源地址是X.X.X.X,目的地址是192.168.1.2
第四步: 服务器S1看到外网用户的请求,给外网用户回包。源是192.168.1.2,目的地址是X.X.X.X。 由于S1的网关是192.168.1.1,数据包到了192.168.1.1之后,直接从172.16.1.2转发出去回给外网用户。 整个过程我们会看到,对于外网用户来说,我建立请求的时候是将请求发给了AD(地址映射),但是S1给外网用户回了数据包。对外网用户来说这不是一个完整的连接,来回路径不一致,因此连接无法建立。 所以需要在AD上做一条SNAT,所有的外网发往服务器的请求,源地址都转换成AD的WAN口地址,这样的话服务器就会回包给AD。AD再给外网用户会包,形成一个完整的TCP连接。
这同样可以用来解释,当内网用户要通过外网地址来访问内网服务器的时候,为什么要勾选“发布服务器”并且做“LAN-LAN”的端口映射。 1.勾选发布服务器 勾选了之后相当于后台自动做了一条DNAT,当内网用户A来通过外网IP B访问内网服务器C的时候,源是A,目的是B,到了AD上,源还是A,目的映射成了C。到了C的时候,源是A,目的是C。这是去的数据包 2.LAN-LAN端口映射 在C上面看到的源是A,目的是自己C.那么C就会给A回包。回包的源是C.目的是A. 很明显,对于A来说,A访问的目的地址是B,A建立连接是要去跟B建立连接。这个时候C直接给A回包了,来回路径不一致,这个连接根本无法建立起来。
所以需要做一条LAN-LAN的端口映射。简单说就是SNAT,将内网访问B的数据包的源转换为AD的LAN口地址D. 这样,访问的时候,过程就是 源A,目的是B. 到了AD入接口上,匹配DNAT,源是A,目的由B转为C 到了AD出接口上,匹配SNAT,源由A转为D,目的是C C给D回包,到了AD上。匹配DNAT和SNAT,变成B给A回包。 来回路径一致,建立连接。 |