?最近要使用ipsec vpn 还要结合国密 而且在边缘端使用, 好像用这个库比较好~ 还有结合国密的 先弄个简单教程~
1. 背景
有关VPP以及VPP_SSWAN的内容自行百度吧。
感觉可能是第二个参考连接给的配置可能有问题,按照第一个连接的配置来。
这里同时也记载一下自己的配置。
(1) StrongSwan配置、运行及测试
(2) IP 安全与 IPsec 协议,实验A :使用Strongswan 建立两台 PC 间安全通信
https://zhuanlan.zhihu.com/p/100535851
2. 环境
2.1. 版本
2.2. 拓扑
更新了下拓扑。
现在基本的路由的框架应该都搭起来了。不过如果并不能保证都能ping通,如果不能通,大概就是没有路由,或者地址掉了。总之,需要的是:H3 ping H5以及H1 ping H2都能通即可。后续需要使用到。
还是建议使用FRR-BGP或其他路由协议去搭建,这样自己手动配置有些麻烦。
上面仅是demo, 实际测试找俩个机器就可了
3. 安装strongSwan
先安装必须的库
使用二进制包也行,就是用sudo apt install strongswan strongswan-swanctl,还有没有需要安装的我不晓得。
考虑到我以后可能修改代码的需求,所以我得需要从源码安装。
我需要的隧道在H3=H5之间,所以只需要给他们安装strongSwan就行了。H4用于查看抓包,H1-H2用于通信。实质上应该H3\H4\H5三台机器也是可以的。
安装完毕,验证下版本:
4. 配置
按照那两个一开始的参考说的,现在使用的都是swanctl了,而不使用starter的方式了。
通用配置是指strongSwan的配置
ipsec.conf/ipsec.secret/ipsec.d的配置文件已经不再使用
swanctl的配置文件
** 请注意,如果按照我上面源码安装的,默认的配置文件是在/usr/local/etc中;但是我这里是在使用VPP的vpp_sswan插件安装的,改了默认配置文件地址,在/etc中。**,下面使用CONF_PREFIX替代目录。
我这里先用psk(preshared key,也就是没有使用证书以及IKE呗)测试一下。后面再学习IKE。
4.1. H3配置
打开${CONF_PREFIX}/swanctl/conf.d/h3.conf。需要使用你自己的地址。文件名不重要。
4.2. H5配置
打开${CONF_PREFIX}/swanctl/conf.d/h5.conf。需要使用你自己的地址。文件名不重要。
4.3. 说明
h2h是连接的名字,启动协商的时候需要使用到。
secrets 下是用于认证的密钥信息,本实验中使用 PSK,预共享方式。auth也要设置为psk
id就是标识,随便起,不冲突能够标识就行(当然要自己能看懂、有意义啊)
如果不配置local_ts和remote_ts字段,则对所有的ip报文加解密。如果指定上述字段,则是对指定的数据流进行加密。设置这个注意是成对的,两个配置是相反的。否则可能会报错:“Traffic Selectors Unacceptable”。不设置的情形没有测试。
5. 测试
5.1. 在H3和H5开启ipsec
5.2. 在H1 ping H2
5.3. 在H4抓包
查看H4抓包,可以看到抓的包已经经过了ESP的处理,且使用的是隧道的地址。
6. 问题记录
使用swanctl --load-all,有时候无法连接上,即便使用了ipsec start也不行,会显示
具体原因不知道,怎么解决也不知道。
可以使用下面的这个命令,
但是这个命令启动之后,可能还是无法解决问题,查看journalctl -xe会找到
这个时候就只能等着了,等过一会儿它自己就好了。怀疑是我配置有问题,但是不知道到底哪里有问题。所以每次修改了配置重启都很痛苦。
最后排查发现,可能就是差了一个sudo systemctl restart strongswan.service,所以还是把这个服务给启动吧,然后上述解决步骤应该就不需要了。
以上原文: https://blog.51cto.com/basilguo/6963463
/# 直接下载 可能木有~~
试试能不能从 pool/universe/s/strongswan/ 下载 就不用编译了~ http://ftp.sjtu.edu.cn/ubuntu/pool/universe/s/strongswan/
原版的命令安装
直接yum 和apt也可
/# 编译
[有点恶心啊 编译报错] <编译带国密版本-- 关闭也不行 > ===但是我 docker 18.04 没有问题~~ 桌面版本报的这个错~~
../../libtool: eval: line 7963: unexpected EOF while looking for matching `"'
../../libtool: eval: line 7964: syntax error: unexpected end of file
Makefile:1744: recipe for target 'libstrongswan.la' failed
make[5]: *** [libstrongswan.la] Error 2
make[5]: Leaving directory '/media/root/Disk21/strongswan-master/src/libstrongswan'
Makefile:2057: recipe for target 'install-recursive' failed
make[4]: *** [install-recursive] Error 1
make[4]: Leaving directory '/media/root/Disk21/strongswan-master/src/libstrongswan'
Makefile:2214: recipe for target 'install' failed
make[3]: *** [install] Error 2
make[3]: Leaving directory '/media/root/Disk21/strongswan-master/src/libstrongswan'
Makefile:536: recipe for target 'install-recursive' failed
make[2]: *** [install-recursive] Error 1
make[2]: Leaving directory '/media/root/Disk21/strongswan-master/src'
Makefile:593: recipe for target 'install-recursive' failed
make[1]: *** [install-recursive] Error 1
make[1]: Leaving directory '/media/root/Disk21/strongswan-master'
Makefile:890: recipe for target 'install' failed
make: *** [install] Error 2
//# x86编译, 按代码里的指南~~ 已完成
//# arm 交叉编译, 有一丢丢不一样~~ 已完成
//# 带国密版本的代码库
https://github.com/zhangke5959/strongswan
https://github.com/highland0971/strongswan-gmalg-merge
感谢大佬的代码
//# 配置可是太烦了
参考1 https://help.aliyun.com/zh/vpn/configure-strongswan?utm_content=g_1000230851
//# 关于使用 ( 我主要是在arm中 ,所以总结的问也是arm中的 )
命令:
charon ( ipsec start看不出个对错 , 所以用这个起看下 )
应该这俩个导致启动失败, 其实都是一个原因arm没tun, 但一般内核是有的就是没开启 需要重新编译一下了, 每个平台不一样 ,所以自己搞吧 <最后更新了系统内核okay了, strongswan正常启动了>
//1 ( 建个文件去就行,不过正常应该自己能生成啊 不用手动建,建完了 后面还是报错 )
00[LIB] failed to open /dev/net/tun: No such file or directory
00[KNL] failed to create TUN device
//2 ( 系统里没tun的问题上面也是~~ )
00[LIB] failed to configure TUN device: Inappropriate ioctl for device
00[KNL] failed to create TUN device
ipsec start
之前都用这个命令
ipsec status
成功 :
Security Associations (0 up, 0 connecting):
none
不成功 : 无返回
swanctl --load-all
没启动成功时:
connecting to 'unix:///var/run/charon.vici' failed: Connection refused
Error: connecting to 'default' URI failed: Connection refused
ipsec up xxx
[ 背景是自己连自己测试 ] < 错误细节看 var/log/syslog >
错误1:
控制台
received NO_PROPOSAL_CHOSEN notify, no CHILD_SA built
failed to establish CHILD_SA, keeping IKE_SA
log
[ESP] xxxxx
看出算法不对
解决
秘钥协商不对 , 好纳闷 不明觉厉 修改配置( proposals 都删了 想使用默认也不行 ) 换个算法 , 用3des吧 果然这个问题过了
esp_proposals =3des-sha1
proposals =3des-sha1-modp1536
或
esp_proposals =aes128-sha1
proposals = aes128-sha256-modp3072,aes128-sha1-modp2048
再或 这俩结合
错误2:
控制台
failed to install SAD entry: already installed
failed to install SAD entry: already installed
unable to install inbound and outbound IPsec SA (SAD) in kernel
failed to establish CHILD_SA, keeping IKE_SA
parsed INFORMATIONAL response 2 [ D ]
log
[ESP] error: IPsec SA is not inbound
[ESP] failed to install SAD entry: already installed
[IKE] unable to install inbound and outbound IPsec SA (SAD) in kernel
[IKE] failed to establish CHILD_SA, keeping IKE_SA
但是 ipsec statusall 看着好像成功了, 看来1台机器有点费劲 <好像就不能这样啊,1台自己连自己>
Connections:
h2h: 192.168.0.232...192.168.0.232 IKEv2
h2h: local: uses pre-shared key authentication
h2h: remote: uses pre-shared key authentication
h2h: child: 192.168.0.0/24 === 192.168.0.0/24 TUNNEL
Security Associations (2 up, 0 connecting):
xxxx 省略
两台机器的测试 - 连接是成了
看是否真用到了ipsec传输哈 - 用 tcpdump -i ipsec0 看下能接收到数据就是连通
错误1: ssh崩了 关了ipsec ssh恢复~~ 不知道哪里配置错误 <因为我俩个ip一个网段下的 一个 0.1 一个0.2>[ 这个太恶心了 只有在arm时这样, linux时可以正常 ]
错误2: 错误描述: 用strongswan建立ipsec连通后,互Ping内网地址不通
[ 原因 应该还是路由没配好 影响了 所有流量都加密所以不行,应该是配置错误 ]
---- linux 成功,带国密, ssh正常
国密国际密码都可以一个版本都可以跑
用ping测试 ( 两边都通正确, 配置错误时ping不通但另一边也可收到 )
tcpdump -i ipsec0 虚拟网卡看未加密数据, 连接成功
tcpdump -i enp6s18 port 4500 主网卡看加密数据, 证明真的通了 (主网卡的名都变了)
注意1: 一定要给虚拟网卡设置ip 和加路由 ,在启动后,up前
也可以在/opt/ss-gmalg/libexec/ipsec/_updown (脚本文件)中加 , 要是不会 就手动吧~ 只不过重启ipsec就没了~
ifconfig ipsec0 172.16.0.2 netmask 255.255.255.0 或 ip addr add 172.16.0.1/24 dev ipsec0
ip r a 172.16.0.1 dev ipsec0 ( 经测试应该没用 ,否则iptables save应该有东西)
注意2:
虚拟ip的网段哦~
local_ts = 192.168.25.0/24
remote_ts = 192.168.13.0/24
---- arm 不带国密正常,ssh也不影响拉,带国密的待研究
国密报错: load插件时 并没有gmalg
日志 configured DH group CURVE_SM2 not supported
最后通过配置修改,可以了 但是国密能用国际密就不行了(暂时俩种分开编译使用),插件显示有,但好多算法用不了
--- 说到这里来个算法汇总描述
ifconfig
看看链接成功了吗 , 成功 rx tx 都有数据哦~~
//# 使用模式
直接下载命令安装的 应该是不带tun的 用内核态的xfm的 ,自己编译的话国密版本的 应该是默认带了--enable-libipsec 这个就是用了tun 但性能肯定不如xfm哈~
//# 单片机上的vpn
顺便问一下单片机上的ipsec还有wireguard有人搞过吗?
======
-------
whaosoft aiot