26
2024
11
10:16:51

Strongswan使用过程中的坑

使用strongswan搭建ipsec环境,遇到了很多问题,查阅了大量资料和文档,做了大量尝试,将一些细节整理出来。本文假设读者有一定的基础知识,也清楚strongswan怎么安装和配置。


1. 证书部署或更新后,必须重启strongswan服务

使用证书进行身份验证是搭建Ipsec环境时最常用的一种技术,证书的生成可以向第三方CA机构申请,也可以自己使用自签名CA根证书来签发。本文采用后一种方式。strongswan使用pki工具来创建证书,


1)创建CA自签名根证书及私钥文件:


#ipsec pki --gen --outform pem > ca.key.pem

#ipsec pki --self --in ca.key.pem --dn "C=CN, O=StrongSwan, CN=StrongSwan CA" --ca --outform pem > ca.cert.pem

2)生成用户私钥文件,并用上面生成的根证书签发用户证书,假设两端的IP分别是192.168.171.129(作为client)、192.168.171.131(作为server),


sudo ipsec pki --gen --size 4096 --type rsa --outform pem > server.key.pem

sudo ipsec pki --pub --in server.key.pem --type rsa | ipsec pki --issue --lifetime 3650 --cacert ca.cert.pem --cakey ca.key.pem --dn "CN=192.168.171.131" --san="192.168.171.131" --flag serverAuth --flag ikeIntermediate --outform pem > server.cert.pem

 

sudo ipsec pki --gen --size 4096 --type rsa --outform pem > client.key.pem

sudo ipsec pki --pub --in client.key.pem --type rsa | sudo ipsec pki --issue --lifetime 3650 --cacert ca.cert.pem --cakey ca.key.pem --dn "CN=192.168.171.129" --san="192.168.171.129" --flag serverAuth --flag ikeIntermediate --outform pem > client.cert.pem

3)将生成的证书分别拷贝到ipsec的证书存放目录,需要拷贝的文件如下:


对192.168.171.129这个client


# cp ca.cert.pem /etc/ipsec.d/cacerts/ca.cert.pem

# cp client.key.pem /etc/ipsec.d/private/client.key.pem

# cp client.cert.pem /etc/ipsec.d/certs/client.cert.pem

 对192.168.171.131这个server


# cp ca.cert.pem /etc/ipsec.d/cacerts/ca.cert.pem

# cp server.key.pem /etc/ipsec.d/private/server.key.pem

# cp server.cert.pem /etc/ipsec.d/certs/server.cert.pem

拷贝完成后,双方就能通过证书建立ipsec通道,但需要注意一个问题,证书部署完成后,或者更新过,并不会立即生效,必须重启strongswan服务(strongswan-starter)才能生效。


# systemctl restart strongswan-starter.service

你也可以通过 ipsec restart来实现重启服务。另外,为了确保证书已经部署到位,你可以使用ipsec listcerts命令来查看已经部署好的证书:


f40728c205c7f1cb2b95ecfb74b124f4_6f18352ba9f9412e8ebff13ed773164c.png


图中圈出来的地方,尤为重要,如果证书没有部署好,或私钥文件与证书不匹配,这里是没有这句话的。证书部署后没有重启服务,或者证书部署错误,都会为后面的建立连接带来不可预料的问题,所以强烈建议大家通过ipsec listcerts命令检查自己部署的证书。


2.证书中的CN字段非常重要

创建证书时,我们会通过参数设定CN字段的值,这个值可以算作证书的一个标识,通常我们可以设置为IP地址、域名、甚至email、随便一个唯一字符串。但这里设置的内容,一定要对应到ipsec.conf文件中的leftid(或rightid)。strongswan会通过leftid(或rightid)来匹配证书,如果不一致,就会出错,无法通过验证。例如,按上面生成的证书,ipsec.conf文件正确的配置如下:


对192.168.171.129这个client


# ipsec.conf - strongSwan IPsec configuration file

# basic configuration

 

config setup

        # strictcrlpolicy=yes

        # uniqueids = no

 

conn %default

    ikelifetime=60m

    keylife=20m

    rekeymargin=3m

    keyingtries=1

    keyexchange=ikev2

    auto=add

 

conn host-host

 

    left=192.168.171.129

    leftid=192.168.171.129

    leftcert=client.cert.pem

 

    right=192.168.171.131

    rightid=192.168.171.131

 

    


 对192.168.171.131这个server


# ipsec.conf - strongSwan IPsec configuration file

# basic configuration

config setup

        charondebug="ike 1, knl 1, cfg 0, net 1"

        strictcrlpolicy=no

        uniqueids=no

        cachecrls=no

 

conn %default

     ikelifetime=60m

     keylife=20m

     rekeymargin=3m

     keyingtries=1

     keyexchange=ikev2

     auto=add

 

conn ipsec-ikev2-vpn

     left=192.168.171.131

     leftid=192.168.171.131

     leftcert=server.cert.pem

 

     right=192.168.171.129

     rightid=192.168.171.129

     rightauth=pubkey

 

 


其中leftcert就是证书的名称,leftid就是证书的标识,这个标识一定要和创建证书时设定的CN一致。




当然CN也不一定设置为IP,也可以设置为域名、email等,甚至一个特殊字符串都可以,只要不重复即可。


3. ipsec与 swanctl

The stroke utility is a small helper tool invoked by the ipsec command to control and monitor IPsec connections.


ipsec命令是stroke插件提供的管理ipsec连接的工具。目前已经被swanctl替代。但大量的资料和demo是使用这种方式。它使用的配置文件是:


/etc/ipsec.conf


swanctl is a command line utility to configure, control and monitor the IKE charon daemon via the vici interface plugin.


swanctl是vici插件提供的新一代的strongswan的管理控制工具,它使用的配置文件是:


 /etc/swanctl/swanctl.conf


这两个命令互不相干,配置文件也各自独立,互不相关。你可以选择只用一种,或两种都使用也没关系。也就是说,如果使用ipsec来控制strongswan,你就需要配置/etc/ipsec.conf文件,并将证书、私钥等文件拷贝到/etc/ipsec.d/目录下的对应位置; 如果你使用swanctl命令来控制strongswan,你就需要配置/etc/swanctl/swanct.conf文件,并将证书、私钥等文件拷贝到/etc/swanctl/目录下的对应位置。如果你修改了ipsec.conf文件,然后用swanctl命令来操作,就完全在做无用功。


4. 修改配置文件后必须reload

修改了ipsec.conf文件后,必须使用 ipsec reload命令来重新加载配置文件。


修改了ipsec.secrets文件后,必须使用ipsec rereadsecrets来加载。


修改了swanctl.conf文件后,必须使用 swanctl --load-all来加载。


否则,不起作用!

————————————————




推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

本文链接:https://hqyman.cn/post/8594.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏





休息一下~~


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

请先 登录 再评论,若不是会员请先 注册

您的IP地址是: