WPA2-Enterprise and WPA3-Enterprise not working with Windows

Matt H meh1963 at gmail.com
Tue Mar 14 20:20:45 UTC 2023


Hello -


Working on a relatively generic new install of Freeradius 3.2.2 on an Alma
9.1 system (think CentOS).


The network is Ubiquiti Unifi UDM running up-to-date OS

The UDM is configured for WPA3-Enterprise, so (if I've read the
documentation right) Freeradius needs to perform EAP-TLS.

I’ve enabled EAP-TLS.  The certs should all be right.


iPhones connect fine.

[some] Macs connect fine

Windows fails entirely, in every situation; in the radius -X output below,
it sends a NAK and stops negotiating.


The README in ../certs notes that Windows fails silently and so people
blame freeradius, and I *think* that’s what’s happening here.  I think that
Freeradius is configured properly….but it’s entirely possible I screwed up.



So, here’s the output from starting up plus one attempt from a Windows 11
system.


############


Nota bene: We also have a WPA2-Enterprise production network (not described
here) and Windows won't auth to that, either.  It works great for
everything else.


############



Thank you




[root at radius-2 mhayden]# cd /etc/raddb/certs

[root at radius-2 certs]# radiusd -X

FreeRADIUS Version 3.0.21

Copyright (C) 1999-2019 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

For more information about these matters, see the file named COPYRIGHT

Starting - reading configuration files ...

including dictionary file /usr/share/freeradius/dictionary

including dictionary file /usr/share/freeradius/dictionary.dhcp

including dictionary file /usr/share/freeradius/dictionary.vqp

including dictionary file /etc/raddb/dictionary

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/mods-enabled/

including configuration file /etc/raddb/mods-enabled/always

including configuration file /etc/raddb/mods-enabled/attr_filter

including configuration file /etc/raddb/mods-enabled/cache_eap

including configuration file /etc/raddb/mods-enabled/chap

including configuration file /etc/raddb/mods-enabled/date

including configuration file /etc/raddb/mods-enabled/detail

including configuration file /etc/raddb/mods-enabled/detail.log

including configuration file /etc/raddb/mods-enabled/digest

including configuration file /etc/raddb/mods-enabled/dynamic_clients

including configuration file /etc/raddb/mods-enabled/eap

including configuration file /etc/raddb/mods-enabled/echo

including configuration file /etc/raddb/mods-enabled/exec

including configuration file /etc/raddb/mods-enabled/expiration

including configuration file /etc/raddb/mods-enabled/expr

including configuration file /etc/raddb/mods-enabled/files

including configuration file /etc/raddb/mods-enabled/krb5

including configuration file /etc/raddb/mods-enabled/ldap

including configuration file /etc/raddb/mods-enabled/linelog

including configuration file /etc/raddb/mods-enabled/logintime

including configuration file /etc/raddb/mods-enabled/mschap

including configuration file /etc/raddb/mods-enabled/ntlm_auth

including configuration file /etc/raddb/mods-enabled/pap

including configuration file /etc/raddb/mods-enabled/passwd

including configuration file /etc/raddb/mods-enabled/preprocess

including configuration file /etc/raddb/mods-enabled/radutmp

including configuration file /etc/raddb/mods-enabled/realm

including configuration file /etc/raddb/mods-enabled/replicate

including configuration file /etc/raddb/mods-enabled/soh

including configuration file /etc/raddb/mods-enabled/sradutmp

including configuration file /etc/raddb/mods-enabled/unix

including configuration file /etc/raddb/mods-enabled/unpack

including configuration file /etc/raddb/mods-enabled/utf8

including files in directory /etc/raddb/policy.d/

including configuration file /etc/raddb/policy.d/accounting

including configuration file /etc/raddb/policy.d/canonicalization

including configuration file /etc/raddb/policy.d/control

including configuration file /etc/raddb/policy.d/cui

including configuration file /etc/raddb/policy.d/debug

including configuration file /etc/raddb/policy.d/dhcp

including configuration file /etc/raddb/policy.d/eap

including configuration file /etc/raddb/policy.d/filter

including configuration file /etc/raddb/policy.d/operator-name

including configuration file /etc/raddb/policy.d/rfc7542

including files in directory /etc/raddb/sites-enabled/

including configuration file /etc/raddb/sites-enabled/default

including configuration file /etc/raddb/sites-enabled/inner-tunnel

main {

 security {

  user = "radiusd"

  group = "radiusd"

  allow_core_dumps = no

 }

name = "radiusd"

prefix = "/usr"

localstatedir = "/var"

logdir = "/var/log/radius"

run_dir = "/var/run/radiusd"

}

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 = 16384

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

  colourise = yes

  msg_denied = "You are already logged in - access denied"

 }

 resources {

 }

 security {

  max_attributes = 200

  reject_delay = 1.000000

  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 localhost {

  ipaddr = 127.0.0.1

  port = 1812

  type = "auth"

  secret = <<< secret >>>

  response_window = 20.000000

  response_timeouts = 1

  max_outstanding = 65536

  zombie_period = 40

  status_check = "status-server"

  ping_interval = 30

  check_interval = 30

  check_timeout = 4

  num_answers_to_alive = 3

  revive_interval = 120

  limit {

  max_connections = 16

  max_requests = 0

  lifetime = 0

  idle_timeout = 0

  }

  coa {

  irt = 2

  mrt = 16

  mrc = 5

  mrd = 30

  }

 }

 home_server_pool my_auth_failover {

type = fail-over

home_server = localhost

 }

 realm example.com {

auth_pool = my_auth_failover

 }

 realm LOCAL {

 }

radiusd: #### Loading Clients ####

 client localnet {

  ipaddr = 172.18.0.0/22

  require_message_authenticator = no

  secret = <<< secret >>>

  nas_type = "other"

  proto = "*"

  limit {

  max_connections = 16

  lifetime = 0

  idle_timeout = 30

  }

 }

Debugger not attached

 # Creating Auth-Type = mschap

 # Creating Auth-Type = digest

 # Creating Auth-Type = eap

 # Creating Auth-Type = PAP

 # Creating Auth-Type = CHAP

 # Creating Auth-Type = MS-CHAP

radiusd: #### Instantiating modules ####

 modules {

  # Loaded module rlm_always

  # Loading module "reject" from file /etc/raddb/mods-enabled/always

  always reject {

  rcode = "reject"

  simulcount = 0

  mpp = no

  }

  # Loading module "fail" from file /etc/raddb/mods-enabled/always

  always fail {

  rcode = "fail"

  simulcount = 0

  mpp = no

  }

  # Loading module "ok" from file /etc/raddb/mods-enabled/always

  always ok {

  rcode = "ok"

  simulcount = 0

  mpp = no

  }

  # Loading module "handled" from file /etc/raddb/mods-enabled/always

  always handled {

  rcode = "handled"

  simulcount = 0

  mpp = no

  }

  # Loading module "invalid" from file /etc/raddb/mods-enabled/always

  always invalid {

  rcode = "invalid"

  simulcount = 0

  mpp = no

  }

  # Loading module "userlock" from file /etc/raddb/mods-enabled/always

  always userlock {

  rcode = "userlock"

  simulcount = 0

  mpp = no

  }

  # Loading module "notfound" from file /etc/raddb/mods-enabled/always

  always notfound {

  rcode = "notfound"

  simulcount = 0

  mpp = no

  }

  # Loading module "noop" from file /etc/raddb/mods-enabled/always

  always noop {

  rcode = "noop"

  simulcount = 0

  mpp = no

  }

  # Loading module "updated" from file /etc/raddb/mods-enabled/always

  always updated {

  rcode = "updated"

  simulcount = 0

  mpp = no

  }

  # Loaded module rlm_attr_filter

  # Loading module "attr_filter.post-proxy" from file
/etc/raddb/mods-enabled/attr_filter

  attr_filter attr_filter.post-proxy {

  filename = "/etc/raddb/mods-config/attr_filter/post-proxy"

  key = "%{Realm}"

  relaxed = no

  }

  # Loading module "attr_filter.pre-proxy" from file
/etc/raddb/mods-enabled/attr_filter

  attr_filter attr_filter.pre-proxy {

  filename = "/etc/raddb/mods-config/attr_filter/pre-proxy"

  key = "%{Realm}"

  relaxed = no

  }

  # Loading module "attr_filter.access_reject" from file
/etc/raddb/mods-enabled/attr_filter

  attr_filter attr_filter.access_reject {

  filename = "/etc/raddb/mods-config/attr_filter/access_reject"

  key = "%{User-Name}"

  relaxed = no

  }

  # Loading module "attr_filter.access_challenge" from file
/etc/raddb/mods-enabled/attr_filter

  attr_filter attr_filter.access_challenge {

  filename = "/etc/raddb/mods-config/attr_filter/access_challenge"

  key = "%{User-Name}"

  relaxed = no

  }

  # Loading module "attr_filter.accounting_response" from file
/etc/raddb/mods-enabled/attr_filter

  attr_filter attr_filter.accounting_response {

  filename = "/etc/raddb/mods-config/attr_filter/accounting_response"

  key = "%{User-Name}"

  relaxed = no

  }

  # Loaded module rlm_cache

  # Loading module "cache_eap" from file /etc/raddb/mods-enabled/cache_eap

  cache cache_eap {

  driver = "rlm_cache_rbtree"

  key = "%{%{control:State}:-%{%{reply:State}:-%{State}}}"

  ttl = 15

  max_entries = 0

  epoch = 0

  add_stats = no

  }

  # Loaded module rlm_chap

  # Loading module "chap" from file /etc/raddb/mods-enabled/chap

  # Loaded module rlm_date

  # Loading module "date" from file /etc/raddb/mods-enabled/date

  date {

  format = "%b %e %Y %H:%M:%S %Z"

  utc = no

  }

  # Loading module "wispr2date" from file /etc/raddb/mods-enabled/date

  date wispr2date {

  format = "%Y-%m-%dT%H:%M:%S"

  utc = no

  }

  # Loaded module rlm_detail

  # Loading module "detail" from file /etc/raddb/mods-enabled/detail

  detail {

  filename =
"/var/log/radius/radacct/%{%{Packet-Src-IP-Address}:-%{Packet-Src-IPv6-Address}}/detail-%Y%m%d"

  header = "%t"

  permissions = 384

  locking = no

  escape_filenames = no

  log_packet_header = no

  }

  # Loading module "auth_log" from file /etc/raddb/mods-enabled/detail.log

  detail auth_log {

  filename =
"/var/log/radius/radacct/%{%{Packet-Src-IP-Address}:-%{Packet-Src-IPv6-Address}}/auth-detail-%Y%m%d"

  header = "%t"

  permissions = 384

  locking = no

  escape_filenames = no

  log_packet_header = no

  }

  # Loading module "reply_log" from file /etc/raddb/mods-enabled/detail.log

  detail reply_log {

  filename =
"/var/log/radius/radacct/%{%{Packet-Src-IP-Address}:-%{Packet-Src-IPv6-Address}}/reply-detail-%Y%m%d"

  header = "%t"

  permissions = 384

  locking = no

  escape_filenames = no

  log_packet_header = no

  }

  # Loading module "pre_proxy_log" from file
/etc/raddb/mods-enabled/detail.log

  detail pre_proxy_log {

  filename =
"/var/log/radius/radacct/%{%{Packet-Src-IP-Address}:-%{Packet-Src-IPv6-Address}}/pre-proxy-detail-%Y%m%d"

  header = "%t"

  permissions = 384

  locking = no

  escape_filenames = no

  log_packet_header = no

  }

  # Loading module "post_proxy_log" from file
/etc/raddb/mods-enabled/detail.log

  detail post_proxy_log {

  filename =
"/var/log/radius/radacct/%{%{Packet-Src-IP-Address}:-%{Packet-Src-IPv6-Address}}/post-proxy-detail-%Y%m%d"

  header = "%t"

  permissions = 384

  locking = no

  escape_filenames = no

  log_packet_header = no

  }

  # Loaded module rlm_digest

  # Loading module "digest" from file /etc/raddb/mods-enabled/digest

  # Loaded module rlm_dynamic_clients

  # Loading module "dynamic_clients" from file
/etc/raddb/mods-enabled/dynamic_clients

  # Loaded module rlm_eap

  # Loading module "eap" from file /etc/raddb/mods-enabled/eap

  eap {

  default_eap_type = "tls"

  timer_expire = 60

  ignore_unknown_eap_types = no

  cisco_accounting_username_bug = no

  max_sessions = 16384

  }

  # Loaded module rlm_exec

  # Loading module "echo" from file /etc/raddb/mods-enabled/echo

  exec echo {

  wait = yes

  program = "/bin/echo %{User-Name}"

  input_pairs = "request"

  output_pairs = "reply"

  shell_escape = yes

  }

  # Loading module "exec" from file /etc/raddb/mods-enabled/exec

  exec {

  wait = no

  input_pairs = "request"

  shell_escape = yes

  timeout = 10

  }

  # Loaded module rlm_expiration

  # Loading module "expiration" from file /etc/raddb/mods-enabled/expiration

  # Loaded module rlm_expr

  # Loading module "expr" from file /etc/raddb/mods-enabled/expr

  expr {

  safe_characters =
"@abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.-_:
/äéöüàâæçèéêëîïôœùûüaÿÄÉÖÜßÀÂÆÇÈÉÊËÎÏÔŒÙÛÜŸ"

  }

  # Loaded module rlm_files

  # Loading module "files" from file /etc/raddb/mods-enabled/files

  files {

  filename = "/etc/raddb/mods-config/files/authorize"

  acctusersfile = "/etc/raddb/mods-config/files/accounting"

  preproxy_usersfile = "/etc/raddb/mods-config/files/pre-proxy"

  }

  # Loaded module rlm_krb5

  # Loading module "krb5" from file /etc/raddb/mods-enabled/krb5

  krb5 {

  }

  # Loaded module rlm_ldap

  # Loading module "ldap" from file /etc/raddb/mods-enabled/ldap

  ldap {

  server = "ipa-1.companyname.ai"

  identity = "krbprincipalname=radius/ipa-1.companyname.ai at companyname.ai
,cn=services,cn=accounts,dc=companyname,dc=ai"

  password = <<< secret >>>

   sasl {

   }

   user {

   scope = "sub"

   access_positive = yes

    sasl {

    }

   }

   group {

   filter = "(objectClass=posixGroup)"

   scope = "sub"

   name_attribute = "cn"

   membership_attribute = "memberOf"

   cacheable_name = no

   cacheable_dn = no

   allow_dangling_group_ref = no

   }

   client {

   filter = "(objectClass=radiusClient)"

   scope = "sub"

   base_dn = "cn=users,cn=accounts,dc=companyname,dc=ai"

   }

   profile {

   }

   options {

   ldap_debug = 40

   chase_referrals = yes

   rebind = yes

   net_timeout = 1

   res_timeout = 10

   srv_timelimit = 3

   idle = 60

   probes = 3

   interval = 3

   }

   tls {

   start_tls = yes

   require_cert = "never"

   }

  }

Creating attribute LDAP-Group

  # Loaded module rlm_linelog

  # Loading module "linelog" from file /etc/raddb/mods-enabled/linelog

  linelog {

  filename = "/var/log/radius/linelog"

  escape_filenames = no

  syslog_severity = "info"

  permissions = 384

  format = "This is a log message for %{User-Name}"

  reference = "messages.%{%{reply:Packet-Type}:-default}"

  }

  # Loading module "log_accounting" from file
/etc/raddb/mods-enabled/linelog

  linelog log_accounting {

  filename = "/var/log/radius/linelog-accounting"

  escape_filenames = no

  syslog_severity = "info"

  permissions = 384

  format = ""

  reference = "Accounting-Request.%{%{Acct-Status-Type}:-unknown}"

  }

  # Loaded module rlm_logintime

  # Loading module "logintime" from file /etc/raddb/mods-enabled/logintime

  logintime {

  minimum_timeout = 60

  }

  # Loaded module rlm_mschap

  # Loading module "mschap" from file /etc/raddb/mods-enabled/mschap

  mschap {

  use_mppe = yes

  require_encryption = no

  require_strong = no

  with_ntdomain_hack = yes

   passchange {

   }

  allow_retry = yes

  winbind_retry_with_normalised_username = no

  }

  # Loading module "ntlm_auth" from file /etc/raddb/mods-enabled/ntlm_auth

  exec ntlm_auth {

  wait = yes

  program = "/path/to/ntlm_auth --request-nt-key --domain=MYDOMAIN
--username=%{mschap:User-Name} --password=%{User-Password}"

  shell_escape = yes

  }

  # Loaded module rlm_pap

  # Loading module "pap" from file /etc/raddb/mods-enabled/pap

  pap {

  normalise = yes

  }

  # Loaded module rlm_passwd

  # Loading module "etc_passwd" from file /etc/raddb/mods-enabled/passwd

  passwd etc_passwd {

  filename = "/etc/passwd"

  format = "*User-Name:Crypt-Password:"

  delimiter = ":"

  ignore_nislike = no

  ignore_empty = yes

  allow_multiple_keys = no

  hash_size = 100

  }

  # Loaded module rlm_preprocess

  # Loading module "preprocess" from file /etc/raddb/mods-enabled/preprocess

  preprocess {

  huntgroups = "/etc/raddb/mods-config/preprocess/huntgroups"

  hints = "/etc/raddb/mods-config/preprocess/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

  }

  # Loaded module rlm_radutmp

  # Loading module "radutmp" from file /etc/raddb/mods-enabled/radutmp

  radutmp {

  filename = "/var/log/radius/radutmp"

  username = "%{User-Name}"

  case_sensitive = yes

  check_with_nas = yes

  permissions = 384

  caller_id = yes

  }

  # Loaded module rlm_realm

  # Loading module "IPASS" from file /etc/raddb/mods-enabled/realm

  realm IPASS {

  format = "prefix"

  delimiter = "/"

  ignore_default = no

  ignore_null = no

  }

  # Loading module "suffix" from file /etc/raddb/mods-enabled/realm

  realm suffix {

  format = "suffix"

  delimiter = "@"

  ignore_default = no

  ignore_null = no

  }

  # Loading module "bangpath" from file /etc/raddb/mods-enabled/realm

  realm bangpath {

  format = "prefix"

  delimiter = "!"

  ignore_default = no

  ignore_null = no

  }

  # Loading module "realmpercent" from file /etc/raddb/mods-enabled/realm

  realm realmpercent {

  format = "suffix"

  delimiter = "%"

  ignore_default = no

  ignore_null = no

  }

  # Loading module "ntdomain" from file /etc/raddb/mods-enabled/realm

  realm ntdomain {

  format = "prefix"

  delimiter = "\\"

  ignore_default = no

  ignore_null = no

  }

  # Loaded module rlm_replicate

  # Loading module "replicate" from file /etc/raddb/mods-enabled/replicate

  # Loaded module rlm_soh

  # Loading module "soh" from file /etc/raddb/mods-enabled/soh

  soh {

  dhcp = yes

  }

  # Loading module "sradutmp" from file /etc/raddb/mods-enabled/sradutmp

  radutmp sradutmp {

  filename = "/var/log/radius/sradutmp"

  username = "%{User-Name}"

  case_sensitive = yes

  check_with_nas = yes

  permissions = 420

  caller_id = no

  }

  # Loaded module rlm_unix

  # Loading module "unix" from file /etc/raddb/mods-enabled/unix

  unix {

  radwtmp = "/var/log/radius/radwtmp"

  }

Creating attribute Unix-Group

  # Loaded module rlm_unpack

  # Loading module "unpack" from file /etc/raddb/mods-enabled/unpack

  # Loaded module rlm_utf8

  # Loading module "utf8" from file /etc/raddb/mods-enabled/utf8

  instantiate {

  }

  # Instantiating module "reject" from file /etc/raddb/mods-enabled/always

  # Instantiating module "fail" from file /etc/raddb/mods-enabled/always

  # Instantiating module "ok" from file /etc/raddb/mods-enabled/always

  # Instantiating module "handled" from file /etc/raddb/mods-enabled/always

  # Instantiating module "invalid" from file /etc/raddb/mods-enabled/always

  # Instantiating module "userlock" from file /etc/raddb/mods-enabled/always

  # Instantiating module "notfound" from file /etc/raddb/mods-enabled/always

  # Instantiating module "noop" from file /etc/raddb/mods-enabled/always

  # Instantiating module "updated" from file /etc/raddb/mods-enabled/always

  # Instantiating module "attr_filter.post-proxy" from file
/etc/raddb/mods-enabled/attr_filter

reading pairlist file /etc/raddb/mods-config/attr_filter/post-proxy

  # Instantiating module "attr_filter.pre-proxy" from file
/etc/raddb/mods-enabled/attr_filter

reading pairlist file /etc/raddb/mods-config/attr_filter/pre-proxy

  # Instantiating module "attr_filter.access_reject" from file
/etc/raddb/mods-enabled/attr_filter

reading pairlist file /etc/raddb/mods-config/attr_filter/access_reject

  # Instantiating module "attr_filter.access_challenge" from file
/etc/raddb/mods-enabled/attr_filter

reading pairlist file /etc/raddb/mods-config/attr_filter/access_challenge

  # Instantiating module "attr_filter.accounting_response" from file
/etc/raddb/mods-enabled/attr_filter

reading pairlist file /etc/raddb/mods-config/attr_filter/accounting_response

  # Instantiating module "cache_eap" from file
/etc/raddb/mods-enabled/cache_eap

rlm_cache (cache_eap): Driver rlm_cache_rbtree (module rlm_cache_rbtree)
loaded and linked

  # Instantiating module "detail" from file /etc/raddb/mods-enabled/detail

  # Instantiating module "auth_log" from file
/etc/raddb/mods-enabled/detail.log

rlm_detail (auth_log): 'User-Password' suppressed, will not appear in
detail output

  # Instantiating module "reply_log" from file
/etc/raddb/mods-enabled/detail.log

  # Instantiating module "pre_proxy_log" from file
/etc/raddb/mods-enabled/detail.log

  # Instantiating module "post_proxy_log" from file
/etc/raddb/mods-enabled/detail.log

  # Instantiating module "eap" from file /etc/raddb/mods-enabled/eap

   # Linked to sub-module rlm_eap_md5

   # Linked to sub-module rlm_eap_leap

   # Linked to sub-module rlm_eap_gtc

   gtc {

   challenge = "Password: "

   auth_type = "PAP"

   }

   # Linked to sub-module rlm_eap_tls

   tls {

   tls = "tls-common"

   }

   tls-config tls-common {

   verify_depth = 0

   ca_path = "/etc/raddb/certs"

   pem_file_type = yes

   private_key_file = "/etc/raddb/certs/star.hq.companyname.ai.key"

   certificate_file = "/etc/raddb/certs/star.hq.companyname.ai.pem"

   ca_file = "/etc/raddb/certs/ca.pem"

   private_key_password = <<< secret >>>

   fragment_size = 1024

   include_length = yes

   auto_chain = yes

   check_crl = no

   check_all_crl = no

   ca_path_reload_interval = 0

   cipher_list = "PROFILE=SYSTEM"

   cipher_server_preference = no

   reject_unknown_intermediate_ca = no

   ecdh_curve = "prime256v1"

   tls_min_version = "1.2"

    cache {

    enable = no

    lifetime = 24

    name = "EAP-TLS"

    max_entries = 255

    persist_dir = "/var/log/radius/tlscache"

    }

    verify {

    skip_if_ocsp_ok = no

    }

    ocsp {

    enable = no

    override_cert_url = yes

    url = "http://127.0.0.1/ocsp/"

    use_nonce = yes

    timeout = 0

    softfail = no

    }

   }

   # Linked to sub-module rlm_eap_ttls

   ttls {

   tls = "tls-common"

   default_eap_type = "md5"

   copy_request_to_tunnel = yes

   use_tunneled_reply = yes

   virtual_server = "inner-tunnel"

   include_length = yes

   require_client_cert = no

   }

tls: Using cached TLS configuration from previous invocation

   # Linked to sub-module rlm_eap_peap

   peap {

   tls = "tls-common"

   default_eap_type = "mschapv2"

   copy_request_to_tunnel = yes

   use_tunneled_reply = yes

   proxy_tunneled_request_as_eap = yes

   virtual_server = "inner-tunnel"

   soh = no

   require_client_cert = no

   }

tls: Using cached TLS configuration from previous invocation

   # Linked to sub-module rlm_eap_mschapv2

   mschapv2 {

   with_ntdomain_hack = no

   send_error = no

   }

  # Instantiating module "expiration" from file
/etc/raddb/mods-enabled/expiration

  # Instantiating module "files" from file /etc/raddb/mods-enabled/files

reading pairlist file /etc/raddb/mods-config/files/authorize

reading pairlist file /etc/raddb/mods-config/files/accounting

reading pairlist file /etc/raddb/mods-config/files/pre-proxy

  # Instantiating module "krb5" from file /etc/raddb/mods-enabled/krb5

Using MIT Kerberos library

rlm_krb5 (krb5): Using service principal "host/
radius-2.hq.companyname.ai at companyname.ai"

rlm_krb5 (krb5): Using keytab "FILE:/etc/krb5.keytab"

rlm_krb5 (krb5): Initialising connection pool

   pool {

   start = 5

   min = 3

   max = 32

   spare = 10

   uses = 0

   lifetime = 0

   cleanup_interval = 30

   idle_timeout = 0

   retry_delay = 1

   spread = no

   }

rlm_krb5 (krb5): Opening additional connection (0), 1 of 32 pending slots
used

rlm_krb5 (krb5): Opening additional connection (1), 1 of 31 pending slots
used

rlm_krb5 (krb5): Opening additional connection (2), 1 of 30 pending slots
used

rlm_krb5 (krb5): Opening additional connection (3), 1 of 29 pending slots
used

rlm_krb5 (krb5): Opening additional connection (4), 1 of 28 pending slots
used

  # Instantiating module "ldap" from file /etc/raddb/mods-enabled/ldap

rlm_ldap: libldap vendor: OpenLDAP, version: 20602

   accounting {

   reference = "%{tolower:type.%{Acct-Status-Type}}"

   }

   post-auth {

   reference = "."

   }

rlm_ldap (ldap): Initialising connection pool

   pool {

   start = 5

   min = 3

   max = 32

   spare = 10

   uses = 0

   lifetime = 0

   cleanup_interval = 30

   idle_timeout = 60

   retry_delay = 30

   spread = no

   }

rlm_ldap (ldap): Opening additional connection (0), 1 of 32 pending slots
used

rlm_ldap (ldap): Connecting to ldap://ipa-1.companyname.ai:389

rlm_ldap (ldap): Waiting for bind result...

rlm_ldap (ldap): Bind successful

rlm_ldap (ldap): Opening additional connection (1), 1 of 31 pending slots
used

rlm_ldap (ldap): Connecting to ldap://ipa-1.companyname.ai:389

rlm_ldap (ldap): Waiting for bind result...

rlm_ldap (ldap): Bind successful

rlm_ldap (ldap): Opening additional connection (2), 1 of 30 pending slots
used

rlm_ldap (ldap): Connecting to ldap://ipa-1.companyname.ai:389

rlm_ldap (ldap): Waiting for bind result...

rlm_ldap (ldap): Bind successful

rlm_ldap (ldap): Opening additional connection (3), 1 of 29 pending slots
used

rlm_ldap (ldap): Connecting to ldap://ipa-1.companyname.ai:389

rlm_ldap (ldap): Waiting for bind result...

rlm_ldap (ldap): Bind successful

rlm_ldap (ldap): Opening additional connection (4), 1 of 28 pending slots
used

rlm_ldap (ldap): Connecting to ldap://ipa-1.companyname.ai:389

rlm_ldap (ldap): Waiting for bind result...

rlm_ldap (ldap): Bind successful

  # Instantiating module "linelog" from file /etc/raddb/mods-enabled/linelog

  # Instantiating module "log_accounting" from file
/etc/raddb/mods-enabled/linelog

  # Instantiating module "logintime" from file
/etc/raddb/mods-enabled/logintime

  # Instantiating module "mschap" from file /etc/raddb/mods-enabled/mschap

rlm_mschap (mschap): using internal authentication

  # Instantiating module "pap" from file /etc/raddb/mods-enabled/pap

  # Instantiating module "etc_passwd" from file
/etc/raddb/mods-enabled/passwd

rlm_passwd: nfields: 3 keyfield 0(User-Name) listable: no

  # Instantiating module "preprocess" from file
/etc/raddb/mods-enabled/preprocess

reading pairlist file /etc/raddb/mods-config/preprocess/huntgroups

reading pairlist file /etc/raddb/mods-config/preprocess/hints

  # Instantiating module "IPASS" from file /etc/raddb/mods-enabled/realm

  # Instantiating module "suffix" from file /etc/raddb/mods-enabled/realm

  # Instantiating module "bangpath" from file /etc/raddb/mods-enabled/realm

  # Instantiating module "realmpercent" from file
/etc/raddb/mods-enabled/realm

  # Instantiating module "ntdomain" from file /etc/raddb/mods-enabled/realm

 } # modules

radiusd: #### Loading Virtual Servers ####

server { # from file /etc/raddb/radiusd.conf

} # server

server default { # from file /etc/raddb/sites-enabled/default

 # Loading authenticate {...}

 # Loading authorize {...}

 # Loading preacct {...}

 # Loading accounting {...}

 # Loading post-proxy {...}

 # Loading post-auth {...}

} # server default

server inner-tunnel { # from file /etc/raddb/sites-enabled/inner-tunnel

 # Loading authenticate {...}

 # Loading authorize {...}

 # Loading session {...}

 # Loading post-proxy {...}

 # Loading post-auth {...}

 # Skipping contents of 'if' as it is always 'false' --
/etc/raddb/sites-enabled/inner-tunnel:333

} # server inner-tunnel

radiusd: #### Opening IP addresses and Ports ####

listen {

  type = "auth"

  ipaddr = *

  port = 0

   limit {

   max_connections = 16

   lifetime = 0

   idle_timeout = 30

   }

}

listen {

  type = "acct"

  ipaddr = *

  port = 0

   limit {

   max_connections = 16

   lifetime = 0

   idle_timeout = 30

   }

}

listen {

  type = "auth"

  ipv6addr = ::

  port = 0

   limit {

   max_connections = 16

   lifetime = 0

   idle_timeout = 30

   }

}

listen {

  type = "acct"

  ipv6addr = ::

  port = 0

   limit {

   max_connections = 16

   lifetime = 0

   idle_timeout = 30

   }

}

listen {

  type = "auth"

  ipaddr = 127.0.0.1

  port = 18120

}

Listening on auth address * port 1812 bound to server default

Listening on acct address * port 1813 bound to server default

Listening on auth address :: port 1812 bound to server default

Listening on acct address :: port 1813 bound to server default

Listening on auth address 127.0.0.1 port 18120 bound to server inner-tunnel

Listening on proxy address * port 52906

Listening on proxy address :: port 45602

Ready to process requests


######### OK - it’s up.  At this point, iPhones and some Macs connect w/o
issue to the network, which is a Ubiquiti UDM set for WPA3-Enterprise.

######### The sssoion below is Windows, and I’ve added some notes where it
fails - and it always fails with a relatively useless message and not much
logging on the WIndows box.


(0) Received Access-Request Id 242 from 172.18.2.88:53142 to
172.18.0.200:1812 length 241

(0)   User-Name = "testaccountname"

(0)   NAS-IP-Address = 172.18.2.88

(0)   NAS-Identifier = "d221f9a0801a"

(0)   Called-Station-Id = "D2-21-F9-A0-80-1A:DMATRIXRADIUS1"

(0)   NAS-Port-Type = Wireless-802.11

(0)   Service-Type = Framed-User

(0)   Calling-Station-Id = "34-7D-F6-5C-F0-3A"

(0)   Connect-Info = "CONNECT 0Mbps 802.11a"

(0)   Acct-Session-Id = "647D0607F3640113"

(0)   Acct-Multi-Session-Id = "BF9C52F2C0610E69"

(0)   WLAN-Pairwise-Cipher = 1027081

(0)   WLAN-Group-Cipher = 1027081

(0)   WLAN-AKM-Suite = 1027084

(0)   WLAN-Group-Mgmt-Cipher = 1027084

(0)   Framed-MTU = 1400

(0)   EAP-Message = 0x024c000f0166617268616474657374

(0)   Message-Authenticator = 0x21ae1d454f81c3b02ec5629024122265

(0) # Executing section authorize from file /etc/raddb/sites-enabled/default

(0)   authorize {

(0)     policy filter_username {

(0)       if (&User-Name) {

(0)       if (&User-Name)  -> TRUE

(0)       if (&User-Name)  {

(0)         if (&User-Name =~ / /) {

(0)         if (&User-Name =~ / /)  -> FALSE

(0)         if (&User-Name =~ /@[^@]*@/ ) {

(0)         if (&User-Name =~ /@[^@]*@/ )  -> FALSE

(0)         if (&User-Name =~ /\.\./ ) {

(0)         if (&User-Name =~ /\.\./ )  -> FALSE

(0)         if ((&User-Name =~ /@/) && (&User-Name !~ /@(.+)\.(.+)$/))  {

(0)         if ((&User-Name =~ /@/) && (&User-Name !~ /@(.+)\.(.+)$/))   ->
FALSE

(0)         if (&User-Name =~ /\.$/)  {

(0)         if (&User-Name =~ /\.$/)   -> FALSE

(0)         if (&User-Name =~ /@\./)  {

(0)         if (&User-Name =~ /@\./)   -> FALSE

(0)       } # if (&User-Name)  = notfound

(0)     } # policy filter_username = notfound

(0)     [preprocess] = ok

(0) auth_log: EXPAND
/var/log/radius/radacct/%{%{Packet-Src-IP-Address}:-%{Packet-Src-IPv6-Address}}/auth-detail-%Y%m%d

(0) auth_log:    --> /var/log/radius/radacct/
172.18.2.88/auth-detail-20230314

(0) auth_log:
/var/log/radius/radacct/%{%{Packet-Src-IP-Address}:-%{Packet-Src-IPv6-Address}}/auth-detail-%Y%m%d
expands to /var/log/radius/radacct/172.18.2.88/auth-detail-20230314

(0) auth_log: EXPAND %t

(0) auth_log:    --> Tue Mar 14 12:47:41 2023

(0)     [auth_log] = ok

(0)     [chap] = noop

(0)     [mschap] = noop

(0)     [digest] = noop

(0) suffix: Checking for suffix after "@"

(0) suffix: No '@' in User-Name = "testaccountname", looking up realm NULL

(0) suffix: No such realm "NULL"

(0)     [suffix] = noop

(0) eap: Peer sent EAP Response (code 2) ID 76 length 15

(0) eap: EAP-Identity reply, returning 'ok' so we can short-circuit the
rest of authorize

(0)     [eap] = ok

(0)   } # authorize = ok

(0) Found Auth-Type = eap

(0) # Executing group from file /etc/raddb/sites-enabled/default

(0)   authenticate {

(0) eap: Peer sent packet with method EAP Identity (1)

(0) eap: Calling submodule eap_tls to process data

(0) eap_tls: (TLS) Initiating new session

(0) eap_tls: (TLS) Setting verify mode to require certificate from client.
 # I have added the cert to the client manually for testing as well; no
change

(0) eap: Sending EAP Request (code 1) ID 77 length 6

(0) eap: EAP session adding &reply:State = 0x17dafd421797f0b9

(0)     [eap] = handled

(0)   } # authenticate = handled

(0) Using Post-Auth-Type Challenge

(0) # Executing group from file /etc/raddb/sites-enabled/default

(0)   Challenge { ... } # empty sub-section is ignored

(0) session-state: Saving cached attributes

(0)   Framed-MTU = 994

(0) Sent Access-Challenge Id 242 from 172.18.0.200:1812 to 172.18.2.88:53142
length 0

(0)   EAP-Message = 0x014d00060d20

(0)   Message-Authenticator = 0x00000000000000000000000000000000

(0)   State = 0x17dafd421797f0b987aeb4c90327625f

(0) Finished request

Waking up in 4.9 seconds.

(1) Received Access-Request Id 243 from 172.18.2.88:53142 to
172.18.0.200:1812 length 250

(1)   User-Name = "testaccountname"

(1)   NAS-IP-Address = 172.18.2.88

(1)   NAS-Identifier = "d221f9a0801a"

(1)   Called-Station-Id = "D2-21-F9-A0-80-1A:DMATRIXRADIUS1"

(1)   NAS-Port-Type = Wireless-802.11

(1)   Service-Type = Framed-User

(1)   Calling-Station-Id = "34-7D-F6-5C-F0-3A"

(1)   Connect-Info = "CONNECT 0Mbps 802.11a"

(1)   Acct-Session-Id = "647D0607F3640113"

(1)   Acct-Multi-Session-Id = "BF9C52F2C0610E69"

(1)   WLAN-Pairwise-Cipher = 1027081

(1)   WLAN-Group-Cipher = 1027081

(1)   WLAN-AKM-Suite = 1027084

(1)   WLAN-Group-Mgmt-Cipher = 1027084

(1)   Framed-MTU = 1400

(1)   EAP-Message = 0x024d00060300

(1)   State = 0x17dafd421797f0b987aeb4c90327625f

(1)   Message-Authenticator = 0x8587c64bcf1c58ad0b04ba2f7ec9596e

(1) Restoring &session-state

(1)   &session-state:Framed-MTU = 994

(1) # Executing section authorize from file /etc/raddb/sites-enabled/default

(1)   authorize {

(1)     policy filter_username {

(1)       if (&User-Name) {

(1)       if (&User-Name)  -> TRUE

(1)       if (&User-Name)  {

(1)         if (&User-Name =~ / /) {

(1)         if (&User-Name =~ / /)  -> FALSE

(1)         if (&User-Name =~ /@[^@]*@/ ) {

(1)         if (&User-Name =~ /@[^@]*@/ )  -> FALSE

(1)         if (&User-Name =~ /\.\./ ) {

(1)         if (&User-Name =~ /\.\./ )  -> FALSE

(1)         if ((&User-Name =~ /@/) && (&User-Name !~ /@(.+)\.(.+)$/))  {

(1)         if ((&User-Name =~ /@/) && (&User-Name !~ /@(.+)\.(.+)$/))   ->
FALSE

(1)         if (&User-Name =~ /\.$/)  {

(1)         if (&User-Name =~ /\.$/)   -> FALSE

(1)         if (&User-Name =~ /@\./)  {

(1)         if (&User-Name =~ /@\./)   -> FALSE

(1)       } # if (&User-Name)  = notfound

(1)     } # policy filter_username = notfound

(1)     [preprocess] = ok

(1) auth_log: EXPAND
/var/log/radius/radacct/%{%{Packet-Src-IP-Address}:-%{Packet-Src-IPv6-Address}}/auth-detail-%Y%m%d

(1) auth_log:    --> /var/log/radius/radacct/
172.18.2.88/auth-detail-20230314

(1) auth_log:
/var/log/radius/radacct/%{%{Packet-Src-IP-Address}:-%{Packet-Src-IPv6-Address}}/auth-detail-%Y%m%d
expands to /var/log/radius/radacct/172.18.2.88/auth-detail-20230314

(1) auth_log: EXPAND %t

(1) auth_log:    --> Tue Mar 14 12:47:41 2023

(1)     [auth_log] = ok

(1)     [chap] = noop

(1)     [mschap] = noop.        ###### Should mschap really be noon?  Mschapv2
is what should be inside the tunnel, right?

(1)     [digest] = noop

(1) suffix: Checking for suffix after "@"

(1) suffix: No '@' in User-Name = "testaccountname", looking up realm NULL

(1) suffix: No such realm "NULL"

(1)     [suffix] = noop

(1) eap: Peer sent EAP Response (code 2) ID 77 length 6

(1) eap: No EAP Start, assuming it's an on-going EAP conversation

(1)     [eap] = updated

(1)   } # authorize = updated

(1) Found Auth-Type = eap

(1) # Executing group from file /etc/raddb/sites-enabled/default

(1)   authenticate {

(1) eap: Expiring EAP session with state 0x17dafd421797f0b9

(1) eap: Finished EAP session with state 0x17dafd421797f0b9

(1) eap: Previous EAP request found for state 0x17dafd421797f0b9, released
from the list

(1) eap: Peer sent packet with method EAP NAK (3)
            # Why is Windows sending a NAK?

(1) eap: Peer NAK'd indicating it is not willing to continue

(1) eap: Sending EAP Failure (code 4) ID 77 length 4

(1) eap: Failed in EAP select

(1)     [eap] = invalid

(1)   } # authenticate = invalid

(1) Failed to authenticate the user

(1) Using Post-Auth-Type Reject

(1) # Executing group from file /etc/raddb/sites-enabled/default

(1)   Post-Auth-Type REJECT {

(1) attr_filter.access_reject: EXPAND %{User-Name}

(1) attr_filter.access_reject:    --> testaccountname

(1) attr_filter.access_reject: Matched entry DEFAULT at line 11

(1)     [attr_filter.access_reject] = updated

(1)     [eap] = noop

(1)     policy remove_reply_message_if_eap {

(1)       if (&reply:EAP-Message && &reply:Reply-Message) {

(1)       if (&reply:EAP-Message && &reply:Reply-Message)  -> FALSE

(1)       else {

(1)         [noop] = noop

(1)       } # else = noop

(1)     } # policy remove_reply_message_if_eap = noop

(1)   } # Post-Auth-Type REJECT = updated

(1) Delaying response for 1.000000 seconds

Waking up in 0.3 seconds.

Waking up in 0.6 seconds.

(1) Sending delayed response

(1) Sent Access-Reject Id 243 from 172.18.0.200:1812 to 172.18.2.88:53142
length 44

(1)   EAP-Message = 0x044d0004

(1)   Message-Authenticator = 0x00000000000000000000000000000000

Waking up in 3.9 seconds.

(0) Cleaning up request packet ID 242 with timestamp +42

(1) Cleaning up request packet ID 243 with timestamp +42

Ready to process requests

-- 
Death before dishonour,
Nothing before coffee


More information about the Freeradius-Users mailing list