FreeRADIUS 负载均衡和高可用

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
网络型负载均衡 NLB,每月750个小时 15LCU
简介:

 FreeRADIUS 负载均衡和高可用

测试环境

 
 
  1. 192.168.2.226     test.com   域控 
  2. 192.168.2.97   freeradius.test.com 
  3. 192.168.2.92   freeradius92.test.com 
  4. 192.168.2.93   freeradius93.test.com  

配置三台freeradius服务器hosts

 
 
  1. vim /etc/hosts 
  2. 192.168.2.226    test.com 
  3. 192.168.2.97     freeradius.test.com 
  4. 192.168.2.92     freeradius92.test.com 
  5. 192.168.2.93     freeradius93.test.com 
修改主机名
 
  
  1. [root@lamp ~]# vim /etc/sysconfig/network 
  2. NETWORKING=yes 
  3. NETWORKING_IPV6=no 
  4. HOSTNAME=freeradius93 

按照前面的文档搭建freeradius+AD+mschap环境: http://waydee.blog.51cto.com/4677242/1103942

Load banace测试

配置192.168.2.92,192.168.2.92的client,添加

 
  
  1. client 192.168.2.0/24 { 
  2.         secret = testing123 
  3.         shortname = freeradius93 
配置192.168.2.97的proxy.conf
 
  
  1. proxy server { 
  2.         default_fallback = no 
  3.  
  4. home_server freeradius92 { 
  5.         type = auth+acct 
  6.         ipaddr = 192.168.2.92 
  7.         port = 1812 
  8.         secret = testing123 
  9.         require_message_authenticator = yes 
  10.         response_window = 20 
  11.         zombie_period = 40 
  12.         #revive_interval = 120 
  13.         status_check = status-server 
  14.         check_interval = 30 
  15.         num_answers_to_alive = 3 
  16.         max_outstanding = 65536 
  17.         coa { 
  18.                 irt = 2 
  19.                 mrt = 16 
  20.                 mrc = 5 
  21.                 mrd = 30 
  22.         } 
  23.  
  24. home_server freeradius93 { 
  25.         type = auth+acct 
  26.         ipaddr = 192.168.2.93 
  27.         port = 1812 
  28.         secret = testing123 
  29.         require_message_authenticator = yes 
  30.         response_window = 20 
  31.         zombie_period = 40 
  32.         #revive_interval = 120 
  33.         status_check = status-server 
  34.         check_interval = 30 
  35.         num_answers_to_alive = 3 
  36.         max_outstanding = 65536 
  37.         coa { 
  38.                 irt = 2 
  39.                 mrt = 16 
  40.                 mrc = 5 
  41.                 mrd = 30 
  42.         } 
  43.  
  44. home_server_pool tn_auth_banance { 
  45.         type = load-balance 
  46.         home_server = freeradius92 
  47.         home_server = freeradius93 
  48.  
  49. realm test.com { 
  50.         auth_pool = tn_auth_banance 
  51.         acct_pool = tn_auth_banance 
  52.  
  53. realm LOCAL { 

测试:

 
  
  1. radtest -t mschap test@test.com 'test520' 192.168.2.97  0 testing123 

查看192.168.2.97日志,可以看到freeradius将请求转发到后面的192.168.2.92进行处理,再验证,就将请求转发到192.168.2.93进行处理

 
  
  1. Sending Access-Request of id 3 to 192.168.2.92 port 1812 
  2.         User-Name = "test" 
  3.         NAS-IP-Address = 192.168.2.96 
  4.         NAS-Port = 0 
  5.         Message-Authenticator = 0x00000000000000000000000000000000 
  6.         MS-CHAP-Challenge = 0xc8d1db4f67319092 
  7.         MS-CHAP-Response = 0x00010000000000000000000000000000000000000000000000007825afde2c4e435750d622dd3631cb5ad65bdfbfe5b64217 
  8.         Proxy-State = 0x3738 

关闭两台home server,freeradius将两台home server都标注为dead

 
  
  1. Mon Jun 25 11:51:35 2012 : Info: Ready to process requests. 
  2. Mon Jun 25 11:55:59 2012 : Proxy: Marking home server 192.168.2.92 port 1812 as zombie (it looks like it is dead). 
  3. Mon Jun 25 11:56:03 2012 : Error: No response to status check 14 for home server 192.168.2.92 port 1812 
  4. Mon Jun 25 11:56:03 2012 : Proxy: Marking home server 192.168.2.92 port 1812 as dead. 
  5. Mon Jun 25 11:56:33 2012 : Error: No response to status check 30 for home server 192.168.2.92 port 1812 
  6. Mon Jun 25 11:56:50 2012 : Proxy: Marking home server 192.168.2.93 port 1812 as zombie (it looks like it is dead). 
  7. Mon Jun 25 11:56:54 2012 : Error: No response to status check 33 for home server 192.168.2.93 port 1812 
  8. Mon Jun 25 11:57:07 2012 : Proxy: Marking home server 192.168.2.93 port 1812 as dead. 
  9. Mon Jun 25 11:57:09 2012 : Error: No response to status check 34 for home server 192.168.2.92 port 1812 
  10. Mon Jun 25 11:57:23 2012 : Error: No response to status check 36 for home server 192.168.2.93 port 1812 
  11. Mon Jun 25 11:57:43 2012 : Error: No response to status check 38 for home server 192.168.2.92 port 1812 
启动两台home server,freeradius每个一段时间会发送状态检测请求,在连续收到3次请求都正常后,将home server标注为alive(发送时间和接受次数看具体配置)
 
  
  1. Mon Jun 25 11:58:14 2012 : Proxy: Received response to status check 40 (1 in current sequence) 
  2. Mon Jun 25 11:58:25 2012 : Error: No response to status check 41 for home server 192.168.2.93 port 1812 
  3. Mon Jun 25 11:58:49 2012 : Proxy: Received response to status check 42 (2 in current sequence) 
  4. Mon Jun 25 11:58:50 2012 : Proxy: Received response to status check 43 (1 in current sequence) 
  5. Mon Jun 25 11:59:21 2012 : Proxy: Received response to status check 44 (2 in current sequence) 
  6. Mon Jun 25 11:59:21 2012 : Proxy: Received response to status check 45 (3 in current sequence) 
  7. Mon Jun 25 11:59:21 2012 : Proxy: Marking home server 192.168.2.92 port 1812 alive 
  8. Mon Jun 25 11:59:50 2012 : Proxy: Received response to status check 46 (3 in current sequence) 
  9. Mon Jun 25 11:59:50 2012 : Proxy: Marking home server 192.168.2.93 port 1812 alive 
Failover 测试  只需将proxy.conf中的type改成fail-over 
 
  
  1. type = fail-over 
fail-over默认请求都转发到home server的第一台,只有当第一台宕机了才会将请求都转发到第二台。 停止第一台home server 
 
  
  1. Mon Jun 25 12:03:24 2012 : Info: Ready to process requests. 
  2. Mon Jun 25 12:05:26 2012 : Proxy: Marking home server 192.168.2.92 port 1812 as zombie (it looks like it is dead). 
  3. Mon Jun 25 12:05:30 2012 : Error: No response to status check 9 for home server 192.168.2.92 port 1812 
  4. Mon Jun 25 12:05:30 2012 : Proxy: Marking home server 192.168.2.92 port 1812 as dead. 

发送验证测试请求

 
  
  1. [root@freeradius93 ~]# radtest -t mschap test@test.com 'test520' 192.168.2.97  0 testing123  
  2. Sending Access-Request of id 52 to 192.168.2.93 port 1812 
  3.         User-Name = "test@test.com" 
  4.         NAS-IP-Address = 192.168.2.96 
  5.         NAS-Port = 0 
  6.         Message-Authenticator = 0x00000000000000000000000000000000 
  7.         MS-CHAP-Challenge = 0x2fe670516688a9f9 
  8.         MS-CHAP-Response = 0x000100000000000000000000000000000000000000000000000081d6f3083e9a221d74e0506324e0579c20ca2976ffc5763b 
  9. rad_recv: Access-Accept packet from host 192.168.2.93 port 1812, id=52, length=84 
  10.         MS-CHAP-MPPE-Keys = 0x0000000000000000cb2fc9399e671506ba8e34b7b84f97de0000000000000000 
  11.         MS-MPPE-Encryption-Policy = 0x00000001 
  12.         MS-MPPE-Encryption-Types = 0x00000006 

关于proxy.conf配置文件的解析

 
  
  1. Proxy server 设置是freeradius服务器控制发给其他radius服务器请求行为。 
  2.  
  3. 各个home server之间Load-balancing 和failover都是通过home server pool来控制的。 
  4.  
  5. Realm定义了使用哪个home server pool进行负载均衡或者failover。 
  6.  
  7. Realm指定使用哪个home server pool,而home server pool指定使用哪些home server; 
  8.  
  9. 多个realm可以指定一个home server pool, 一个home server pool可以指定多个home server,一个home server也可以出现在多个home server pool中。 
  10.  
  11. Home server的定义:home server指的是接受代理请求的另外一台radius server。Home server可以接受验证请求或者是计费请求。 
  12. home_server localhost { 
  13.     type= auth  处理接入请求包 
  14.          acct   处理计费请求包 
  15.          auth+acct  处理接入请求在port端口,处理计费请求在port+1端口 
  16.          coa        处理coa和断开连接请求 
  17.  
  18.     ipaddr = 
  19.     ipv6addr= 
  20.     virtual_server= 
  21.      配置radius服务器的地址,可以填写ip地址或者主机名,建议填写ip地址,因为填写主机名会去查询dns服务器,如果dns缓慢或者失败则radius无法启动;另外radius只在启动的时候会检测一下,当该主机名对应的IP发生变更时一定要重启radius服务器才行。 
  22. 当所有的home server都是失败时,默认使用本地的radius服务器进行处理。 
  23.  
  24. Secret=  密钥是radius服务器和home server之间通信的加密密钥。 
  25.  
  26. response_window 如果home server在response_window时间内没有响应则radius服务器开始初始化zombie_period时间,一般response_window时间在2-60左右,看具体的网络情况 
  27.  
  28. zombie_period  如果在zombie_period时间内home server还是没有响应,则radius服务器认为该home server已经dead 了。该home server被标注为zombie,标注为zombie的radius服务器处理请求的权限最低,只有当没有其他任何live的home server时,才将请求转发给标注为zombie的home server。 
  29.  
  30. 当有某个请求发送到该home server,那么以后的请求都发送到该home server进行处理,除非该home server被标注为dead,这时如果有live的home server,则将请求转发到其他的home server,如果没有,则post-proxy-type fail该参数设置将会生效。 
  31.  
  32. 如果status_check设置不为none,则当zombie_period开始时,radius服务器就会发送状态检测包检测该home server的状态,该状态检测是直到该home server标注为alive时才会停止。如果home server不支持状态检测,则freeradius服务器就无法知道他是否处于从dead变为alive,freeradius服务器是每隔一段时间将该home server标注为alive,如果home server还没起来,则会等待zombie_period的时间,而这期间的认证请求都会失败。 
  33.  
  34. revive_interval  该参数只在status_check设置为none的情况下使用,建议使用status_check, 并且将revive_interval去掉。 
  35.  
  36. status_check的设置值有none, status-server, request三个,如果设置为none,则使用revive_interval生效,设置为status-server则会发送status-server包进行检测home server的状态;设置为request,则会发送auth或者acct请求包,具体和type设置对应。 
  37. 设置为request,可以设置默认的用户名密码,但这样不推荐,因为用户可以用该测试账户进行验证,如果设置了则将对该用户的请求设置为reject。 
  38.  
  39. check_interval设置status check的检查间隔时间。 
  40.  
  41. num_answers_to_alive设置home server被标记为alive前必须响应的status check的次数。该参数和check insterval共同决定饿了home server被标记为alve的时间。 
  42.  
  43. max_outstanding该参数设置当home server负载过高时不在向该home server发送请求;((#request sent) - (#requests received)) > max_outstanding 
  44.  
  45. home_server_pool: failover,先将请求发送到该pool中的第一个home server,如果该home server标记为dead,就发送到该pool中的第二台,如此反复。 
  46.  
  47. load-balance,将请求发送到pool中的最空闲的home server上,衡量空闲的指标是pool中处理请求最少那台home server。如果有多台home server都处于低负载,则在这几台home server上随机选择一台处理请求。Load balance不支持EAP的认证。 
  48.  
  49. client-balance ,选择home server的机制是通过hash客户端的IP地址获得,如果该home server宕机了,则会在pool中选择另外一台home server,有点类似failover; 这是对EAP认证的简单负载均衡,因为同一个客户端的请求都是发送到同一台home server上处理。 
  50.  
  51. client-port-balance,选择home server的机制是hash 客户端的IP和端口,如果该home server宕机了,则会在pool中选择另外一台home server,有点类似failover; 该方法比client-balance更有利于EAP的负载均衡,不过也意味着client的认证和计费可能处于不同的服务器。 
  52.  
  53. Home server: 该参数配置home server 名称,该名称不是hostname,是定义home server时的名称。 
  54.  
  55. Fallback如果所有的home server都是dead,则该fallback server启用,该服务器最好是virtual home server 
  56.  
  57. Realm 指向home server pool 
  58. auth_pool  指向home server pool并且pool中的home server的type都必须是auth 
  59. acct_pool   指向home server pool 并且pool中的home server的type必须是acct 
  60. 如果pool中的home server的type都是auth+acct,那么可以使用pool参数设置即可 









本文转自 waydee 51CTO博客,原文链接:http://blog.51cto.com/waydee/1104011,如需转载请自行联系原作者
相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
缓存 负载均衡 关系型数据库
Pgpool-II实现高可用+读写分离+负载均衡(一)---- 规划及安装
Pgpool-II是一款工作在PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件。提供了连接池、复制、负载均衡、限制过多连接、看门狗、查询缓存等功能。
|
负载均衡
Pgpool-II实现高可用+读写分离+负载均衡(七)---- recovery_1st_stage分析
recovery_1st_stage是Pgpool online recovery的第一阶段,位于PG_DATA目录下,主要功能就是使用pg_basebackup恢复(recovery)从节点。
|
4月前
|
负载均衡 NoSQL 应用服务中间件
搭建高可用及负载均衡的Redis
【7月更文挑战第10天】
131 1
|
4月前
|
负载均衡 安全 Cloud Native
云上负载均衡:构建高可用、高性能的网络应用架构
与云原生技术深度融合:随着云原生技术的普及和发展未来的云上负载均衡将更加紧密地与云原生技术相结合。例如与Kubernetes等容器编排平台集成实现自动化的服务发现和路由管理;与Serverless架构结合提供无缝的流量接入和请求处理能力。 安全性能提升:面对日益严峻的网络安全威胁云上负载均衡将更加注重安全性能的提升。通过引入加密传输、访问控制、DDoS防护等安全措施确保网络流量的安全性和隐私性;同时还将建立完善的安全监控和应急响应机制以应对各种安全事件和突发事件。 支持多协议和多场景:未来的云上负载均衡将支持更多种类的网络协议和应用场景以满足不同用户和业务的需求。例如支持HTTP/2、
234 0
|
4月前
|
负载均衡 算法 Java
实现高可用和可扩展的负载均衡系统的Java方法
实现高可用和可扩展的负载均衡系统的Java方法
|
5月前
|
负载均衡 应用服务中间件 开发工具
技术笔记:nginx和keeplive实现负载均衡高可用
技术笔记:nginx和keeplive实现负载均衡高可用
|
6月前
|
存储 缓存 运维
解密一致性哈希算法:实现高可用和负载均衡的秘诀
解密一致性哈希算法:实现高可用和负载均衡的秘诀
755 0
|
6月前
|
Kubernetes 负载均衡 监控
Kubernetes高可用集群二进制部署(一)主机准备和负载均衡器安装
Kubernetes高可用集群二进制部署(一)主机准备和负载均衡器安装
|
负载均衡 算法 网络协议
Keepalived+LVS搭建高可用负载均衡
Keepalived+LVS搭建高可用负载均衡
378 1
下一篇
无影云桌面