我有一个OpenVPN的设置,其中整个类的客户端(embedded式设备)共享相同的客户端证书。
但是,它们可以通过它们的主机名来识别(无论如何都是从硬件ID派生出来的) – 我希望能够通过分配不同的IP地址(我知道所有的主机名),或者通过分配他们在我所控制的区域中使用不同的dynamicDNS条目。
任何一个选项都可以 – 但是如何从客户端获取这些信息到脚本serverside?
OpenVPN似乎没有提供任何关于通用名称以外的客户的信息,所以没有一个好方法来做到这一点。 但是,除了证书身份validation之外,您还可以通过使用用户名/密码身份validation来破解一些内容,并且每个设备的用户名都是唯一的。
在服务器configuration中:
auth-user-pass-verify /etc/openvpn/auth-accept.sh via-env auth-user-pass-optional username-as-common-name
不要设置client-cert-not-required – 真正的身份validation仍将使用证书完成。 auth-accept.sh是一个总是表示成功validation的虚拟脚本:
#!/bin/sh exit 0
客户端应configuration为提供用户名/密码authentication(以及证书authentication):
auth-user-pass /etc/openvpn/devicename
devicename然后包含每个设备的唯一用户名和一个虚拟密码:
device001 password