我有一个 OpenVPN 设置,其中整个客户端类别(嵌入式设备)共享相同的客户端证书。
但是,它们可以通过主机名(无论如何都是从硬件 ID 派生出来的)来区分 - 我希望能够在服务器端区分它们,无论是通过为它们分配不同的 IP 地址(我知道那里的所有主机名),还是通过为它们分配我控制范围内的区域中的不同动态 DNS 条目。
两种选择都可以 - 但是我如何将这些信息从客户端传输到脚本服务器端?
答案1
OpenVPN 似乎不提供除通用名称之外的任何客户端信息,因此没有很好的方法来实现这一点。不过,除了证书身份验证之外,您还可以使用用户名/密码身份验证,并且每个设备的用户名都是唯一的。
在服务器配置中:
auth-user-pass-verify /etc/openvpn/auth-accept.sh via-env
auth-user-pass-optional
username-as-common-name
不要设置client-cert-not-required
——真正的身份验证仍将使用证书进行。auth-accept.sh
是一个始终指示身份验证成功的虚拟脚本:
#!/bin/sh
exit 0
然后应配置客户端以提供用户名/密码认证(以及证书认证):
auth-user-pass /etc/openvpn/devicename
devicename
然后包含每个设备的唯一用户名和一个虚拟密码:
device001
password