IPSec/IKEv2 ×××搭建和使用 (最下面有一键安装脚本)html
本次操做系统环境为centos6,其余系统也有介绍linux
1、编译安装Strongswanandroid
1,安装必须的库
Ubuntu:ios
1git |
apt-get install libpam0g-dev libssl-dev make gcc gmp-devel github |
CentOS:apache
1 |
yum install pam-devel openssl-devel make gcc gmp-devel wget -ywindows |
2,下载strongswan并解压(*表明当前Strongswan版本号,当前最新版本是5.5.1)centos
1 |
wget http://download.strongswan.org/strongswan.tar.gz |
3,编译Strongswan:
Xen、KVM(实体机、虚拟机)使用如下参数: (如果想自定义路径则加上 --prefix=/data/server/strongswan)
1 |
./configure --enable-eap-identity --enable-eap-md5 \ |
OpenVZ(vps云主机)需额外增长一个 enable-kernel-libipsec:
1 |
./configure --enable-eap-identity --enable-eap-md5 \ |
4,编译并安装:
1 |
make && make install |
编译完成后若是没有报错,且使用ipsec version指令能出现版本信息,则表示安装成功
1 |
创建软连接: ln ipsec /sbin/ipsec |
2、配置证书
1,生成CA证书的私钥(添加自定义安装路径后,这些命令都在自定义的路径下面)
1 |
ipsec pki --gen --outform pem > ca.pem |
2,自建私钥,签名CA证书
1 |
ipsec pki --self --in ca.pem --dn "C=com, O=my***, CN=××× CA" \ |
提示:多个vps使用同个CA根证书(客户端使用一个证书登录不一样***):
若是须要多个vps使用同一个CA根证书,则以上两步只执行一次,以后全部vps都使用上面生成的这两个ca.pem和ca.cert.pem文件进行后续的操做.
而后把多台vps解析到同一个域名的不一样二级域名下.
这样客户端链接各个服务器时,只须要客户端安装一次根证书ca.cert.pem(ca.cert.cer)便可.
3,生成服务器证书所需的私钥:
1 |
ipsec pki --gen --outform pem > server.pem |
4,用CA证书签发服务器证书
先肯定你的服务器的IP地址或域名,之后客户端链接时只能使用证书中的IP地址或域名链接(多服务器使用相同根证书CA的,请先作好服务器的域名解析),
而后将下面命令中的111.111.111.111替换为本身服务器的IP地址或域名,一共须要替换两处:
1 |
ipsec pki --pub --in server.pem | ipsec pki --issue --cacert ca.cert.pem \ |
注意以上命令中的”C=”和”O=”的值要与第2步CA中的C,O的值保持一致.
5,生成客户端证书所需的私钥:
1 |
ipsec pki --gen --outform pem > client.pem |
6,用CA签名客户端证书(将ca.cert.pem改为ca.cert.cer后供手机客户端安装使用)(C,O的值要与上面第2步CA的值一致,CN的值随意)
1 |
ipsec pki --pub --in client.pem | ipsec pki --issue --cacert ca.cert.pem \ --cakey ca.pem --dn "C=com, O=my***, CN=××× Client" \ --outform pem > client.cert.pem |
7,生成pkcs12证书(供电脑端安装使用,输入的密码供导入证书时候使用):
1 |
openssl pkcs12 -export -inkey client.pem -in client.cert.pem \ -name "client" -certfile ca.cert.pem -caname "××× CA" \ -out client.cert.p12 |
注意以上命令中的”-caname”后面的引号里的值必需要与第2步CA中的”CN=”的值保持一致.
8,服务端安装证书:(添加自定义安装路径后,这些都在自定义的路径下面-->/usr/local/改成/data/server/strongswan/)
1 |
cp -r ca.cert.pem /usr/local/etc/ipsec.d/cacerts/ |
3、配置Strongswan
1,编辑/usr/local/etc/ipsec.conf文件: (注意下面的ios_ikev2配置项 leftid改成当前实际的服务器的IP地址或域名111.111.111.111)
1 |
vim /usr/local/etc/ipsec.conf |
修改成如下内容:
config setup
uniqueids=never #多台设备同时在线
conn iOS_cert
keyexchange=ikev1
fragmentation=yes
left=%defaultroute
leftauth=pubkey
leftsubnet=0.0.0.0/0
leftcert=server.cert.pem
right=%any
rightauth=pubkey
rightauth2=xauth
rightsourceip=10.31.2.0/24
rightcert=client.cert.pem
auto=add
conn android_xauth_psk
keyexchange=ikev1
left=%defaultroute
leftauth=psk
leftsubnet=0.0.0.0/0
right=%any
rightauth=psk
rightauth2=xauth
rightsourceip=10.31.2.0/24
auto=add
conn networkmanager-strongswan
keyexchange=ikev2
left=%defaultroute
leftauth=pubkey
leftsubnet=0.0.0.0/0
leftcert=server.cert.pem
right=%any
rightauth=pubkey
rightsourceip=10.31.2.0/24
rightcert=client.cert.pem
auto=add
conn ios_ikev2
keyexchange=ikev2
ike=aes256-sha256-modp2048,3des-sha1-modp2048,aes256-sha1-modp2048!
esp=aes256-sha256,3des-sha1,aes256-sha1!
rekey=no
left=%defaultroute
leftid="服务器的IP地址或域名"
leftsendcert=always
leftsubnet=0.0.0.0/0
leftcert=server.cert.pem
right=%any
rightauth=eap-mschapv2
rightsourceip=10.31.2.0/24
rightsendcert=never
eap_identity=%any
dpdaction=clear
fragmentation=yes
auto=add
conn windows7
keyexchange=ikev2
ike=aes256-sha1-modp1024!
rekey=no
left=%defaultroute
leftauth=pubkey
leftsubnet=0.0.0.0/0
leftcert=server.cert.pem
right=%any
rightauth=eap-mschapv2
rightsourceip=10.31.2.0/24
rightsendcert=never
eap_identity=%any
auto=add
2,使用vim编辑/usr/local/etc/strongswan.conf文件:
charon {
load_modular = yes
duplicheck.enable = no
compress = yes
plugins {
include strongswan.d/charon/*.conf
}
dns1 = 8.8.8.8
dns2 = 8.8.4.4
nbns1 = 8.8.8.8
nbns2 = 8.8.4.4
#下面是配置日志选项,可不要
filelog {
/tmp/charon.log {
# add a timestamp prefix
time_format = %b %e %T
# prepend connection name, simplifies grepping
ike_name = yes
# overwrite existing files
append = no
# increase default loglevel for all daemon subsystems
default = 1
# flush each line to disk
flush_line = yes
}
}
}
include strongswan.d/*.conf
3,配置账号文件添加帐号,使用vim编辑/usr/local/etc/ipsec.secrets文件(%any表示任意):
: RSA server.pem
: PSK "1234"
: XAUTH "myXAUTHPass"
myUserName %any : EAP "myUserPass"
zhanghao %any : EAP "mima"
将上面的myPSKkey单词更改成你须要的PSK认证方式的密钥;
将上面的myXAUTHPass单词更改成你须要的XAUTH认证方式的密码,该认证方式的用户名是随意的;
将上面的zhanghao改成本身想要的登陆名,mima改成本身想要的密码,能够添加多行,获得多个用户,这便是使用IKEv2的用户名+密码认证方式的登陆凭据.
(添加完用户后可使用ipsec reload从新加载配置)
提示:wp8.1客户端链接的用户名问题
因为wp8.1链接IKEv2的***时,默认会加上与手机名称相同的域,因而链接时会显示用户名或密码错误.这里有两种解决方法:
方法1:将上面/usr/local/etc/ipsec.secrets文件的最后一行改成%any %any : EAP “mima” ,这样就可使用任意用户名登陆,带上域也不会出错.
方法2:用FreeRADIUS过滤掉登陆名的域,搜索参考:让FreeRADIUS去掉登录用户名中的Windows登陆域
4、配置防火墙---须要打开udp 4500 500 1701端口
1,编辑/etc/sysctl.conf,将net.ipv4.ip_forward=1一行前面的#号去掉或添加这一行(不然Ikev2 ***链接上后将没法访问外网),保存后执行sysctl -p(若是执行后有报错的,从新打开sysctl.conf将报错的部分#注释掉保存,直到执行sysctl -p再也不报错为止)。
2,配置iptables:(注意网卡名)
OpenVZ(vps云主机)执行:
1 |
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT |
PS:若是VPS有 static IP (固定ip),将上述防火墙规则的最后3条NAT规则替换为如下3条来提高处理效率:
1 |
iptables -t nat -A POSTROUTING -s 10.31.0.0/24 -o venet0 -j SNAT --to-source固定ip |
注意将上述3条规则的ELASTIC_IP替换为vps的静态ip地址.
Xen、KVM(实体机、虚拟主机)则执行:
1 |
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT |
3,开机自动载入iptables和***:
Ubuntu:
1 |
iptables-save > /etc/iptables.rules |
CentOS:
1 2 3 |
service iptables save chkconfig iptables on echo "/usr/local/sbin/ipsec start" >> /etc/rc.local |
至此,IPSec/IKEv2 ×××便搭建好了,启用服务就可使用:
1 |
ipsec start |
ipsec经常使用指令:
ipsec start #启动服务
ipsec stop #关闭服务
ipsec restart 重启服务
ipsec reload #从新读取
ipsec status #查看状态
ipsec --help #查看帮助
4,搭建httpd便于客户端下载证书
安装apache:
yum install httpd –y
配置apache登陆用户:
htpasswd -c -b /etc/httpd/htpasdb zhanghao mima
在apache配置文件/etc/httpd/conf/httpd.conf最后追加:
<directory />
options indexes
AuthType Basic
AuthName "!!!"
AuthBasicProvider file
AuthUserFile /etc/httpd/htpasdb
Require user zhanghao
</directory>
拷贝客户端证书:
mkdir /var/www/html/key
cp -p ca.cert.pem /var/www/html/key/
cp -p client.cert.p12 /var/www/html/key/
重启服务,service httpd restart
而后就能够在客户端访问:http://ip/key 下载证书。
使用教程
Iphone:
1.打开Safari访问http://ip/key下载安装证书:
2.安装:
3.配置***:
打开设置-通用-×××,点击添加×××配置
而后:
描述填随意、服务器填搭建的***服务器ip、远程ip填搭建的***服务器ip、鉴定里用户鉴定选择用户名、填上/usr/local/etc/ipsec.secrets下面的zhanghao mima
完成后就能够链接了。
Android
1.安装证书,点击下载证书:
2. 配置***,打开设置-更多-×××,点击添加,注意类型选择IPsec Xauth PSK
名称自取,服务器地址填***的ip,IPsec标识符不填,IPSec域共享密钥填写/usr/local/etc/ipsec.secrets配置文件里的PSK值,其余的不填
保存后,点击链接时输入/usr/local/etc/ipsec.secrets 最下方配置的zhanghao mima
Windows:
1.下载安装证书:
点击下载client.cert.p12 (下载ca.cert.cer也能够而且不用输入证书密码)
2.导入证书:
打开运行,输入mmc打开
点击文件,选择“添加/删除管理单元”,选择证书,添加,选择“计算机用户”,下一步,肯定;
打开证书-受信任的根证书颁发机构-证书,邮件证书,选择全部任务-导入,选择下载的证书client.cert.p12,输入证书密码。
3.创建链接
打开“网络和共享中心”,点击设置新的链接或网络,选择链接到工做区,建立新的链接,使用个人Internet链接(×××),输入***服务器ip,建立:
4.链接:
打开“网络和共享中心”,点击更改适配器设置,右键刚创建的***链接,打开属性,打开安全,选择IKEv2,身份验证选择可扩展。。,点击肯定保存,右键***链接选择链接即可以连上***了。
MAC
1. 下载安装证书,同上面几个客户端同样下载安装证书(双击证书,选择装到系统)
注意:添加完证书后,须要打开密钥管理将刚才添加的证书加到信任:
双击打开,改成始终信任:
2.建立***网络:
打开网络偏好设置
添加网络,选择IKEv2:
服务器地址填***服务器地址,帐户名称和密码填写/usr/local/etc/ipsec.secrets 下方加的zhanghao mima
或者添加网络,选择cisco IPSec:
服务器地址填***服务器地址,帐户名称和密码填写/usr/local/etc/ipsec.secrets 下方加的zhanghao mima,打开鉴定设置共享密钥填写PSK。其余不填:
这样就能够链接了。
一键安装脚本:
1. 上传脚本和安装包到服务器同目录
2. 修改权限,运行脚本:
chmod +x one-key-ikev2.sh
bash one-key-ikev2.sh
3.根据图片内容选择:
注意:
1./etc/issue文件内容要正确脚本是经过此文件判断linux版本
2.如果服务器在国外,能够不用上传安装包到服务器,打开脚本219-223行(因为国内网络差因此提早下载好安装包上传至服务器)
3.最后的证书在my_key目录下
strongswan安装包和一键安装脚本下载连接:http://down.51cto.com/data/2269048
文章参考:
https://zh.opensuse.org/SDB:Setup_Ipsec_×××_with_Strongswan
https://github.com/quericy/one-key-ikev2-***