介绍
目前有这么几种VPN:
PPTP VPN:
微软开发的,后来标准化,但是好多细节不透明,有两个通道,TCP控制通道(明文),用来动态建立GRE隧道,GRE隧道封装真正的用户流量,PPP+ PPP payload ,只是靠PPP自身的一个加密协议MPPE来完成 payload 的加密,GRE头全是明文,安全级别不够高。
L2TP VPN:
L2TP + IP sec 的实现方式,安全性高。UDP后的payload 全部加密。
IP sec VPN:
使用IKEv1 或IKEv2来建立IP sec VPN,为了克服NAT的限制,使用UDP 4500 做传输封装,安全性高,如果使用数字证书认证,可能会遭受中间人攻击。如果使用预共享密码认证,安全可靠,中间人无法攻击。
SSL VPN:
位于四层与五层之间的加密,常规使用数字证书做认证,我们常用的HTTPS就是 client less SSL VPN 的一种,易受中间人攻击。
现在基本上很多路由器都限制了通常使用的加密通道 PPTP和L2TP! 所以我们使用IKEV2的协议!
搭建VPS服务器
为了简便,可以使用CentOS/Ubuntu一键安装IPSEC/IKEV2 VPN服务器快速创建VPN。
脚本地址
以下是详细顺序Centos 7 搭建 IKEv2 VPN 服务例子:
- 安装依赖组件
yum -y install gpm-devel pam-devel openssl-devel make gcc
- 安装EPEL
yum -y install epel-release
- 安装Strongswan
yum -y install strongswan
- 为Strongswan添加别名 ipsec
alias ipsec=‘strongswan‘
-
生成CA私钥,并使用此私钥自签名生成CA证书
1 cd /etc/strongswan && mkdir ca && cd ca 2 ipsec pki –gen –outform pem > ca.pem 3 ipsec pki –self –in ca.pem –dn “C=[国家名], O=[组织名], CN=[通用名]” –ca –lifetime 3652 –outform pem > ca.cert.pem
-
生成服务器私钥,然后从私钥中导出公钥,用CA证书签发服务器证书
1 ipsec pki –gen –outform pem > server.pem 2 ipsec pki –pub –in server.pem | ipsec pki –issue –lifetime 3652 –cacert ca.cert.pem –cakey ca.pem –dn “C=[国家名], O=[组织名], CN=[IP 或 domain]” –san=”[IP 或 domain]” –flag serverAuth –flag ikeIntermediate –outform pem > server.cert.pem
-
生成客户端私钥,然后从私钥中导出公钥,用CA证书签发客户端证书
ipsec pki –gen –outform pem > client.pem ipsec pki –pub –in client.pem | ipsec pki –issue –lifetime 3652 –cacert ca.cert.pem –cakey ca.pem –dn “C=[国家名], O=[组织名], CN=[通用名]” –outform pem > client.cert.pem
-
生成 pkcs12 证书,用来导入手机或电脑。此处需输入密码,此密码用于安装CA证书时使用
openssl pkcs12 -export -inkey client.pem -in client.cert.pem -name “[此处与第7步中CN同值]” -certfile ca.cert.pem -caname “[CA 证书别名]” -out client.cert.p12
-
strongswam导入证书
1 #cacerts /目录下放置CA证书 2 #certs /目录下放置服务器和客户端证书 3 #private /目录下放置服务器和客户端私钥 4 cp -r ca.cert.pem /etc/strongswan/ipsec.d/cacerts/ 5 cp -r server.cert.pem /etc/strongswan/ipsec.d/certs/ 6 cp -r server.pem /etc/strongswan/ipsec.d/private/ 7 cp -r client.cert.pem /etc/strongswan/ipsec.d/certs/ 8 cp -r client.pem /etc/strongswan/ipsec.d/private/
-
修改strongSwan各组件的通用配置
1 cat >/etc/strongswan/strongswan.conf «EOF 2 charon { 3 load_modular = yes 4 duplicheck.enable = no #冗余检查关闭,以允许同时连接多个设备 5 compress = yes #传输启用压缩 6 plugins { 7 include strongswan.d/charon/.conf 8 } 9 dns1 = 8.8.8.8 #给远程端指定DNS服务器 10 dns2 = 8.8.4.4 11 nbns1 = 8.8.8.8 #指定Windows的WINS服务器 12 nbns2 = 8.8.4.4 13 14 filelog { #配置strongSwan日志级别和路径 15 /var/log/strongswan.log { 16 time_format = %b %e %T 17 default = 5 # 日志最高等级5 18 append = no 19 flush_line = yes 20 } 21 } 22 } 23 24 include strongswan.d/.conf 25 EOF
11.修改IPsec相关的配置,定义IKE版本、验证方式、加密方式、连接属性等等
1 cat >/etc/strongswan/ipsec.conf <<EOF
2 config setup
3 protostack=netkey
4 # strictcrlpolicy=yes
5 listen = [IP 或 domain]
6 uniqueids = never
7
8 # Add connections here.
9
10 # Sample VPN connections
11
12 #conn sample-self-signed
13 # leftsubnet=10.1.0.0/16
14 # leftcert=selfCert.der
15 # leftsendcert=never
16 # right=192.168.0.2
17 # rightsubnet=10.2.0.0/16
18 # rightcert=peerCert.der
19 # auto=start
20
21 #conn sample-with-ca-cert
22 # leftsubnet=10.1.0.0/16
23 # leftcert=myCert.pem
24 # right=192.168.0.2
25 # rightsubnet=10.2.0.0/16
26 # rightid="C=CH, O=Linux strongSwan CN=peer name"
27 # auto=start
28
29 conn %default #默认配置项,其他conn配置项都会调用此默认项
30 left=%any #left表示local,即本地端(服务器端)IP地址;%any是魔数字,表示任意地址
31 leftsubnet=0.0.0.0/0 #本地端网络,0.0.0.0/0为通配,表示所有IP网段
32 right=%any #right表示remote,即远程端(客户端)IP地址可为任意地址
33 rightsourceip=10.10.10.0/24 #分配给远程端的虚拟IP地址段,尽量避免使用常用私网地址段以免冲突
34 dpdaction=clear #dpd表示Dead Peer Detection,对端失效检测,clear表示对端失效时关闭连接
35
36 conn IKEv1-CERT-XAUTH #供老版本IOS使用。IKEv1,使用证书和XAUTH验证
37 keyexchange=ikev1 #密钥交换使用IKEv1
38 fragmentation=yes #允许分片
39 leftauth=pubkey #本地端使用公钥验证
40 leftcert=server.cert.pem #指定本地端证书
41 rightauth=pubkey #远程端使用公钥验证
42 rightauth2=xauth #远程端使用用户账号验证
43 rightcert=client.cert.pem #指定远程端证书
44 auto=add #auto定义strongSwan服务启动时该连接的行为,add是添加连接类型但不启动
45
46 conn IKEv1-PSK-XAUTH #供IOS, Android使用。IKEv1,使用预共享密钥和XAUTH验证
47 keyexchange=ikev1 #密钥交换使用IKEv1
48 leftauth=psk #本地端使用预共享密钥验证
49 rightauth=psk #远程端使用预共享密钥验证
50 rightauth2=xauth #远程端使用用户账号验证
51 auto=add #strongSwan启动时添加连接类型但不启动
52 aggressive=yes
53
54 conn IKEv2-CERT #供Windows 7+, Linux使用。IKEv2,使用证书验证
55 keyexchange=ikev2 #密钥交换使用IKEv2
56 leftauth=pubkey #本地端使用公钥验证
57 leftcert=server.cert.pem #指定本地端证书
58 rightauth=pubkey #远程端使用公钥验证
59 rightcert=client.cert.pem #指定远程端证书
60 auto=add #strongSwan启动时添加连接类型但不启动
61
62 conn IKEv2-EAP #供Windows 7+, IOS9+使用。IKEv2,EAP验证
63 keyexchange=ikev2 #密钥交换使用IKEv2
64 ike=aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024! #第一阶段加密方式
65 esp=aes256-sha256,aes256-sha1,3des-sha1! #ESP的顺序与IKE一致
66 rekey=no #本地端对Windows远程端发出rekey请求会断开连接,所以需配置为no
67 leftauth=pubkey #本地端使用公钥验证
68 leftcert=server.cert.pem #指定本地端证书
69 leftsendcert=always #本地端总是发送证书
70 leftid=[IP 或 domain] #本地端标识,使用本地端公网IP地址作为标识,和生成服务器证书时的--san参数对应
71 rightauth=eap-mschapv2 #远程端使用eap-mschapv2验证
72 rightsendcert=never #不要求远程端发送证书
73 eap_identity=%any #指定EAP验证身份,任意账户
74 fragmentation=yes #允许分片
75 auto=add #strongSwan启动时添加连接类型但不启动
76 EOF
12.定义各类密钥,例如:私钥、预共享密钥、用户账户和密码
1 cat >/etc/strongswan/ipsec.secrets <<EOF
2 : RSA server.pem #指定服务器的RSA私钥文件
3 : PSK "[xxxxxxx]" #配置预共享密钥
4 [username] : XAUTH "[password]" #配置XAUTH验证的用户名和密码,可配置多个用户账户
5 [username] : EAP "[password]" #配置EAP验证的用户名s和密码,可配置多个用户账户
6 EOF
13.设置ipsec.secrets文件权限
1 chmod 600 ipsec.secrets
14.设置网卡转发
1 cat >/etc/sysctl.conf <<EOF 2 net.ipv4.ip_forward = 1 3 EOF 4 sysctl -p
15.配置防火墙,本处使用的firewalld
1 yum install firewall firewall-config
2 firewall-cmd --permanent --add-service=ipsec
3 firewall-cmd --permanent --zone=public --add-masquerade
4 firewall-cmd --permanent --zone=public --add-masqueradefirewall-cmd --permanent --zone=public --add-rich-rule=‘rule family=ipv4 source address=10.8.0.0/24 masquerade‘
5 firewall-cmd --reload
16.配置服务启动
chkconfig strongswan on 2 chkconfig firewalld on 3 systemctl start strongswan
注意:
配置中的 C=[国家名], O=[组织名] 值都相同 第六步与第11步中 [IP 或 domain] 值相同
windows客户端
导入证书
1、按下键盘上的Win键+R组合键,然后弹出运行窗口中输入mmc,点击确定。
2、点击控制台窗口中的“文件—添加/删除管理单元”。
3、在弹出窗口中选中“证书”,然后点击“添加”。
4、选择“计算机账户”,点击下一步。
5、选择“本地计算机”,点击完成,然后关闭添加管理单元窗口。
6、依次点开“控制台根节点”—“证书‘—”受信任的跟证书颁发机构“,右键点击“所有任务”—“导入”。
7、点击下一步开始导入证书。
8、点击“浏览”按钮选择下载的证书,在弹出文件选择窗口中选择显示“所有文件”,选择证书文件。
9、如果证书有密码,输入证书添加密码,点击下一步继续。
10、选择将证书存储到“受信任的根证书颁发机构”,然后点击下一步完成导入。完成证书导入后,就可以开始创建IKEv2连接了。
win10客户端
如果是WIN10系统的话,直接在设置->网络和internet->VPN里添加一个VPN即可,账户密码IP地址由服务器给出。
win7客户端
1、鼠标右键点击桌面右下角的“网络”图标,然后点击“打开网络和共享中心”。
2、在“网络和共享中心”窗口中,点击“设置新的连接或网络”。
3、选择“连接到工作区”,点击“下一步”。
4、点击“使用我的 Internet 连接”。
5、Internet 地址填写线路IP地址,勾选“现在不连接”,等设置完成再连接。
6、输入用户名和密码,可以勾选记住密码,“域”留空。
7、设置完成后,点击“关闭”。
8、点击“网络和共享中心”左侧的“更改适配器”。
9、鼠标右键点击创建的IKEv2网络连接,点击“属性”。然后如下图设置IKEv2。
10、设置后双击设置好的IKEv2网络连接即可使用。如果不需要连接了,在网络里点击断开按钮就行。
android客户端
strongswan 高版本已支持ikev2,ios9.0以上版本的支持ikev2,Android也是高版本的部分机型支持ikev2。
android app可以从strongswan官网下载获得。
我这也提供了一个备份:百度云盘 密码: ur2a。
安装好后,先导入证书,然后新建一个VPN,填入账户密码IP地址即可。