一、安装
1、 通过EPEL安装
yum -y install epel-release && yum -y install strongswan strongswan-libipsec
2. 编译安装
1、安装依赖库
|
|
2、下载strongswan并解压
|
|
3、编译Strongswan
- OpenVZ使用如下命令
|
|
- Xen、KVM使用如下命令
|
|
4、编译并安装
make; make install
编译完成后如果没有报错,且使用ipsec version指令能出现版本信息,则表示安装成功.
二、配置证书
1、生成CA证书的私钥
|
|
在Fedora/RH/CentOS的一些包里,ipsec命令被重命名为strongswan。
2、使用私钥,签名CA证书
|
|
这里 –self 表示自签证书,–in 是输入的私钥,–dn 是判别名,–ca 表示生成 CA。这里需要解释下判别名: - C 表示国家名,同样还有 ST 州/省名,L 地区名,STREET(全大写) 街道名。 - O 表示组织名。 - CN 为通用名。
3、生成服务器证书所需的私钥
|
|
4、用CA证书签发服务器证书
确认访问服务器的IP地址或域名,连接时不可使用其它地址,只能使用证书中的地址,请将下面一句命令中的123.123.123.123替换为自己服务器的IP地址或域名,连接时使用,一共需要替换两处
|
|
注意以上命令中的”C=”和”O=”的值要与第2步CA中的C,O的值保持一致.
5、生成客户端证书所需的私钥
|
|
6、用CA签名客户端证书
|
|
C,O的值要与上面第2步CA的值一致,CN的值随意。
7、生成pkcs12证书
|
|
8、安装证书
|
|
三、配置Strongswan
1、编辑ipsec.conf文件
vim /etc/strongswan/ipsec.conf
修改为
|
|
2、编辑strongswan.conf文件
vim /usr/local/etc/strongswan.conf
修改为
|
|
3、配置口令
vim /usr/local/etc/ipsec.secrets
输入
|
|
注意将PSK、XAUTH处的”mykey”编辑为唯一且私密的字符串,并且将[用户名]改为自己想要的登录名,[密码]改为自己想要的密码([]符号去掉),可以添加多行,得到多个用户。
四、修改系统转发以及防火墙配置
1、编辑/etc/sysctl.conf
将net.ipv4.ip_forward=1一行前面的#号去掉,保存后执行sysctl -p
。
如果出现错误信息:
则执行:
2、配置iptables
(适用于CentOS 6,CentOS 7系统请问谷娘)
- OpenVZ执行:
|
|
- Xen、KVM则执行:
|
|
3、开机自动载入iptables
service iptables save
五、启动及自启动
- 设置自启动
vim /etc/rc.d/rc.local
添加:
/usr/sbin/ipsec start
- 启动VPN
/usr/sbin/ipsec start
注意:
如果启动后出现信息:
忽略即可,不影响使用
参考链接:
- https://marc.info/?t=128711380800001&r=1&w=2
- https://wiki.strongswan.org/projects/1/wiki/FreeBSD
- https://www.zeitgeist.se/2013/11/22/strongswan-howto-create-your-own-vpn/
六、客户端配置
- iOS
把 CA 证书和之前做好的 pkcs12(.p12)发邮件给自己。在 iOS 上收邮件,导入两者。然后新建 IPSec VPN服务器,和 openSUSE 的要求一样,都是 IP 或都是 URL。账户和密码写 ipsec.secrets 里 XAUTH 前后的那两个。如果要使用证书,证书选刚才的那个。否则可以不使用证书,输入 ipsec.secrets 里设置的 PSK 密码。
七、其他
- 服务端日志(用于调试)
/var/log/strongswan-charon.log
strongswan 的 charon daemon 启动后,会初始化并加载之前你定义好的 conn,这部分 log 是没有必要去读的。当然在你配置有问题时可能就有必要了,但当配置有问题的时候,systemctl start strongswan.service 会失败,systemctl status strongswan.service 就会指出你配置问题所在的行号(=。=)…
所以你只要去查找「added configuration ‘windows7’」,这里 windows7 是你配置的最后一个 conn 的名称,然后从那里往下看就好了。
另外连接失败是会把连接状态从 CONNECTING 变为 DELETEING 的,DELETEING 又会刷一大堆日志,但那些日志都是没用的。
参考链接: