最新消息:最好的网盘dropbox

[转载]VPS上Debian 6.0配置pure IPsec实现ios/win/android多平台VPN客户端的访问

VPN 林夕 14818浏览 0评论

本帖作者把此帖内容整理后发表在他的博客中。大家可以移步去看一看。
http://blog.ltns.info/linux/pure_ipsec_multi-platform_vpn_client_debian_vps/
VPS上基于Debian搭建和配置pure IPsec支持iOS/Win7/Android等多平台VPN客户端

http://www.hi-pda.com/forum/viewthread.php?tid=1093935
Hi!PDA » Discovery » 菜鸟折腾VPS上Debian 6.0配置pure IPsec实现ios/win/android多平台VPN客户端的访问

有点搞笑‘ 1# 发表于 2012-12-5 13:06

[大杂烩] 菜鸟折腾VPS上Debian 6.0配置pure IPsec实现ios/win/android多平台VPN客户端的访问
本帖最后由 有点搞笑‘ 于 2013-2-23 12:06 编辑

2013年2月23日更新:
android(似乎得4.1之后的固件)自带的vpn客户端也支持pure IPSec了,见67楼。

2013年1月14日更新:
整理了一份各平台vpn客户端的使用教程,见66楼。

12月21日更新:
新增脚本,以方便制作VPN客户端证书,见36楼帖子末尾。

12月16日更新:
新增windows XP下使用第三方的cisco vpn client 客户端访问pure IPsec vpn服务器的方法,见46楼。

12月12日更新:
不折腾L2TP over ipsec了,改用纯ipsec方法,之前用的是racoon软件实现的,现在改用strongswan软件来实现,且支持多平台的vpn客户端,见36楼。

12月9日更新:
放弃了,貌似跟ios设备的兼容性有些问题,现在改Cisco IPsec VPN了,见14楼。

=========

最近自己在VPS(debian@openvz)上搭建的openvpn服务器时常被封端口,还有goagent现在也是半残废,而最近比较热的地下铁太高调估计不久也会落入方校长的眼中,于是寻思在VPS上搭建自己的l2tp/ipsec VPN服务器以备不时之需。

参考文章
http://www.cnblogs.com/hbycool/articles/1728295.html
http://blog.riobard.com/2010/04/30/l2tp-over-ipsec-ubuntu
http://b.gkp.cc/2010/06/19/setup-ipsec-l2tp-on-centos-55/

一开始在openvz上尝试,折腾了半天才发现没戏
http://ttz.im/blog/2011/04/577

说实在的搭建L2TP over IPSec VPN让人头痛不少,主要是因为需要好几个内核模块支持。因而如果你使用的是OpenVZ的VM的话基本上可以忽略这篇文章-2.6.32以下的内核不支持IPSec虚拟化。

于是向BS版某VPS商家,也是我目前在用的openvz的商家,申请了xen的一周试用,我选了debian 6.0的操作系统。折腾了一晚上总算搞通,现记录如下,供各位参考。

需要用到的ssh软件:putty和winscp,用法请见我去年一个帖子的19楼。
http://www.hi-pda.com/forum/viewthread.php?tid=765251

ssh登录vps后,先运行如下命令检查一下内核模块是否齐全

modprobe af_key && modprobe ah4 && modprobe esp4 && modprobe ipcomp && modprobe xfrm4_tunnel && echo "All IPSec modules are loaded"

如果输出All IPSec modules are loaded则说明正常,否则不能建L2TP over IPSec。

接下来更新一下源,然后安装openswan和xl2tp这两个软件

aptitude update
aptitude install xl2tpd openswan

然后用winscp登录vps后编辑(当然在putty中用vi也可以编辑)/etc/ipsec.conf文件,改成如下

version 2.0
config setup
    nat_traversal=yes
    virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12
    oe=off
    protostack=netkey

conn L2TP-PSK-NAT
    rightsubnet=vhost:%priv
    also=L2TP-PSK-noNAT

conn L2TP-PSK-noNAT
    authby=secret
    pfs=no
    auto=add
    keyingtries=3
    rekey=no
    ikelifetime=8h
    keylife=1h
    type=transport
    left=YOUR.SERVER.IP.ADDRESS
    leftprotoport=17/1701
    right=%any
    rightprotoport=17/%any

其中的YOUR.SERVER.IP.ADDRESS需改成VPS的ip地址,另外需要注意的是文件的结尾部分必须有新行,即,编辑到末尾再敲1-2个回车,否则启动ipsec时会提示如下且没有出错代码
“Segmentation fault
openswan failed to exec the requested action – the following error occured:”
这个问题在我之前折腾ipsec@openvz时就花了我好几个小时,最后发现初始的ipsec.conf文件末尾多了两个换行才依样画葫芦搞定的 ,另外,根据之前的经验,一些行开头的缩进也必须保留,而且缩进必须是TAB而不能是空格否则启动ipsec时会提示该行格式不对(不过xen下的debian 6空格却没问题,似乎是debian 6不同源造成的差异)。

然后编辑/etc/ipsec.secrets,添加一行

YOUR.SERVER.IP.ADDRESS   %any:  PSK "YourSharedSecret"

把如上的YOUR.SERVER.IP.ADDRESS替换成VPS的ip地址,YourSharedSecret替换成你自己喜欢的密钥字符串。
同样必须注意的是:文件末尾必须有至少一个换行(也是参照之前的经验),否则win7的vpn客户端连接会提示800错误(尽管在下一步骤中的ipsec verify检查都正常),并在/var/log/auth.log里会有出错提示
“… vpn pluto[6294]: “test2″ #1: probable authentication failure (mismatch of preshared secrets?): malformed payload in packet” 。
不得不说跟openvpn相比openswan实在有点糟糕。

运行如下命令

for each in /proc/sys/net/ipv4/conf/*
do
    echo 0 > $each/accept_redirects
    echo 0 > $each/send_redirects
done

然后检查一下IPSEC是否工作正常

ipsec verify

正常情况下应该可以看到如下内容

    Checking your system to see if IPsec got installed and started correctly:
    Version check and ipsec on-path                                 [OK]
    Linux Openswan U2.6.28/K2.6.32-5-686-bigmem (netkey)
    Checking for IPsec support in kernel                            [OK]
    NETKEY detected, testing for disabled ICMP send_redirects       [OK]
    NETKEY detected, testing for disabled ICMP accept_redirects     [OK]
    Checking that pluto is running                                  [OK]
    Pluto listening for IKE on udp 500                              [OK]
    Pluto listening for NAT-T on udp 4500                           [OK]
    Checking for 'ip' command                                       [OK]
    Checking for 'iptables' command                                 [OK]
    Opportunistic Encryption Support                                [DISABLED]

有出错的话重启一下IPSEC再试

/etc/init.d/ipsec restart
ipsec verify

接下来编辑/etc/xl2tpd/xl2tpd.conf,改成如下(注意ip range一项里的ip段不能和客户端正在用的ip地址有冲突)

    [global]
    ipsec saref = yes

    [lns default]
    ip range = 10.1.2.2-10.1.2.255
    local ip = 10.1.2.1
    ;require chap = yes
    refuse chap = yes
    refuse pap = yes
    require authentication = yes
    ppp debug = yes
    pppoptfile = /etc/ppp/options.xl2tpd
    length bit = yes

编辑/etc/ppp/options.xl2tpd,如没有就新建一个,内容如下

require-mschap-v2
ms-dns 208.67.222.222
ms-dns 208.67.220.220
asyncmap 0
auth
crtscts
lock
hide-password
modem
debug
name l2tpd
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4

注意ms-dns 两行可以自行改为其他DNS服务器的ip地址

现在编辑/etc/ppp/chap-secrets,添加VPN帐号,比如

# user      server      password            ip
test        l2tpd       testpassword        *

其中test和testpassword是用户名和密码,可自行设置,l2tpd是强制该帐号只能用l2tp协议登录,更多的帐号可以按照同样的格式添加到下一行。

重启xl2tp

sudo /etc/init.d/xl2tpd restart

检查一下xl2tpd是否正常运行

ps -aux | grep l2tp

如果没有xl2tp的进程说明没有启动,则以调试方式运行来检查一下

xl2tpd -D

正常情形下应该是显示如下的内容

    xl2tpd[9501]: Enabling IPsec SAref processing for L2TP transport mode SAs
    xl2tpd[9501]: IPsec SAref does not work with L2TP kernel mode yet, enabling forceuserspace=yes
    xl2tpd[9501]: setsockopt recvref[22]: Protocol not available
    xl2tpd[9501]: This binary does not support kernel L2TP.
    xl2tpd[9501]: xl2tpd version xl2tpd-1.2.4 started on vps.server.com PID:9501
    xl2tpd[9501]: Written by Mark Spencer, Copyright (C) 1998, Adtran, Inc.
    xl2tpd[9501]: Forked by Scott Balmos and David Stipp, (C) 2001
    xl2tpd[9501]: Inherited by Jeff McAdams, (C) 2002
    xl2tpd[9501]: Forked again by Xelerance (www.xelerance.com) (C) 2006
    xl2tpd[9501]: Listening on IP address 0.0.0.0, port 1701
iptables --table nat --append POSTROUTING --jump MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward

设置iptables 的数据包转发

iptables --table nat --append POSTROUTING --jump MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward

因为某种原因,openswan 在VPS重启后无法正常自动加载,所以需要在 /etc/rc.local 文件里写入如下语句

iptables --table nat --append POSTROUTING --jump MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
for each in /proc/sys/net/ipv4/conf/*
do
    echo 0 > $each/accept_redirects
    echo 0 > $each/send_redirects
done
/etc/init.d/ipsec restart

到这里服务器端的设置就完成了,现在可以用iphone/ipad,android,或者win7自带的vpn客户端连接了,如果有问题,可以检查一下 /var/log/auth.log文件,看看其中是否有出错提示。

有点搞笑‘ 2# 发表于 2012-12-5 13:06

本帖最后由 有点搞笑‘ 于 2012-12-9 14:00 编辑

用了两天,win7和android 4.2.1自带的vpn客户端没问题,但ios的设备如iphone和ipad开始用没问题,但数次后就连不上了

据这里的帖子,说是ios的设备推出时不能正常终止连接所致
http://www.lostbyte.com/projects/l2tpipsec-vpn-for-ios/

按照其中的做法,在ipsec.conf文件里添加三行但仍不管用

dpddelay=30
dpdtimeout=120
dpdaction=clear

因为suqeeze的openswan是2.6.28,官网最新2.6.38,打算下载源码重新编译,但编译时遇到如下的各种出错
-c /root/openswan-2.6.38/programs/pluto/connections.c /bin/sh: Syntax error: “(” unexpected

-c /root/openswan-2.6.38/programs/pluto/connections.c /bin/bash: -c: line 0: syntax error near unexpected token `(‘

有人在debian 6.0下编译过openswan 么?

雪逝 3# 发表于 2012-12-5 18:52

本帖最后由 雪逝 于 2012-12-5 18:54 编辑

太好了 请问楼主的一下 kvm没问题吧 我也是买了一个kvm的vps 现在想折腾vpn openvpn这些 但是提示619错误哇
求指点了

有点搞笑‘ 4# 发表于 2012-12-5 18:56

回复 3# 雪逝

kvm的没试过,据说跟xen一样也是支持ipsec和ppp模块的

mikylu 5# 发表于 2012-12-9 16:37

用的xen,网上有个三合一的自动安装包,centos5.5的,好像装好就能用了,不过我要清除了原来的iptables设置才行

bababom 7# 发表于 2012-12-9 16:46

就比较关心怎么搭建vpn服务器

hi-vps 8# 发表于 2012-12-9 18:46

太好了 请问楼主的一下 kvm没问题吧 我也是买了一个kvm的vps 现在想折腾vpn openvpn这些 但是提示619错误哇 …
雪逝 发表于 2012-12-5 18:52

619错误是因为所在路由器不支持导致。请更换路由器。
http://www.hi-vps.com/wiki/doku.php?id=xen_vps_install_pptpd

addmyin 9# 发表于 2012-12-9 18:47

open四万。。
这种最容易被封了。。

theguru 10# 发表于 2012-12-9 18:51

openvpn王道

tomac 11# 发表于 2012-12-9 19:21

openvpn王道
theguru 发表于 2012-12-9 18:51

openvpn现在被封的频率是以天来计算的,可用性越来越低了。尤其是多人共用时。
需要考虑自己编译了openvpn了

xpon 12# 发表于 2012-12-9 19:51

openvpn现在被封的频率是以天来计算的,可用性越来越低了。尤其是多人共用时。
需要考虑自己 …
tomac 发表于 2012-12-9 19:21

自己编译的OPENVPN就不会被封了吗

有点搞笑‘ 14# 发表于 2012-12-9 20:42

本帖最后由 有点搞笑‘ 于 2012-12-9 21:22 编辑

debian下搞不定openswan最新版的编译,于是下午把vps操作系统换成centos-6.3,再次编译openswan 2.6.38成功,还编译了一下xl2tp的1.3.1版本,但还是老样子:iphone或ipad连通着vpn时进入sleep状态的话,唤醒后很可能就再也连不上vpn了。。貌似openswan跟ios的兼容性有问题?

网上还有教程是用strongswan来实现ipsec功能,不过这类应用貌似没有openswan多,已经折腾了一个周末了,实在没精力了 于是转向cisco ipsec vpn,这个折腾的人更少,而且貌似大企业vpn的方案也是cisco的居多,应该被方校长盯上的概率更小吧。

参考这里的教程
http://archangelsdy.com/2012-07/cisco-ipsec-vpn-for-debian
一次性成功,安逸啊~

缺点就是只有黑莓、ios等设备自带的vpn客户端可兼容cisco ipsec,而windows操作系统需要安装cisco vpn client客户端,这里有下载
x86的 http://cisco.it-3c.com/html/NetworkManagement/tools/201206132688.html
x64的 http://cisco.it-3c.com/html/NetworkManagement/tools/201206132687.html
使用教程可见这里 http://www.docin.com/p-84131313.html

至于猴机,自带的vpn客户端也不支持cisco ipsec vpn,但这里有人在折腾,回头有空研究一下
https://www.nixuopen.org/blog/2011/5/android-and-cisco-ipsec-vpn/

lokyss 17# 发表于 2012-12-9 21:07

open四万。。
这种最容易被封了。。
addmyin 发表于 2012-12-9 18:47

现在网上的教程基本上都是把openswan配置成 transport 模式,按照这里的说法貌似不是很安全
http://lesca.me/archives/how-to-setup-l2tp-over-ipsec-on-ubuntu.html


IPSec工作在隧道模式(tunnel)时,加密整个数据报;传输模式(transport)时,仅加密IP数据报的头部。
我们配置的IPSec仅向L2TP提供支持,因此工作在传输模式。

voodooii 18# 发表于 2012-12-9 21:11

mark一下。

貌似openvpn也会被封吗?
我现在也是有分的人了啊!

有点搞笑‘ 19# 发表于 2012-12-9 21:11

回复 18# voodooii

不是貌似,是已成事实

theguru 20# 发表于 2012-12-9 21:13

本帖最后由 theguru 于 2012-12-9 21:36 编辑

openvpn现在被封的频率是以天来计算的,可用性越来越低了。尤其是多人共用时。
需要考虑自己 …
tomac 发表于 2012-12-9 19:21

65535 x 2 (tcp udp) 可以坚持 300年。 当然共用另说

voodooii 21# 发表于 2012-12-9 21:23

回复 voodooii

不是貌似,是已成事实
有点搞笑‘ 发表于 2012-12-9 21:11

两端都是私有的啊?长时间不了解了。能说下原因吗?
PPTP,L2TP这些被封可以理解。这些都是公开协议研究透了也就可以被封了。但是OPENVPN貌似只是开源的而已啊。TG连这个也研究啊?
我现在也是有分的人了啊!

有点搞笑‘ 22# 发表于 2012-12-9 21:36

本帖最后由 有点搞笑‘ 于 2012-12-9 22:01 编辑

两端都是私有的啊?长时间不了解了。能说下原因吗?
PPTP,L2TP这些被封可以理解。这些都是公开协 …
voodooii 发表于 2012-12-9 21:23

两端私有什么意思?

我自己搭建自用的openvpn的用户帐号是ca证书方式,整个数据都走vpn通道,加密安全性应该没问题,但现在的问题似乎是gfw能判明数据包时走openvpn通道的(而且所需的时间越来越短),于是封掉相应的端口。

cyberiser 23# 发表于 2012-12-9 22:11

strongswan倒是没问题,iOS正常使用
就是centos上面要自己编译一下

有点搞笑‘ 24# 发表于 2012-12-9 22:22

本帖最后由 有点搞笑‘ 于 2012-12-9 22:26 编辑

回复 23# cyberiser

这篇文章提到strongswan也支持cisco ipsec vpn,跟racoon相比如何?
http://briteming.blogspot.com/2011/11/strongswanipsec-vpn-for-ios.html
貌似用起来有点麻烦,需要把证书导入到ios设备里去

cyberiser 25# 发表于 2012-12-10 09:38

没配置过用cisco vpn,因为l2tp/ipsec一次就成功了…
平时都是用psk了,也没导入证书

tomac 26# 发表于 2012-12-10 10:18

回复 20# theguru

tcp 和 udp是同时被封的。

有点搞笑‘ 27# 发表于 2012-12-10 10:33

没配置过用cisco vpn,因为l2tp/ipsec一次就成功了…
平时都是用psk了,也没导入证书
cyberiser 发表于 2012-12-10 09:38

不错,这样用起来就跟racoon一样方便了,回头有空折腾一下strongswan,既支持ios的cisco ipsec vpn客户端,也支持android的strongswan vpn客户端,不过后者只支持IKEv2 key exchange protocol 协议,不知道服务器端的配置能否通用。

bb1593 28# 发表于 2012-12-10 10:56

IPSec连上1分钟就断,再连服务器无响应。

了无生趣 29# 发表于 2012-12-10 11:01

android上可以用vpnc,需要有tun.ko。很久没更新,以前用2.3都是可以的
code.google.com/p/get-a-robot-vpnc/

bb1593 30# 发表于 2012-12-10 11:14

不要低估了GFW的凶残。

theguru 31# 发表于 2012-12-10 19:53

回复 theguru
tcp 和 udp是同时被封的。
tomac 发表于 2012-12-10 10:18

150年

有点搞笑‘ 32# 发表于 2012-12-11 11:43

strongswan倒是没问题,iOS正常使用
就是centos上面要自己编译一下
cyberiser 发表于 2012-12-9 22:11

我已经在centos下编译安装了strongswan 4.6.4,ios设备连接正常,但为了迁就ios所以用的是ikev1协议,不知道服务器端能否同时配置ikev2协议,因为win7自带的vpn客户端支持ikev2,而且猴机上的strongswan vpn客户端也只认ikev2

cyberiser 33# 发表于 2012-12-11 11:45

回复 32# 有点搞笑‘

没有试过同时用ikev2…因为没候机

windows的话可以同样用l2tp/ipsec来连

有点搞笑‘ 34# 发表于 2012-12-11 11:51

回复 33# cyberiser

不想再折腾l2tp over ipsec了,头大,感觉pure ipsec也不错,配置简单系统开销也小,但不知道两者的安全性上有多大区别,或者说l2tp over ipsec只是为了能兼容的客户端更多一些?

另外,这里有人提到似乎要再装个racoon来实现同时支持ikev1和ikev2,不知道有没有只用strongswan或racoon就能搞定的办法。
https://lists.strongswan.org/pipermail/users/2010-May/004809.html

Hi,

in the default configuration the pluto daemon binds to the UDP ports 500
and 4500 whereas the charon daemon uses a raw socket with Linux
Socket Filter (LSF) rules filtering and forwarding IKE version 2
messages to the IKEv2 daemon. Thus it is no problem to use racoon
in place of charon for handling IKEv1 connections.

If only the charon daemon is used then the socket-raw plugin which is
built and loaded by default can be replaced by the socket-default
charon plugin which binds to UDP ports 500 and 4500 directly.

Best regards

Andreas

On 05.05.2010 10:48, MingM Xia wrote:
> Hi,
>
> It seems IKEv1 and IKEv2 use the same UDP port 500, is there possible
> for strongswan to support IKEv1 and IKEv2 at the same time on the same
> host? It seems will make pluto and charon listenning on the same udp
> port 500, does them work well?
>
> And how about racoon, racoon use the same udp port 500 too, is there
> possible we use Racoon for IKEv1 and Charon for IKEv2 on the same host?
>
> Thanks.

顺便再问一下,这个racoon和strongswan算什么关系? 这里strongswan官网提到一句
http://wiki.strongswan.org/projects/strongswan/wiki/IOS_%28Apple%29

Despite the Cisco reference, the configure option –enable-cisco-quirks is not required as the iOS client is not provided by Cisco but is actually a modified version of Racoon.

有点搞笑‘ 35# 发表于 2012-12-12 11:23

本帖最后由 有点搞笑‘ 于 2012-12-12 13:00 编辑

回复 34# 有点搞笑‘

才发现原来strongswan默认就启动了pluto (兼容ikev1)和 charon(兼容ikev2) deamon的进程,只是编译时需要指定相应的EAP模块,折腾了一晚上,终于用strongswan搞定了同时支持多平台的客户端 。。现在通过ikev1支持ios自带的vpn客户端(无需导入证书),通过ikev2支持win7自带的vpn客户端(但要在客户端导入一个ca证书)和android上第三方的strongswan vpn客户端(我在nexus 7的4.2.1的环境下试的,也需要导入一个ca证书),按理黑莓应该也可以,现在剩下的问题就是不知道winxp自带的vpn客户端能不能用,回头有空再折腾了。

明天有空再上折腾过程的记录,另外,strongswan官网似乎有一个把这个strongswan vpn客户端集成到android自带vpn客户端里头的教程,有空再学习了
http://wiki.strongswan.org/projects/strongswan/wiki/Android

btw,貌似strongswan从5.x版本开始不支持pluto了,说是要用racoon替代,或者装一个socket-default charon plugin的插件来让charon支持ikev1? 这个还没搞明白,所以现在还是用4.x的最后一版4.6.4,本着求稳不求新的原则。

btw2,发现用ikev2一个好处,支持VPN reconnect,这样移动设备唤醒后vpn还是继续连着(openvpn 这样的SSL VPN早就有这个功能了),但只支持ikev1的ios设备不行,sleep时间长了唤醒后还得去手工重新连上VPN。

有点搞笑‘ 36# 发表于 2012-12-12 11:43

Debian 6.0配置pure ipsec实现ios/win7/android多平台VPN客户端的访问
本帖最后由 有点搞笑‘ 于 2013-2-23 13:27 编辑

12.12.14
修改了一下,补充之前漏掉的客户端证书的制作步骤,尽管在客户端直接用ca证书亦可,但不安全。

———-

只装StrongSwan这个软件来安装pure ipsec

putty登录Debian 6.0后,更新源,并安装编译环境

apt-get update
apt-get install build-essential      #编译环境
aptitude install libgmp3-dev libssl-dev pkg-config libpcsclite-dev libpam0g-dev    #编译所需要的软件

本着求稳不求新的原则,下载4.x的最后一版 4.6.4并解压

cd /usr/src
wget http://download.strongswan.org/strongswan-4.6.4.tar.gz
tar zxvf strongswan-4.6.4.tar.gz
cd strongswan-4.6.4

接下来配置编译参数时按理应该不用指定那么多参数,但我第一次为保险起见,把和EAP相关的参数全部都指定了,有精力折腾的可以试试哪些参数可以省去

./configure --prefix=/usr --sysconfdir=/etc --enable-cisco-quirks --enable-openssl --enable-nat-transport --disable-mysql --disable-ldap --disable-static --enable-shared --enable-md4 --enable-eap-mschapv2 --enable-eap-aka --enable-eap-aka-3gpp2 --enable-eap-gtc --enable-eap-identity --enable-eap-md5 --enable-eap-peap --enable-eap-radius --enable-eap-sim --enable-eap-sim-file --enable-eap-sim-pcsc --enable-eap-simaka-pseudonym --enable-eap-simaka-reauth --enable-eap-simaka-sql --enable-eap-tls --enable-eap-tnc --enable-eap-ttls

详细的配置参数说明见官网 http://wiki.strongswan.org/projects/strongswan/wiki/Autoconf46

然后是编译和安装

make
make install

strongswan安装完成后,需要对/etc/ipsec.conf进行修改,我的配置如下

config setup
        charonstart = yes      
        plutostart=yes       #其实默认pluto和charon是开着的,不过保险起见我还是再设置一下
        nat_traversal=yes
        uniqueids=yes

conn ios
        keyexchange=ikev1
        authby=xauthpsk
        xauth=server
        left=%defaultroute
        leftsubnet=0.0.0.0/0
        leftfirewall=yes
        right=%any
        rightsubnet=10.11.0.0/24
        rightsourceip=10.11.0.0/24
        pfs=no
        auto=add

conn win7                    #win7和android的配置一样
    keyexchange=ikev2
    ike=aes256-sha1-modp1024!
    esp=aes256-sha1!
    dpdaction=clear
    dpddelay=300s
    rekey=no
    left=%defaultroute
    leftsubnet=0.0.0.0/0
    leftauth=pubkey
    leftcert=serverCert.pem
    leftid=@vps的公网ip地址
    right=%any
    rightsourceip=10.10.3.0/24
    rightauth=eap-mschapv2
    rightsendcert=never
    eap_identity=%any
    auto=add

老规矩,最后要多一个换行,否则启动ipsec时会提示
Starting strongSwan 4.6.4 IPsec [starter]…
(null):0: syntax error, unexpected $end, expecting EOL []
unable to start strongSwan — fatal errors in config

另外,配置文件中不能把某行注释掉,否则启动ipsec时也会提示出错
Starting strongSwan 4.6.4 IPsec [starter]…
/etc/ipsec.conf:8: syntax error, unexpected FIRST_SPACES [ ]
unable to start strongSwan — fatal errors in config

12.12.16补充:
这个似乎不确,比如一行“ keyexchange=ikev2”,如此注销“# keyexchange=ikev2”或“ # keyexchange=ikev2”均出错,但“ #keyexchange=ikev2”就可以。

看样子这类小bug于openswan、strongswan是一脉传承啊,毕竟都是源自freeswan。

还需要修改/etc/strongswan.conf文件,在charon项和pluto项里添加dns

# strongswan.conf - strongSwan configuration file

charon {
dns1 = 8.8.8.8
dns2 = 208.67.222.222
...
pluto {
dns1 = 8.8.8.8
dns2 = 208.67.222.222

修改/etc/ipsec.secrets文件,添加帐号,ios等设备走ikev1协议用的是PSK认证方式,win7还有android走ikev2用的是RSA方式

# this file is managed with debconf and will contain the automatically created private key

: PSK "自定义PSK密钥"
用户名1 : XAUTH "密码1"

: RSA serverKey.pem
用户名2 : EAP "密码2"

#include /var/lib/strongswan/ipsec.secrets.inc

添加iptables命令、修改/ipv4/ip_forward,然后重启ipsec

iptables -A INPUT -p udp --dport 500 -j ACCEPT
iptables -A INPUT -p udp --dport 4500 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.11.0.0/24 -o eth0 -j MASQUERADE
iptables -A FORWARD -s 10.11.0.0/24 -j ACCEPT
echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -t nat -A POSTROUTING -s 10.10.3.0/24 -o eth0 -j MASQUERADE  #win7和android vpn客户端用
iptables -A FORWARD -s 10.10.3.0/24 -j ACCEPT             #win7和android vpn客户端用

ipsec restart

为避免VPS重启后NAT功能失效,可以把如上几行命令添加到/etc/rc.local文件中。

现在ios设备应该就可以用 用户名1、密码1和”自定义PSK密钥连上vpn服务器了。

分界线~~~~~

win7自带的vpn客户端,和android第三方的strongswan vpn client软件(ICS 4.0以上的系统才能用),走ikev2协议,需要制作相应的证书。

先生成ca证书caKey.pem和caCert.pem

ipsec pki --gen --outform pem > caKey.pem
ipsec pki --self --in caKey.pem --dn "C=CH, O=strongSwan, CN=strongSwan CA" --ca --outform pem > caCert.pem

然后是服务器端的证书

ipsec pki --gen --outform pem > serverKey.pem
ipsec pki --pub --in serverKey.pem | ipsec pki --issue --cacert caCert.pem --cakey caKey.pem --dn "C=CH, O=strongSwan, CN=VPS的公网ip或域名" --san="VPS的公网ip或域名" --flag serverAuth --flag ikeIntermediate --outform pem > serverCert.pem

注意,如果将来你的vpn客户端登录的是ip或域名,这里的CN项必须也要对应是ip或域名。
(121217补充:
今天测试了一下,这个vpn客户端登录用ip或域名,须和CN项里的一致,只是针对ikev2说的,对ikev1无所谓)

12.12.14
补充漏掉的客户端证书的制作

ipsec pki --gen --outform pem > clientKey.pem
ipsec pki --pub --in clientKey.pem | ipsec pki --issue --cacert caCert.pem --cakey caKey.pem --dn "C=CH, O=strongSwan, CN=client" --outform pem > clientCert.pem

前面生成的ca证书文件caCert.pem可被win7直接导入,但android设备(我的是nexus 7 /rom4.2.1)不能直接导入。 前面生成的客户端证书文件clientCert.pem不能直接导入到win7或anroid设备中,需先转换为.p12格式

openssl pkcs12 -export -inkey clientKey.pem -in clientCert.pem -name "client" -certfile caCert.pem -caname "strongSwan CA" -out clientCert.p12

会提示要设置使用该证书的密码,可以设置一下密码也可以直接回车(密码为空)。

然后把证书复制到相应的目录中去

cp caCert.pem /etc/ipsec.d/cacerts/
cp serverCert.pem /etc/ipsec.d/certs/
cp serverKey.pem /etc/ipsec.d/private/

如有更多的vpn客户端使用ikev2,则建议制作更多的客户端证书

ipsec pki --gen --outform pem > client2Key.pem
ipsec pki --pub --in client2Key.pem | ipsec pki --issue --cacert caCert.pem --cakey caKey.pem --dn "C=CH, O=strongSwan, CN=client" --outform pem > client2Cert.pem
openssl pkcs12 -export -inkey client2Key.pem -in client2Cert.pem -name "client" -certfile caCert.pem -caname "strongSwan CA" -out client2Cert.p12

这样,万一某个客户端的证书泄漏,只需在服务器端注销对应该客户端的证书即可,不影响其他vpn客户端的使用。

接下来进行在vpn客户端导入证书的步骤,android的导入比较简单,把caCert.p12 clientCert.p12 这个证书文件放到sdcard根目录,然后在设置>安全>从存储设备安装证书即可,按提示输入前面设置的证书使用密码。设备重启后证书生效,然后到google play里下载安装strongswan vpn client这个软件,在其中设置用户名2、密码2,以及ikeav2的协议,等等,这时就可以登录vpn服务器了。

而在win7端导入caCert.pem clientCert.p12 则稍麻烦些,可以按照网上的教程导入,然后在win7自带的vpn客户端中设置一下,比如下面的链接(要翻墙)。win7端无需重启,证书导入后即可生效。
http://www.vpncup.com/config/windows7-ikev2

到此多平台的vpn客户端基本就实现了,黑莓自带的vpn客户据说也可以通过ikev2协议联上,具体没试过。

补充:
按如上的ipsec.conf配置后,启动ipsec时会在/var/log/auth.log文件里会有如下记录
Dec 12 02:29:00 (none) pluto[4565]: “/etc/ipsec.secrets” line 18: unrecognized key format: EAP
Dec 12 02:29:00 (none) pluto[4565]: added connection description “ios”
Dec 12 02:29:00 (none) pluto[4565]: connection must specify host IP address for our side
但却不影响使用,不知道到底是bug还是真的配置有问题,我都已按官网教程设置了。

121216补充:
把conn win7项里的left=%any改成%defaultroute,“ pluto[4565]: connection must specify host IP address for our side” 的出错提示就消除了。

121221补充:
为方便VPN客户端的证书制作,可自制一个脚本,比如取名 /root/cc.sh ,内容如下,供参考

#!/bin/bash
   read -p "Please input username:" user
   if [ "$user" = "" ]; then
        echo "Error! - you must input an username"
        echo "Exit!"
        exit 1
   fi
   echo "==========================="
   echo "Making ${user}Key.pem ..."
ipsec pki --gen --outform pem > ${user}Key.pem
   echo "Making ${user}Cert.pem ..."
ipsec pki --pub --in ${user}Key.pem | ipsec pki --issue --cacert caCert.pem --cakey caKey.pem --dn "C=CH, O=strongSwan, CN=client" --outform pem > ${user}Cert.pem
   echo "Making ${user}Cert.p12 ..."openssl pkcs12 -export -inkey ${user}Key.pem -in ${user}Cert.pem -name "client" -certfile caCert.pem -caname "strongSwan CA" -out ${user}Cert.p12
   echo "========== done =========="

修改脚本权限并执行

cd /root
chmod 755 cc.sh     #修改权限
./cc.sh     #执行并按提示操作

补充@130122
建议把所有的证书文件,包括ca证书、服务器端和客户端的证书,通过winscp备份到本地硬盘,这样万一将来VPS因故障需要重装系统时,无需重新制作各个客户端证书并一一通知更新了。

参考资料:
ios设置部分参考了
http://blog.wellsgz.info/?p=1560#comment-21137
http://igfw.net/archives/9151
win7设置部分参考了
http://wiki.strongswan.org/projects/strongswan/wiki/Win7EapMultipleConfig
ca证书设置部分参考了
http://ttz.im/blog/2011/10/724
http://wiki.strongswan.org/projects/strongswan/wiki/IOS_(Apple)

有点搞笑‘ 37# 发表于 2012-12-12 19:48

顶一把,看在码字这么辛苦的份上有木有浮云可加啊~

stefwoo 38# 发表于 2012-12-12 21:20

mark先,看起来复杂,也大概明白了为什么我搭建的pptp vpn经常连不上去

stefwoo 39# 发表于 2012-12-12 23:41

按照楼主的方法搭建好了strongSwan但是老是提示验证出问题

kirito 40# 发表于 2012-12-13 00:02

似乎AnyConnect可以用於Cisco IPSec VPN連接

有点搞笑‘ 41# 发表于 2012-12-13 11:40

回复 39# stefwoo

检查一下debian下的/var/log/auth.log,看看有什么出错提示

糊锅巴 42# 发表于 2012-12-13 18:35

终于折腾上了,WIN7和苹果都很好用,连接很快,但是XP和WIN2003就上不了了
搜了半天,也没找到有客户端,楼主研究过吗?

有点搞笑‘ 43# 发表于 2012-12-13 19:58

回复 42# 糊锅巴

没研究过,目前只用过ios/win7和猴机,xp等有空时再折腾了,估计自带的vpn客户端不行。

糊锅巴 44# 发表于 2012-12-14 01:00

回复 43# 有点搞笑‘

嗯,我搜了一下,这个协议XP和VISTA都不支持,2003也不支持

有点搞笑‘ 45# 发表于 2012-12-14 12:16

本帖最后由 有点搞笑‘ 于 2012-12-14 12:51 编辑

回复 2# 有点搞笑‘

昨晚心有不甘,用strongswan搭配xl2tpd再次尝试了一下L2TP over IPsec(因为纯ipsec方式适合net to net,而像个人vpn客户端访问vpn一般还是推荐VPDN,即像L2TP over IPsec的方式,应该是平台兼容性更好的缘故。。

情况有所改善,但vpn客户端断开vpn连接短时间内再次连接时也还是容易出现连不上的现象,看/var/log/auth.log有如下提示
ERROR: asynchronous network error report on eth0 for message to x.x.x.x port 1045, complainant x.x.x.x: Connection refused [errno 111, origin ICMP type 3 code 3 (not authenticated)]
只是换个ip,或者过段时间后再连又都能成功连上。

看了这个帖子的介绍,有点搞明白为何 L2TP over IPsec方式容易出现再连接失败的问题了,因为我的这些vpn客户端都在一个局域网下,用的是同一个公网ip,只是解决起来要重新编译linux内核,用KLIPS替换NETKEY,太折腾人了
https://www.dls-yan.com/2012/10/04/783.html

问题:

由于Android在断开l2tp/ipsec的时候不会发送Delete SA的指令,也不支持DPD(死亡监测),导致了断开连接以后ipsec的隧道无法被清除,统一设备再次连接的时候的确是可以使用之前的隧道再次连接,但是由于以NETKEY方式运行的openswan是以客户端的IP为标记的,会导致局域网中其他设备无法连接。

解决方法:

1.让Android支持DPD,或者发送Delete SA,跟Google去说?还是自己修改ROM呢?看起来并不是个非常好的办法。

2.配置服务器监视l2tp的连接,当断开时清除相应的ipsec隧道,可是要怎么做这个监控呢?我不会。。。有人愿意帮助我一下的话我会非常高兴的。

3.让服务器支持局域网中多个设备同时建立隧道吧!这个看起来最理想,而且也解决了局域网中不能同时连接的问题。

来试试:

我选择了第三种方案,为了达到“局域网中多个设备同时建立隧道”的目的,ipsec(openswan)必须以 KLIPS 方式运行,而不是 NETKEY 。

Linux的内核中默认并没有KLIPS的支持,其实老一点的版本的话,连NETKEY的支持都没有,所以我们需要给内核打上KLIPS补丁,然后编译生成一个全新的内核。

有点搞笑‘ 46# 发表于 2012-12-16 23:53

本帖最后由 有点搞笑‘ 于 2012-12-17 23:07 编辑

终于折腾上了,WIN7和苹果都很好用,连接很快,但是XP和WIN2003就上不了了
搜了半天,也没找到有客户端,楼主研 …
糊锅巴 发表于 2012-12-13 18:35

周末折腾了一下,放狗可得知貌似至少有如下第三方的vpn客户端可以访问strongswan的pure IPsec的服务端。
1. 收费的HighAssurance Remote,支持ikev2,但没看到有试用版或xx 版
http://english.cyprotect.com/main0191.php

2. 免费的shrew,不支持ikev2,网上有人提到可以兼容strongswan,但官网关于此项的wiki空白,而且貌似也没找到教程
http://shrew.net/software

3. 我在14楼提到过的cisco vpn client,同样不支持ikev2,配合用racoon搭建的pure IPsec服务器没问题,但曾尝试过和strongswan连接失败,遂放弃,也因为是strongswan作者曾提到过

https://lists.strongswan.org/pipermail/users/2007-May/001805.html

[strongSwan] StrongSwan 4.1.2 with Cisco VPN Client asRoadwarrior

Andreas Steffen andreas.steffen at strongswan.org
Fri May 11 19:17:30 CEST 2007

> May 11 14:07:43 lumberjack pluto[16813]:
packet from 123.123.123.123:500:
unsupported exchange type ISAKMP_XCHG_AGGR in message

strongSwan does not support IKE Aggressive Mode [and never will].
Please use IKE Main Mode with X.509 certificates.

但昨晚又放狗搜索到strongswan官网上的一个讨论贴,看其结果应该是用cisco vpn client访问成功了,但语焉不详
https://lists.strongswan.org/pipermail/users/2010-May/004894.html

于是参考其配置文件修改了自己的ipsec.conf

config setup
        charonstart = yes
        plutostart=yes
        nat_traversal=yes
        uniqueids=yes
        charondebug="net 0"
        crlcheckinterval=10m
        strictcrlpolicy=yes

conn ios
        keyexchange=ikev1
        authby=xauthpsk
        xauth=server
        left=%defaultroute
        leftsubnet=0.0.0.0/0
        leftfirewall=yes
        right=%any
        rightsubnet=10.11.0.0/24
        rightsourceip=10.11.0.0/24
        pfs=no
        auto=add
       dpddelay=30s
       dpdtimeout=120s
       dpdaction=clear

conn win7&android
        keyexchange=ikev2
        ike=aes256-sha1-modp1024!
        esp=aes256-sha1!
        dpdaction=clear
        dpddelay=300s
        rekey=no
        left=%defaultroute
        leftsubnet=0.0.0.0/0
        leftauth=pubkey
        leftcert=serverCert.pem
        leftid="C=CH, O=strongSwan, CN=VPS公网ip"
        right=%any
        rightsourceip=10.10.3.0/24
        rightauth=eap-mschapv2
        rightsendcert=never
        eap_identity=%any
        auto=add

ca vpnca
        cacert=caCert.pem
        crluri=crl.pem
        auto=add

conn cisco
        keyexchange=ikev1
        ike=aes256-sha1-modp1024!
        esp=aes256-sha1!
        dpdaction=clear
        dpddelay=300s
        rekey=no
        left=%defaultroute
        leftsubnet=0.0.0.0/0
        leftauth=pubkey
        leftcert=serverCert.pem
        leftid="C=CH, O=strongSwan, CN=vps公网ip"
        right=%any
        rightsourceip=10.10.5.0/24
        auto=add
        ikelifetime=60m
        keylife=20m
        rekeymargin=3m
        keyingtries=1
        type=tunnel
        pfs=no
        authby=xauthrsasig
        xauth=server

需要注意的一是必须有一条 keyexchange=ikev1 ,如果像我一样配置多平台客户端的支持的话(原文中没有是因为只用pluto而关闭了charon,所以默认就是ikev1),否则服务器端的/var/log/auth.log文件中会提示出错
but no connection has been authorized with policy=PUBKEY+XAUTHRSASIG+XAUTHSERVER

其次是多了一个crl.pem的参数,经放狗学习才知道crl是一个证书吊销清单,该文件可以自制,于是参照官网说明
http://www.strongswan.org/docs/readme4.htm

3.3 Generating a CRL

An empty CRL that is signed by the CA can be generated with the command

openssl ca -gencrl -crldays 15 -out crl.pem

If you omit the -crldays option then the default_crl_days value (30 days) specified in openssl.cnf is used.

If you prefer the CRL to be in binary DER format, then this conversion can be achieved with

openssl crl -in crl.pem -outform DER -out cert.crl

The directory /etc/ipsec.d/crls/ contains all CRLs either in binary DER or in base64 PEM format. Irrespective of the file suffix, pluto “automagically” determines the correct format.

不过我运行同样的命令

openssl ca -gencrl -out crl.pem

得到的却是如下出错提示,证书的目录也对不上

Using configuration from /usr/lib/ssl/openssl.cnf
Error opening CA private key ./demoCA/private/cakey.pem
3502:error:02001002:system library:fopen:No such file or directory:bss_file.c:356:fopen(‘./demoCA/private/cakey.pem’,’r’)
3502:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:358:
unable to load CA private key

联想到之前的证书制作命令是ipsec pki … 而非openssl …,于是继续查找strongswan官方文档,找到这么一篇
http://wiki.strongswan.org/projects/strongswan/wiki/IpsecPkiSignCrl

按照其中的说明杜撰了一条命令,也不知道对不对

ipsec pki --signcrl --cacert caCert.pem --cakey caKey.pem --outform pem > crl.pem

然后复制到对应的目录

cp crl.pem /etc/ipsec.d/crls/

当然,还要在ipsec.secrets中添加帐号

: RSA serverKey.pem
用户名3 : XAUTH "密码3"

以及在rc.local中添加两行

iptables -t nat -A POSTROUTING -s 10.10.5.0/24 -o eth0 -j MASQUERADE
iptables -A FORWARD -s 10.10.5.0/24 -j ACCEPT

重启ipsec就完成了服务端的配置

ipsec restart

分割线———–

接下来是在windows XP端安装cisco vpn client软件,在软件中导入客户端证书如clientCert.p12

新建一个连接,配置中选择certificate认证方式,选择刚才导入的客户端证书,不能是默认的Group Authentication(估计这就是作者所谓的ike aggressive mode,strongswan不支持)

其中的send CA Certificate Chain不知道什么意思,勾选或不勾选都能正常使用,我这里勾选了。

然后点connect,输入 用户名3和密码3 ,确认。。大功告成。。

现在访问 http://www.checkip.org,应该就能显示VPS的公网ip了。

btw,提供一下cisco vpn client软件的校验
File: vpnclient-winx64-msi-5.0.07.0440-k9.exe
Size: 5026816 bytes
Modified: Sunday, December 09, 2012, 20:05:52
MD5: 8D10A9D6DD25793D600A08389A56825C
SHA1: B186F2BBAB0F36B17FBA0C13E537447FC200D24C
CRC32: 8A95A02F

File: vpnclient-win-msi-5.0.07.0410-k9.exe
Size: 8001536 bytes
Modified: Sunday, December 09, 2012, 20:06:10
MD5: A8407593072CFABB83410F2F06FA8B61
SHA1: 9DCB2E9DE75204A4361036CDD194D2775B0B4B26
CRC32: D30E8447

20121217补充:客户端证书注销方法

还是参照strongSwan官网说明
http://wiki.strongswan.org/projects/strongswan/wiki/IpsecPkiSignCrl

注销clientCert.pem,复制crl.pem到对应目录,重启ipsec

ipsec pki --signcrl --cacert caCert.pem --cakey caKey.pem --reason superseded --cert clientCert.pem > crl.pem
cp crl.pem /etc/ipsec.d/crls/
ipsec restart

再通过使用该客户端证书的vpn客户端访问时就会被拒绝,服务器端的 /etc/log/auth.log 文件里会有如下日志
Dec 17 06:52:25 (none) pluto[2244]: “cisco”[1] x.x.x.x:xxx #1: Peer ID is ID_DER_ASN1_DN: ‘C=CH, O=strongSwan, CN=client’
Dec 17 06:52:25 (none) pluto[2244]: “cisco”[1] x.x.x.x:xxx #1: certificate was revoked on Dec 17 06:47:17 UTC 2012, reason: superseded
Dec 17 06:52:25 (none) pluto[2244]: “cisco”[1] x.x.x.x:xxx #1: X.509 certificate rejected
Dec 17 06:52:25 (none) pluto[2244]: “cisco”[1] x.x.x.x:xxx #1: no public key known for ‘C=CH, O=strongSwan, CN=client’
Dec 17 06:52:25 (none) pluto[2244]: “cisco”[1] x.x.x.x:xxx #1: sending encrypted notification INVALID_KEY_INFORMATION to 101.80.147.96:1305
Dec 17 06:52:31 (none) pluto[2244]: “cisco”[1] x.x.x.x:xxx #1: ignoring Delete SA payload: ISAKMP SA not established

糊锅巴 47# 发表于 2012-12-17 14:35

周末折腾了一下,放狗可得知貌似至少有如下第三方的vpn客户端可以访问strongswan的pure IPsec的服务端。 …
有点搞笑‘ 发表于 2012-12-16 23:53

太好了,我马上试一下,多谢

糊锅巴 48# 发表于 2012-12-18 01:56

回复 46# 有点搞笑‘

已经装好了,非常好用.
用CISCO VPN CLIENT连接时,密码和EAP那个用一样的也可以,用MACOS连尤其爽,非常稳定,而且自带CISCO CLIENT,很方便,用IPHONE也不错

这个比之前用的所有的VPN连接速度都要快,点连接后基本上一秒钟就连接上了,认证非常快.而且断线重拔断线重拔无数次,也没有什么影响.

stevecai 49# 发表于 2012-12-18 06:14

这段时间我还在折腾设置openvpn,哎,同样是菜鸟。。。。

其他的配置过程都存在bolg上了。

有点搞笑‘ 50# 发表于 2012-12-18 13:39

本帖最后由 有点搞笑‘ 于 2012-12-18 19:28 编辑

回复 有点搞笑‘

已经装好了,非常好用.
用CISCO VPN CLIENT连接时,密码和EAP那个用一样的也可 …
糊锅巴 发表于 2012-12-18 01:56

我自己用下来发觉 ipsec.secrets 文件中的格式
用户名1 : XAUTH “密码1”
用户名2 : EAP “密码2”
对ikev2的客户端如win7来说似乎没什么区别,都能用(反过来ikev1的客户端就不能使用EAP格式的用户名2和密码2),可能是ikev2向下兼容的缘故吧。

另外,尽管ipsec启动时在/etc/log/auth.log日志中会提示 ipsec.secrets 文件中EAP格式错误,但一样有效。

还有,断开重连不是问题,最大的问题在于移动设备如iOS和android,连着vpn进入sleep状态短时间内唤醒后能否再次连上,L2TP over IPsec的方式我折腾了数次实在搞不定,如果没这个问题的话我还是想用L2TP over IPsec,尽管配置上麻烦些,但基本上各平台自带的VPN客户端都能用。

有点搞笑‘ 51# 发表于 2012-12-19 17:32

本帖最后由 有点搞笑‘ 于 2012-12-19 19:14 编辑

今天遇到一个问题,我重新制作了一下服务器端的证书,把CN项里的vps的公网ip换成了域名,目的是将来vps更换ip时无需重新制作证书,也不需要通知各客户端一一去修改登录ip,只需在域名服务商那里更新一下ip即可,省事。

试了一下,win7自带的vpn客户端,还有第三方的strongswan vpn client和cisco vpn client等客户端都可以用域名登录,但iOS通过wifi登录也没问题,但iphone 4S切换到联通3G登录时却提示找不到服务器,换成ip登录就正常,感觉像是域名解析失败?

iphone 4S上用issh 试着ping了一下服务器的域名也没反应,ping其他域名google.com, baidu.com也一样没反应,但可以在safari里访问其页面,难道联通3G针对了vpn客户端屏蔽了域名解析功能么?

补充:
刚从cydia里下载了个GuizmoDNS的软件,修改了一下DNS,结果vpn客户端的域名解析正常,果然还是联通3G捣的鬼。

糊锅巴 52# 发表于 2012-12-23 01:25

用WIN7自带的客户端拔,经常出现拔不上去的情况
苹果的也是,有时重新新建一个链接就可以了,有时死活也连不上

用VPN CLIENT就没有这个问题,每次都可以上,而且,用VPN CLIENT连接上了之后 ,再断线,WIN7也能上了,奇怪…

有点搞笑‘ 53# 发表于 2012-12-23 01:42

本帖最后由 有点搞笑‘ 于 2013-1-1 14:56 编辑

回复 52# 糊锅巴

这类ipsec VPN服务器软件的稳定性确实不如openvpn这样的SSL vpn软件,主要是客户端断线后服务器端没有接收到信号仍保持询问状态导致客户端短时间内无法再次连上,需要重启vpn服务端,不过一般情形下等上一段时间后vpn服务端基本都能自动恢复正常。

我现在还做了个定时任务,服务端每天半夜自动重启一次,所以用下来一段时间后总体还可以接受。

crontab -e     #进入定时任务编辑状态

在其中添加如下的一条定时任务,并保存退出。

00 20 * * * /usr/sbin/ipsec restart

注:Debian的定时任务似乎默认按UTC时间来执行的(尽管系统的时区我已设置UTC+8),所以这里是20:00以确保实际在临晨4:00执行。

修改完成后,需要重启一下定时任务的程序。

/etc/init.d/cron restart

糊锅巴 54# 发表于 2012-12-24 15:08

回复 糊锅巴

这类ipsec VPN服务器软件的稳定性确实不如openvpn这样的SSL vpn软件,主要是客户端断 …
有点搞笑‘ 发表于 2012-12-23 01:42

连不上的时候,用CISCO VPN CLIENT就可以连上,然后把VPN CLIENT断线了,再用WIN7的连,又可以连上了,很神奇,如果只用VPN CLIENT是没啥问题的.

糊锅巴 55# 发表于 2012-12-24 15:09

回复 糊锅巴

这类ipsec VPN服务器软件的稳定性确实不如openvpn这样的SSL vpn软件,主要是客户端断 …
有点搞笑‘ 发表于 2012-12-23 01:42

可能是我开的帐号比较多,哈哈,一共开了6个帐号,要是一个人用,估计这种情况要少的多

cyberiser 56# 发表于 2012-12-24 15:21

这几天做了个On Demand的vpn测试了一下,感觉效果不是很好,主要是不用以后没准啥时候才断。按照苹果的说明应该是2分钟不用就断开,实测2分钟到30分钟都有可能,admire。另外gfw的域名名单也经常变,不太好更新。当然要说自己一个人用,那只要写自己经常访问的域名就可以了,倒还不算麻烦

有点搞笑‘ 57# 发表于 2012-12-30 12:48

本帖最后由 有点搞笑‘ 于 2012-12-30 12:49 编辑

回复 56# cyberiser

我这里ios设备自动进入sleep导致vpn连接断开,如果唤醒后再次连接连不上,基本上2分钟后再连就没问题,DPD设置在120秒还是管用的(可以在服务端日志文件中看到),我看到有的文章把参数设置得更短,如
dpddelay=10s
dpdtimeout=10s

我这里受DPD的影响不大,所以就没去修改,还是用官方教程里的30/120的参数

cyberiser 58# 发表于 2012-12-30 13:14

比如说,看完twitter以后,再去看youku
这样的话2分钟断开还能接受,最多就是看youku看个开头然后断了重连
要是30分钟,那看youku不说流量了,光是速度就够恶心的。没准还来个提示说海外不让看
现在的问题就是每次断开的时间都是随机的…
另外ondemand vpn的话要改配置加上新的被墙的域名也不是太方便

我用strongswan 5.0.1测试,sleep以后唤醒了再去连接倒是没问题。不过5.0.1有个bug要手动改一下,要不iOS连不上… http://wiki.strongswan.org/attachments/238/0001-Exclude-dynamic-TS-from-Unity-Split-Include-attribut.patch

有点搞笑‘ 59# 发表于 2012-12-30 14:39

回复 58# cyberiser

我还是在用4.6.4,可能比5.x的版本bug少些吧。大多数时候进入sleep再唤醒的间隔都大于2分钟了,所以我这里基本都能在唤醒后连接vpn成功,另外,每天半夜服务器重启应该也会有所帮助。

糊锅巴 60# 发表于 2013-1-5 00:47

CISCO VPN CLIENT突然连不上了,没动过任何设置,不知道啥问题.难道证书有效期过了?

voodooii 61# 发表于 2013-1-5 01:01

android 4.0.4 的L2TP vpn有bug,貌似还没有解决吧!
我现在也是有分的人了啊!

有点搞笑‘ 62# 发表于 2013-1-5 11:39

CISCO VPN CLIENT突然连不上了,没动过任何设置,不知道啥问题.难道证书有效期过了?
糊锅巴 发表于 2013-1-5 00:47

我这里刚试了试没问题,已经发了十个证书给熟人用。

另外,为保险起见,每次做完一批新的客户端证书后我都重新生成一下crl.pem文件,不知道是否与此有关

ipsec pki --signcrl --cacert caCert.pem --cakey caKey.pem --outform pem > crl.pem
cp crl.pem /etc/ipsec.d/crls/
ipsec restart

糊锅巴 63# 发表于 2013-1-5 15:27

我这里刚试了试没问题,已经发了十个证书给熟人用。

另外,为保险起见,每次做完一批新的客 …
有点搞笑‘ 发表于 2013-1-5 11:39

估计要重装了,WIN7平台没有问题,苹果平台和CISCO登不上去了,连服务器失去响应。

有点搞笑‘ 64# 发表于 2013-1-5 20:04

本帖最后由 有点搞笑‘ 于 2013-1-5 20:06 编辑

回复 63# 糊锅巴

服务器的日志里一点反应都没有么?如果没有的话,再检查一下ipsec的端口是否处于监听状态,可能pluto或charon使用的端口不一样

糊锅巴 65# 发表于 2013-1-9 18:01

回复 糊锅巴

服务器的日志里一点反应都没有么?如果没有的话,再检查一下ipsec的端口是否处于监 …
有点搞笑‘ 发表于 2013-1-5 20:04

看日志是个不错的方法,日志提示crl.pem无效了,到所在目录一看,居然变成了0字节,怪了.以前的caKey也找不到了,只好全部重新生成一套证书了,又全部可以用了…

有点搞笑‘ 66# 发表于 2013-1-14 23:27

本帖最后由 有点搞笑‘ 于 2013-8-23 21:01 编辑

给一帮菜鸟熟人们整理了一份 各平台vpn客户端的使用教程 ,这里也贴上,可能地板里有人用得上。

有点搞笑‘ 67# 发表于 2013-2-23 12:03

本帖最后由 有点搞笑‘ 于 2013-2-23 12:15 编辑

手上的nexus 4升级到4.2.2了,偶然发现其自带的vpn客户端也支持pure ipsec了,使用方法跟iOS自带的vpn客户端一样。选择IPSec Xauth PSK方式,无需证书,填入PSK密码保存,登录时使用填入用户名、密码即可。

放狗搜了一下,似乎从4.1开始android自带的vpn客户端就已支持pure IPSec了,不过之前我没留意。

另外,跟iOS自带的vpn客户端一样,都属于ikev1方式,跟ikev2的证书方式相比,安全性稍差,且没法像ikev2那样在断网恢复或者更换网络后能自动再连上,感觉还是ikev2更适合手机等移动终端设备。

lokyss 68# 发表于 2013-3-23 04:35

回复 67# 有点搞笑‘

问一个问题,我部署的时候,检查xl2tpd -D提示xl2tpd[2294]: init_network: Unable to bind socket: Address already in use. Terminating.然后我搜索了很久没有找到答案,求解

有点搞笑‘ 69# 发表于 2013-3-23 14:21

回复 68# lokyss

说是已经被占用了,你用

ps -aux | grep l2tp

这个命令检查一下xl2tp进程是否已经在运行了,已经在运行的话就没必要再执行

xl2tpd -D

这个调试命令了,或者你先杀掉已经在运行的xl2tpd进程再运行这个调试命令

lokyss 70# 发表于 2013-3-23 15:01

回复 69# 有点搞笑‘

谢谢,我再尝试一次

lokyss 71# 发表于 2013-3-25 01:14

12.12.14
修改了一下,补充之前漏掉的客户端证书的制作步骤,尽管在客户端直接用ca证书亦可,但不安全。

有点搞笑‘ 发表于 2012-12-12 11:43

可以详细说明一下“配置文件中不能把某行注释掉”的问题吗?我今天尝试了一下,还是出现错误。谢谢

有点搞笑‘ 73# 发表于 2013-3-25 09:56

本帖最后由 有点搞笑‘ 于 2013-3-25 09:59 编辑

可以详细说明一下“配置文件中不能把某行注释掉”的问题吗?我今天尝试了一下,还是出现错误。谢谢
lokyss 发表于 2013-3-25 01:14

36F有补充说明
12.12.16补充:
这个似乎不确,比如一行“ keyexchange=ikev2”,如此注销“# keyexchange=ikev2”或“ # keyexchange=ikev2”均出错,但“ #keyexchange=ikev2”就可以。

>> 就是说常见的注释方式(最左边起始用一个注释符井号),或者在第一个字符(如上是k)左边的空白中插入注释符,都不行,但紧贴着第一个字符k左边插入一个注释符却可以。

有点搞笑‘ 75# 发表于 2013-3-25 10:00

本帖最后由 有点搞笑‘ 于 2013-3-25 10:01 编辑

回复 74# 半杯水

是挺折腾的,不过一劳永逸,现在用着还比较安逸。

btw,排版比较乱,懒得再整理了,有兴趣的可以看俺blog里整理好的。

有点搞笑‘ 76# 发表于 2013-3-25 10:12

本帖最后由 有点搞笑‘ 于 2013-3-25 10:18 编辑

这里有strongswan作者贴了对各个开源ipsec服务端软件的比较,看起来应该是strongswan对多平台的支持最好,不知道是否有自夸之嫌。

目前感觉strongswan唯一的缺点就是不支持vpnc客户端(将来也不会支持除非vpnc去支持main mode,因为作者说了永远不会去支持aggressive mode),不过问题也不大。

https://lists.strongswan.org/pipermail/users/2007-August/001986.html

strongSwan is an IKEv1 and IKEv2 keying daemon that can cooperate
with the native IPsec stack of the Linux 2.6 kernel. As a userland
program strongSwan authenticates IPsec peers, derives IKE and IPsec
session keys and sets up IPsec policies and security associations
in the kernel via the XFRM netlink socket interface.

The native NETKEY IPsec stack in the kernel encrypts and authenticates
IP packets using the IPsec ESH and|or AH protocols based on the session
keys negotiated by strongSwan.

Thus strongSwan complements the native NETKEY stack, it does not
compete with it.

The main competitors of strongSwan are

IKEv1: Racoon, Openswan, isakmpd
IKEv2: Racoon2, OpenIKEv2, ikev2

A direct competitor of the native NETKEY IPsec stack is KLIPS
maintained by the Openswan project. strongSwan is able to
communicate with KLIPS via a PFKEYv2 interface.

有点搞笑‘ 80# 发表于 2013-3-25 13:36

本帖最后由 有点搞笑‘ 于 2013-3-25 13:51 编辑

回复 79# lokyss

我只在strongswan 4.64版本上试过,其他版本的配置文件可能不一样,具体你到strongswan官网再去看看wiki教程吧。

再次提醒一下,顶楼贴里也提到过,配置文件末尾要添加一、两个新行;配置文件中每行起始的那些空格符最好是tab键而非普通的空格键敲入;另,注释符如果不是必须的话就把整个注释行删掉算了。总之,***swan这类软件对配置文件的格式要求很严格,这点比较折腾人。

顺便说一下,openswan和strongswan的配置文件是不一样的,看你68楼的帖子折腾的应是前者,而71楼又是后者了。我现在已经放弃openswan改用后者了。

lokyss 81# 发表于 2013-3-25 17:56

回复 80# 有点搞笑‘

我本意是搭建一个vpn服务器,提供给自己使用,后来我朋友说他也有兴趣用,所以我就重新折腾,改用后者..

lokyss 82# 发表于 2013-3-26 16:57

回复 36# 有点搞笑‘

请问生成的clientCert.p12 证书存放在什么地方?

了无生趣 83# 发表于 2013-3-26 17:02

回复 有点搞笑‘

请问生成的clientCert.p12 证书存放在什么地方?
lokyss 发表于 2013-3-26 16:57

本地电脑即可,在mmc控制台导入。

有点搞笑‘ 85# 发表于 2014-2-4 10:57

看日志是个不错的方法,日志提示crl.pem无效了,到所在目录一看,居然变成了0字节,怪了.以前的caKey也 …
糊锅巴 发表于 2013-1-9 18:01

前些天才偶然发现制作 crl.pem 的命令默认有效期只有15天,得加上 –lifetime 的参数,比如1000天

ipsec pki --signcrl --cacert caCert.pem --cakey caKey.pem --lifetime 1000 --outform pem > crl.pem
cp crl.pem /etc/ipsec.d/crls/
ipsec restart

平时很少在 xp上用vpn客户端,所以一直没发现这个漏洞。。

转载请注明:一秒钟的梦 » [转载]VPS上Debian 6.0配置pure IPsec实现ios/win/android多平台VPN客户端的访问

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (2)

  1. 擦,前几天看到你anyconnect的文章来着,看了这篇才知道是同道中人,我说怎么还有草榴的连接
    来自D版带着爱3年前 (2014-08-25)回复
    • 食色性也,我们都是欲界中人。欢迎互访。
      luoqkk3年前 (2014-08-26)回复