本帖最后由 adds 于 2017-7-27 09:17 编辑
应用场景:客户想要在服务器上看到客户端的真实IP,且服务器网关不能指向AD负载均衡设备。
三角指的是什么:客户端、AD负载均衡、服务器。
三角传输:正常情况下适用于特定应用类型的服务器均衡项目中。为了明晰基本概念,我们先以正常环境下的数据流向示范。
常见的服务器部署方式中,最多的为旁路部署,因为该方式不需要用户改变网络拓扑结构,而旁路部署的特点就是,负载均衡设备的接口ip地址与服务器ip地址处于同一个网段(而根据vip地址是否也是属于同一个网段,分为了单臂旁路和双臂旁路)。为了简单起见,我们假设为单臂旁路方式。
在单臂旁路模式中,有2个关键设置:
1、服务器的默认路由是否指向负载均衡设备的接口地址 2、负载均衡在分发请求的时候是否改变请求的源IP地址。这两个设置是互斥的,设置了一个就不需要设置另一个。
假设源IP和端口为172.16.0.1:8000的客户端,,向目标ip为10.0.0.1:80的负载均衡设备上配置的虚拟IP发起请求;负载均衡上与这个虚ip关联的服务器真实ip为10.0.0.2,负载均衡设备自身IP为10.0.0.100;服务器的默认网关指向3层交换机的接口地址10.0.0.254。这个时候上面提到的2个关键都未设置,既负载均衡上未做snat,服务器网关也未指向负载均衡设备的接口ip,见图一:
从上图中可以看出,当172.16.0.1的请求通过三层交换机到达负载均衡的虚IP10.0.0.1:80的时候,负载均衡设备将该请求的目标IP从10.0.0.1:80转换成10.0.0.2:80,并发给10.0.0.2,而该请求源IP由于未启用snat,所以仍旧为172.16.0.1:8000。可以看到,服务器10.0.0.2收到请求之后,因为请求的源ip为172.16.0.1,所以服务器应答的时候,会直接将应答通过自己设置的默认网关10.0.0.254直接发回给客户端(请求源地址为10.0.0.2)。
这个时候会发生什么情况?客户端是向10.0.0.1:80发起的请求,而应答确是来自10.0.0.2:80,tcp连接都无法建立。所以通信自然失败。。
如果上述2个关键点2选其一,既负载均衡设备上启用snat或者服务器的网关指向负载均衡设备接口10.0.0.100(以启用snat,既用10.0.0.100的接口ip做源地址转换为例),见图二:
由上图所示,服务器接到的请求,源IP为10.0.0.100,因此服务器的应答也会丢回给负载均衡设备,而负载均衡设备将应答修改成为源ip为10.0.0.1,目标ip为172.16.0.1的应答,然后返回给客户端,则这个时候连接建立。
一句话,正常情况下,从A10分发出去的请求是经过修改的,服务器如果直接将应答返回给客户端,连接时无法建立的,只有将应答返回给A10,A10进行修改以后返回给客户端才能建立连接。
三角传输和正常场景是有区别的。见图三:
该图和第一张图非常相似,唯一的区别在于,服务器在发送响应客户端的请求的应答的时候,源IP采用的是10.0.0.1,而非第一章图中的自己的接口ip10.0.0.2。这个时候,客户端收到的应答,源ip就成了10.0.0.1:80,目标IP为172.16.0.1:8000,所以连接成功建立。这种成功建立的方式,像一个三角形,所以称为三角传输。
从网络技术的角度来总结,三角传输既是负载均衡设备在分发请求到真实服务器上的时候,不改变请求的目标IP和源IP,直接通过2层通过mac地址将请求转发到服务器上。而服务器上启用loopback地址,该地址和负载均衡设备上虚拟IP一样。在服务器上启用该loopback地址的目的,在于让服务器能够接受从负载均衡设备转发来的目标ip为虚拟IP的请求包(服务器只接受目标IP为自己IP的包,所以必须有这个一个配置让服务器认为这个数据包是发给自己的。为什么启用loopback地址而不直接将该ip配置在服务器接口上呢?因为如果直接将ip配置在服务器接口上,则服务器就会响应该网络中对该ip地址的arp查询,而该ip地址已经配置在负载均衡设备上了,因此如果服务器和负载均衡设备同时配置该IP,典型的ip地址冲突。。。而loopback地址则不然,这个地址即使配置也不会响应外接的arp查询,因此不会冲突)。
PS:看到三角传输,发现论坛里有一个压缩包,因此解压看了下,发现很是简单明了。于是共享给大家 。
注意点: 1、如果启用了三角传输又对所有源IP做了SNAT(代理上网),则不能实现三角传输功能,服务器回包会经过AD。
2、旁路模式部署需要WAN设置多个IP,第一个IP不能是虚拟服务发布的IP,否则节点监视器无法监视节点。因为三角传输发布的虚拟服务的IP是服务器的上Loopback IP,AD设备如果以这个Loopback IP发包给服务器,服务器无法回包给AD。
3、三角传输只支持四层模式,不支持七层模式。
4、服务器和AD设备必须在同一网段。
5、需要禁用网络攻击防护和开启WAN口入站路由转发功能。
进阶:
其实在很多链路均衡项目中,客户原有网络出口设备很多都是防火墙,而防火墙上往往配置了很多应用,包括vpn或者其他比较复杂的应用。这些应用无法迁移到链路均衡设备上,所以只能将原本出口的防火墙接在链路均衡设备之后,配置私有地址,公网映射建立在链路均衡设备上,然后在链路均衡设备上配置映射将公网来的对复杂应用的的访问转发到后端防火墙现在的私有地址上面去。一般情况下这样没问题,但是如果碰到某些特殊应用,这些应用不允许经过地址转换(可能有校验方面的需求),所以原本公网ip直接配置在防火墙上没有问题,但是一旦防火墙地址改为私网地址,通过新出口设备做映射时候就会发生问题。
这个时候,通过活用三角传输可以帮我们解决问题。前面我们提到了服务器负载均衡单臂旁路部署时候的三角传输,只需要服务器上启用loopback地址并配置成跟虚拟IP一样,同时负载均衡设备在转发请求的时候不改变请求的源和目标IP。而在链路均衡的时候,可以认为是双臂旁路的三角传输。
见图四:
、 如上图所示,客户端从公网来的请求到了链路均衡设备公网接口上,访问220.220.220.2:80,源ip为110.110.110.1:8000,然后链路均衡设备将这个请求转发到内网接口10.0.0.1对应的网段,并通过mac地址发往10.0.0.2对应的mac地址,请求包的源ip端口和目标ip端口均不作任何改变。内部防火墙上在接口上配置Secondaryip,该IP和映射的公网ip一致,既220.220.220.2,这样便于接受链路均衡设备通过mac地址发来的包(这里就是和单臂旁路的三角传输的区别了。单臂旁路结构的三角传输必须启用loopback地址来配置映射的公网ip,而双臂旁路三角传输,则可以直接将ip配置在接口上,因为不会发生ip地址冲突)。当设备收到请求以后,直接用公网ip为源ip,客户端ip为目标ip进行应答,因为设备默认网关指向链路均衡设备的内网口(这里也是和单臂旁路三角传输的区别,直接指回到链路均衡设备),10.0.0.1,所以应答会回到链路均衡设备,然后链路均衡设备将该应答直接转发给出口链路对端的网关。这样,一个活用三角传输就成功了,当然,从结构上来看,已经不算是三角了。
**最后的我没有看懂。有不懂的自行补脑。
针对楼下小伙伴提出的建议(建议使用某公司AD替换A10;将数据流程写出来),特此在另一篇帖子中作了描述,也加了一些其他东西。可以参考:http://bbs.sangfor.com.cn/forum.php?mod=viewthread&tid=34278 |