我有一个使用 Ubuntu 和 IKEv2 协议的 VPN 服务器,使用 StrongSwan。
我们使用 bashuser.sh
脚本创建客户端,但遇到如下问题。
当客户端数量增加到超过 1,000 个用户时,它们不会连接到服务器,而服务器将通过上述命令正确创建帐户。
同时该文件的内容如下user.sh
:
#!/bin/bash
#copyright all right reserved by hjyy
YOUR_VPN_USERNAME=''
YOUR_PASSWORD=''
YOUR_USER_ID=''
[ -n "$VPN_USERNAME" ] && VPN_USER="$YOUR_VPN_USERNAME"
[ -n "$PASSWORD" ] && VPN_PASSWORD="$YOUR_PASSWORD"
[ -n "$USER" ] && USER_ID="$YOUR_USER_ID"
if [ -z "$VPN_EMAIL" ] && [ -z "$VPN_USER" ] && [ -z "$VPN_PASSWORD" ]; then
echo "VPN credentials not set by VPN_USER. Generating random password..."
echo
VPN_USER="$(LC_CTYPE=C tr -dc 'a-z2-9' < /dev/urandom | head -c 5)"
VPN_PASSWORD="$(LC_CTYPE=C tr -dc '2-9' < /dev/urandom | head -c 5)"
USER_ID="$(LC_CTYPE=C tr -dc '1-9' < /dev/urandom | head -c 8)"
fi
if [ -z "$VPN_USER" ] || [ -z "$VPN_PASSWORD" ]; then
exiterr "All VPN credentials must be specified. Edit the script and re-enter them."
fi
echo "Adding VPN_USER setup in progress... Please be patient."
echo
cd /etc/ || exiterr "Cannot enter /etc/strongswan/."
sudo sh -c "echo ' : RSA ike.ovpadd.com.key
$VPN_USER : EAP \"$VPN_PASSWORD\"' >> /var/lib/strongswan/$VPN_USER.secrets.inc"
sudo sh -c "echo 'include /var/lib/strongswan/$VPN_USER.secrets.inc' >> /etc/ipsec.secrets"
chmod -Rf 775 include /var/lib/strongswan/$VPN_USER.secrets.inc
echo "Copyright all right reserved by securedv.net"
echo "username is: $VPN_USER and password is :$VPN_PASSWORD"
echo "please run this code for delete user after <time> : bash d.sh /var/lib/strongswan/$VPN_USER.secrets.inc <time> "
sudo service strongswan restart
exit 0)
剧本有没有错误?
正如我所解释的,使用上述命令创建帐户没有问题,但是当数量增加时,它们都无法连接到服务器;我必须使用上次的备份来解决问题,但在这种情况下我会丢失新创建的用户。
您能建议一下问题的原因吗?
答案1
根据您描述的有关 StrongSwan 未连接的行为新用户或者当增长太多时根本无法连接用户ipsec.secrets
,我们可以肯定地说问题不是脚本中存在错误。
您似乎遇到了文件/缓冲区/内存限制。真正的问题是您的用户群已经超出了当前的设置,例如您的设置可能是较小用户群的理想选择,但并未表明适合那么多用户。
作为临时解决方法,您可以考虑将用户列表分解为多个 VPN 服务器。
然而,从中长期来看,我建议设置一个中央身份验证服务器,无论是 RADIUS、LDAP、MySQL 还是 Active Directory,而不是在 ipsec.secrets
、和建立一个新的基础设施,使 StrongSwan 能够通过它进行身份验证。
该文档仍然将 SQL 插件归类为实验性的。还有 PAM 插件,但我不推荐它们。
FreeRadius 还与后端 LDAP 配置进行对话,如果配置正确,它可以理解更多协议(即 PAP、MSCHAPv2、EAP-PAP和EAP-MSCHAPv2)。使用 RADIUS 协议还带来了将记账数据集中在一个中心点的额外优势。通过正确的设置(即 FreeRadius 在 MySQL 中转储记帐,这是一个可选配置),您可以非常轻松地获得用户使用 VPN 的列表。
因此,虽然更复杂,但我建议您提供与您规模相同的服务,让 StrongSwan 与 FreeRADIUS 对话,并且自由半径使用您的用户和密码与 LDAP 后端对话。
根据官方文档:
使用 RADIUS 进行身份验证(以 FreeRadius 为例)
EAP-Radius eap-radius 插件不直接实现 EAP 方法,但它将与客户端的 EAP 会话重定向到 RADIUS 后端服务器。在网关上,EAP 数据包从 IKE 消息中提取并封装到 RADIUS 协议中,反之亦然。网关本身不需要对特定 EAP 方法的特殊支持,因为它或多或少透明地处理客户端和 RADIUS 后端之间的 EAP 会话。
RADIUS 服务器 该插件应该适用于任何 RADIUS 服务器,我们使用 FreeRADIUS 和 Windows Server 2008 R2 附带的 NPS 服务器成功对其进行了测试。
对于提供 MSK 的 EAP 方法,RADIUS 服务器必须在 MPPE 发送/接收密钥中包含该密钥;不幸的是,2.1.10 之前的 FreeRADIUS 在与 EAP-MSCHAPv2 一起使用时不包含这些属性。
您也可以使用替代方案pfSense,这是一个基于FreeBSD的开源防火墙,具有Web图形界面;您仍然会遇到整理可扩展且可维护的后端的问题。
我还将添加一个示例,即我正在为数千名通过 FreeRadius+Active Directory 进行身份验证的用户管理几个 pfSense IPsec VPN。他们使用 Windows 7 至 10、MacOS、iOS、Linux 和 Android 的本机 VPN 客户端。
另外,涉及与 WHMCS 的集成:免责声明 - 我不熟悉世界健康管理系统。但在我看来,这仅涉及 VPN 解决方案中的计费。我确实怀疑,在将使用情况放入 MySQL 中进行统一的 RADIUS 配置后,仍然需要开发一些软件来将使用情况/计费与 WHMCS 集成。如果不是这样,从不同平台提取客户使用日志的繁重工作要复杂得多。