niyue

Protected: 止正

In life on February 10, 2013 at 9:10 PM

This content is password protected. To view it please enter your password below:

l2tpvpn puppet module for Ubuntu

In programming, ubuntu on November 10, 2012 at 11:31 PM

之前用Microsoft的MSDN订阅里面附带的Windows Azure的额度建了个Ubuntu的服务器,主要就在上面搭了一个L2TP的VPN服务用来翻墙。SSH tunnel倒是很容易翻墙,但是iPad和iPhone之类的设备没办法直接用SOCKS的代理,所以只好整了这么个VPN来翻墙,Mac上用起来也很方便。

在11月1日凌晨的时候微软忽然发邮件说MSDN带的Windows Azure额度上限到了,微软自动关闭了Windows Azure的服务。我确实是设置了超出额度就自动停止的条件的,所以预期下个月能够自动恢复。到了11月1日中午的时候,收到了额度恢复的通知邮件,开始没太在意,觉得是预期中的事情。不过后来使用VPN的时候发现没法连接上了,再去Windows Azure Portal里面看发现原来创建的两台虚拟机都不存在了,这个完全出乎我的意料,服务停止居然把数据都一下删掉了。刚好又临近十八大,一堆网站都被封了,于是只好考虑重新搭一次VPN。

之前主要是参考「Ubuntu下为Android/iOS搭建L2TP/IPSec VPN代理服务器」搭的VPN,再做一次当然也没啥难的,只是觉得很没意思,最后考虑这次用Puppet来自动化这个过程。以前写过些小的web app,都需要涉及搭一些环境来部署,碰到过好几次由于环境造成的问题,后来看到过Puppet这类的工具感觉很适合用来解决这类问题,这次借这个VPN的搭建顺便学习下。

用下来发现Puppet还是一个不错的产品,文档写的也比较好,我主要就看了Learning Puppet这个文档,之后具体用的时候参考了下Puppet的Type Reference就完成了这个l2tpvpn的Puppet module。前后大致一共花了20个小时,最后其实还没做到开始计划的一条命令行完成整个部署的程度,不过对Puppet有了个大概的了解,同时整个搭建VPN的过程大致简化到了一个十分钟的过程,其中大概还有五分钟是用在等待Windows Azure Portal的操作上面的。

最后剩余的一些自动化工作有些繁琐,也没有什么太大干劲去完成,就简单写了个文档描述了一下,所有的东西都丢到Github上面去了,https://github.com/niyue/l2tpvpn,以后如果要在Amazon EC2或者Windows Azure里面搭这么个环境应该都是非常容易的。这个Puppet module还是很简单的一个module,主要用来学习了。有些服务和文件配置的依赖的顺序什么的没有太仔细推敲,除了client/server的配置,基本也算把使用Puppet的整个流程走了一遍,几个部署的时候需要的参数都自动获取了,基本只要填个VPN的用户名密码就可以了。

重新建虚拟机的同时还顺带用iperf测试了一下家里连接到Windows Azure的东亚和东南亚数据中心的带宽。大概查了一下,东亚的数据中心应该是在香港,东南亚的数据中心是在新加坡,很不科学的手工测试了几次,iperf出来的结果差不太多,连接到两个数据中心里面的虚拟机都是大约600~800kbps的带宽,感觉连到新加坡还略快一些。

总的来说:

  1. 以后可以尽量多的使用Puppet来管理配置,越复杂的配置以及越长期的配置管理收益越大
  2. TODO: 使用Puppet来自动化管理更加复杂的配置文件,Puppet + Augeas, http://projects.puppetlabs.com/projects/1/wiki/Puppet_Augeas。目前的l2tpvpn为了能够达到idempotence,对/etc/ipsec.conf这个文件的修改可能会覆盖旧有的其他的修改,像我这种个人使用就搭一个VPN的情况不会有问题,但是如果更复杂的系统里面可能就会有问题
  3. Vagrant, http://vagrantup.com/, 看起来有点意思,以后有机会可以试试
  4. 比起Amazon EC2的console,Windows Azure Portal的性能真是弱爆了,创建新的虚拟机和添加新的endpoint感觉比Amazon EC2里面的操作都慢了一个数量级
  5. 终于能在十八大期间继续VPN了 :)

中兴F420

In life, other on August 8, 2012 at 4:00 PM

今天上海刮台风,躲在家里算在家工作,结果一不小心又岔开思路去折腾了一上午的路由器。

之前好久家里终于改了电信的光纤,当时给了一个中兴的A10 F420光猫路由和一个TP-LINK的TL-WR700N无线迷你路由器。TP-LINK的无线路由器设计的还挺好看的,像Apple的Mega Safe电源适配器。不过用了一段时间发现电信在设备上做了限制,每次最多只能4个设备连,随便算算家里能连Wi-Fi的设备就有8个(两台台式机、一台Macbook、两个iPhone、两个iPad、还有一个Wii),偶尔公司的电脑还会带回来。虽然几台电脑一般不会一起用,但是iPad和iPhone基本都是一直开着的(没法连接的情况在买了iPad之后尤其明显),所以这年头4台设备的限制感觉就像电信在给自己找麻烦(我打了老半天客服还叫了它的工作人员上门)。后来折腾了一阵后发现限制其实在TP-LINK的那个路由器上,光猫路由并没有这个限制,所以在光猫路由后面又接了一个自己的路由器算解决了问题,不过自从我知道那个光猫也有一个特殊的管理员密码可以做一些特殊的设置之后,心里就觉得很不爽,老觉得电信在想方设法阻挠我自由使用宽带服务。漫长的一个折腾光猫的过程就这么开始了。

1) 看到网上有人说F420是有开telnet的,自己试着连了一下,发现网上说的用户名密码不对,自己随便乱试了一个root/root居然还真连上了。

2) 连上之后看到了熟悉的命令行界面,我觉得大概没多久就能搞定了。结果发现F420上面的系统是BusyBox,1.01版的,经过定制之后,只有很少的命令能够使用,连vi和mv之类的命令都没有。其实我看了下,电信发的光猫里面的这个BusyBox的版本,连个正经能用的编辑器都没有,我只能在命令行里面cat来cat去的,简单的文件要改还能echo一下,稍复杂点的看也不好看也基本没法改。find和xargs也没有,导致grep也没太大用,最后只能cd+ls+cat到处瞎逛。

3) 后来有次发现系统里面居然还带了一个vsftpd,可以启动ftp的服务。不过里面带的vsftpd配置和其他Linux系统里面的不太一样,启动之后一直无法登陆进去。看了一坨的各个Linux上vsftpd的配置文档和其他一些人的配置,都没搞懂到底怎么让这个vsftpd能够正常访问。

4) 以上3步断断续续就折腾了两个多月时间(当然只是有时候心血来潮的时候会去折腾一下)。今天上午折腾的时候发现加一个莫名的-s的参数启动vsftpd就可以了,其他所有配置都没法生效。

5) 登陆进去高兴多没多久发现Cyberduck没法从FTP下载,但是居然可以上传,也不知道到底是什么权限问题。BusyBox里面连chmod也没有,真是有点无法下手。又捣腾了一阵换了一个FileZilla来连FTP,FileZilla里面的文件”Download”还是失败,但是“View/Edit”居然可以用,我对FTP到底咋工作的真是完全不了解…立刻把FileZilla的默认编辑器换成Sublime Text,至此终于能用上个称手的编辑器来查看和编辑文件了。

6) 看了一大堆的配置文件,确实发现/etc下面有个db_default_Jiangsu_cfg.xml里面有telecomadmin和它的密码,不过db_default_Shanghai_cfg.xml里面却没有。网上确实有一堆的说法,不过估计电信发放的路由器型号不太一样,而且相同型号里面的软件版本又不一样,大多说法看起来都没用。目录树下面有一个/userconfig/cfg/db_user_cfg.xml看起来应该是存储这些设置的地方,不过这个文件其实不是xml文件,而是一个加密处理过的二进制文件。之前的一些方法包括直接查看这个文件、或者对文件内容用base64解码都没有用了。在我家的这个F420里面,这个文件是一个文本文件,但是里面的内容都是16进制数,相比同一个目录下没有经过处理的db_default_cfg.xml,大概只有1/3的体积。折腾了一阵也没折腾出来,后来放弃了这条路。

7) 之后发现网上的另外一个方法能够奏效。修改/home/httpd/login.gch这个文件就可以了,是光猫路由的管理界面的代码,应该是个cgi的脚本啥的。应该是电信内部有人搞出来的吧,调用了一些很神奇的API之后直接可以查找到telecomadmin这个用户的密码。中国电信据说是会动态修改这个密码的,不过我也没太深究它到底是直接从本地加密的那个文件中查找的还是远程从电信的数据库里面查找出来的。

8) 用这个用户名密码登陆进去发现F420只是一个有线的路由器,没有无线功能,所以要想用Wi-Fi的话后面总是要接一个无线路由器/AP的。和别人帖出来的F460不一样,管理界面里面也没有关于最大用户连接数的限制,根本没有WLAN的管理(其实要说有的话应该就是4,因为只有4个有线的接口)。还有些DDNS什么之类的应用,感觉还有些用,但管理配置界面实在太差,根本不知道要填的到底是什么东西。到这里折腾基本完毕,4-8步骤又花费掉了近一个上午的时间。

其实这次最后没折腾出来什么结果(本来希望能够开启F420的无线功能然后不用另外一个路由器的,结果发现根本没这功能),但还是简单小结一下方法,指不定以后换个新的光猫还能用上:

1) Log into your modem (router), a BusyBox

telnet 192.168.1.1 (your-router-ip), root/root

2) Start FTP in BusyBox

/bin/vsftpd -s &

3) Connect to FTP using FileZilla, root/root (or anonymously)

4) Back up /home/httpd/login.gch

cp /home/httpd/login.gch /home/httpd/login.gch.bak

5) Navigate to “/home/httpd/login.gch” with FileZilla, “View/Edit” that file like the patch below, and then upload the saved edition back to your router.

--- /home/httpd/login.gch 2012-07-03 14:05:16.000000000 +0800

+++ login.gch 2012-07-03 14:03:37.000000000 +0800
@@ -152,6 +152,17 @@
set_language("langcn.conf");
langclass = "login_title_centeren";
}
+var CK_HANDLE = create_paralist();
+var login_name = "telecomadmin";
+set_para(CK_HANDLE, "Username", login_name);
+qeury_list_bycond("OBJ_USERINFO_ID", "IGD", CK_HANDLE);
+destroy_paralist(CK_HANDLE);
+CK_HANDLE = create_paralist();
+var CK_IDENTITY = query_identity(0);
+get_inst(CK_HANDLE, "OBJ_USERINFO_ID", CK_IDENTITY);
+var now_pwd = get_para(CK_HANDLE, "Password");
+now_pwd = delMoreSlash(now_pwd);
+destroy_paralist(CK_HANDLE);
%>
<head>
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
@@ -239,4 +250,5 @@
</script>
</head>
<body onload="onFocus();">
+<div><%=now_pwd;%></div>
<div id="container">
6) Login to your router, http://192.168.1.1, the username is ‘telecomadmin’, and password should be displayed in the upper left corner of login page.
这里是我觉得最有用的两篇文章,讲的虽然都是F460,但是在我这里都适用:
Follow

Get every new post delivered to your Inbox.