linux端连不上ikev2

  • 客户端指NetworkManager-strongswan-gnome,而不是vpnc
  • 有几个坑
    1. 客户端填写的服务端identity,必须是服务端的SAN字段内的值
    2. linux不信任当前lets encrypt的证书链的根证书DST X3,需要把文件复制到/etc/strongswan/ipsec.d/cacerts
    3. 客户端与为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