IPSec/IKEv2 ×××搭建和使用 (最下面有一键安装脚本)
本次操作系统环境为centos6,其他系统也有介绍
一、编译安装Strongswan
1,安装必须的库
Ubuntu:1 | apt-get install libpam0g-dev libssl-dev make gcc gmp-devel |
CentOS:
1 | yum install pam-devel openssl-devel make gcc gmp-devel wget -y |
2,下载strongswan并解压(*代表当前Strongswan版本号,当前最新版本是5.5.1)
1 23 | wget http://download.strongswan.org/strongswan.tar.gz tar xzf strongswan.tar.gzcd strongswan-* |
3,编译Strongswan:Xen、KVM(实体机、虚拟机)使用以下参数: (若是想自定义路径则加上 --prefix=/data/server/strongswan)
1 2345 | ./configure --enable-eap-identity --enable-eap-md5 \ --enable-eap-mschapv2 --enable-eap-tls --enable-eap-ttls --enable-eap-peap \--enable-eap-tnc --enable-eap-dynamic --enable-eap-radius --enable-xauth-eap \--enable-xauth-pam --enable-dhcp --enable-openssl --enable-addrblock --enable-unity \--enable-certexpire --enable-radattr --enable-tools --enable-openssl --disable-gmp |
OpenVZ(vps云主机)需额外增加一个 enable-kernel-libipsec:
1 2345 | ./configure --enable-eap-identity --enable-eap-md5 \ --enable-eap-mschapv2 --enable-eap-tls --enable-eap-ttls --enable-eap-peap \--enable-eap-tnc --enable-eap-dynamic --enable-eap-radius --enable-xauth-eap \--enable-xauth-pam--enable-dhcp--enable-openssl--enable-addrblock --enable-unity\--enable-certexpire --enable-radattr --enable-tools --enable-openssl --disable-gmp \--enable-kernel-libipsec |
4,编译并安装:
1 | make && make install |
编译完成后如果没有报错,且使用ipsec version指令能出现版本信息,则表示安装成功
1 | 建立软链接: ln ipsec /sbin/ipsec |
二、配置证书
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" \ --ca --outform pem >ca.cert.pem |
提示:多个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 234 | ipsec pki --pub --in server.pem | ipsec pki --issue --cacert ca.cert.pem \ --cakey ca.pem --dn "C=com, O=my***, CN=111.111.111.111" \--san="111.111.111.111" --flag serverAuth --flag ikeIntermediate \--outform pem > server.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 2345 | cp -r ca.cert.pem /usr/local/etc/ipsec.d/cacerts/ cp -r server.cert.pem /usr/local/etc/ipsec.d/certs/cp -r server.pem /usr/local/etc/ipsec.d/private/cp -r client.cert.pem /usr/local/etc/ipsec.d/certs/cp -r client.pem /usr/local/etc/ipsec.d/private/ |
三、配置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过滤掉登录名的域,搜索参考:
四、配置防火墙---需要打开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 234567891011121314 | iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -s 10.31.0.0/24 -j ACCEPTiptables -A FORWARD -s 10.31.1.0/24 -j ACCEPTiptables -A FORWARD -s 10.31.2.0/24 -j ACCEPTiptables -A INPUT -i venet0 -p esp -j ACCEPTiptables -A INPUT -i venet0 -p udp --dport 500 -j ACCEPTiptables -A INPUT -i venet0 -p tcp --dport 500 -j ACCEPTiptables -A INPUT -i venet0 -p udp --dport 4500 -j ACCEPTiptables -A INPUT -i venet0 -p udp --dport 1701 -j ACCEPTiptables -A INPUT -i venet0 -p tcp --dport 1723 -j ACCEPTiptables -A FORWARD -j REJECTiptables -t nat -A POSTROUTING -s 10.31.0.0/24 -o venet0 -j MASQUERADEiptables -t nat -A POSTROUTING -s 10.31.1.0/24 -o venet0 -j MASQUERADEiptables -t nat -A POSTROUTING -s 10.31.2.0/24 -o venet0 -j MASQUERADE |
PS:如果VPS有 static IP (固定ip),将上述防火墙规则的最后3条NAT规则替换为以下3条来提升处理效率:
1 23 | iptables -t nat -A POSTROUTING -s 10.31.0.0/24 -o venet0 -j SNAT --to-source固定ip iptables -t nat -A POSTROUTING -s 10.31.1.0/24 -o venet0 -j SNAT --to-source固定ipiptables -t nat -A POSTROUTING -s 10.31.2.0/24 -o venet0 -j SNAT --to-source固定ip |
注意将上述3条规则的ELASTIC_IP替换为vps的静态ip地址.
Xen、KVM(实体机、虚拟主机)则执行:
1 234567891011121314 | iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -s 10.31.0.0/24 -j ACCEPTiptables -A FORWARD -s 10.31.1.0/24 -j ACCEPTiptables -A FORWARD -s 10.31.2.0/24 -j ACCEPTiptables -A INPUT -i eth0 -p esp -j ACCEPTiptables -A INPUT -i eth0 -p udp --dport 500 -j ACCEPTiptables -A INPUT -i eth0 -p tcp --dport 500 -j ACCEPTiptables -A INPUT -i eth0 -p udp --dport 4500 -j ACCEPTiptables -A INPUT -i eth0 -p udp --dport 1701 -j ACCEPTiptables -A INPUT -i eth0 -p tcp --dport 1723 -j ACCEPTiptables -A FORWARD -j REJECTiptables -t nat -A POSTROUTING -s 10.31.0.0/24 -o eth0 -j MASQUERADEiptables -t nat -A POSTROUTING -s 10.31.1.0/24 -o eth0 -j MASQUERADEiptables -t nat -A POSTROUTING -s 10.31.2.0/24 -o eth0 -j MASQUERADE |
3,开机自动载入iptables和***:
Ubuntu:1 23456 | iptables-save > /etc/iptables.rules cat > /etc/network/if-up.d/iptables<<EOF#!/bin/shiptables-restore < /etc/iptables.rulesEOFchmod +x /etc/network/if-up.d/iptables |
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
然后就可以在客户端访问: 下载证书。
使用教程
Iphone:
1.打开Safari访问下载安装证书:
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.下载安装证书:
点击下载 (下载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安装包和一键安装脚本下载链接:
文章参考:
https://zh.opensuse.org/SDB:Setup_Ipsec_×××_with_Strongswan
https://github.com/quericy/one-key-ikev2-***