目前感觉最科学的上网方式推荐

通过这段时间的实践,试用了PPTP、L2TP、OpenVPN、ShadowSocks,到比较新的IKEv2。从目前来看,PPTP、L2TP的优点是简单易用,不需要特别的软件,电脑和手机上都可以用,不过缺点是容易被ISP屏蔽,所以在有的地方会出现连不上的问题。其余几个都需要安装软件才能访问,其中OpenVPN已经被GFW重点照顾,很容易造成服务器被墙,IKEv2加密最强,是将来的趋势。而Shadowsocks应该是目前最适合的方式了,尤其是在手机上,连上后在手机网络和wifi切换时也不需要重新连接,还有一个非常适合天朝的贴心功能,就是能够根据IP地址判断是在墙内还是墙外而自动选择是通过服务器中转还是直接访问,这样既能保证访问被墙的资源,又能保证访问国内服务器时的速度,所以吐血推荐。要下载的点这里。设置的时候主要是服务器地址、远程端口、密码、加密方法,另外,“路由”这个地方一定要选和下图一样的: Screenshot_2015-08-22-21-42-26

StrongSwan搭建L2TP收集的参考

两篇文章:
Ubuntu、CentOS搭建IPSec/IKEv2 VPN服务器全攻略
VPS上基于Debian搭建和配置pure IPsec支持iOS/Win7/Android等多平台VPN客户端


 

加一篇:
Strongswan-IKEv2+FreeRADIUS VPN配置

前一篇文章里面提到了用Strongswan替换Openswan的最大理由就是IKEv2和对于Radius的支持,这篇文章继续介绍如何使用Strongswan和Freeradius建立IKEv2 VPN。

目前支持IKEv2的客户端貌似只有Openswan/Strongswan,Windows的话只有Windows 7和Windows Server 2008 R2完全支持(Vista只支持IKEv1),因而这篇文章主要介绍如何建立Win7客户端能够使用的IKEv2 VPN。

之所以使用IKEv2而非IKEv1是因为IKEv1目前没有开源的能与Radius连接的插件/客户端,最接近的方案应该是XAuth- PAM+pam_radius。不过pam对于DoS攻击的抵抗很弱,因而不是特别好的一个solution。加上Openswan默认编译是不包含 xauthpam的,在使用二进制包管理的服务器上布置的复杂度会更高。

IKEv2要求服务器必须以证书证明身份,即使客户端采用MSCHAPv2认证(用户名+密码)。所以第一步是产生服务器使用的证书:

以下内容来自http://wiki.strongswan.org/projects/strongswan/wiki/IOS_%28Apple%29:

1 ipsec pki –gen –outform pem > caKey.pem

2 ipsec pki –self –in caKey.pem –dn “C=CH, O=strongSwan, CN=strongSwan CA” –ca –outform pem > caCert.pem

这一步产生CA证书,也是稍后会安装到客户端里面的证书,其中CN(Common Name)的值很重要,必须是服务器的域名/IP地址并且跟给客户的值一样。比如说让客户连接1.2.3.4,那么CN=1.2.3.4。不能是一边是域名而另外一边是IP地址。

1 ipsec pki –gen –outform pem > serverKey.pem

2 ipsec pki –pub –in serverKey.pem | ipsec pki –issue –cacert caCert.pem –cakey caKey.pem \

3 –dn “C=CH, O=strongSwan, CN=vpn.strongswan.org” –flag serverAuth –outform pem > serverCert.pem

这一步里面产生的服务器证书的CN值必须和上一步里面的一样,至于–flag serverAuth是Windows客户端必需的,作用是表示出这个证书的用途(认证)。

把生成的证书拷到ipsec.d/里面:

1 cp caCert.pem /etc/ipsec.d/cacerts/

2 cp serverCert.pem /etc/ipsec.d/certs

3 cp serverKey.pem /etc/ipsec.d/private/

最后在/etc/ipsec.secrets里面添加:

1 : RSA serverKey.pem

这样服务器端的证书准备工作就完成了。

客户端需要添加这个证书,否则认证时会出现Error 13801。添加证书的方法见这里:http://wiki.strongswan.org/projects/strongswan/wiki/Win7EapCert,注意必须是Local Computer(本地计算机)而非Current User(当前用户),否则添加的证书不会起效。

然后配置/etc/strongswan.conf:

在charon段里面加上:

1 dns1 = 8.8.8.8

2 dns2 = 208.67.222.222

然后在plugin段(charon段内部)里面加上:

1 eap-radius {

2 servers {

3 vpnserver {

4 secret = yourfreeradiussecret

5 address = radius.server.address

6 }

7 }

8 }

这样让Strongswan了解Radius服务器地址和暗码。

接下来修改/etc/ipsec.conf:

1 conn IPSec-IKEv2

2 keyexchange=ikev2

3 auto=add

4 left=server.ip.address

5 leftsubnet=0.0.0.0/0

6 leftauth=pubkey

7 leftcert=serverCert.pem

8 right=%any

9 rightsourceip=vpn.ip.address.range

10 rightauth=eap-radius

11 rightsendcert=never

12 eap_identity=%any

解释下上面几项的含义:leftsubnet是决定要通过tunnel的ip的范围,0.0.0.0/0是代表所有的IP通讯都通过VPN。 rightsourceip是VPN分配的虚拟地址的范围,也就是客户端登录后得到的IP范围,例如192.168.1.0/24意味着 192.168.0.1-192.168.1.255为VPN客户端可能的地址范围。rightauth=eap-radius是把客户端的EAP认证请 求转发至radius来处理,%any意味着接受任何类型的eap请求。

配置完成了吗?这样启动后Windows的客户端会提示812错误,因为Windows默认使用的是EAP-MSCHAPv2,而 Freeradius的默认配置是EAP-md5,这可能是Windows的一个bug,目前我的解决方法是直接把Freeradius的 eap.conf里面的default_eap_type修改为mschapv2,如有更好的方法望不吝告知。

这样就建立了一个IKEv2 IPSec隧道。默认情况下加密方法使用3DES,如有需要的话可以在IPSec的配置段里面加上ike=和esp=来修改加密算法。

参考:

http://wiki.strongswan.org/projects/strongswan/wiki/Win7EapCert

http://wiki.strongswan.org/projects/strongswan/wiki/IOS_%28Apple%29

http://wiki.strongswan.org/projects/strongswan/wiki/Win7EapMultipleConfig

还有Strongswan的Mailing list。

原文:http://tomem.info/blog/2011/10/724

===========

Strongswan+L2TP配置

由于需要给VPN添加IKEv2,而OpenSwan对于IKEv2的支持只有最基本的部分,更重要的是OpenSwan没有像 Strongswan一样的EAP-RADIUS插件可以实现Stongswan和Freeradius之间的直接通信(IKEv2必须),所以将服务器 上面的OpenSwan换成了Strongswan。

平台是Debian Squeeze,Strongswan的软件包安装自Debian Squeeze Backports,其余的来自于Debian stable。Debian Backports的作用是给稳定版本的Debian提供一些只有在Tesing/sid里面才有的新版本的软件包,而这些软件又是在stable的环境 下编译的,所以不用担心包依赖方面的问题。

从Backports安装软件的方法参照这里:http://backports-master.debian.org/Instructions/

Strongswan需要使用新版本的原因是Stable(Squeeze)里面的版本编译时没有–enable-nat-transport参数,这样的话Strongswan由于默认的安全特性(http://wiki.strongswan.org/projects/strongswan/wiki/FAQ)不允许进行NAT转发,从而无公网IP的客户端是无法与服务器建立连接的。

服务器结构依然是xl2tpd+swan,只是把OpenSwan换成了Strongswan。xl2tpd的配置跟上一篇 (http://tomem.info/blog/2011/04/577)是一样的,但是Strongswan的配置稍有不同,而错误信息又不是很 informative,花了几个小时才调试成功,所以写下来为后面的作参考。

几个常见的错误:

1.

client.ip.address:4500 #8: NAT-Traversal: Transport mode disabled due to security concerns

pluto[21315]: “l2tp”[3] client.ip.address:4500 #8: sending encrypted notification BAD_PROPOSAL_SYNTAX to client.ip.address:4500

这个是由于Strongswan没有编译–enable-nat-transport,因而无法进行NAT传输。

解决方法:重新编译,加上–enable-nat-transport。

2.

pluto[30735]: packet from client.ip.address:500: initial Main Mode message received on server.ip.address:500 but no connection has been authorized with policy=PSK

这个一般来说是IPSec的secrets错误,但是我在确认Secrets无误的情况下也遇到了这个,http://b.gkp.cc/2010/06/19/setup-ipsec-l2tp-on-centos-55/评论里面的某位仁兄也遇到了这个问题。在几番折腾无果的情况下注意到log里面有这么一行:

pluto[8384]: packet from client.ip.address:500: ignoring Vendor ID payload [IKE CGA version 1]

突然意识到Windows的L2TP使用的是IKEv1,而Strongswan默认使用的是IKEv2,会不会是这个问题?试之果然。

解决:在Strongswan的L2TP的配置段里面加上keyexchange=ikev1。

3.

pluto[1243]: “L2TP-PSK-noNAT”[2] client.ip.address:4500 #1: cannot respond to IPsec SA request because no connection is known for server.ip.address:4500[server.ip.address]:17/1701…client.ip.address:4500[client.ip.nat.address]:17/%any===client.ip.nat.address/32

pluto[1243]: “L2TP-PSK-noNAT”[2] client.ip.address:4500 #1: sending encrypted notification INVALID_ID_INFORMATION to client.ip.address:4500

这个乍看之下也像是PSK的设置错误,实际上不是。问题出在virtual_network的设置上面。

解决:Strongswan的setup段里面加上virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12。

配置文件范例:

1 # ipsec.conf – strongSwan IPsec configuration file

2

3 # basic configuration

4

5 config setup

6 # plutodebug=all

7 # crlcheckinterval=600

8 # strictcrlpolicy=yes

9 # cachecrls=yes

10 nat_traversal=yes

11 charonstart=yes

12 plutostart=yes

13 virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12

14

15 # Add connections here.

16

17 conn L2TP-PSK-NAT

18 rightsubnet=vhost:%priv

19 also=L2TP-PSK-noNAT

20

21 conn L2TP-PSK-noNAT

22 keyexchange=ikev1

23 authby=secret

24 pfs=no

25 auto=add

26 rekey=no

27 type=tunnel

28 keyingtries=3

29 left=server.ip.address

30 leftnexthop=%defaultroute

31 leftprotoport=17/1701

32 right=%any

33 rightprotoport=17/%any

原文:http://tomem.info/blog/2011/10/721