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命令来查看已经部署好的证书:

图中圈出来的地方,尤为重要,如果证书没有部署好,或私钥文件与证书不匹配,这里是没有这句话的。证书部署后没有重启服务,或者证书部署错误,都会为后面的建立连接带来不可预料的问题,所以强烈建议大家通过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来加载。

否则,不起作用!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值