Hello, I'm working to setup a proxy load balance to 3 production RADIUS servers from a CentOS server running freeradius 2.1.12. I believe I have the proxy.conf file setup correctly but there seems to be no load balancing. All the requests are going to one of the three servers. I have attached the proxy.conf file and also the radius debug. I don't see any errors, it just appears the client-balance is not working. Clients are using MAB and are matching the NULL realm. I have looked through all the past posts and can't seem to find an answer. Am I missing something in my configuration? Thanks. # -*- text -*- ## ## proxy.conf -- proxy radius and realm configuration directives ## ## $Id$ ####################################################################### # # Proxy server configuration # proxy server { default_fallback = no } home_server server0007 { type = auth+acct ipaddr = xxx.xxx.xxx.150 port = 1812 secret = secret } home_server server0011 { type = auth+acct ipaddr = xxx.xxx.xxx.152 port = 1812 secret = secret } home_server server0012 { type = auth+acct ipaddr = xxx.xxx.xxx.153 port = 1812 secret = secret } home_server localhost { type = auth ipaddr = 127.0.0.1 port = 1812 secret = secret require_message_authenticator = yes response_window = 20 zombie_period = 40 revive_interval = 120 status_check = status-server check_interval = 30 num_answers_to_alive = 3 max_outstanding = 65536 coa { irt = 2 mrt = 16 mrc = 5 mrd = 30 } } home_server_pool auth_loadbalance { type = client-balance home_server = server0007 home_server = server0011 home_server = server0012 } realm example.com { pool = auth_loadbalance } realm LOCAL { } realm NULL { type = radius pool = auth_loadbalance secret = secret } realm DEFAULT { type = radius pool = auth_loadbalance secret = secret } ______________________________________________________________ FreeRADIUS Version 2.1.12, for host x86_64-redhat-linux-gnu, built on Oct 3 2012 at 01:22:51 Copyright (C) 1999-2009 The FreeRADIUS server project and contributors. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. You may redistribute copies of FreeRADIUS under the terms of the GNU General Public License v2. Starting - reading configuration files ... including configuration file /etc/raddb/radiusd.conf including configuration file /etc/raddb/proxy.conf including configuration file /etc/raddb/clients.conf including files in directory /etc/raddb/modules/ including configuration file /etc/raddb/modules/replicate including configuration file /etc/raddb/modules/logintime including configuration file /etc/raddb/modules/otp including configuration file /etc/raddb/modules/files including configuration file /etc/raddb/modules/detail including configuration file /etc/raddb/modules/chap including configuration file /etc/raddb/modules/cui including configuration file /etc/raddb/modules/digest including configuration file /etc/raddb/modules/realm including configuration file /etc/raddb/modules/exec including configuration file /etc/raddb/modules/attr_rewrite including configuration file /etc/raddb/modules/detail.log including configuration file /etc/raddb/modules/checkval including configuration file /etc/raddb/modules/pam including configuration file /etc/raddb/modules/linelog including configuration file /etc/raddb/modules/expiration including configuration file /etc/raddb/modules/sql_log including configuration file /etc/raddb/modules/pap including configuration file /etc/raddb/modules/rediswho including configuration file /etc/raddb/modules/preprocess including configuration file /etc/raddb/modules/inner-eap including configuration file /etc/raddb/modules/sradutmp including configuration file /etc/raddb/modules/wimax including configuration file /etc/raddb/modules/expr including configuration file /etc/raddb/modules/unix including configuration file /etc/raddb/modules/attr_filter including configuration file /etc/raddb/modules/policy including configuration file /etc/raddb/modules/smsotp including configuration file /etc/raddb/modules/passwd including configuration file /etc/raddb/modules/acct_unique including configuration file /etc/raddb/modules/ntlm_auth including configuration file /etc/raddb/modules/mac2ip including configuration file /etc/raddb/modules/smbpasswd including configuration file /etc/raddb/modules/opendirectory including configuration file /etc/raddb/modules/soh including configuration file /etc/raddb/modules/dynamic_clients including configuration file /etc/raddb/modules/mschap including configuration file /etc/raddb/modules/etc_group including configuration file /etc/raddb/modules/perl including configuration file /etc/raddb/modules/sqlcounter_expire_on_login including configuration file /etc/raddb/modules/always including configuration file /etc/raddb/modules/counter including configuration file /etc/raddb/modules/mac2vlan including configuration file /etc/raddb/modules/detail.example.com including configuration file /etc/raddb/modules/SAConnector including configuration file /etc/raddb/modules/redis including configuration file /etc/raddb/modules/echo including configuration file /etc/raddb/modules/radutmp including configuration file /etc/raddb/modules/ippool including configuration file /etc/raddb/eap.conf including configuration file /etc/raddb/policy.conf including files in directory /etc/raddb/sites-enabled/ including configuration file /etc/raddb/sites-enabled/default including configuration file /etc/raddb/sites-enabled/control-socket main { user = "radiusd" group = "radiusd" allow_core_dumps = no } including dictionary file /etc/raddb/dictionary main { name = "radiusd" prefix = "/usr" localstatedir = "/var" sbindir = "/usr/sbin" logdir = "/var/log/radius" run_dir = "/var/run/radiusd" libdir = "/usr/lib64/freeradius" radacctdir = "/var/log/radius/radacct" hostname_lookups = no max_request_time = 30 cleanup_delay = 5 max_requests = 1024 pidfile = "/var/run/radiusd/radiusd.pid" checkrad = "/usr/sbin/checkrad" debug_level = 0 proxy_requests = yes log { stripped_names = no auth = no auth_badpass = no auth_goodpass = no } security { max_attributes = 200 reject_delay = 1 status_server = yes } } radiusd: #### Loading Realms and Home Servers #### proxy server { retry_delay = 5 retry_count = 3 default_fallback = no dead_time = 120 wake_all_if_all_dead = no } home_server server0007 { ipaddr = xxx.xxx.xxx.150 port = 1812 type = "auth+acct" secret = "secret" response_window = 30 max_outstanding = 65536 zombie_period = 40 status_check = "none" ping_interval = 30 check_interval = 30 num_answers_to_alive = 3 num_pings_to_alive = 3 revive_interval = 300 status_check_timeout = 4 } home_server server0011 { ipaddr = xxx.xxx.xxx.152 port = 1812 type = "auth+acct" secret = "secret" response_window = 30 max_outstanding = 65536 zombie_period = 40 status_check = "none" ping_interval = 30 check_interval = 30 num_answers_to_alive = 3 num_pings_to_alive = 3 revive_interval = 300 status_check_timeout = 4 } home_server server0012 { ipaddr = xxx.xxx.xxx.153 port = 1812 type = "auth+acct" secret = "secret" response_window = 30 max_outstanding = 65536 zombie_period = 40 status_check = "none" ping_interval = 30 check_interval = 30 num_answers_to_alive = 3 num_pings_to_alive = 3 revive_interval = 300 status_check_timeout = 4 } home_server_pool auth_loadbalance { type = client-balance home_server = server0007 home_server = server0011 home_server = server0012 } realm example.com { pool = auth_loadbalance } realm LOCAL { } realm NULL { pool = auth_loadbalance WARNING: Ignoring old-style configuration entry "secret" in realm "NULL" } realm DEFAULT { pool = auth_loadbalance WARNING: Ignoring old-style configuration entry "secret" in realm "DEFAULT" } radiusd: #### Loading Clients #### client localhost { ipaddr = 127.0.0.1 require_message_authenticator = no secret = "secret" nastype = "other" } client xxx.xxx.xxx.116 { require_message_authenticator = no secret = "secret" shortname = "shortname" } client xxx.xxx.xxx.137 { require_message_authenticator = no secret = "secret" shortname = "othershortname" } radiusd: #### Instantiating modules #### instantiate { Module: Linked to module rlm_exec Module: Instantiating module "exec" from file /etc/raddb/modules/exec exec { wait = no input_pairs = "request" shell_escape = yes } Module: Linked to module rlm_expr Module: Instantiating module "expr" from file /etc/raddb/modules/expr Module: Linked to module rlm_expiration Module: Instantiating module "expiration" from file /etc/raddb/modules/expiration expiration { reply-message = "Password Has Expired " } Module: Linked to module rlm_logintime Module: Instantiating module "logintime" from file /etc/raddb/modules/logintime logintime { reply-message = "You are calling outside your allowed timespan " minimum-timeout = 60 } } radiusd: #### Loading Virtual Servers #### server { # from file /etc/raddb/radiusd.conf modules { Module: Creating Auth-Type = digest Module: Creating Post-Auth-Type = REJECT Module: Checking authenticate {...} for more modules to load Module: Linked to module rlm_pap Module: Instantiating module "pap" from file /etc/raddb/modules/pap pap { encryption_scheme = "auto" auto_header = no } Module: Linked to module rlm_chap Module: Instantiating module "chap" from file /etc/raddb/modules/chap Module: Linked to module rlm_mschap Module: Instantiating module "mschap" from file /etc/raddb/modules/mschap mschap { use_mppe = yes require_encryption = no require_strong = no with_ntdomain_hack = no allow_retry = yes } Module: Linked to module rlm_digest Module: Instantiating module "digest" from file /etc/raddb/modules/digest Module: Linked to module rlm_unix Module: Instantiating module "unix" from file /etc/raddb/modules/unix unix { radwtmp = "/var/log/radius/radwtmp" } Module: Checking authorize {...} for more modules to load Module: Linked to module rlm_preprocess Module: Instantiating module "preprocess" from file /etc/raddb/modules/preprocess preprocess { huntgroups = "/etc/raddb/huntgroups" hints = "/etc/raddb/hints" with_ascend_hack = no ascend_channels_per_line = 23 with_ntdomain_hack = no with_specialix_jetstream_hack = no with_cisco_vsa_hack = no with_alvarion_vsa_hack = no } Module: Linked to module rlm_realm Module: Instantiating module "suffix" from file /etc/raddb/modules/realm realm suffix { format = "suffix" delimiter = "@" ignore_default = no ignore_null = no } Module: Linked to module rlm_files Module: Instantiating module "files" from file /etc/raddb/modules/files files { usersfile = "/etc/raddb/users" acctusersfile = "/etc/raddb/acct_users" preproxy_usersfile = "/etc/raddb/preproxy_users" compat = "no" } Module: Checking preacct {...} for more modules to load Module: Linked to module rlm_acct_unique Module: Instantiating module "acct_unique" from file /etc/raddb/modules/acct_unique acct_unique { key = "User-Name, Acct-Session-Id, NAS-IP-Address, Client-IP-Address, NAS-Port" } Module: Checking accounting {...} for more modules to load Module: Linked to module rlm_detail Module: Instantiating module "detail" from file /etc/raddb/modules/detail detail { detailfile = "/var/log/radius/radacct/%{%{Packet-Src-IP-Address}:-%{Packet-Src-IPv6-Address}}/detail-%Y%m%d" header = "%t" detailperm = 384 dirperm = 493 locking = no log_packet_header = no } Module: Linked to module rlm_radutmp Module: Instantiating module "radutmp" from file /etc/raddb/modules/radutmp radutmp { filename = "/var/log/radius/radutmp" username = "%{User-Name}" case_sensitive = yes check_with_nas = yes perm = 384 callerid = yes } Module: Checking session {...} for more modules to load Module: Checking post-auth {...} for more modules to load } # modules } # server radiusd: #### Opening IP addresses and Ports #### listen { type = "auth" ipaddr = * port = 1812 } listen { type = "control" listen { socket = "/var/run/radiusd/radiusd.sock" } } ... adding new socket proxy address * port 54463 ... adding new socket proxy address * port 56731 ... adding new socket proxy address * port 42048 ... adding new socket proxy address * port 37161 ... adding new socket proxy address * port 38652 ... adding new socket proxy address * port 46065 Listening on authentication address * port 1812 Listening on command file /var/run/radiusd/radiusd.sock Listening on proxy address * port 1814 Ready to process requests.
And what is talking to the RADIUS server? One wireless controller? The 'client' bit in client-balance means RADIUS client not end users. So.... if you've just got one client. .. alan -- Sent from my Android device with K-9 Mail. Please excuse my brevity.
Ps is strongly suggest using status-server for those remote servers too. Alan -- Sent from my Android device with K-9 Mail. Please excuse my brevity.
Neil Carter wrote:
I'm working to setup a proxy load balance to 3 production RADIUS servers from a CentOS server running freeradius 2.1.12. I believe I have the proxy.conf file setup correctly but there seems to be no load balancing. All the requests are going to one of the three servers. I have attached the proxy.conf file and also the radius debug. I don't see any errors, it just appears the client-balance is not working. Clients are using MAB and are matching the NULL realm. I have looked through all the past posts and can't seem to find an answer. Am I missing something in my configuration?
Maybe.
FreeRADIUS Version 2.1.12, for host x86_64-redhat-linux-gnu, built on Oct 3 2012 at 01:22:51
And... no packets. That's not useful. If you want to know what the server is doing, read the debug output. And be sure that it receives packets, too. Alan DeKok.
Thanks for the information. I have made some progress on this. Now it appears that when I start freeradius the load balancing works as expected for a short time, up to 10 minutes. Then the home servers are marked as zombies and then as dead. The clients are multiple Cisco switches and the production RADIUS servers are 3 Cisco ACS RADIUS servers. As suggested I have added the status-server for the home servers in the proxy.conf. proxy server { default_fallback = no } home_server serverxnmx0007 { type = auth+acct ipaddr = 192.168.254.150 port = 1812 secret = secret response_window = 45 response_timeouts = 5 status_check = status-server username = "testuser" password = "pass" } home_server serverxnmx0011 { type = auth+acct ipaddr = 192.168.254.152 port = 1812 secret = secret response_window = 45 response_timeouts = 5 status_check = status-server username = "testuser" password = "pass" } home_server serverxnmx0012 { type = auth+acct ipaddr = 192.168.254.153 port = 1812 secret = secret response_window = 45 response_timeouts = 5 status_check = status-server username = "testuser" password = "pass" } The radius.log file shows the servers being marked as zombie and then dead. The log below shows one server being marked dead and after some time another one will be marked the same. Thu Sep 11 16:47:17 2014 : Info: Loaded virtual server <default> Thu Sep 11 16:47:18 2014 : Info: ... adding new socket proxy address * port 41379 Thu Sep 11 16:47:18 2014 : Info: ... adding new socket proxy address * port 47256 Thu Sep 11 16:47:18 2014 : Info: ... adding new socket proxy address * port 60777 Thu Sep 11 16:47:18 2014 : Info: ... adding new socket proxy address * port 37802 Thu Sep 11 16:47:18 2014 : Info: ... adding new socket proxy address * port 51392 Thu Sep 11 16:47:18 2014 : Info: ... adding new socket proxy address * port 37221 Thu Sep 11 16:47:18 2014 : Info: ... adding new socket proxy address * port 53560 Thu Sep 11 16:47:18 2014 : Info: Ready to process requests. Thu Sep 11 16:53:12 2014 : Auth: Login OK: [host/HOSTXWKX0050.foo/<no User-Password attribute>] (from client 2150a_ port 36 cli 00-24-1D-AB-CA-83) Thu Sep 11 16:54:53 2014 : Auth: Login OK: [host/HOSTXWKX0116.foo/<no User-Password attribute>] (from client 2030c_ port 5 cli 00-24-1D-AC-B4-8B) Thu Sep 11 16:54:56 2014 : Error: Discarding duplicate request from client 2030c_ port 1645 - ID: 88 due to unfinished request 15 Thu Sep 11 16:54:59 2014 : Error: Discarding duplicate request from client 2030c_ port 1645 - ID: 88 due to unfinished request 15 Thu Sep 11 16:55:11 2014 : Auth: Login OK: [host/HOSTXWKX0116.foo/<no User-Password attribute>] (from client 2030c_ port 5 cli 00-24-1D-AC-B4-8B) Thu Sep 11 16:56:31 2014 : Auth: Login incorrect (Home Server says so): [NA\\SVC./<no User-Password attribute>] (from client 2030c_ port 10 cli 00-24-1D-AD-FF-DF) Thu Sep 11 17:02:30 2014 : Auth: Login OK: [host/HOSTXWKX0267.foo/<no User-Password attribute>] (from client 2030c_ port 38 cli 90-B1-1C-72-C2-AC) Thu Sep 11 17:02:48 2014 : Auth: Login OK: [host/HOSTXWKX0105.foo/<no User-Password attribute>] (from client 2030c_ port 17 cli 00-24-1D-AD-FE-AF) Thu Sep 11 17:02:49 2014 : Auth: Login OK: [host/HOSTXWKX0107.foo/<no User-Password attribute>] (from client 2030c_ port 21 cli 00-24-1D-AD-F8-8B) Thu Sep 11 17:02:49 2014 : Auth: Login OK: [host/HOSTXWKX0111.foo/<no User-Password attribute>] (from client 2030c_ port 23 cli 00-24-1D-AD-FE-8E) Thu Sep 11 17:02:52 2014 : Auth: Login OK: [host/HOSTXWKX0103.foo/<no User-Password attribute>] (from client 2030c_ port 15 cli 00-24-1D-AD-F8-99) Thu Sep 11 17:03:06 2014 : Auth: Login OK: [host/HOSTXWKX0104.foo/<no User-Password attribute>] (from client 2030c_ port 16 cli 00-24-1D-AD-FF-01) Thu Sep 11 17:03:08 2014 : Auth: Login OK: [host/HOSTXWKX0102.foo/<no User-Password attribute>] (from client 2030c_ port 19 cli 00-24-1D-AD-F9-A3) Thu Sep 11 17:03:15 2014 : Auth: Login OK: [host/HOSTXWKX0101.foo/<no User-Password attribute>] (from client 2030c_ port 18 cli 00-24-1D-AD-F9-21) Thu Sep 11 17:07:00 2014 : Proxy: Marking home server 192.168.254.152 port 1812 as zombie (it looks like it is dead). Thu Sep 11 17:07:04 2014 : Error: No response to status check 132 for home server 192.168.254.152 port 1812 Thu Sep 11 17:07:04 2014 : Proxy: Marking home server 192.168.254.152 port 1812 as dead. Thu Sep 11 17:07:34 2014 : Error: No response to status check 133 for home server 192.168.254.152 port 1812 Thu Sep 11 17:08:08 2014 : Error: No response to status check 134 for home server 192.168.254.152 port 1812 Thu Sep 11 17:08:42 2014 : Error: No response to status check 135 for home server 192.168.254.152 port 1812 During this time I am able to use radtest to get a response from all of the servers: server (root@serverxb6x5121 radius)# radtest testuser pass 192.168.254.150 10 secret Sending Access-Request of id 116 to 192.168.254.150 port 1812 User-Name = "testuser" User-Password = "pass" NAS-IP-Address = 192.168.105.34 NAS-Port = 10 Message-Authenticator = 0x00000000000000000000000000000000 rad_recv: Access-Reject packet from host 192.168.254.150 port 1812, id=116, length=38 Message-Authenticator = 0xd1ba4f1a6028b42436dd2f5ebea322b9 server (root@serverxb6x5121 radius)# radtest testuser pass 192.168.254.152 10 secret Sending Access-Request of id 216 to 192.168.254.152 port 1812 User-Name = "testuser" User-Password = "pass" NAS-IP-Address = 192.168.105.34 NAS-Port = 10 Message-Authenticator = 0x00000000000000000000000000000000 rad_recv: Access-Reject packet from host 192.168.254.152 port 1812, id=216, length=38 Message-Authenticator = 0x2872a2f5177592f69d007406a4a89999 server (root@serverxb6x5121 radius)# radtest testuser pass 192.168.254.153 10 secret Sending Access-Request of id 124 to 192.168.254.153 port 1812 User-Name = "testuser" User-Password = "pass" NAS-IP-Address = 192.168.105.34 NAS-Port = 10 Message-Authenticator = 0x00000000000000000000000000000000 rad_recv: Access-Reject packet from host 192.168.254.153 port 1812, id=124, length=38 Message-Authenticator = 0xef0ac9fdee194cd6a455b3bf0574d0a I have read the documentation and am unable to determine why the servers are being marked as dead. Am I missing something in my configuration or are the ACS servers discarding packets and that is causing the zobie/dead state? If more logs are needed please let me know. Any help would be greatly appreciated. Thanks Neil On Tue, Sep 2, 2014 at 11:44 AM, Alan DeKok <aland@deployingradius.com> wrote:
Neil Carter wrote:
I'm working to setup a proxy load balance to 3 production RADIUS servers from a CentOS server running freeradius 2.1.12. I believe I have the proxy.conf file setup correctly but there seems to be no load balancing. All the requests are going to one of the three servers. I have attached the proxy.conf file and also the radius debug. I don't see any errors, it just appears the client-balance is not working. Clients are using MAB and are matching the NULL realm. I have looked through all the past posts and can't seem to find an answer. Am I missing something in my configuration?
Maybe.
FreeRADIUS Version 2.1.12, for host x86_64-redhat-linux-gnu, built on Oct 3 2012 at 01:22:51
And... no packets.
That's not useful.
If you want to know what the server is doing, read the debug output. And be sure that it receives packets, too.
Alan DeKok. - List info/subscribe/unsubscribe? See http://www.freeradius.org/list/users.html
Don't use status-server against RADIUS servers that don't support status server as when they don't get a response they will fire off status-server, not get a response and then really mark the server as dead. You need to find out why the ACS boxes aren't responding. Alan
participants (3)
-
Alan Buxey -
Alan DeKok -
Neil Carter