大多数的引导和劫持都是到cache设备上的,作cache有诸多好处,好比对于运营商而言能够节省网间流量(省钱)、提升用户体验(静态内容、视频等加速),对于网站主经过CDN作了cache后能够提升用户体验(加速),固然也有非法获利者经过cache设备洗流量加广告等也挣到了钱,那么这个过程他们是怎么把一个请求引导到他们的服务器上的呢??原理是什么???最近恰好遇到咱们的业务被劫持的问题,趁此机会作一个总结,抛砖引玉供你们一块儿探讨。我将其分为三个大类分别以下:html
1、DNS正常引导后端
一、cname引导缓存
此引导方式是大多数CDN厂商的作法,面向各网站主,用cname的方式为其提供接入CDN系统的入口,在操做上,通常CDN厂家会提供一个域名供网站主作cname使用,在作完cname的那一刻,你链接的服务器就由CDN厂家来控制了,也就成功将用户请求智能的引导到他们的设备上去了。另外,要正常提供服务,主要得关注两个问题,一个是cname解析,另外一个是网站回源问题。关于cname的介绍可参考以前写的:说说为何要有CNAME?服务器
二、forword引导架构
此引导方式是大多数运营商的作法,他们有本身的DNS,有本身的宽带用户、专线用户、无线用户,为了节省网间流量成本的同时提升用户体验,他们会自建或找cache厂家合做进行cache集群建设,拿cache厂家为例,在操做上,运营商或cache厂家会先分析出一批能够作缓存的网间域名,而后将这些域名forword到cache厂家自建的DNS(二次开发后适合cache配置的)上,cache厂家的dns根据不一样的解析规则(好比轮序、hash等)解析到后端的cache集群,进而成功的将用户请求引导到了cache厂家的设备上,每台缓存代理服务器会安装bind并配置回源DNS(或者直接根域回源)。固然cache厂家也作了很好的高可用策略,好比说cache集群挂了访问直接回源、两台DNS作高可用等等。运维
有同窗问运营商为何要用forword递归的方式,而不是迭代指定dns的方式.先说一下迭代和递归的区别,举个例子,你向A询问什么是互联网,A不知道,他告诉我让我问B或C而后就无论了,这叫迭代,但一样若是A不知道,但他说虽然我不知道但我向B或C问清楚后再告诉你,这就是递归,很清楚了吧。递归有个好处,每通过的环节可以作到信息同步,因此用递归处理。下面是一个精简的业务架构原理图:socket
2、劫持污染tcp
劫持和污染是运营商进行请求引导的另一种重要方式,在操做上会在入口链路上使用分光设备将流量复制一份,复制后的流量使用流量分析设备进行分析处理,因为更靠近网内网民,设备会将要劫持的请求抢先将伪造的结果回传给用户,而这个结果就是欺骗网民去访问指定的服务器,从而达到将请求劫持到cache服务集群上的效果,从劫持的请求看分为dns劫持和http劫持。有些同窗叫这种dns引导方式为dns污染,由于感受只是假装回复没有劫持,反正无论怎么叫,都是这么一个理,画了一张业务流程架构图以下:ide
一、DNS劫持(污染)网站
DNS劫持(污染)是指流量分析劫持设备在分析到须要的DNS查询请求后(通常为udp53号端口,要抓取的dns的ip地址设置白名单),抢先假装一个DNS回复请求给用户,为何会抢先呢,由于用户和流量分析劫持设备是网内对网内,不论是时延也好仍是其它链路质量也好,都要比网间要快不少不少,而udp的特色是没有验证机制,用户会接受第一个查询结果,其他的将会被抛弃。
二、http请求劫持
http请求劫持是指流量分析劫持设备在分析道须要的http请求后,假装客户端给源站发一个reset标记断开链接,而后假装源站给用户回一个302重定向到cache设备上,好比说你访问的是www.aaa.com/123.html,cache设备是1.1.1.1,被劫持后会发一个http://1.1.1.1/www.aaa.com/123.html的302重定向给用户,用户天然就被引导到1.1.1.1上面了。
3、透明代理引导
透明代理是将cache设备做为中间网关串联到链路中去的,做为网关其实说白了cache设备要开启路由转发,承担了路由器的做用,不少大的企事业单位为何节约流量,会在其出口上安装一台这样的设备,好比说原来须要买两个G带宽,在作了透明代理后只须要买1.5个G了,的对于用户而言没有任何须要操做的,因此叫透明代理。
透明代理也有两种方式,都是基于iptable,一种是基于端口转发,将目的地址是80的请求,转发到本地启用的好比说8080的cache应用上,由cache应用处理后为客户提供服务,这种方式的弊端是有可能影响一些服务,由于80端口过来不必定全是http请求。另一种是采用tcp旁路监听代理的方式tproxy,此种方式是很是好的,配置iptable的mangle表的PREROUTING链,对tcp的socket的链接打上mark标记,而后新建路由表让打过标记的tcp经过,监听目的端口是80的tcp经过tproxy代理至8080的cache应用上,由cache应用处理后为客户提供服务。
操做上,服务器要开启路由转发、开启iptable,要安装缓存代理软件,而后进行相应的配置,固然在高可用性上要作到对路由的心跳,一旦代理服务器故障,直接跳过代理服务器到下一跳,保证业务的持续性。
自建我的原创站运维网咖社(www.net-add.com),新的博文会在网咖社更新,欢迎浏览。