使用strongswan搭建ios VPN和Playbook VPN

#本文参考了 @haohaolee 的 http://blog.haohaolee.com/blog/2011/04/13/use-strongswan-to-build-ipsec-vpn-for-nokia-mobile-vpn-client/ 以及  官方wiki http://wiki.strongswan.org/projects/strongswan/wiki/Fornewbies

#还有老外的 http://richardwall.info/?page_id=218 Playbook VPN 部分
# ios 部分还参考了 http://blog.wellsgz.info/?p=1560
# 操作完本文,你可以告诉你的朋友,你在Linux 上 搭建 Cisco IPSec VPN 了,尽管事实并非如此。
#如果你对本文的配置有任何疑虑请参看以上地址以及官方wiki (官方wiki还不如以前的旧readme 好用)
很多地方的网络运营商都会封杀最普及的VPN类型—- PPTP ,这种类型兼容最好,本身也是可以加密的,并非有些文章宣称的无法加密。但是与通讯方式相关的认证机制和加密方式会影响到VPN的安全,因此现在越来越推 荐使用 IPSec VPN,简单来说就是从第一次发送给服务器数据包开始就已经使用密钥加密,因此更安全。
网上很多 openswan 搭建VPN的教程,而今天这篇文章则要演示一下StrongSwan 搭建VPN,需要说明的是,文章写的是 Debian 6 下面的情形,但是同样适用于FreeBSD 8.0+ (StrongSwan在FB下 Ikev2 only)
1 Debian 我使用了 unstable 源,这一步不是必须的,仅仅是为了将openssl 升级到最新版用以搭建 OSCP 服务器(为将来的黑莓手机获取证书分发做准备)。因此所有人都可以跳过这一步。
deb http://ftp.fr.debian.org/debian/ unstable main contrib non-free
deb-src http://ftp.fr.debian.org/debian/ unstable main contrib non-free
deb http://ftp.fr.debian.org/debian/ testing contrib non-free main
deb-src http://ftp.fr.debian.org/debian/ testing contrib non-free mai
强制使Debian使用 Unstable 源进行安装
root@cisco:~# cat /etc/apt/apt.conf
APT::Default-Release “unstable”;
2 在这一步,你有两种选择,1) 从Debian 源安装较旧版本的 Strongswan 4.5 2) 自己去 http://download.strongswan.org/ 下载最新版的Strongswan。我使用后者。
1)如果你使用Debian源安装,请使用如下操作
apt-get update
apt-get install  ipsec-tools  strongswan-ikev1 strongswan-ikev2 strongswan-starter
2)如果你自己手动编译,如下操作
tar zxvf strongswan
cd strongswan
apt-get build-dep strongswan
./configure   –prefix=/usr –sysconfdir=/etc –libexecdir=/usr/lib               –with-ipsecdir=/usr/lib/strongswan               –enable-sqlite –enable-smartcard –enable-cisco-quirks               –enable-openssl –enable-curl               –enable-sql –enable-attr-sql               –enable-farp –enable-dhcp               –enable-eap-sim –enable-eap-sim-file –enable-eap-simaka-pseudonym               –enable-eap-simaka-reauth –enable-eap-identity –enable-eap-md5               –enable-eap-gtc –enable-eap-aka –enable-eap-aka-3gpp2               –enable-eap-mschapv2 –enable-eap-radius               –enable-ha               –enable-nat-transport               –disable-mysql –disable-ldap               –disable-static –enable-shared –enable-kernel-netlink
make uninstall
make
make install
请留意红色部分,若你有不同,请修改。
3 安装完StrongSwan就开始配置了。初看来,StrongSwan的配置零散而且杂乱,建议你几经失败后再来看这里,或许印象更深刻。配置中的每一项都在官方WIKI有解释,我会对其中一些必要项进行解释。
vim /etc/ipsec.conf
config setup
    plutostart=yes
    #Pluto用以启动IKEv1,这是ios支持的方式
    nat_traversal=yes
    #用来穿透内网的功能,比如你身处于公司局域网,需要此支持
    strictcrlpolicy=no
    charonstart=yes
    #Charon用以启动IKEv2支持,这是黑莓Playbook VPN必须的
    uniqueids=yes
conn %default
 #   authby=rsasig
    #这是指定在以下conn 字段没有指定认证方式时的默认方式
 #   leftrsasigkey=%cert
 #   rightrsasigkey=%cert
    left=%defaultroute
    rekey=no
    #注意,strongswan 4.5 似乎有rekey的bug,因此需要指定为no。
    #从安全考虑,其实应该是yes才对。
conn ios
    #conn 字段是定义一个VPN的实例,用以区分不同业务
    #比如conn ipad 是给apple ios使用(实际上mac os ,linux,windows7都可以用)
    #因为每一个conn 可能分配的IP不同,用户不同,认证方式也不同
    type=tunnel
    authby=xauthpsk
    #这是指定认证方式,这里使用xauthpsk,可以查官方方式,在 @haohaolee 中使用的是xauthrsa
    #实际上这里依照你的设备支持不同来设定就可以,我这里的设定是为了照顾大多数设备
    #authby=xauthrsasig
    xauth=server
    #这一个比不可少,定义我们的strongswan为xauth的server端,你可以不必理会,只要这样设定就可以
    keyexchange=ikev1
    #指定key交换的方式,ios5之前都是ikev1,保持兼容性,据说ios5以后支持ikev2,未测试过,
    #请先使用ikev1,保证你可以使用vpn
    ike=aes128-md5-modp1024
    esp=aes128-md5
    #以上方式看也看得出来,指定了加密算法,其中 modp1024 是用以指定DH Group
    #DH Group 选项你不必关注,只在cisco PIX, ASA ,等等中需要指定,比如黑莓
    auto=add
    #modeconfig=push
    compress=yes
    dpdaction=clear
    pfs=no
    #pfs 是perfect forwad ,ios似乎不支持,黑莓的手机和平板至此,因此这里设定为no
    left=%defaultroute
    leftnexthop=209.252.165.30
    #这里你可以不指定,我之所以指定,是因为调试时默认路由有问题
    #leftnexthop=%defaultroute
   #leftcert=serverCert.pem
    leftsubnet=0.0.0.0/0
    #leftfirewall=yes
    right=%any
    rightsubnet=192.168.66.248/29
    rightsourceip=192.168.66.248/29
    #right就是你的手持终端一侧,any用以指定任何IP发送的VPN连接请求都接受
    #你也可以指定某个固定IP用以限制只有某几个人可以连接,但是,除非是固定IP
    #rightca=%same
    #auto=start
4 以上设定好了ipsec.conf ,接下来就要添加用户名和密码了
vim /etc/ipsec.ios.secrets
: PSK “blockme”
ipad :  XAUTH “ipad”
这个就不必我说了,很多人会问,为啥在网上看到都是设定 ipsec.secrets而我这里是设定 ipsec.ios.secrets呢?原因在于,很多时候一台strongswan需要多种认证方式和多个实例,因此写到一个文件中会造成认证方式的混 乱,因此查阅了官方文档后,我就将其区分了,但是需要在ipsec.secrets中加入红色部分
vim /etc/ipsec.secrets
: RSA serverKey.pem
bao3 : XAUTH  “bao3”
include ipsec.*.secrets
请注意红色部分,是必须写入的。
这样一来我们就可以自己定义 ipsec.blackberry.secrets , ipsec.playbook.secrets ,ipsec.webos.secrets等等自己的密码文件,问多种设备提供不同的用户区分和认证区分。
5 只是设定了以上部分还不够,我们需要修改 iptables (Freebsd 上可以使用ipf或者ipfw)
cat /etc/firewall.conf
# Generated by iptables-save v1.4.8 on Mon Apr 30 17:07:25 2012
*nat
:PREROUTING ACCEPT [81558:9679045]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [13736:862496]
-A POSTROUTING -j MASQUERADE
COMMIT
# Completed on Mon Apr 30 17:07:25 2012
# Generated by iptables-save v1.4.8 on Mon Apr 30 17:07:25 2012
*mangle
:PREROUTING ACCEPT [1645162:888231764]
:INPUT ACCEPT [864269:303032384]
:FORWARD ACCEPT [773637:583964934]
:OUTPUT ACCEPT [900468:772310459]
:POSTROUTING ACCEPT [1674084:1356273629]
-A INPUT -p udp -m udp –dport 4500
-A INPUT -p udp -m udp –dport 4500 -j MARK –set-xmark 0x32/0xffffffff
COMMIT
# Completed on Mon Apr 30 17:07:25 2012
# Generated by iptables-save v1.4.8 on Mon Apr 30 17:07:25 2012
*filter
:INPUT ACCEPT [734225:247221779]
:FORWARD ACCEPT [1253:1407705]
:OUTPUT ACCEPT [788133:732175054]
-A FORWARD -m policy –dir in –pol ipsec -j ACCEPT
-A FORWARD -m policy –dir out –pol ipsec -j ACCEPT
COMMIT
# Completed on Mon Apr 30 17:07:25 2012
在Debian上,使用 iptables-restore /etc/firewall.conf 就可以导入配置。需要特别说明的是,有些系统不必配置iptables,连接VPN后可以直接上网,这依赖于你的系统默认设置,比如我就一怒之下将系统默 认为全部accept,虽然省心但是安全是个问题,我指系统安全。
6 OK,经过一番折腾,你现在可以使用
ipsec start
tail -40 /var/log/auth.log
tail -40 /var/log/charon.log
来查看排错。同时你也可以使用你的ipad,iphone,iTouch,来连接上网了。打开你的ios的VPN设置,新建一个,选择 IPsec VPN ,通常你会看到一个cisco的logo,然后描述和服务器地址都不需要我来说,用户名和密码是你文件中设定的,比如我的就全是 ipad ,接下来的群组名称,请留空白,密钥就是你密码文件中的 :PSK 后面的部分
等一下,我似乎开头提到了 Blackberry Playbook,但是我还没有写关于它的配置,所以下面将写关于PlayBook的VPN配置,不关注的同学可以不用浪费生命在以下章节。
二 黑莓的PlayBOOK 为安全性考虑和移动性考虑,使用了IKEv2,我们上面的配置是针对 IKEv1的,那么下面的部分将使用IKEv2进行配置,与上面的出入比较大
1 在 ipsec.conf中加入一个新的conn
conn playbook
    keyexchange=ikev2
    left=%defaultroute
    leftnexthop=202.153.165.30
    leftsubnet=0.0.0.0/0
    leftauth=psk
    #这里是指定服务器的认证方式
    #在Playbook上就是GateWay auth method
    leftid=202.153.165.30
    #很重要,强制指定服务器的认证ID
    #在PlayBook上属于GateWay ID
    right=%any
    rightsourceip=192.168.66.240/29
    #rightsubnet=192.168.66.240/29
    rightauth=eap-mschapv2
    rightsendcert=never
    rightid=playbook@cisco.tes.com
#这个Email地址你可以任意指定,但是要对照写入你的Playbook
    #很重要,强制指定设备的认证ID
    eap_identity=rw
    #很重要,指定设备的认证字符
    auto=add
2 接下来就是 添加用户名和密码了 ,我创建了 ipsec.playbook.secrets
vim /etc/ipsec.playbook.secrets
: PSK “blockme”
playbook : EAP “playbook”
3 重新启动ipsec ,使用 ipsec restart 。这里有个小窍门,你可以查看 ipsec –help ,阅读 ipsec up 章节,对于新手或者懒人(比如我)就直接ipsec restart了。
4 设定你的Playbook吧
系统设置 security -> VPN ,新建一个 Profil
名称:”我是单身”
server address : 你VPN的域名或者IP
Gateway Type: Generic IKEv2 VPN Server
Authertication Type: EAP-MSCHAPv2
Authentication ID Type: Email Address
Authentication ID: playbook@cisco.tes.com
MSCHAPv2  EAP Identity:rw (就是你在ipsec.conf中指定的eap_identy,参见我上面的配置)
MSCHAPv2 Username:playbook
MSCHAPv2 Password:playbook (都是你自己指定的)
Gateway Auth Type: PSK
Gateway Auth ID Type: IPv4
Gateway Preshare Key:blockme
好了今天就到这里,这就是平时有人告诉你说使用linux 搭建 cisco VPN 用在iOS 上一种做法。目前还在测试黑莓 blackberry上的兼容性,由于强制认证方式,黑莓上不能使用以上的方式必须用证书加密,但是仍然有点小问题。我希望有意于建立VPN的诸位能帮助 测试一下黑莓的strongswan 搭建。
  1. 自由民主
    2012年5月6日14:08

    @opm 你改的两个opera 安卓版都无法安装,提示无法连接到网络,请检查您的设置………

    • opm
      2012年5月6日15:35

      帝都没问题!可能某些地区有问题吧~

  2. opm
    2012年5月6日13:12

    提供android的opera 没真机测试~~不能用告诉我~~http://ge.tt/1BGjbHH