买了一个Apple TV3,因为香港区默认是不支持Netflix的,所以除了要用美国区的帐户登录之外,还需要让Apple的服务器看到访问的Source IP是美国的,

因此不为翻墙,而是为了SNAT,我又要配置一下VPN了,同时因为不在墙内,也不需要chnroutes之类的了,但是要Source based routing或者Multiple routing table,好让除了ATV之外的所有设备都不走VPN,

然后我想起秋香同学 @fqx 写过教程哦,然后我看了秋香同学的教程,然后我发现秋香的教程,实在是…

我还是写个清楚一点的吧,免得其他同学像我一样照着做却还要自己troubleshooting!

 

先决条件当然是有一台支持Tomato firmware的路由器,路由器上有足够的空间,或者加了个U盘,有VPN Server,有帐号,有密码,有一顆愛折腾的心神马的,然后:

1)刷一个有tun.ko的Tomato版本,同樣建議用shibby mod,選擇支持VPN的就好

http://tomato.groov.pl/?page_id=164

 

2)U盘格式化成EXT3或者FAT32或者NTFS插上去,配置把U盘挂载到/opt目录

首先登录到Tomato的管理界面,然后在USB and NAS » USB Support下勾选以下选项:

“Core USB Support” / “USB 2.0 Support” / “USB Storage Support” / “File Systems Support”(全选) / “Automount”

然后到“Administration » Scripts » Init”,把以下內容帖进去,

echo "LABEL=optware /opt ext3 defaults 1 1" >> /etc/fstab
sleep 2
insmod /lib/modules/2.6.22.19/kernel/drivers/net/tun.ko

保存,重启路由器

 

3) 配置軟件repository,

cd /opt
mkdir /tmp/harddisk/opt
wget http://wl500g-repo.googlecode.com/svn/ipkg/entware_install.sh
chmod +x ./entware_install.sh
./entware_install.sh

 

4) 安裝VPNC

opkg update
opkg install vpnc

安裝完之後可能会有vpnc-script不存在的问题,可以手动下载一下

cd /opt/sbin/
wget http://git.infradead.org/users/dwmw2/vpnc-scripts.git/blob_plain/HEAD:/vpnc-script
chmod +x vpnc-script

 

5)配置VPNC和vpncwatch

先下載vpncwatch,詳細可參考P大文章 vpncwatch 修正(外)

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

好吧,VPNC配置直接看P大 @Paveo 的教程吧,我也懒得写了,(写这个期间我从墙外撞墙被reset了,好,很好,非常好)

路由器上使用 Cisco IPSec VPN client

 

6)配置多路由表,

除了秋香同学那个不好的参考 A Bridge To Home Theater (2) 之外,好的参考在这里:

http://linux-ip.net/html/routing-tables.html

(看人家写得多好多清晰啊,秋香你真的要惭愧一下!)

 

傻瓜教程,

新建/opt/etc/vpnc/iproute2文件,貼入以下內容:

#!/bin/sh
mkdir /etc/iproute2
cp rt_tables /etc/iproute2/rt_tables
ip rule add from <SUBNET/MASK> table novpn //<SUBNET/MASK>这里可以逐个主机的写,也可以用掩码整段配置
ip route add $(nvram get wan_gateway_get) dev <INTERFACE> proto kernel scope link src $(nvram get wan_ipaddr) table novpn //<INTERFACE>是获得外网IP地址的接口,也许是ppp0,也许是vlan2,自己确认一下吧
ip route add <LOCALNET/MASK> dev br0 proto kernel scope link src  table novpn //<LOCALNET/MASK>是内网的子网和掩码,例如192.168.1.0/24,是路由器的内网IP地址,例如192.168.1.1
ip route add default via $(nvram get wan_gateway_get) dev <INTERFACE> table novpn //<INTERFACE>是获得外网IP地址的接口,也许是ppp0,也许是vlan2,自己确认一下吧
ip route flush cache

編輯完之後別忘了執行權限

chmod +/opt/etc/vpnc/iproute2

新建/opt/etc/vpnc/rt_tables文件,貼入以下內容:

255 local
254 main
253 default
200 novpn
0 unspec

然后到“Administration » Scripts » WAN up”,把以下內容帖进去,

#IPsec VPN Setting
vpncwatch -c twitter.com -p 80 -i 10 vpnc
sleep 10
service dnsmasq restart
 
#Multiple Routing Table
/opt/etc/vpnc/iproute2

嗯,打完收工!

不知道可爱的HR在怎么折腾我的雇佣信息,整整一个星期没有任何的访问权限,于是只能在写写slides看看资料了,同时也买了一堆东西折腾折腾的:-)

 

Linksys E4200 v1 RM

虽然参数在今天已经完全不突出了,但是基于可以刷Tomato的原因,还是选择了E4200而不是最新的EA4500,V1现在好像也只能买到RM没有全新的了,便宜又点得着,正和我的心水:-)

顺路推荐一下tomato shibby mod,可能是现在tomato mod里头特性和稳定性最平衡的一个了,BW limiter工作相当稳定!

下载链接:

http://tomato.groov.pl/

完整的版本特性支持列表:

http://openlinksys.info/forum/viewthread.php?thread_id=11624

_DSC2380

_DSC2379

 

KOIOS LM270WQ1 山寨Apple Cinema Display 27”

为什么说是山寨Apple Cinema Display 27” ? 因为LG的这块屏只有Apple一家在用,屏的来源据说是Apple质量控制下退回的批次,但是不管国内还是韩国好像都有DIY的卖了N多,也没怎么见恶评,而且RMB 2,600的价位和Apple Thunderbolt Display 27” HKD 7,688差距是那么巨大,当一下小白鼠好了~

首先要赞一下的是卖家的运输打包,这个木架子相当的结实,我和我老爸用了一阵子才撬开,安全感十足,

_DSC2383

箱子和内包装相对来说会略嫌山寨,包括箱子上的字样印刷的方向性怎么看都会有一侧是反的,还有内包装袋没有压塑密封,包装袋材料一般般等,不过起码该有的都有,还是有用心的!

_DSC2385

_DSC2386

_DSC2387

接下来到外壳,黑色铝合金的外壳,远看还好,近看的话会觉得很很多可提升的空间,主要是边角的处理和各种开孔位,另外还有logo,一样很应该改善(已经被我果断扒掉了…)

整个设计我觉得对使用者最不友好的,就是控制键全部都在屏幕后的控制板上,也就是说要开关机,调个亮度对比度,切换一下输入源,全部都需要站起来,然后扭着头去戳小小的按键,然后再回来看屏幕上的显示,非常非常的不方便,这个很不抵赞!卖家的结实说是为了超薄的边框,好吧,我可以理解,但是我觉得还是很应该改一下!

_DSC2396

_DSC2397

嗯,然后是输入源,我买的是多输入的版本,支持的输入包括Display Port,DVI,VGA和HDMI,

VGA和HDMI基本是残废的,HDMI 1.3版本才会支持到2560*1440的分辨率,很少设备的HDMI输出是原生支持HDMI 1.3或以上的,VGA就更不用想用到最高的分辨率了,所以选择基本局限在DP和DVI。

根据和卖家的交流,Apple Cinema Display27”的原生接口就是Thunderbolt或者DP,如果要买单DP的版本,则用的就是跟Apple的显示器一样的驱动;如果买多接口,由于扩展了其他的接口,则信号实际是经过处理的。所以,无论我用MBA的Thunderbolt 转DP,还是用MAC Mini的Thunderbolt转DP,结果都是系统直接五国,暂时不知道是不是Intel HD 3000跟屏幕的匹配的问题,还是所以的MAC都会中,反正如果要想用MAC接这个屏的话,需要小心,

最后是亲爱的DVI了,其实DVI分Single LinkDVI和Dual Port DVI两种,如果要支持2560*1440,必须是Dual-Link的DVI,比较幸运的是我的4年前的Desktop的显卡竟然也支持Dual-Link DVI,所以开始用Windows接显示器是一次成功的

DVI page on WIKI: http://en.wikipedia.org/wiki/Digital_Visual_Interface

在用MAC的Thunderbolt接口五国N次之后,我只能转向DP转Dual-Link DVI的方案了,Apple自家就有这样的adapter MB571Z/A,为的应该是Cinema Display 30”,当时这个显示器只有DVI接口,但是价格也很apple,USD 99,一点也不和蔼, 在淘宝搜刮一轮之后发现是有很多二手的在卖的,本着节省的精神,我去买了一个只要RMB 160的二手,刚接上之后发现依然点不着,差点就要想是不是要退显示屏了,好在后来和adapter卖家咨询了一下,发现是要把adapter的USB线也插上才能工作的,貌似是因为这个adapter里面实际是有芯片的,也就是所谓的主动式转换器(有芯片负责信号转换而不是简单的接口对换),所以需要USB供电才能工作,在忐忑的把USB线也接上之后,世界终于非常美好鸟:-)

_DSC2398

最后忍不住推荐一下Belkin这根Dual-Link DVI线,因为卖家送的线是白色的严重影响了我的桌面的整体色调,所以在淘宝买了另外一个Dual-Link线,用料和做工那是非常的好呀,价钱也相宜,有需要的不要错过!

贝尔金 BELKIN 3米 DVI 24+1双通道 dual link 弯头

_DSC2401

 

CR2 Charger

我这个小土鳖一直以为CR123A跟CR2的充电器是通用的(为什么我会这么傻这么天真呢?明明两个的spec就不同),所以当KT的instax mini 25的电池没电想充电的时候,就傻掉了, 只好再买了一个充电器,这个倒真是CR2和CR123A都能冲,因为下面那个触点是可以上下移动的~

_DSC2391

之前在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

 

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