负载均衡集群中如何隐藏VIP ****************
来源:互联网 发布:迅雷赚钱宝秒杀软件 编辑:程序博客网 时间:2024/05/24 00:11
lvs+keepalived上线跑了几个月,上百万IP的访问并发都没任何效率低,但今天还是倒下了,查了很久确定是机房中了ARP,LVS本身就靠的就是ARP,倒被ARP给欺骗了。机房检查了半天怎么都说局域网没ARP,估计他们只会看监控不懂原理,我就说下我个人理解ARP攻击原理。
arp欺骗我就打个比方来说,这样更容易理解,比如张三住学校宿舍A栋6楼,宿舍阿姨就住宿舍一楼,负责收邮件然后把邮件发给指定的人,一天来了一封邮件,是给张三的,阿姨就在楼下大叫了一声:张三快下来,来邮件了,张三就赶紧下去收自己的邮件,然而过了些时间又有封邮件是给张三的,阿姨又大叫了声:张三快下来,来邮件了,张三跑下去收的时候,发现邮件被收走了,他就会问阿姨邮件呢,阿姨肯定是说刚有个张三领走了,这时肯定有个假张三,在阿姨叫的时候,他先回答说:我就是张三,真张三就为了防止别人乱领他的信,他就告诉阿姨以后收到张三的邮件就送到A栋611房间(这也就是解决ARP欺骗的方法),阿姨也就相当个路由器,只要再路由器把IP地址和MAC地址绑定下就解决了ARP欺骗攻击。
说下后话,为什么机房那些鸟人老不承认机房中了ARP,因为他们只知道看监控。机房的监控估计是适应于监控广播式的ARP,就比如假张三大叫了声:我是张三,整栋楼都听见了,所以容易被发现,至于为什么监控不到,就是可能因为假张三就一直站阿姨门口看着,或者手机这样的通讯工具,回答的时候别人听不见,只阿姨能听到。哈哈,这也是我的幻想,别当真!
最后说下LVS负载均衡器遇上机房ARP的解决办法,也就是让机房把虚拟IP和LVS负载均衡器的MAC地址绑定下,这样立马见效,和平时的ARP处理方法一样,为什么我要写这篇日志,因为LVS本身就靠的就是ARP欺骗,然后虚拟IP绑定哪台服务器的MAC地址不能确定,最后还是决定虚拟IP绑定负载均衡器的MAC地址。回过头去看了下LVS工作原理,发现这是正确的!但还发现个问题,比如你的主LVS死机了,这时从就不能自动接替,因为你路由做了MAC地址绑定,这时要通知机房取消!或者改成从的MAC地址绑定。
LVS DR模式下的ARP原理
在LVS的DR模式下,有一个必须要处理的问题就是real server上的ARP响应问题。其实,这个问题不只是LVS,其他的L4 Switch方案比如Foundry的ServerIron,也需要设置real server上的ARP响应。因为这是这种方案的结构决定的。
根据LVS官方说明,在LVS 的DR模式下,前端的director接收到用户请求以后,director根据后端real server的负载情况,动态地选择一台real server,不修改也不封装IP报文,而是将数据帧的MAC地址改为选出的real server的MAC地址,再将修改后的数据帧在与服务器组的局域网上发送。因为数据帧的MAC地址是选出的real server,所以被选出来的那台real server肯定可以收到这个数据帧,从中可以获得该IP报文。当服务器发现报文的目标地址VIP是在本地的网络设备上,服务器处理这个报文,然后根据路由表将响应报文直接返回给客户,客户认为得到正常的服务,而不会知道是哪一台服务器处理的。
VS/DR负载调度器也只处于从客户到服务器的半连接中,按照半连接的TCP有限状态机进行状态迁移。
从上边的LVS DR工作原理可以看到一个客户端计算机发送一个ARP广播到LVS-DR集群,因为Director和集群节点(真实服务器1)都是连接到相同的网络上的,它们都会接收到ARP广播“是谁的VIP1?”,这个时候我们希望的是只有前端的director来对用户进行响应,其他real server不应该响应用户直接的ARP包。(参考下边两幅引用51cto网站的图)
因此必须对real server进行一定的处理,使其不响应VIP接口上的ARP请求。在2.6系列的内核中,采用的方式是设置arp_announce和arp_ignore这两个内核参数。
arp_ignore=1,系统只回答目的IP为是本地IP的包。也就是对广播包不做响应。
arp_announce=2,系统忽略IP包的源地址(source address),而根据目标主机(target host),选择本地地址。
#####################################################################################33333
在lvs环境中,需要设定以下的参数
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
先来看看关于arp_ignore和arp_announce的有关介绍
arp_ignore - INTEGERDefine different modes for sending replies in response toreceived ARP requests that resolve local target IP addresses:0 - (default): reply for any local target IP address, configuredon any interface1 - reply only if the target IP address is local addressconfigured on the incoming interface2 - reply only if the target IP address is local addressconfigured on the incoming interface and both with thesender's IP address are part from same subnet on this interface3 - do not reply for local addresses configured with scope host,only resolutions for global and link addresses are replied4-7 - reserved8 - do not reply for all local addressesThe max value from conf/{all,interface}/arp_ignore is usedwhen ARP request is received on the {interface}
arp_ignore:定义对目标地址为本地IP的ARP询问不同的应答模式0
0 - (默认值): 回应任何网络接口上对任何本地IP地址的arp查询请求
1 - 只回答目标IP地址是来访网络接口本地地址的ARP查询请求
2 -只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内
3 - 不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应
4-7 - 保留未使用
8 -不回应所有(本地地址)的arp查询
************************************************************************************************************
0 (默认) 在任意网络接口上的任何本地地址1 尽量避免不在该网络接口子网段的本地地址. 当发起ARP请求的源IP地址是被设置应该经由路由达到此网络接口的时候很有用.此时会检查来访IP是否为所有接口上的子网段内ip之一.如果改来访IP不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理.2 对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址.首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址. 如果没有合适的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送all/ 和{interface}/ 下两者同时比较,取较大一个值生效.提高约束级别有益于从指定的目标接受应答,而降低级别可以给予更多的arp查询者以反馈信息
0 (默认值):回应任何网络接口上对任何本地IP地址的arp查询请求(比如eth0=192.168.0.1/24,eth1=10.1.1.1/24,那么即使eth0收到来自10.1.1.2这样地址发起的对10.1.1.1 的arp查询也会回应--而原本这个请求该是出现在eth1上,也该有eth1回应的).1 只回答目标IP地址是来访网络接口本地地址的ARP查询请求(比如eth0=192.168.0.1/24,eth1=10.1.1.1/24,那么即使eth0收到来自10.1.1.2这样地址发起的对192.168.0.1的查询会回答,而对10.1.1.1 的arp查询不会回应).2 只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内(比如eth0=192.168.0.1/24,eth1=10.1.1.1/24,eth1收到来自10.1.1.2这样地址发起的对192.168.0.1的查询不会回答,而对192.168.0.2发起的对192.168.0.1的arp查询会回应).3 不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应(do not reply for local addresses configured with scope host,only resolutions for global and link addresses are replied ).4-7 保留未使用.8 不回应所有(本地地址)的arp查询.
- 负载均衡集群中如何隐藏VIP ****************
- rac 中scan vip 是如何做到负载均衡的
- 负载均衡集群软件
- 集群的负载均衡
- 集群+负载均衡
- 服务器 集群 负载均衡
- 数据库 集群 负载均衡
- 负载均衡集群
- tomcat集群负载均衡
- 集群与负载均衡
- tomcat 集群负载均衡
- memcached集群负载均衡
- memcached集群负载均衡
- memcached集群负载均衡
- Windows 负载均衡集群
- memcached集群负载均衡
- memcached集群负载均衡
- memcached集群负载均衡
- 写写博客吧
- 王垠:如何掌握程序语言
- 二分法在一个vector容器里面找某一个值,并求出该元素的下标
- Android中的时间自动更新
- Openlayers WFS跨域请求
- 负载均衡集群中如何隐藏VIP ****************
- 使用self. 导致的内存泄露
- java 工具
- MySQL的缺点
- 11.17 原来今天没那么可怕
- if判断value == variable
- 团队建设
- 关于windows安装python过程中出现error 2503 2502错误的解决方法
- PhoneGap集成