我们已经安装并配置了strongswan
具有用户名/密码身份验证的 VPN 服务器。是否可以将用户的凭据存储在MySQL
后端并配置 strongswan 以将后端用于此目的?
到目前为止,我只找到了一个用于配置目的的 mysql 插件和使用 AAA、radius 等的 Xauth 后端。不幸的是,这不是我们需要的。
答案1
这sql 插件提供配置详细信息,以及存储在数据库中的凭据。不需要将所有内容都存储在数据库中,并且可以将数据与其他插件提供的数据相结合。因此,可以使用中风插件提供来自的配置ipsec.conf
和来自的证书,/etc/ipsec.d/
但在数据库中定义用于 EAP/XAuth 身份验证的用户名和密码,而不是在 中ipsec.secrets
。由 提供的驱动程序mysql插件需要sql插件访问 MySQL 数据库。
如上所述,您可以忽略提供配置的表,而只需分别在shared_secrets
和identities
表中定义机密和用户名,并通过shared_secret_identity
表将它们关联起来。id2sql
脚本(未安装,但内置scripts
在 strongSwan 构建目录中的文件夹中)提供了一种生成表条目的简单方法identities
。
以下是一些示例 SQL 数据(有关类型的更多信息可以找到这里):
INSERT INTO identities (
type, data
) VALUES ( /* type=ID_RFC822_ADDR, [email protected] */
3, X'6361726f6c407374726f6e677377616e2e6f7267'
);
INSERT INTO shared_secrets (
type, data
) VALUES ( /* type=SHARED_EAP/XAUTH, data=Ar3etTnp01qlpOgb */
2, X'4172336574546e703031716c704f6762'
);
/* assumes the entries above are the first ones in their respective
* tables, as their id column is auto_increment */
INSERT INTO shared_secret_identity (
shared_secret, identity
) VALUES (
1, 1
);
答案2
对于那些偶然发现这个问题的人,我使用了这个优秀的指南:https://www.cl.cam.ac.uk/~mas90/resources/strongswan进行基本设置,然后按照上述方法设置数据库条目。
之后,我使用免费的 letsencrypt 证书和我在 中CN="myvpnserver.mydomain.com"
设置的 so 。然后,我在 mysql 表标识中添加了一个条目,类型为“2”和数据(必须使用 strongswan 中的 id2sql 脚本来转换数据条目)。然后,我从我的标识数据库中获取了该条目的自动分配的 ID 号和与上一个条目类似的共享密钥 ID,以便像这样进入 shared_secret_identity:leftcert=myvpnserver.mydomain.com
ipsec.conf
'myvpnserver.mydomain.com'
INSERT INTO shared_secret_identity (shared_secret, identity) VALUES ( id_of_user_logging_in_that_was_set_in_shared_secrets_database, automatically_assigned_id_number_for_myvpnser.mydomain.com_in_identities_database );
之后它就起作用了。