nmcli在现代RHEL/CentOS 8+/Fedora等系统中可原生配置有线802.1X认证,需满足NetworkManager≥1.22、安装wpa_supplicant、正确设置802-1x.eap、identity、password等参数,并通过nmcli connection up激活连接。

,它依赖 NetworkManager 后端(如 `libreswan`、`wpa_supplicant` 或 `eapol_test`)和外部配置文件协同工作。但现代 RHEL/CentOS 8+/Fedora/Rocky Linux 等系统中,**NetworkManager 已通过 `802-1x` 设置块原生支持有线 802.1X 认证**,只需用 `nmcli` 正确设置连接参数即可,无需手动改 `/etc/NetworkManager/system-connections/` 文件。 以下是实际可行、经验证的配置流程:
确认环境与前提条件
确保满足以下几点:
- NetworkManager 版本 ≥ 1.22(RHEL 8.2+、Fedora 31+ 默认满足);
- 网卡已识别且未被其他服务(如 `systemd-networkd`)接管;
- 已安装 `wpa_supplicant`(NetworkManager 用它处理 EAP 认证):
yum install wpa_supplicant或dnf install wpa_supplicant; - 物理线路连通,交换机端口已启用 802.1X(如 Cisco 的
dot1x port-control auto); - 你已获取认证所需信息:用户名、密码(或证书路径)、EAP 方法(如
peap、ttls、tls)、CA 证书(如有)、匿名身份(如anonymous@domain.com)。
创建带 802.1X 的有线连接
以连接名为 corp-wired、设备为 enp0s3 为例:
nmcli connection add type ethernet con-name corp-wired ifname enp0s3
然后添加 802.1X 参数(以 PEAP-MSCHAPv2 为例):
nmcli connection modify corp-wired \ 802-1x.eap peap \ 802-1x.identity 'user@domain.com' \ 802-1x.anonymous-identity 'anonymous@domain.com' \ 802-1x.password 'your_password' \ 802-1x.ca-cert '/etc/pki/tls/certs/ca-bundle.crt' \ 802-1x.phase2-auth mschapv2
若使用 TLS(证书认证),则替换为:
nmcli connection modify corp-wired \ 802-1x.eap tls \ 802-1x.identity 'user@domain.com' \ 802-1x.client-cert '/path/to/client.p12' \ 802-1x.private-key '/path/to/client.key' \ 802-1x.private-key-password 'key_pass' \ 802-1x.ca-cert '/path/to/ca.crt'
启用并调试连接
激活连接:
nmcli connection up corp-wired
查看实时状态与日志:
- 检查连接是否“connected”:
nmcli connection show corp-wired | grep GENERAL.STATE; - 查看详细认证过程:
journalctl -u NetworkManager -f | grep -i "802-1x\|EAP\|wpa"; - 确认接口是否获得 IP:
ip -4 a show dev enp0s3; - 若失败,常见原因包括 CA 证书路径错误、EAP 阶段2配置不匹配、交换机未响应 EAP-Request Identity 等。
安全与持久化建议
避免明文密码暴露:
- 用
nmcli connection modify corp-wired 802-1x.password-flags 1启用密钥环存储(需 GNOME Keyring 或 `libsecret`); - 生产环境推荐使用 TLS + 客户端证书,禁用密码认证;
- 设置自动连接:
nmcli connection modify corp-wired connection.autoconnect yes; - 锁定到指定设备(防误配到其他网卡):
nmcli connection modify corp-wired connection.interface-name enp0s3。











