0x01 前言
今天在维护家庭网络时发现strongswan日志中存在许多连接失败的记录,而且都是IKEv2协议的。经过排查后发现是配置文件中一个值设置错误所导致的。
安装过程可以参考我之前写的文章:配置基于StrongSwan 的IKEv2
0x02 错误
客户端使用IKEv2协议连接VPN服务器时会一闪而过,不能正常连接。在日志中可以看到以下记录:
Dec 7 05:49:50 26[CFG] <5> no matching peer config found
这意思是客户端传入到服务器中的信息,在服务器中找不到可用的配置与之相适应。
0x03 原因
找到问题,现在来检查配置文件以便找到原因。以下是IKEv2的相关配置信息(敏感信息已经隐藏):
#打开文件 [root@c1 ~]# vim /usr/local/ipsec/etc/ipsec.conf #IKEv2配置信息 conn IKEv2_EAP_Crt keyexchange = ikev2 eap_identity = %identity leftcert = serverCert.crt leftauth = pubkey leftid = @foo rightauth = eap-radius rightsendcert = always leftsendcert = always
IKEv2有两个很总要的信息需要确认,一个是数字证书,证书必须正确配置ca、crt和key三个文件。其中服务器证书serverCert.crt中subject DN或subjectAltName字段必须包含服务器的IP或域名。
在这里我确定我的证书的配置是正确的,最后可以确定问题出在服务器域名与证书域名的匹配问题上。在上面的配置信息中最让我感到疑惑的是leftid这个配置信息。
通过查找wiki(ipsec.conf: conn <name>),我终于知道为什么会链接不上了。wiki中关于left|rightid有一段说明:
how the left|right participant should be identified for authentication; defaults to left|right or the subject of the certificate configured with left|rightcert. If left|rightcert is configured the identity has to be confirmed by the certificate, that is, it has to match the full subject DN or one of the subjectAltName extensions contained in the certificate. Can be an IP address, a fully-qualified domain name, an email address or a Distinguished Name for which the ID type is determined automatically and the string is converted to the appropriate encoding. The rules for this conversion are described on IdentityParsing. In versions before 5.0.0 fully-qualified domain names can be preceded by an @ to avoid them being resolved to an IP address.
大意是:
left|rightid应该在用户认证过程中进行鉴别,同时left|rightcert的值应该是left|rightcert数字证书中的subject DN或subjectAltName中的值。left|rightid可以是IP地址、域名、邮箱地址甚至是证书中可以辨识的名称。
0x04 解决
问题很简单,解决图途径也很简单。根据上面的解释,我只需要将leftid中的值替换为证书的域名即可:
leftid = @foo.com
然后重启ipsec:
[root@c1 ~]# /usr/local/ipsec/sbin/ipsec restat
0x05 结语
一切又恢复正常。