[转]在诺基亚S60手机上使用VPN(2)  

这一部分的读者对象是喜欢自己折腾而对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账号的原因。

欢迎大佬支持本博客的发展 -- Donate --

本文链接:[转]在诺基亚S60手机上使用VPN(2)

转载声明:本站文章若无特别说明,皆为原创,转载请注明来源:三十岁,谢谢!^^


分享到:          
  1. 没有评论

  1. 没有通告