Pure IPsec VPN with IPsec-Tools/Racoon on CentOS

之前在VPS上折腾了OpenVPN给跑tomato fimrware的路由器用,折腾了StrongSWAN做IPSec VPN给iPhone/iPad用,然后因为觉得IPsec的效率会比OpenVPN要好,于是想把tomato上的OpenVPN也换成IPsec VPN,

 

怎么换呢?Tomato通过Optware能安装的只有vpnc这一个IPsec客户端,vpnc只支持IKE phase 1 aggressive mode,而服务器端的StrongSwan只支持main mode,这两个明显是八字不合的,然后有两条路:

1) 把Tomato换成OpenWRT,然后用StrongSwan/OpenSwan/racoon做客户端连StrongSwan Server

2) 把StrongSwan Server换成OpenSwan或者racoon支持aggressive mode,继续用vpnc做客户端

 

方案一试过,可惜行不通,

做法是去买了一台超便宜的无线猫,DB120跑OpenWRT,然后我在上面装过OpenSwan和StrongSwan试着和服务器端连,其中StrongSwan的包比较完整,OpenSwan有些功能模块没有编译好的安装包,然后比较不幸的是,虽然配置貌似正确用户验证能通过,但是路由和转发总是有问题,不是不能把数据包转发到VPN Server,就是能转发但是本地连接中断,相当折腾!
_DSC2375
不止如此,我甚至连服务器端都换成过OpenSwan改用aggressive mode,然后iPhone,OSX拨号上来的时候发现modecfg的split DNS支持貌似不匹配,因此无法推DNS到客户端,OSX倒还好,可以自己指定DNS server,iPhone就傻掉了,而且tomato上用vpnc 连接IKE phase I也过不去,所以只能放弃。

 

然后到方案二,这个是可以工作的方案,

 

把StongSwan换成的IPSec-Tools/racoon,然后iOS,OSX,windows,tomato神马的都可以拨上来了,省略痛苦的折腾过程,简单的步骤如下:

 

1) 安装IPSec-tools/racoon

我的VPS跑的是CentOS,可以自行编译,也可以通过yum安装,相比之下yum安装会容易一些,

 

wget ftp://ftp.pbone.net/mirror/ftp.pramberger.at/systems/linux/contrib/rhel5/i386/ipsec-tools-0.8.0-1.el5.pp.i386.rpm
wget ftp://ftp.pbone.net/mirror/ftp.pramberger.at/systems/linux/contrib/rhel5/i386/ipsec-tools-libs-0.8.0-1.el5.pp.i386.rpm
yum localinstall --nogpgcheck ipsec-tools-libs-0.8.0-1.el5.pp.i386.rpm ipsec-tools-0.8.0-1.el5.pp.i386.rpm

 

如果要编译,可以使用以下参数:

configure –sysconfdir=/etc/racoon –enable-natt –enable-broken-natt –enable-hybrid –enable-dpd

如果提示需要内核头文件,可以参考这个文章:

http://blog.csdn.net/zhangyang0402/article/details/5732815

 

2) 配置IPSec-tools/racoon

yum安装后默认的配置文件路径是/etc/racoon,一共需要关注三个文件,racoon.conf / psk.txt 和 motd,逐个来

 

racoon.conf path 

pre_shared_key "/etc/racoon/psk.txt";
path certificate "/etc/racoon/certs";
listen {
isakmp YOUR.IP.ADDRESS [500]; #YOUR.IP.ADDRESS改为VPS的外网地址
isakmp_natt YOUR.IP.ADDRESS [4500]; #YOUR.IP.ADDRESS改为VPS的外网地址
}

remote anonymous { 
exchange_mode aggressive, main, base; #同时支持IKE aggressive和main mode
mode_cfg on; #支持通过modcfg获取dns配置
proposal_check obey; #这里很奇怪,多数配置例子写的是proposal_check claim,即在协商中取短的lifetime并通告initiator,但在0.8版本用claim是不work的,只能配置成obey,即遵循initiator发出的lifetime
nat_traversal on; #开启NAT-T,必须的 
generate_policy unique; #这个貌似是为了支持多个客户端被NAT成同一个地址
ike_frag on; 
passive on;
dpd_delay 30; #dead peer detection的超时时间

proposal {
lifetime time 28800 sec;
encryption_algorithm 3des;
hash_algorithm md5;
authentication_method xauth_psk_server; #Pre-share key+用户名/密码认证
dh_group 2;
          }
} 

sainfo anonymous {
encryption_algorithm aes, 3des, blowfish;
authentication_algorithm hmac_sha1, hmac_md5;
compression_algorithm deflate;
} 

mode_cfg {
auth_source system; #使用系统的用户名/密码体系认证,懒得再折腾其他的方法了
dns4 8.8.8.8;
banner "/etc/racoon/motd"; #banner,貌似vpnc必须要有banner才能work,真的吗?
save_passwd on;
network4 10.12.0.100; #客户端获得的IP起始地址
netmask4 255.255.255.0; #客户端获得的地址的掩码
pool_size 100; #最大客户端数量
pfs_group 2;

 

psk.txt # Group Name Group Secret
YOUR.GROUP.NAME YOUR.GROUP.SECRET #前面是Group Name, 或者vpnc里配置的IPSec ID,后面是Secret,或者vpnc里的IPSec secret

 

motd
ANY.WORD #随便写

 

3) 添加用户名密码

 

useradd YOUR.USERNAME

passwd YOUR.PASSWROD

 

然后vi一下/etc/passwd把racoon用的用户的shell设置为/sbin/nologin使VPN用户无法使用shell,并且把根目录指向/tmp之类的

 

 

4) 在Tomato Firmware的路由器上安装vpnc

要在tomato上用optware装软件的最好有一个U盘,当然也可以用jffs,optware的安装教程可以参考TomatoUSB的HOWTO

http://tomatousb.org/doc:optware

http://tomatousb.org/tut:optware-installation

 

ipkg update
ipkg install vpnc

 

5) 配置VPNC

vpnc的默认配置路径在/opt/etc/vpnc,没有多个服务器的话直接改default.conf也可以

 

IPSec gateway YOUR.VPN.GW #VPN服务器的地址或者域名
IPSec ID YOUR.GROUP.ID #对应刚才在psk.txt里设置的Group Name
IPSec secret YOUR.SECRET #对应刚才在psk.txt里设置的secret
Xauth username YOUR.USERNAME #用户名
Xauth password YOUR.PASSWORD #密码

 

6) 一些小tricky tuning

参考 @paveo 的文章们:

openwrt 下 vpncwatch 和 mtu 问题

路由器上使用 Cisco IPSec VPN client

CHNroutes

@paveo同学的A类路由表确实暴力,连我最爱的mobile01都上不去了,少少改一下:

由于发现了用ip -batch来添加3000行路由的时间也就是2-3秒,所以我们还是把chnroutes的全路由写一下好了~

 

#!/bin/sh

OLDGW=$(nvram get lan_gateway) #家里有两台路由器,用于连接VPN的路由器并非是PPPoE拨号的路由器,如果只有一台路由器,lan_gateway应改为wan_gateway

ip -batch

#chnrouts
route add 1.0.1.0/24 via $OLDGW metric 5
route add 1.0.2.0/23 via $OLDGW metric 5
route add 1.0.8.0/21 via $OLDGW metric 5
route add 1.0.32.0/19 via $OLDGW metric 5
route add 1.1.0.0/24 via $OLDGW metric 5
route add 1.1.2.0/23 via $OLDGW metric 5
......
route add 223.255.236.0/22 via $OLDGW metric 5
route add 223.255.252.0/23 via $OLDGW metric 5

EOF

 

还有就是用vpncwatch来启动vpnc,断线可以自动重连,

 

cd /opt/sbin/
wget http://p5.gfw.io/vpncwatch

 

然后可以把启动命令直接贴到Tomato WEBGUI的administration –> Scripts –> Init 里头

 

/opt/sbin/vpncwatch -c twitter.com -p 80 -i 30 vpnc /opt/etc/vpnc/default.conf

 

打完收工,不过折腾是没有止境的,下次又会折腾什么呢?

 

一周买物2012W19 My first RIMOWA

_DSC2280

上一只旅行箱是我毕业之后要出差时买的CROWN,老实说除却左边一只轮子爆了拉着有些异响之外,这个箱子被我拉着东奔西走,拖来拽去的,十年过去依然好用,绝对是我买过的国货精品之一了!

不过基于人是有欲望的,所以其实我一直想买一只更好的箱子; 更好的等于更贵么?或许是的,但也许更重要的是一只我看了又看之后觉得喜欢的箱子,而不是为了单纯实现功能而买的箱子,

 

为什么是RIMOWA?第一当然是觉得好看啦;第二是铝镁合金应该会很耐用,以后可以传给KT或者猫头鹰什么的(如果她们稀罕);

型号选择的是Topas cabin Multiwheel IATA,因为我觉得还是登机箱多数情况下比较实用,二轮和四轮倒是挣扎了好久,终于是被太太大人以拉着不累为理由指定了四轮,

 

比较了一圈香港,淘宝和海购的价钱,发现价钱排序是海购(即使中了关税)<淘宝<香港零售,而RIMOWA的售后是基于箱子的序列号全球5年免费的保养的,当然就选择了海购,

海购便宜的原因是送货的地点在欧盟以外,所以会可以免除19%的消费税,于是即使加上50欧的邮费,还是会有很大的价格优势,

 

两个比较多同学推荐的德国在线销售网站koffer24.de和123koffer.de,价钱基本没区别,我是在koffer24.de下单的,

从下单倒收到货头尾10天,其中下单到发货3天,德国DHL送出在北京入关转中国邮政到广州需要7天,除了要自己到邮政所去取件之外,整个运送的体验还过得去,比想象中要快一些,

_DSC2269

收到的箱子是一个完全没有额外加固加厚的纸箱,开始会让人不禁有些担心会不会被暴力运送弄得伤痕累累,

打开之后发现虽然只有简单的4个边角保护纸条和上下纸板保护层,但是保护纸良好的强度已经可以提供足够的保护,连纸皮都能做得让人觉得可靠的民族相当可爱!

_DSC2271

因为我没有买过其他的合金箱子,对比就无从谈起了,不过就我个人来说,铝镁合金的外壳真的好赞,而四个全向轮子无论从拖动的顺滑度和声音都是我用过的最好的,没有之一,当然我也没用过多少个 :mrgreen:

_DSC2272

_DSC2277

_DSC2279

_DSC2282

其他一些杂七杂八的细节图,最强烈的感受是如果下次要再买大箱子,我想我还会继续买RIMOWA 😈

_DSC2285

最后同场加影加装各种恶趣味贴纸后的状态,打完收工~