本帖最后由 周远山 于 2022-10-12 21:09 编辑
一、三角传输使用场景:
AD单臂部署做应用负载,类似于nginx反向代理,实现对服务器访问的负载。但是衍生一个问题,访问服务器流量的源地址都被转换成AD的lan口地址,服务器的日志无法看到真实的源ip。
二、深信服解决方案: 通过三角传输解决这个问题,客户端访问服务器的流量经过AD转发后访问真实服务器,并且不开源地址转换。服务器回包的时候直接转发给客户端,完成整个数据传输。(这里我最大的疑问就是数据包来回不一致,为什么可以转发成功。) 三、整个数据交互过程说明(AD配置不再赘述): 客户端发起对AD172.10.10.100访问,AD根据策略将数据包转发给服务器172.10.10.20-21,数据包的源目ip都没有发生变化。数据包到达服务器,发现服务器发现数据包访问的目的地址是172.10.10.100,将数据包转发给look back口(lookback口关闭了ARP功能,所以不会有和AD接口IP冲突的问题),服务器直接给客户端回包。
四、关键原理上的说明: 1、为什么配置虚拟服务的时候源目地址转换都要关闭? 解释:源地址关闭是为了让服务器看到真实源ip 目的地址关闭是为了让目的地址不改变,也就是数据包到达服务器的时候目的地址还是lookback地址。 2、为什么ad网卡第一个地址要和服务器地址同网段。 解释:如果走三层转发,由于lookback不回arp包,就无法成功转发。 走二层没有arp的概念,可以正常转发。 3、配置lookback口arp忽略(以linux系统为例) 解释:net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2 感觉这个配置是实现三角传输的关键。解决了服务器的lookback口和ad接口IP配置一样而不冲突的问题。 4、来回路径不一致是怎么解决的。 解释:上面的原理理解清除,这个问题应该就迎刃而解了。原先服务器上没有lookback口,所以给客户端回包的时候 是真实服务器IP,来回包的目源IP对应不上,通信失败。加了look back口,回包的源IP就是AD的接口IP, 就是开始访问的IP。
五、注意: 服务器lookback地址的掩码要是32位。 route ip到lookback的路由,下一跳lo(加不加都行) |