linux端连不上ikev2
- 客户端指NetworkManager-strongswan-gnome,而不是vpnc
- 有几个坑
- 客户端填写的服务端identity,必须是服务端的SAN字段内的值
- linux不信任当前lets encrypt的证书链的根证书DST X3,需要把文件复制到/etc/strongswan/ipsec.d/cacerts
- 客户端与为windows编写的配置的ikev2交互时,会出现proposal not chosen
- 可以抓包看看IKE阶段客户端提出的proposal
- 然后根据wiki,写出相应的ike与esp配置
- 通过逗号添加到现有允许的密码套件列表
- 而ESP阶段的proposal协商是在加密之中的,所以只能慢慢猜
- 第一次试了esp使用的默认套件就是通过的
- 最后是下面这样,其中后面的一个套件是为此客户端定制的
- ike=aes256-aes128-3des-sha1-modp1024,aes256-sha256-prfsha256-ecp256!
- esp=aes256-3des-sha256-sha1,aes128-sha256-modp3072!
ipsec.secrets的selector问题
- 学strongswan看了一圈的文档,除了官方文档外,opensuse wiki的一篇文章是学到东西最多的
- 但是文中在ipsec.secrets章节中表达了当一条secret的selector字段有多个值时,selector的前后顺序有很大关系
- 然而经过测试和查阅官方文档相关章节,发现每个selector之间并无关系
- 不过还是要需要文档中提到的
an entry with multiple selectors will match a host and peer if the host ID and peer ID each match one of the selectors.
- 当有多selector时,虽然顺序不重要,但是本端和对端都要能够匹配到其中一个
- 不过还是要需要文档中提到的
- 当仅有一个selector时,
an entry with one selector will match a host and peer if the selector matches the host's ID (the peer isn't considered)
- 匹配的是本端id,而不是对端id
- 最后提到多selector是最适合用于psk认证的,即两端都需要知道本条secret
/etc/ipsec.d/cacerts文件夹
- 需要存放除服务端证书的整个证书链,如letsencrypt签发后提供的chain.pem