RADIUS 认证服务器

RADIUS 协议概述

RADIUS(Remote Authentication Dial-In User Service)是 WiFi 企业网络的核心认证基础设施,定义了客户端(NAS/AP)与认证服务器之间的通信协议。

协议基础

属性

传输协议

UDP

认证端口

1812 (或传统的 1645)

计费端口

1813 (或传统的 1646)

加密方式

MD5-based(仅部分字段加密)

RADIUS 消息类型

Type

名称

方向

说明

1

Access-Request

NAS→Server

认证请求

2

Access-Accept

Server→NAS

认证成功

3

Access-Reject

Server→NAS

认证失败

4

Accounting-Request

NAS→Server

计费记录

5

Accounting-Response

Server→NAS

计费响应

7

CoA-Request

Server→NAS

变更授权(动态策略)

28

Disconnect-Request

Server→NAS

强制断开用户

RADIUS 属性系统

RADIUS 使用类型-长度-值(TLV)格式的属性传递信息:

┌──────────┬──────────┬──────────────┐
│ Type (1) │ Length (1)│ Value (var)  │
└──────────┴──────────┴──────────────┘

WiFi 认证关键属性

Attribute

Type

说明

User-Name

1

用户名

User-Password

2

密码(加密)

NAS-IP-Address

4

AP 的 IP 地址

NAS-Identifier

32

AP 的名称/ID

Called-Station-ID

34

AP 的 BSSID (目标)

Calling-Station-ID

37

STA 的 MAC 地址 (源)

EAP-Message

79

EAP 载荷(分片传输)

Message-Authenticator

80

防重放/完整性校验

WiFi 密钥分发属性

WPA/WPA2 Enterprise 需要 RADIUS 传递密钥材料:

MSK (Master Session Key) = 64 bytes
PMK (Pairwise Master Key) = MSK[0:32]

RADIUS 不直接发送 MSK,而是通过 vendor-specific attributes:

Microsoft:
  EAP-MPPE-Keys (Vendor-Specific, VendorID=311)
  → 包含 MSK 的加密版本

标准方式:
  RADIUS 使用 Shared Secret 对 MSK 进行加密传输

FreeRADIUS 配置示例

基本 sites-enabled 配置

authorize {
    preprocess
    chap
    mschap
    suffix "files"    # 本地用户文件
    # suffix "ldap"   # LDAP 集成
    eap {
        if (ok) {
            update control {
                Auth-Type := EAP
            }
        }
    }
}

authenticate {
    Auth-Type PAP {
        pap
    }
    Auth-Type CHAP {
        chap
    }
    Auth-Type MS-CHAP {
        mschap
    }
    eap {
        if (userlock) {
            reject
        }
        if (noop) {
            ok
        }
    }
}

post-auth {
    exec
    logintime
    # 审计日志
}

EAP 配置(eap.conf)

eap {
    default_eap_type = tls
    timer_expire = 60
    ignore_unknown_eap_packets = yes

    tls {
        private_key_file = ${certdir}/server.key
        certificate_file = ${certdir}/server.crt
        CA_file = ${certdir}/ca.crt
        cipher_suite = "DEFAULT:!aNULL:!eNULL:!3DES:!RC4"
        tls_version_min = "1.2"
    }

    ttls {
        default_eap_type = mschapv2
    }

    peap {
        default_eap_type = mschapv2
    }
}

RADIUS 高可用架构

负载均衡与故障转移

                    ┌──────────┐
                    │ Load     │
         AP们 ─────→│ Balancer │
                    └────┬─────┘
                         │
                  ┌──────┴──────┐
                  ▼             ▼
            RADIUS-1       RADIUS-2
           (Primary)      (Secondary)
                  │             │
                  ▼             ▼
              SQL/LDAP Database

配置:
- AP 配置多个 RADIUS 服务器(主+备)
- 主服务器无响应 → 自动切换到备用
- 共享用户数据库确保一致性

WLC 上的 RADIUS 配置示例

primary key radius-server identifier RADIUS1 ip-address 10.0.1.10 auth-port 1812 acct-port 1813
secondary key radius-server identifier RADIUS2 ip-address 10.0.1.11 auth-port 1812 acct-port 1813

wlan 1
  security dot1x authentication primary server-group RADIUS-GROUP
  security dot1x authentication fallback server-group RADIUS-BACKUP

RADIUS 安全最佳实践

措施

说明

使用强 Shared Secret

≥32 字符,每个 NAS 独立密钥

启用 Message-Authenticator

防止重放和篡改攻击

IP 白名单

只允许已知 AP/WLC 的 IP 连接

RADIUS over TLS (radsec)

RFC 6678,加密整个 RADIUS 交换

定期审计日志

监控异常认证模式