Spehio

我叫杜晓三 | Ecology | Urban | Landscape | GIS | IT
Options:

胸无大志

也许是应了生于忧患死于安乐吧,从上个周末回所到现在,一点斗志都没有。

去黎川住了一晚,给小鸭和她爸上坟,相当简易的两块墓碑,连照片都没有,周围杂草丛生,两捧鲜花跟周围格格不入,点上三炷香,看着小鸭的名字完全不知道在想什么,我觉得我还是不太能接受她去世的消息,默然一会儿之后跟她弟弟妹妹一起就回去了。之前有听说南昌人待客很热情,标准就是把客人灌翻,不过还好她家亲戚都远离黎川县城,小弟也比较内向,她妈妈买了两瓶啤酒都我自己一个人喝了。晚上没有住她家,在一挺不错的宾馆睡了一觉,居然只花了八十块钱。

黎川回来在南昌住了两个晚上等飞机,其实从黎川直奔厦门的汽车也挺方便,只是开始不知道,提前定好了机票。

周日的晚上到所,各种我预计的安排都没有落实,还差点没宿舍住。

总而言之,从安顿好到现在,一直没有任何斗志。我晚上不加班干活儿,各种逛街,工作日翘班出去逛商场,周末出去逛小店,这就是一个胸无大志的人发现好久没更新博客而写的一篇。

一隅偏居

玉泉是个有意思的地方,荒凉得符合四环外的城乡结合部,同时又沾上长安街延长线起点的那一点喧闹,北京的第一年就在这里过了。

习惯计划,早就认定要过一年深居简出的日子,宿舍分配也是那样的给面子,直接住在校外一个的深宅大院,虽说洗个澡都要跋山涉水从海淀区跨越到石景山,但这是一个除了走廊歌手的嗓音以外听不到任何噪音的院子,窗外是原住民的自留地,有丝瓜有葫芦还有柿子,着实符合我的生活理想。

在深居简出的日子里,主要的行程就是过条双向马路去研究生院上课了,我本是好学之人,奈何却不是一个好听课之人,只是所选之课比大学课堂多了很多可以台下发言的机会,算是一个坚持听课的理由吧,因为实际上说,选的课里面除了名字极富感召力之外,内容方面平均给个七十好了。课程是不能深入讨论的,也许真的是良莠不齐,而我偏偏是圣手点睛,所以就只怀念一下本科数学系那帮敬业的爷爷们了。

丰富多彩的日子可以如白驹过隙,大隐于市的生活也同样是弹指一挥间,一下子便是来年四月,一号是愚人节,五号是清明节,十四号,是我提前回所暂住的那天。

我呆过静谧的小县城,乱哄哄的城郊,繁华的市中心,我知道住在号称中国最繁华都市的市中心是怎样,也知道挤号称中国最发达的公共交通上下班是怎样,于是我就更喜欢偏居一隅,尤其在那个被师兄师姐称作杏林湾的地方呆过十八天之后。

《桃花源记》有说武陵捕鱼人,过入口,“复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田美池桑竹之属。阡陌交通,鸡犬相闻。”当晚乘车进入园区便恍惚有此同感,楼宇错落,景观灯弱光粼粼,小桥流水,蛙声一片。去的日子也好,白天的风景和温度绝配引壶觞而眄庭柯,欣欣向荣之木,涓涓始流之河,我第一个念头就是不想回去了。

经师兄点拨,所里过两天都会发生的一点变化就是一夜之间会多两棵小树或是新竹,如果说刻在石头上忠诚尽责的所训是一种硬朗的文化,那么这里树若大材,竹为君子,钟灵毓秀,种树者有心,赏竹者留意的便是另一种春雨润物了。想起来以前学校校园里面熙熙攘攘一些半道移植的树,再对比隔壁同样是百年校园里成排的二人合抱大树,越发觉得没亏。

如果每天都只是闲庭散步,仰望星空,那么就该有人轰我走了。实际的日子过得其实都差不多,看文献写代码爬格子的场所从宿舍变成了七楼办公室,从每天对着十二寸的显示器到二十二的,按点儿的起床,刷牙洗脸,啃骨头嚼青菜,更衣睡觉。不闹不乱,有条不紊,我大爱偏居。

正如前面说的,单一的生活过着就像一块钱的硬币那样用得快,选择在临走前的一天去岛内小逛,当然没有小姑娘的陪同,我只有选择一路吃过去,本着跑得了和尚跑不了庙的想法,反正不用一次都吃遍,一路看啥顺眼吃啥,能记起来的有黄则和、土笋冻、沙茶面、章鱼烧等,八十四公斤体重的好处就是肚子容量也比较大。

数摸着在北京呆的日子快到头了,想着又要回去了,心中就充满欣喜,新所是第四年,我的新生活是第一年,一块儿往好里奔吧,跟园区里的小树小竹子们。

//所里出第二期电子刊物,学姐让写篇文章,就是上面这篇了。好久没心思动笔了,再过两周彻底离京回所去了。

对我来说,ssh tunnel就是用来那啥的。ssh连接有个最大问题就是没有断线重连机制,在win下面有以myentunnel为代表的软件来看着它所调用plink.exe来建立的ssh连接是否正常,断线就重新调用一下。

Linux也有类似的东西,Gnome下面有个Gnome SHH Tunnel Manager,简称gstm的能实现,缺点是密码不能保存,每次都要自己输入,且依赖图形界面。KDE下面也有一个,名字很有喜感,叫kstm,就是KDE SSH Tunnel Manager,另外还有一个,忘名字了,暂时找不到,但是遗憾的是没有Xfce SSH Tunnel Manager这个神物。

上网一搜,有类似的方案,主要都是来源于这篇文章,对我来说这个方案并不能完全满足我的需求,第一我不想在桌面上专门开个终端(因为expect是需要与屏幕显示交互的,因此不能后台运行),第二他只是发送字符防止超时断开连接,强壮性不够,下面是改进过的脚本。

01 #!/usr/bin/expect
02
03 set timeout 60
04
05 while (1) {
06 spawn /usr/bin/ssh -D 7070 -g ****@*****.****
07 expect {
08 “*(yes/no)?” {
09 send “yes\r\n”
10 expect “*password:” send “****\r\n”
11 }
12 “*password:” {
13 send “****\r\n”
14 }
15 }
16 interact { timeout send “\r\n” }
17 wait
18 }

一是加了第一次登录时确认密钥的步骤,二是用while和wait来实现这条ssh连接结束后,能重新再连接一次,除非脚本进程被干掉,不然不管是在终端里面输入了exit还是kill掉该进程都是能原地满血满状态复活的。

chmod +x这个脚本文件,然后Ctrl+Alt+F1切换到字符界面,Alt+F2打开个新终端,执行这个脚本,再Alt+F7切回来,然后就ok了,灰常的好。

最后,这个做法对于被设置了不允许运行shell的帐号应该是不行。

======================================

最近更新,以上都是废话,用autossh就好了,完毕。

昨天下午下了课,老板给打电话来说帮师兄研究一下如何实现这样如题的功能,具体情境是拿C#用ArcEngine做二次开发的时候,他要开四个MapControl控件,分别显示大气、土壤等等的信息,在每个地图容器里面拖拽放大的时候,其他容器里面的地图联动,鼠标也要在四个窗口里面同步显示。

好的,分成三步来做。以两个MapControl联动为例,做窗口上放了两个ArcGIS Engine MapControl控件,分别命名Map1和Map2。

先实现地图联动,每当地图位置、比例尺发生变化的时候,会触发MapControl的OnExtentUpdated事件,在Map1的响应函数里面写:

Map2.Extent = (IEnvelope)e.newEnvelope;

Map2同理,这样就好了。之前有试过Map2.Extent = Map1.Extent.Envelope的用法,但是联动的时候慢半拍。

接着实现同步操作状态,即鼠标进入MapControl控件的时候,保持一致的漫游、放大、缩小等功能。再放两个ArcGIS Engine ToolBarControl控件,分别命名Bar1和Bar2,添加好漫游、放大、缩小、全图四个按钮,并绑定对应的MapControl控件。

实现的原理是当按下一个ToolBar上按钮的时候,让别的ToolBar的该按钮也处于按下状态。在ToolBar的OnItemClick事件里面写,这里有一点要注意的是ToolBar里面的全图按钮算Command不算Tool(AO里面的强行不合理分类,Command是按下就弹起的按钮,Tool是按下后保持状态的。),在代码里面利用e.index把他排除在同步操作的状态以外。关键代码如下

Bar2.CurrentTool = Bar2.GetItem(e.index).Command as ITool;

Bar1同理,这样效果就出来了。前面几次操作在显示上略有点小问题,我归结到AE的Bug里面,多点几次基本就是无缝同步了,最后出成品的时候,隐藏到其他的ToolBar就好了。

鼠标这个功能比较麻烦,我试过用PicureBox装在个鼠标图片然后用位置控制的方法,但是PictrueBox本身不透明,效果不好,况且暂时也不需要也没必要实现同时弹出右键菜单,跟师兄沟通了一下决定改用在其他地图容器里面画一个大的十字丝来作为鼠标的定位显示,这个功能用NewLineFeedbackClass来实现。

首先做定义两个接口。

private IDisplayFeedback pDisplayFeedback1 = null;
private IScreenDisplay pScreenDisplay1 = null;

在窗体的构造函数里面添加初始化的代码。

pDisplayFeedback1 = new NewLineFeedbackClass();
pScreenDisplay1 = Map1.ActiveView.ScreenDisplay;
pDisplayFeedback1.Display = pScreenDisplay1;

在Map2的OnMouseMove事件里面写响应代码。

((INewLineFeedback)pDisplayFeedback1).Stop(); //结束之前的绘制,DisplayFeedback在执行Start()方法之后开始画,Stop()之后就清掉了。
//下面是画十字丝的,因为没有NewMultiLineFeedbackClass,这个十字丝只能一笔画成,所以就只能在显示区域外面多画了一点。

((INewLineFeedback)pDisplayFeedback1).Start(Map1.ActiveView.ScreenDisplay.
DisplayTransformation.ToMapPoint(0, e.y));
((INewLineFeedback)pDisplayFeedback1).AddPoint(Map1.ActiveView.ScreenDisplay.
DisplayTransformation.ToMapPoint(Map1.Width + 1, e.y));
((INewLineFeedback)pDisplayFeedback1).AddPoint(Map1.ActiveView.ScreenDisplay.
DisplayTransformation.ToMapPoint(Map1.Width + 1, -1));
((INewLineFeedback)pDisplayFeedback1).AddPoint(Map1.ActiveView.ScreenDisplay.
DisplayTransformation.ToMapPoint(e.x, -1));
((INewLineFeedback)pDisplayFeedback1).AddPoint(Map1.ActiveView.ScreenDisplay.
DisplayTransformation.ToMapPoint(e.x, Map1.Height));

这样就在当鼠标在Map2上时,Map1上会同步打一个十字丝。画出来的是默认宽度为1的黑色线,正好符合我的要求。也可以自定义线形,关键代码如下,加在初始化代码里面。

IRgbColor fcolor = new RgbColorClass();
fcolor.RGB = 0;
ISimpleLineSymbol pSymbol = (ISimpleLineSymbol)pDisplayFeedback1.Symbol;
pSymbol.Color = fcolor;
pSymbol.Width = 1;
pSymbol.Style = esriSimpleLineStyle.esriSLSSolid;
//放在这句之前 pDisplayFeedback1.Display = pScreenDisplay1;

这种做法比直接用MapControl的DrawShape或者用GraphicsContainer的AddElement方法好的地方在于,后两者重绘的时候需要刷新地图,这样整张地图都要重绘,效果巨差。

好的,完成了,说两句题外话,ArcGIS的ArcObject的库确实难用,正如上面看的NewFeedbackClass,另外还有一个FeedbackClass,而MapControlClass的接口则有IMapControl1、IMapControl2和IMapControl3,这哥仨大同小异,另外关于Symbol的用法也是各个不同,着实混乱。这还算好的了,我这里是ArcEngine9.3的产品,之前的8系列连命名空间都没有,Orz…本来下个版本是发布9.4的,现在据说改进很多,直接迈进10了,期待一下看看二次开发库有没有便民改进。

偶染小恙

几天前发现脖子上冒出几个红痘痘,略痛不痒,观察几天之后发现越来越严重,进而肩膀上也冒出来几个,不敢怠慢,决定去医院看一下。因为有前车之鉴,我在学校医务室得到一个不靠谱的解答之后,还是决定放弃公费医疗直奔清华大学玉泉医院。

整个看病过程相当简单,给医生看了一下就结了,开药付钱,花掉350个人民的币。

这病叫带状疱疹,第一次发作时的症状就是水痘。仔细研究了一下,这病还挺不简单的,因为发炎的部位是神经,不好好治还会有神经痛的后遗症,于是乖乖吃药。

药片示意图

一顿要吃这么多,并且开的还是两周的剂量。

1号药丸叫比拜克胶囊,功效为清热解毒,一日三次,每次三颗。
2号药丸叫泛昔洛韦片,带状疱疹专杀工具,八小时一次,一次两片。//这个玩意,一盒45,开了我四盒。
3号药丸叫维生素B1,虽然每天有吃善存,不过看样子补充的量还不够。
4号药丸叫甲钴胺胶囊,治周围神经病变,一日一次,一次一粒。//这个玩意儿看着最吓人,也最贵,一盒52,开了我两盒。

另外还有外涂药剂,是中成药,味道闻着不错,只是涂完比较痛。

这两天就全在宿舍静养了,也没什么具体安排,选的课程都听了一遍,比较索然,上学真的是上厌倦了,唯一可惜的是没遇着几个好的上课老师,着实浪费了不少时光。

不写了,脖子这儿越来越疼,我干点别的事情去。

先说维基小说站,看这里,叫做讲故事,源于本科学校的一位学长,原型在这里有个小记录

这个站采用的是DokuWiki,这套系统是php的程序,不需要数据库的支持,基于纯文本来存储数据,插件和皮肤资源都比较齐全,非常适合做个人知识整理系统,这里拿来做维基小说的程序也还是挺不错的。关于其他的维基程序,这里的WikiMatrix列出了多,总能挑到一款的。

维基站比较简单,媒体库的程序就大费了一番周折了。最早的想法就是做一个相册,考察了一系列程序如下。

pixelpost,主题和插件资源最丰富,但是后台界面用户管理弱一点,不支持从url上传图片。
4images,后台功能相当强大,就是主题资源平平,多数很难看。
coppermine,航母级的,功能相当全面,适合做个社区图片分享站点,只是个人用太浪费了。
mg2,非常简洁,不需要数据库支持,不支持多用户,主题资源缺乏。
plogger,很简洁,插件和主题资源来源于社区,比较零散,不过原装的几个主题挺不错了,功能也只能算强强够用,没有多用户支持。
zenphoto,这家似乎跟wordpress有些渊源,主题和插件资源不算特别少也不算特别多,后台的用户体验不错,支持用户权限管理,不过对中文支持不太好。
gallery,DreamHost提供了这家的一键安装,使用体验跟上面4images差不多,还支持网页链接批量上传,就是主题太少太难看了。
yapig等等,特点忘了。。。

考察到最后用的是zenphoto,然后发现它支持上传mp3、flv等等,以及播放列表、密码保护、防盗链等等,所以打算拿它来做个媒体库好了,传送门在这里

DD-WRT折腾小记

明天就要回学校了,这两天闲来无聊,趁着刚买了个带电源的usb hub,就又折腾了一点DD-WRT。

DD-WRT是一个基于Linux的路由器固件,历史大概是这样的,说很久很久以前,一家叫思科公司在自己的一款叫做WRT54G的无线路由上使用了基于Linux的固件,然后就因为GPL授权的问题被迫公开了这套固件的源代码,此后就有一干大牛根据这些源代码搞出来DD-WRT这个第三方固件,后来又有了直接从内核开始单干的OpenWRT(没去了解Tomato是啥情况)。现在的DD-WRT(v23以后的版本)其实已经是基于OpenWRT全部重写的了。//以上很混乱,详细历史八卦参见各种wiki和blog。

DD-WRT的特点是能让你在廉价的无线路由设备上面实现很多高端路由才有的功能,比如多种无线模式、信号功率调整、QoS、VPN甚至把路由当做Samba、FTP、HTTP服务器,BT电驴脱机下载机等等。

也不是所有的路由都能刷DD-WRT的固件,这里有个设备列表。经典的设备有上面提到的WRT54G,不过这个东西已经相当古老了,现在买到的大多是些洋垃圾电路板拿回来翻新的,新型号全新的也有,略贵。我是大半年前从恩山wifi论坛的淘宝店入手这样的一台洋垃圾,贝尔金7231-4p。为了能够更好的跑DD-WRT,恩山老大改造了一下,ROM升级到4M(原配是2M,只能刷个最精简版的固件,什么都玩不了。),内存升级到64M,加装两根天线,又多焊了个USB的接口(只是usb1.1,我的目的就是玩一玩,当文件服务器的话这个速度有点寒碜)。

之所以选这款,一来是经过改造,4M的ROM和usb接口使得这款路由的可扩展性大大增强,二来这款路由够强壮,如果刷固件砖掉的话,恢复起来比一般机器要方便很多(对于我这种有这方面心理阴影的人来说,这个功能太棒了)。

拿到手第一步先是重新刷固件,关于版本的选择这里有,然后根据提示去官方站点下载版本。因为一直在开发,会不断有各种新版本的rls编译出来供下载,也有很多种分支,我没去尝鲜,就选了Eko编译出来的固件”dd-wrt.v24-9517_VINT_mini_usb.bin”。其中VINT是支持47xx系列的博通芯片的,对应还有针对5352芯片的NEWD和NEWD-2,刷得不对就变砖,详情这里有。

mini版的固件关于无线路由方面的功能设置在web管理页面上都是有的,当时琢磨了小半个下午基本摸熟了,只有ipv6的功能一直没机会试(本来以为去科技学院宿舍能有v6给我折腾的,结果人品不好被住到国防大学,只能作罢。)。

有意思的就是那个usb接口了,首先这个usb口供电不是很足,u盘和移动硬盘不能保证稳定运行,我用了个带外接电源的usb hub搞定。挂载u盘比较简单,这里有方法。//顺便提一下,关于DD-WRT没有找到什么特别合适的教程,看wiki多琢磨才是王道。

然后就是第三方软件了,dd-wrt使用的一个东西叫做optware,因为一般他们是安装在/opt下面的,这点真幽默。optware相当于一个linux的运行环境,挂载完毕之后/opt下面有自己的/bin、/lib等等,安装软件使用/opt/bin/ipkg install ***的方式,当然只有optware软件源里面软件,其他软件就要自己编译了。optware也有好几种,dd-wrt自己维护了一个版本,openwrt也有一个,华硕也有一个,叫oleg optware,他们都是可以使用的,就是性能和各自源内的软件略有不同而已,可以同时装若干个,不用都放在/opt下面的。或者用基于BCM47xx平台的Debian,看这里,挂载进去之后chroot,就是个Debian了,想怎么整就怎么整了,Debian环境下支持的软件相较于optware更为完整和全面(前者300M后者也就10M左右)。

其他具体怎么整,恩山wifi论坛里面基本都能挖掘到了。//恩,不要认为我这是广告。

完了,就剩最后一句了,24小时之后我就从保暖内衣+羊毛衫+大棉袄的组合变成内衣+睡衣的组合了。

最近

猛抬头发现又是很久没写了,前两天想写点关于智能机的文章,写了一半写不下去了,以后再补。

放假回来一直忙于之前的一个小项目,摸着石头过河,阻碍重重。前两天有了一点阶段性成果,也就是证明了我的想法可行,并且做了一个小Demo,其间现学了一点Javascript和ActionScript。

搞定之后就有点萎靡了,成天想睡觉,没有太多斗志,我想我还是等着过年吧。

如上,生活总是要记录一点的,流水账而已。

Ubuntu的那个NetworkManager其实挺好的,只是前段时间常驻办公室,在那边只能用有线上网,还要修改MAC,手工指定IP,本来在/etc/network/interfaces里面加上规则是很轻松的事情,可是NetworkManager让这件事情比在windows下还要麻烦,于是一怒之下我就把他干掉了,而且还加了可爱的参数purge。

但是无线我就不会配了,回宿舍上网的两个解决方案是进windows和用有线。回家之后路由器扔在客厅,没法用有线了,咬咬牙,折腾了小半个下午,解决了无线的配置问题。

我的Wi-Fi信号是这样,802.11g,SSID广播,WPA2 Personal加密模式,WPA加密算法用TKIP,30位数字特殊符号大小写的密钥,客户端由DHCP分配IP。笔记本无线网卡是Inter 5100 AGN,操作系统是Ubuntu 9.10。

原理大概是这样,/etc/network/interfaces里面无线网卡配置的写法跟有线差不多,只是多需要了一个叫wpa_supplicant的程序,它的作用是对数据流进行加密,因此要在网卡up的时候启动它,在网卡down的时候关掉他。

具体的做法如下,首先iwconifg看一下无线网卡叫啥,我这块卡是能被系统认出来并驱动的,名字叫wlan0。

然后给wpa_supplicant写个配置文件,放在/etc/wpa_supplicant下面好了,管他叫wpa_supplicant.conf好了,如下。

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=root
network={
ssid=”……” #ssid的名字,如果ssid不是广播的话,在下面加一条scan_ssid=1。
key_mgmt=WPA-PSK
psk=”……” #引号里面明文写密钥
proto=RSN #据说WPA1是写WPA的,WPA2是写这个的。
pairwise=TKIP
}

明文写密钥比较变态,用wpa_passphrase ssid ‘psk’来生成一个加密的psk,效果如下。

# wpa_passphrase tplink ‘qwer!@#123′
network={
ssid=”tplink”
#psk=”qwer!@#123″
psk=8f7ccd4d208572d85eefadf6d80b66f27515a9de8f79743148cefb2c6785e0f5
}

根据输出重新替换回去就好。

接着在/etc/network/interfaces里面写

auto wlan0
iface wlan0 inet dhcp
wireless-ssid “……”
pre-up wpa_supplicant -B -Dwext -iwlan0 -c/etc/wpa_supplicant/wpa_supplicant.conf
post-down killall -q wpa_supplicant

pre-up就是在网卡up之执行一下wpa_supplicant -B -Dwext -iwlan0 -c/etc/wpa_supplicant/wpa_supplicant.conf,在后台启动一个wpa_supplicant的进程,这样post-down的意思也就明了了。

然后就是/etc/init.d/networking restart了,如果启动不成功的话,在确认没有低级错误的情况下,基本就是网卡的驱动问题了,man wpa_supplicant了解更多,然后就是wpa_supplicant.conf里面的参数了,找找还有别的调整调整,调到满意为止。

主力参考了这篇 http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch13_:_Linux_Wireless_Networking,其他也google了一些,没有太多参考价值,参悟了wpa_supplicant的作用就明白了。

这两天买了台入门级的VPS,厂家是RAMHOST,详细的清单这里有,他们家的VPS都是OpenVZ上的虚拟机,带个极其简单的web控制面板,可以预装若干种Linux系统,开通了/dev/net/tun和iptables SNAT/DNAT,能搭建支持转发的OpenVPN服务。各种型号唯一不同的是内存硬盘和流量,我挑了个倒数第二的micro plan,128M内存,10G空间,150G流量,每月4.99刀,季付。

购买挺简单,先注册帐号,选择机器,然后Payal付钱,等待审核一段时间,开通后他们家给我发了封邮件,整个过程相当简洁。邮件里面有web控制面板的链接,用之前的帐号密码登录,能够看到VPS的IP和VPS所在HOST的IP。预装的系统是Debian 5,我就没动他,保持原样。

然后就是SSH到HOST,用户名和密码都是vz,进去之后根据提示用账号密码登录就能获得root的环境了。这样总归是挺麻烦的,还是先把ssh装上吧,aptitude轻松加愉快。顺手adduser再加上普通权限用户若干,给一个加上sudo的权限(原始安装的deb包相当少,sudo都是要额外装的。),其他的作为SSH Tunnel的帐号,就不给了。

这里默认是开启SSH的TCP Forward的,因此干到这里,用来起SSH Tunnel的帐号已经都配置好了,其实这样有不少安全隐患的,但是没心思仔细改参数,现这样得了。宿舍网络太破,速度不快,比Dreamhost的帐号速度略慢。

买低端VPS主要目的还是爬爬墙,目前来说用的SSH Tunnel + FireFox + FoxyProxy + MyEtunnel (windows) or Gnome SSH Tunnel Manager (Linux)的组合还是很方便的,不过还是折腾折腾VPN,多条路子好办事。

他们家机器已经明说了只能OpenVPN,因此不能尝试PPTP模式的VPN了,虽然大家都说OpenVPN更好一点,但我还是觉得PPTP这种记个用户名和密码就能满街跑的要比随身带着配置文件和证书密钥的要方便。

以前没配过OpenVPN,花了我老多精力,总结靠谱精简流程如下。

装软件 aptitude install openvpn lzop,装完后,证书制作工具在 /usr/share/doc/openvpn/examples/easy-rsa/2.0 下面,cd进去,执行如下。

. ./vars #设置一些变量 这里是.空格./vars,不然设置不了变量
./clean-all #清理一下之前生成的、扔在同级keys目录下的证书
./build-ca #建立ca证书
./build-key-server server #生成服务器端的证书和密钥,名字自选
./build-key client1 #生成客户端的证书和密钥,名字自选,可以做若干个
./build-dh #生成Diffie Hellman参数,非对称加密传递密钥用

完了之后所有有用的东西都在keys文件夹下面了,也包括很多没用的,了解一点原理的就知道哪些有用哪些没用了。下一步是建立配置文件。

我想要的效果是这样的,分发若干个客户端的证书和配置文件,每个客户端连过来之后分配固定的IP地址,所有客户的流量全部走VPN所在的服务器。

服务器端的配置文件server.conf这么写

port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
server 10.8.0.0 255.255.255.0 #服务器的IP
ifconfig-pool-persist ipp.txt
client-config-dir ccd #同级ccd目录下创建跟客户端用户同名文件,给客户端指定ip,内容写 ifconfig-push 10.8.1.1(号称这里要是4*n+1,不知道为啥) 10.8.1.2
route 10.8.1.0 255.255.255.0 #添加如上的这套子网
push “redirect-gateway def1″  #指定该服务器IP为客户端默认网关
push “dhcp-option DNS 8.8.8.8″ #让客户端使用指定的DNS,linux无效,需要手动改/etc/resolv.conf
push “dhcp-option DNS 8.8.4.4″
client-to-client #客户端之间互相可见,我觉得似乎应该不可见,暂时自己用,先不管
keepalive 10 120 #以下都不懂,原配
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3

配置文件完成,设置v4的转发,/etc/sysctl.conf使用net.ipv4.ip_forward = 1参数,完了之后sysctrl -p保存修改。

然后是防火墙上加条规则,iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j SNAT –to-source *.*.*.*,*.*.*.*为VPS的IP,另外看到另外一个版本是 iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o venet0 -j MASQUERADE,对iptables相当不熟悉,两种都试过,大意明白,效果似乎差不多,都行,等什么时候不行了再研究一下。

服务器端配置完了,把sever.conf ca.crt等等扔到/etc/openvpn下面,/etc/init.d/openvpn start启动,用netstat -pln看一下1194端口是否在监听就完了。

客户端的配置文件client.conf这么写,没什么特别的,****为VPS的IP,域名亦可,这只是linux下面的配置文件,最近不去windows下干活儿,先不管。#更新,windows下的写法跟这个一样,配置文件后缀名改成.ovpn,证书和密钥文件的路径按需修改,可以是相对路径,nobody和nogroup两行可以删掉。

client
dev tun
proto udp
remote ************** 1194
resolv-retry infinite
nobind
user nobody
group nogroup
persist-key
persist-tun
mute-replay-warnings
ca /etc/openvpn/ramhost/ca.crt
cert /etc/openvpn/ramhost/spehio.crt
key /etc/openvpn/ramhost/spehio.key
comp-lzo
verb 3
redirect-gateway def1

这堆文件拾掇拾掇收拾好,openvpn –config client.conf &,基本上就可以了,之前说的修改/etc/resolv.conf的事情,因为我现在直接在宿舍路由上已经设了8.8.8.8的DNS,也就不用自己改了,不用国内被污染了的DNS就行。补充一条,测试通过之后可以通过openvpn –daemon –config这样来启动,不会独占在shell里面,或者写到/etc/rc.local里面。

这样基本算搞定了,整个就是在外面世界的网络环境了,我测试了一下速度,惨不忍睹,我对宿舍的网络实在不抱什么想法了。

留几个参考链接如下。
http://openvpn.net/index.php/open-source/documentation/howto.html
http://kangzj.net/setup-openvpn-on-openvz-vps/
http://www.black-xstar.com/blog/693.html
http://hi.baidu.com/cnfug/blog/item/c7a4fa2a6e383390033bf6c5.html

我觉着上面写的可能还有问题,等我什么时候再安装的时候按照我自己说的再做一遍应该就完善了。

RSS订阅

  •    Feedburner
  • feedsky   FeedSky

杜晓三,这是艺名儿。

厦门呆着,白石村村民。

觉着页面太窄了?上面有个Large可以点。


分类目录

所有文章

最新评论

  • 胸无大志 (2)
    • Spehio: @Noname 俄…这个怎么说,大学阶段小姑娘里面不是谈恋爱那种 的朋友里面最好的一个。
    • Noname: …怎么感觉你和这个人的关系很不一般…… 然后吧……你的右边这“北京呆着”……
  • 新上线维基小说和媒体库两个子站点 (4)
    • Spehio: @秦秦 那个主题就是那样的
    • 秦秦: 你好,看了你的文章,我也在使用zenphoto,请教一下: 1、点击大图回到缩略图,是怎么做到的? 2、不能在大图上使用右键获取图片地址,是怎么做到的呢? 望不吝赐教,多谢。
  • 一隅偏居 (1)
    • 9hu: 赞!赞!赞!

我出没的地方

有来有往