在诺基亚S60手机上使用VPN

转自:http://igfw.tk/archives/1153

诺基亚塞班S60手机的vpn(内部网)功能简介

看到dospy上还是有不少网友感兴趣的,而我前面写的那两篇文章对于很多用户来说还不够浅白,所以再回头写个简介吧。

首先什么是vpn呢?vpn是Virtual Private Network的缩写,在中文版的诺基亚S60手机上叫做内部网。

大一点的企业都有自己的内部网,很多东西是无法从外部访问的,比如邮件服务器、文档、数据库等等。但碰上像公司的员工在家工作或出差在外,需要访问 公司内部网的资源,这时就需要vpn了。vpn的作用是通过互联网这种不安全的连接建立一个加密通道,而把员工的电脑或手机变成内部网的一部分,就可以访 问从外部无法访问的东西了。所以网上不少用户是需要在nokia s60手机设置vpn以接入公司或学校的内部网,不一定是为了访问内部数据,也可能只是为了通过内部网来访问外部网。

vpn这个原本针对企业用户的功能对普通用户又有什么用呢?就我所知至少有下面这些用途:

1)当用户在公共场所发现有免费的wifi可以用来上网,但如何能相信通过这个wifi传输的数据不会被所有者或第三方窃取呢?vpn从客户端到服务器的数据传输都是加密,从而保证了难以被窃取;

2)vpn服务器可以作为一个路由网关,于是可以衍生出下面这些用途:

a)通过vpn访问的网站看到访问者的IP不是他们真实的IP而是vpn服务器的IP,对于重视隐私的用户,他们可能不愿意让第三方知道自己访 问了哪些网站或者不想让网站知道自己的真实IP,当vpn网关的所有者可以信赖时,使用vpn可以比较好的保护隐私。对于第一个用途,前提条件同样是 vpn网关的所有者可以信赖。

b)有些网站只对来自特定区域的IP提供服务,比如某些游戏服务器(像一些在线游戏的台服、韩服),某些视频网站(包括美国的hulu、英国的iplayer和4oD),当通过位于这些特定区域的vpn访问这些网站时,它们会根据IP把访问者当成符合要求的用户。

c) 当用户想访问某些被特定机构(学校、运营商、政府)等等限制访问的网站,通过vpn可以绕过过滤。

3)有些收费的wifi接入点只有注册用户才能通过其访问Web,email等常用服务,但vpn所使用的其它端口是可以免费访问的,这样就有了可以蹭网的可能性。据说联通等运营商最近封掉了pptp vpn端口就是这个原因。

诺基亚塞班s60手机如何使用vpn功能呢?有很多种不同的vpn协议,最常见的是pptp。诺基亚塞班s60需要安装symvpn这个第三方软件 才能用pptp协议,但pptp似乎要被最先封禁的,所以现在购买该软件好像不太明智。另外现在有不少路由器可以集成vpn功能,不过好像一般都是 openvpn这个使用越来越广泛的协议,可惜Nokia还没有支持该协议的客户端。诺基亚本身提供的mVPN客户端支持的是IPSec协议,我的前两篇 文章 http://is0.eu/nokia1vpnhttp://is0.eu/nokia2vpn 已经讲得比较详细,就不重复了。诺基亚塞班s60手机上使用IPSec VPN的经验交流可参见 http://is0.eu/ipsec5

至于其它手机平台,我知道的情况大致是

iPhone/iPod touch/iPad支持pptp、l2tp、ipsec和openvpn协议

Android支持pptp、l2tp和openvpn

Windows Mobile好像支持pptp、l2tp、ipsec和openvpn协议

黑莓需要企业级平台的支持,感觉个人基本没什么可能搞vpn了。

在诺基亚S60手机上使用VPN之一:原生客户端说明及12vpn评测。

这是一篇早就打算要写的文章,但因为有一些技术细节始终没有解决好,所以一直迟迟没有动笔。最后我意识到这样下去,这篇文章不知道要到猴年马月才能写出来,而且12vpn推出了对诺基亚S60手机原生VPN客户端的支持,完善我的教程的必要性也就不那么迫切了。我打算分三个部分写这个教程:

  1. 诺基亚S60手机原生VPN客户端的使用说明和12vpn的评测,因为如果我一上来就把如何生成VPN策略文件和OpenSwan的配置摆上来,不需要知道这些的普通用户可能会被弄晕而产生用起来太复杂的错误印象;
  2. 生成VPN策略文件和安装配置OpenSwan的教程。这个教程其实只是一个可以工作的范例,有些需要细调的高级设置我自己也没有弄清楚;
  3. VPN策略文件和OpenSwan的高级设置问题,这是我目前还在折腾的部分。

下面是诺基亚S60手机原生VPN客户端的使用说明及12vpn评测:

看到过不少诺基亚S60上没有可用VPN客户端的观点,但事实上诺基亚S60手机上原生的Mobile VPN客户端只是不支持常见的PPTP协议(第三方软件SymVPN支持PPTP,但正版价格超过二十美元,而破解版绝大多数都不好用),而是支持 IPSec VPN。另一种观点是诺基亚S60手机原生VPN用户端太复杂,普通用户很难搞定。这种看法也对也不对,VPN策略文件的生成确实比较复杂,但这是系统管 理员的工作,普通用户只需要把系统管理员发给他们的VPN策略文件安装到手机上,简单设置一下就可以用了。实际上iPhone/iPod Touch常用的L2TP VPN很多也是基于IPSec的,12vpn提供给S60用户的配置方式看起来并不比iPhone/iPod Touch复杂。

诺基亚S60手机原生的Mobile VPN客户端并不需要用户自己设置VPN服务器地址、用户名和密码(额外使用了Xauth验证的是另一回事),这些都是在VPN规则中定义好的。mVPN 客户端中有一个设置规则服务器的选项,这是用于把VPN规则推送到手机上的,需要在服务器端安装诺基亚专门的软件,这种方式很少有人用,用户可以从本地安 装VPN策略文件而完全不去管这个选项。VPN策略文件早些是以sis文件形式提供的,像普通软件一样安装。但目前mVPN V3.1和V4都可以直接导入.vpn文件。

下面的使用说明参考了12vpn针对S60V5上的mVPN V4英文介绍

  1. 用户首先需要安装mVPN客户端,V3.1(针对S60V3 FP1)在此下载V4(针对S60V3 FP2和S60V5)在此下载
  2. 从系统管理员那里得到.vpn(或.sis/.sisx)策略文件并传到手机上安装。IPSec VPN网管和客户端之间的验证主要有两种方式:PSK和X509证书。如果是PSK方式,VPN规则文件直接装上就可以用了;而X509证书是以 PKCS#12格式存储的,安装含有该证书的规则时会提示用户输入密码才能正确读取证书,这个密码是由提供VPN规则文件的系统管理员设置,比如 12vpn的证书密码一律是“import”〔不含引号〕。第一次导入证书的时候, 手机会提示用户设置〔输入两次〕读取证书的密码,一定要牢记该密码,以后启动VPN连接的时候都要输入密码;新装含有X509证书的VPN规则后使用 mVPN V3.1的S60V3 FP1手机需要重启,需要重装VPN规则前,删除原来的规则和证书并重启机器。我不确定使用mVPN V4的S60V5和S60V3 Fp2手机是否同样需要如此,听说不用;
  3. 使用WiFi的话要确认无线路由打开了VPN Passthrough的选项;
  4. 手机上网需使用net连接而非wap(这一点我不确定,因为mVPN客户端中可以定义Proxy);
  5. S60V5等较新的手机上导入了VPN规则后会自动生成一个标记为IntraNet的VPN接入点,在浏览器等需要联网的程序出现接入点选择时使 用该接入点即通过VPN上网;S60V3 FP1等较老的手机上需要自己通过“设置—>连接—>VPN(虚拟专网)—>VPN接入点—>选项—>新增接入点”用导入 的VPN规则定义新的接入点。
  6. IPSec VPN连接的初始化有点慢,大概要等半分钟的样子,之后就没有影响了。如果VPN规则中使用X509证书,验证的时候手机会提示用户输入保存证书时设置的 密码,使用PSK验证的则没有这一步。假如VPN规则和IPSec网关(二者是对应的)中设置了使用Xauth验证,则另外需要输入系统管理员在服务器上 设置的用户名和密码。
  7. 根据我自己的经验,如果设置了多个使用不同VPN规则的接入点,有可能会出现冲突。但这也许和个人手机和IPSec VPN的具体设置有关,只是一个在使用中出现问题的时候可以参考的可能性。
  8. 另外一点是使用VPN的时候也留心一下DNS设置。诺基亚S60手机设置接入点的时候可以自定义DNS服务器地址,新的VPN规则参数中也有独立的选项。虽然似乎现在多数IPSec VPN网关也可以把DNS信息推送到手机上,但说不定某个时候问题会出在这个地方。

简而言之,诺基亚S60手机原生的VPN客户端的设置是通过VPN规则文件完成的,而该VPN规则和具体的IPSec VPN设置对应,应该都由系统管理员完成,而不需要普通用户操心。

之所以专门附上12vpn的评测,因为它是众多VPN服务商中我唯一知道提供了对诺基亚S60手机支持的。除了通常的PPTP外,它还支持OpenVPN、L2TP和IPSec(Cisco)从而保证了不同平台的用户都可以使用他们的服务。

和个人架设的VPN相比,在我看来12vpn有下面几个优势:

  1. 他们在有多个的VPN服务器在不同的国家,这在用户需要特定地区的IP来使用某些服务,例如BBC iPlayer和Hulu等等,的时候会很必要;
  2. 作为一个公司,他们有更多的资源提供客户支持。自己架设过VPN的网友很清楚要支持不同的平台和千差万别的网络(不同的运营商和防火墙)是一件相 当负责的任务。即使12vpn自己刚放出诺基亚S60手机的VPN规则的时候,只能支持S60V5手机上的mVPN V4,而在S60V3手机上的mVPN V3.1中无法正常工作。我和另一个推友@nielspeen自己花了很多时间修改他们的VPN规则都未成功,最后还是12vpn过了一天自己更新了配置文件解决的。

但12vpn的Personal帐号比较贵(包年70美元,月付要9美元另加10美元的设置费。)其实他们还有便宜得多的Lite帐号没有放在主页上,不过只能包年(25美元,2010年2月底之前有10%的优惠),而且有每月10G的流量限制。还有推友觉得12vpn的速度一般,这是一个小马过河的问题,我自己觉得用12vpn看Hulu的速度还不错(稍有停顿,但似乎比hideipvpn快些,比我原来自己建的一个OpenVPN速度有明显提高)。

除了购买12vpn的服务外,喜欢折腾的网友还可以自己在VPS或专用主机上搭建IPSec VPN,不过这方面的内容要放到下一篇文章中了。没有条件自己折腾,又不打算购买12vpn,但想在诺基亚S60手机上使用VPN的网友,也可以联系我要帐号测试你的诺基亚S60手机在我的IPSec VPN上用起来是否让人满意,再决定是否购买付费服务。

在诺基亚S60手机上使用VPN之二:OpenSwan安装配置和VPN规则的生成

这一部分的读者对象是喜欢自己折腾而对VPS和VPN有一定配置经验的用户。只是想知道如何在诺基亚Symbian S60手机上使用VPN的读者请参看第一部分

对于塞班手机上的VPN还有一个常见的说法是服务器端需要安装Cisco等昂贵的专用网络设备,而且配置复杂。根据诺基亚mVPN客户端的官方文 档,所支持的IPSec VPN网关列表中确实都是一些网络设备制造商的专用产品。但自己搭建过L2TP VPN的网友应该知道Linux上有OpenSwan、FreeS/Wan和strongSwan(它们实际是同一个项目的不同分支)等免费的开源 IPSec软件包,而IPSec正是塞班mVPN所支持的协议。至于说配置复杂,我看到过诺基亚论坛上有国外网友说:“诺基亚对mVPN客户端配置问题的 官方回复是——请向你的系统管理员查询,可我自己就是系统管理员,我该去问谁呢。”如果从阅读相关文档以弄懂每一个参数该如何设置开始,S60手 机+OpenSwan的VPN方案配置起来确实比较复杂,但如果找到一个可以工作的模板,很可能只要简单的修改一下服务器地址、验证密钥这些因人而异的参 数,拷贝到自己的机器上就能用了。本教程就是试图提供这样一个模板的尝试。但在实际使用中,由于mVPN客户端的V3.1和V4的差异,网络运营商的不 同,所用VPS的区别,可能需要更多的调整。这些细节大部分会放在专门讨论各种高级设置的第三部分介绍。

首先你需要一台服务器来安装OpenSwan(好像选择另外两个分支的人现在很少),我用的是PhotonVPS的Xen虚拟服务器(可 用的CPU有16核,UnixBench的分数随便就能到450,对于我这种对性能有偏执的用户来说足以让人忽略他们其它方面的缺点了)。我试过在启用了 TUN/TAP设备并成功安装了OpenVPN的OpenVZ VPS上运行OpenSwan,但会提示缺少某个内核模块,似乎是内核没有包含IPSec支持的原因。所以目前假定所用VPS必须是基于Xen,至于是否 还有其它的配置要求,我就不确定了。

使用CentOS的用户可以用:

sudo yum install openswan

命令来安装IPSec VPN网关,发行版中的源是U2.6.21。这个版本可以工作,但下一部分要讨论的高级设置可能需要包含了某些Bug fix的最新版本(但像一些例子中提到过的“authby=secret|rsasig”这种参数设置在我用过的版本中都无效,所以不能确定版本越新越好)。最新的rpm包可以用

sudo wget http://www.openswan.org/download/binaries/centos/5/without-nss/openswan-2.6.24rc5-1.x86_64.rpm

命令下载(32位OS用户请自行下载适用版本),用

sudo rpm -i openswan-2.6.24rc5-1.x86_64.rpm

命令安装。Debian用户用

sudo apt-get install openswan

命令安装的是U2.4.12版,我没有测试过这个版本,因为在Debian下都是下载源码编译的,具体细节将在下一部分讲修改源码的时候介绍。

在Google中搜索“OpenSwan 安装”可以找到不少资料,虽然不完全对得上(不同Linux发行版以及从二进制包安装或从源码编译会有所不同),但可以作为参考而不需我在这个问题上深入 下去了。关键的几个配置文件为全局配置“/etc/ipsec.conf”,内容如下(并不是说里面的参数必须如此设定,而是提供一个我自己确认能用的配 置):

# /etc/ipsec.conf – Openswan IPsec configuration file
#
# Manual:     ipsec.conf.5
#
# Please place your own config files in /etc/ipsec.d/ ending in .conf

version 2.0     # conforms to second version of ipsec.conf specification

# basic configuration
config setup
# Debug-logging controls:  “none” for (almost) none, “all” for lots.
# klipsdebug=none
# plutodebug=”control parsing”
# For Red Hat Enterprise Linux and Fedora, leave protostack=netkey
protostack=netkey
nat_traversal=yes
interfaces=%defaultroute
virtual_private=%v4:192.168.0.0/16,%v4:10.0.0.0/8,%v4:172.16.0.0/12,%v4:!192.168.0.0/24
oe=off
# Enable this if you see “failed to find any available worker”
nhelpers=0

#You may put your configuration (.conf) file in the “/etc/ipsec.d/” and uncomment this.
include /etc/ipsec.d/*.conf

全局验证密钥“/etc/ipsec.secrets”,内容如下:

include /etc/ipsec.d/*.secrets

连接配置“/etc/ipsec.d/e63.conf”(可以有多个,名字不限,但这牵涉到高级设置中的问题了,本部分只以单一连接为例),内容如下:

conn e63

# Key exchange
ike=aes256-sha1-modp1536

# Data exchange
esp=aes256-sha1

# Authentication method PSK
authby=secret
auto=add
keyingtries=3

# Modeconfig setting
modecfgpull=yes
pfs=no
rekey=no
type=tunnel
compress=yes

# local endpoint
left=%defaultroute
leftsourceip=192.168.6.1
leftsubnet=0.0.0.0/0
leftrsasigkey=none
leftmodecfgserver=yes
leftxauthserver=yes

# remote endpoint
rightrsasigkey=none
right=%any
rightxauthclient=yes
rightmodecfgclient=yes
rightsourceip=192.168.6.252
rightsubnet=192.168.6.252/32

连接验证密钥“/etc/ipsec.d/e63.secrets”,引号中为作为验证密钥的字符串:

: PSK “StringUsedAsPreSharedKey”

本文给出了范例中除了使用PSK验证方式外,还是用了Xauth验证,也就是说连上IPSec VPN服务器后,还需要输入预先设置的用户名和密码,对应的服务器设置为 “leftxauthserver/rightxauthclient=yes”。觉得没必要的读者可以把“yes”改成“no”并修改手机端VPN规则 中的相应部分“USE_XAUTH: TRUE”为“FALSE”即可跳过Xauth验证。但部分参考文献中提到Xauth在某些条件下是必须的。Xauth验证的用户名和密码放在“/etc /ipsec.d/passwd”中,生成该文件需要apache-utils软件包中的htpasswd命令:

sudo umask 0027

sudo htpasswd -c -b passwd username1 password1

添加用户的命令为:

sudo htpasswd -b passwd username2 password2

然后用编辑“/etc/ipsec.d/passwd”,内容为:

username:.z2I2VoRCNOZI

冒号前是用户名,冒号后是加密后的密码,读者需要自己在最后加上连接名称:

username:.z2I2VoRCNOZI:e63

我自己在“/etc/rc.local”中添加了如下NAT和转发设置(我对这部分比前面的内容更没有把握,请有经验的读者自行修正):

echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/lo/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth0/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/lo/accept_redirects
echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/iptables -t nat -A POSTROUTING -s 192.168.6.0/24 -o eth0 -j SNAT –to 47.117.26.212 <- 你自己的外网IP

重启VPS让所有的改动生效(或者运行“sudo /etc/init.d/ipsec restart”及其它命令)。然后用

sudo /usr/sbin/ipsec verify

命令检查IPSec服务的状态是否正常,应返回如下信息:

Checking your system to see if IPsec got installed and started correctly:
Version check and ipsec on-path                                 [OK]
Linux Openswan U2.6.24rc5/K2.6.18-164.10.1.el5xen (netkey)
Checking for IPsec support in kernel                            [OK]
Testing against enforced SElinux mode                           [OK]
NETKEY detected, testing for disabled ICMP send_redirects       [OK]
NETKEY detected, testing for disabled ICMP accept_redirects     [OK]
Checking for RSA private key (/etc/ipsec.secrets)               [OK]
Checking that pluto is running                                  [OK]
Pluto listening for IKE on udp 500                              [OK]
Pluto listening for NAT-T on udp 4500                           [OK]
Two or more interfaces found, checking IP forwarding            [OK]
Checking NAT and MASQUERADEing
Checking for ‘ip’ command                                       [OK]
Checking for ‘iptables’ command                                 [OK]
Opportunistic Encryption Support                                [DISABLED]

以上为OpenSwan的安装设置部分,下面该讲手机端的VPN规则生成了。我最初参考了英文文献一文献二文献三(对 这篇文章的内容有疑问的读者可自行查询这些文献),在前两篇参考资料中,提到的VPN规则的生成方式还是用makesis生成sis/sisx安装文件的 复杂过程。幸好新的mVPN V3.1和V4都支持第三篇文献中简单的多的.vpn文件导入了。VPN规则实际由两个文件组成,一个是VPN.pin,内容为:

[POLICYNAME]
VPN Beta
[POLICYDESCRIPTION]
VPN Beta
[POLICYVERSION]
1.1
[ISSUERNAME]
Do not edit
[CONTACTINFO]
Do not edit

实际上只是一个简单的规则标识,并不牵涉实际的配置问题。而真正的设置是存在VPN.pol文件中,其内容如下:

SECURITY_FILE_VERSION: 3
[INFO]
VPN
[POLICY]
sa ipsec_1 = {
esp
encrypt_alg 12
max_encrypt_bits 256
auth_alg 3
identity_remote 0.0.0.0/0
src_specific
hard_lifetime_bytes 0
hard_lifetime_addtime 3600
hard_lifetime_usetime 3600
soft_lifetime_bytes 0
soft_lifetime_addtime 3600
soft_lifetime_usetime 3600
}

remote 0.0.0.0 0.0.0.0 = { ipsec_1(IPSec VPN服务器地址) }
inbound = { }
outbound = { }

[IKE]
ADDR: IPSec VPN服务器地址 255.255.255.255
MODE: Main
SEND_NOTIFICATION: TRUE
ID_TYPE: 11
FQDN: MobileGroup
GROUP_DESCRIPTION_II: MODP_1536
USE_COMMIT: FALSE
IPSEC_EXPIRE: FALSE
SEND_CERT: FALSE
INITIAL_CONTACT: FALSE
RESPONDER_LIFETIME: TRUE
REPLAY_STATUS: TRUE
USE_INTERNAL_ADDR: FALSE
USE_NAT_PROBE: FALSE
DNS_SERVER: 8.8.8.8 <- DNS服务器的IP地址
ESP_UDP_PORT: 0
NAT_KEEPALIVE: 60
USE_XAUTH: TRUE
USE_MODE_CFG: TRUE
REKEYING_THRESHOLD: 90
PROPOSALS: 1
ENC_ALG: AES256-CBC
AUTH_METHOD: PRE-SHARED
HASH_ALG: SHA1
GROUP_DESCRIPTION: MODP_1536
GROUP_TYPE: DEFAULT
LIFETIME_KBYTES: 0
LIFETIME_SECONDS: 28800
PRF: NONE
PRESHARED_KEYS:
FORMAT: STRING_FORMAT
KEY: 24 StringUsedAsPreSharedKey <- 前面是密钥的长度,后面是作为密钥的字符串本身

里面的参数绝大部分和OpenSwan的设置是对应的,也就是说修改里面的某个参数一般意味着服务器端的修改。在前面提到的三篇英文参考文献中,都 提到了需要给OpenSwan打补丁才能解决DNS推送的问题,不知道是OpenSwan还是mVPN客户端版本的问题,因为实际上VPN规则中可以用 “DNS_SERVER”这个参数(从另一篇参考文献中找到的)指定DNS服务器。

编辑好这两个文件后,压缩成一个zip文件,然后把后缀名从.zip改为.vpn,然后传到手机上就可以直接导入了——简单吧 :)

然后按我写的前一篇文章中的步骤就可以在诺基亚塞班S60手机上使用该VPN了。连接成功后,VPN日志中会出现以下内容(日志中出现其它错误信息需要自己分析了):

1:authenticated to vpn gateway IPSec VPN服务器地址, vpn access point VPN规则标识

2:infomation :address info for vpn access point VPN规则标识, virtual ip 192.168.6.252, local ip 运营商分配给手机的ip, nat status code 0

3:infomation :activated vpn access point VPN规则标识, ip address 192.168.6.252

如果一切顺利,你就可以用该VPN访问任何网站了。万一有网关无响应之类的问题,比如运营商分配给手机的ip是192.168或10.0之类的内网IP,而nat status code为0(应该是1),恭喜——你需要和我进入下一部分折腾了……

总结:诺基亚Symbian S60上的mVPN客户端可以支持用OpenSwan搭建的IPSec VPN,但过程还是有些麻烦的。除非你本身需要VPS做其它用途,或者干脆就喜欢折腾(本人二者兼是:D),单单需要使用VPN还是购买12vpn之类现成的服务合适:一个Xen VPS一般不低于6美元一个月,而12vpn的Lite账号平均一个月大概2美元,并且除非是用有>100M专线的独立服务器,否则自建VPN的速度是很难和专门的VPN服务商相比的。这也是我虽然可以用自建的VPN但还是买了12vpn账号的原因。

来源:Alpha to Beta:免费网络电话、短信及其它手机应用软件 原文:诺基亚塞班S60手机的vpn(内部网)功能简介在诺基亚S60手机上使用VPN之一:原生客户端说明及12vpn评测。在诺基亚S60手机上使用VPN之二:OpenSwan安装配置和VPN规则的生成


没有评论: