(收录)记录翻墙的那些事

2016/07/11 VPN

介绍

目前有这么几种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 服务例子:

  1. 安装依赖组件

yum -y install gpm-devel pam-devel openssl-devel make gcc

  1. 安装EPEL

yum -y install epel-release

  1. 安装Strongswan

yum -y install strongswan

  1. 为Strongswan添加别名 ipsec

alias ipsec=‘strongswan‘

  1. 生成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

  2. 生成服务器私钥,然后从私钥中导出公钥,用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

  3. 生成客户端私钥,然后从私钥中导出公钥,用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

  4. 生成 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

  5. 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/

  6. 修改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地址即可。


转载作品
转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本人联系,我们将在第一时间删除内容!

站内搜索

    撩我备注-博客

    joinee

    目录结构