把网站放到路由器里

你现在看到的这个页面,存放在我家里的路由器里。速度还可以吗?请反馈给我。

前段时间我已经成功地把博客网站架设到一部闲置的安卓手机里,那部手机只是屏碎了,本着物尽其用的原则,我丝毫没怀疑它1G内存、MT6589 1.2GHz四核的CPU足够应付一个wordpress博客程序,结果表现却很差劲,尽管测试静态页面、PHP探针速度都不错,但真正把网站部署上去才发现慢得和蜗牛有一拼。

我妈也要上网,几天前我花79块买了一台百度路由器,准备把旧的换下来给她用。给新路由器刷完了开源的openwrt路由器系统,我就琢磨想把网站部署在路由器里,毕竟现在使用Linode在日本机房的VPS,每月要花10美元,一年也要七、八百元。事到如今,一分钱也要省出来……经过几天的研究,成功实施了。

以下内容非技术兴趣的朋友请略过,直接看文章结尾。

在路由器上搭建网站,考虑四个方面的问题:

  1. 路由器存放网站的空间问题
  2. 路由器的web服务环境问题
  3. 宽带上网带来的动态域名解析问题
  4. 联通宽带屏蔽了80端口的问题

一、网站空间问题

百度路由器刷了最新的openwrt固件后只剩下1M多的容量,远远不够存放一个网站,首先要解决这个问题。

这个路由器宣传的一个卖点就是可以利用原系统中的百度云脱机下载,提供了一个USB接口,于是找出一个16G的U盘插上去,准备把网站文件放U盘里。

方法是先给U盘分区,再格式化成Linux格式,然后挂载到系统上,并设置开机自动挂载。

分区的目的是分出一部分空间作为swap交互空间,实际意义可能不大,但openwrt允许挂载swap,那就不妨分出一块,或许对性能提升有所帮助。

以root用户ssh到路由器,执行如下操作:

cfdisk
delete
new
输入15000,确认
new
确认
选择第二项,选择菜单type,输入82确认,分区就分好了。

接下来是格式化:

mkfs.ext4 /dev/sda1
mkswap /dev/sda2

分好区,下一步完成挂载,openwrt提供了方便的挂载功能。

登录路由器web管理,点击【挂载点】菜单,把自动出现的挂载项目打勾后【保存&应用】即可。如下图:

二、路由器web服务环境

由于惯性思维,首先就想给路由器安装nginx、mysql、php。正要下手的时候,想到路由器的配置还没有那部手机高,如果还是安装同样的环境,估计还是存在原来的性能问题,网站搭建在手机上的性能瓶颈究竟在哪儿,我还没有深入研究,在没有得出结果之前,路由器肯定不能再继续这样干。

这一步陷入了僵局,考虑了很久用什么环境来支持php和数据库。最后灵机一动,没有什么比静态网站很节省资源了吧?貌似得到这个答案很容易,但真是费了不少脑细胞。

于是就开始探索静态化,用CMS在本地生成静态文件上传到路由器?有点杀鸡用牛刀。搜了一番,发现现在的博客主又“高大上”了,还发明了“像黑客一样写博客”的口号,其实无非就是轻型的静态化后发布在像github一类可以托管page文件的网站上,这样的工具有Jekyll、Octopress、Pelican、Hexo等,对比了一番使用了台湾小伙儿开发的Hexo。

现在只需要一个静态的web服务软件就可以了,到底是装nginx还是lighttd,对比的过程中又想到,现在openwrt使用的luci管理界面肯定是运行在一个web服务软件上,到系统进程中一看,原来用的是uhttpd,那只需要在它基础上配置就可以了,不需要安装新软件。

总结在服务环境的这个问题上,抛弃了动态网站的支持,利用自带软件实现。

三、DNSPOD动态域名解析

家里装的10M联通宽带,使用PPPoE拨号,路由器断电或掉线重拨后都会导致ip发生变化,ip变化后,域名必须更新A记录到新的ip上,这一步我采用DNSPOD动态域名解析。方案简单但过程同样坎坷。记录成功结果如下:

dnspod api页面中,复制AnripDdns v0.3脚本。删除注释,并修改dnspod的用户邮箱和密码,以及要解析的域名,我的是zgw.me,子域名ip。上传到路由器的/usr/sbin目录,设置权限为755,ssh终端中vi编辑,去掉每行结束的^M符。

运行脚本后登录dnspod域名管理,发现zgw.me下的ip已被成功更新为本次拨号分配到的外网ip。

配置定时任务,登录路由器web管理,点击【系统】-【计划任务】,在文本框中输入

0-59 * * * * /usr/sbin/dnspod

提交。这样域名解析的脚本每分钟会运行一次,判断本地ip有没有发生变化,如有就去更新dnspod的记录。

至此,动态域名解析也成功搞定。

四、80端口被封的解决方式

宽带封了80、8080等端口,不只联通,别的ISP运营商也都屏蔽了,这一点上没有好的方法,只能把端口换掉,我换成了1983,我出生的年份。我不确定北京联通宽带有没有封https,即443端口,在尝试给uhttpd配置ssl时遭受了无尽的挫折,最后放弃了。所以我最终放到路由器上博客的访问地址为:http://zgw.me:1983。

uhttpd的配置方法:

root用户ssh到路由器,执行vi /etc/config/uhttpd

在结尾添加代码

config uhttpd blog
	list listen_http	0.0.0.0:1983
	option home		/home/wwwroot
	nodirlist		yes

重启uhttpd服务:/etc/init.d/uhttpd restart

设置路由器防火墙,开放1983端口,点击【网络】-【防火墙】-【通信规则】,在“打开路由器端口”中输入1983,添加后【保存&应用】。

把hexo生成的网页文件,上传到路由器中,打开浏览器已可以正常访问。遗留的一个问题是解析不了中文的url,留待下一步处理。

至此,个人博客从linode vps中的wordpress迁移到hexo静态化并部署到家里路由器上的工作正式结束。本文是成功部署后的第一篇文章。

这个过程中,我一直在想我究竟拥有什么样的技能,能在社会生存领域里换取到财富。我一直不是专门从事技术的,但是一个普通互联网项目所需要的从头到尾的技术或多或少都懂一些,而我现在所做的工作是产品经理。

总体上貌似会得挺杂,现在中医我也略懂一二,软性的知识像管理理论等也比较完善。可是我究竟能做些什么呢?没有掌握一门硬技术,在急需金钱的阶段里非常尴尬,做不了兼职。

杂七杂八学了这么多东西是图什么,又变不了现,难道能理解为如同不断折腾一样,学习的过程也会有快感?这句话太磕碜人了,就和学霸说的一样。

以解决一个具体问题为目标,如某症状的辨证论治、在路由器上搭建一个网站等,方法和思路其实是相通的。


2015年1月6日更新:前一天已经又把网站放置在公网VPS上了。放在路由器上速度完全没问题,就是更新起来麻烦,生成后还得上传,最关键的是端口不能用默认的80,所以玩玩就放弃了。

openwrt路由器设置dnspod动态域名解析

百度路由器刷完了openwrt,我想做的第一件事情是把网站放到路由器上,家里装的是联通10M宽带,PPPoe连接,不是固定IP,所以首先要设置动态域名解析,目标是路由器重启或重新拨号获取的公网IP变了后,能自动修改域名的A记录。

我的域名在godaddy购买,域名解析用的是dnspod.cn,openwrt刷完后自带“动态dns”功能(登录-服务-动态dns),遗憾的是已有的服务提供商列表中没有dnspod。

又不想利用dnspod官网上提供的api脚本,更何况这些脚本大多使用到了curl命令,百度路由器的存储容量是不够安装curl,是没法使用的。想办法在“动态dns”功能中实现。

    1. 下载dnspod的php脚本,上传到可以公开访问的服务器上。
    2. 修改/usr/lib/ddns/services,添加:
"dnspod.com" "http://zgw.me/dnspodupdate.php?username=[USERNAME]&password=[PASSWORD]&domain=[DOMAIN]&myip=[IP]"
  1. 登录路由器web管理界面,服务-动态DNS,按如下设置:

保存&应用后重启路由器生效。

小度路由器刷openwrt

我妈说家里要上网,让我这次回家带个路由器。估计就是想视频看孙子。 乘此机会,我换个可以折腾的路由器,把现在用的换回家。 小米、360很早都出了路由器,但是不符合我这种玩家,它们是全部功能都做好了等着用户用。而我的乐趣呢,在于折腾。当然性价比还得高。 最后选了百度的路由器,名字叫“小度路由器(影音版)”,从京东上79元拿下。配置还可以,是海联达(Aigale)代工的。 CPU: MT7620A 内存: 64MB DDR2 winbond FLASH: 8MB 内存(型号MX25L6405D) 这个价格能刷开源固件openwrt,还是很值的,选它也主要是看中了这一点。 开机后看了一下百度的固件,特点是可以利用百度云脱机下载。百度云是个很烂的产品,体验和技术都差,但人家底子厚,所以用户量也大。另外还突出强调内建百度云安全软件,可以防钓鱼之类,这个忽悠普通老百姓还是可以的。总之,管理界面尚可,但刷机势在必行。 刷机5分钟就可以完成,就两部,第一步是更新u-boot,第二步是恢复openwrt固件。

更新u-boot

目的是替换原厂u-boot,以便刷入第三方固件。这个道理和安卓手机卡刷第三方ROM,首先要刷入新的recovery是一个道理。步骤如下:

  1. 电脑和路由器lan口直连,并使IP位于同一网段。百度路由器默认IP是192.168.8.1,开启了DHCP,所以连接好,电脑就自动获取到了同网段IP192.168.8.100,其实第一步用网线连接好就可以。
  2. 在电脑端建立tftp服务,简单的方法就是运行tftp.exe软件,允许防火墙通过。这一步的目的是准备将u-boot.bin传输到路由器中。
  3. 在电脑上登录到路由器上,方法是telnet,目标是192.168.8.1,用系统自带的命令或telnet类的远程管理软件都可以。输入路由器的用户名和密码,默认均为admin。
  4. 在路由器上下载电脑上的u-boot.bin,并写入flash。具体命令:
cd tmp
tftp -g -r u-boot.bin 192.168.8.100 u-boot.bin
ls
mtd_write write u-boot.bin /dev/mtd0
reboot

进入恢复模式,刷入openwrt

  1. 进入恢复模式:按住路由的Reset按键,接入电源,等待WLAN灯闪烁,即表示已经进入恢复模式。
  2. 进入web管理:设置本地网卡固定IP为192.168.1.100,打开浏览器访问http://192.168.1.1/index.html
  3. 选择适合Baidu-BR100的已经编译好的最新的固件刷入,下载地址是http://downloads.openwrt.org.cn/PandoraBox/Baidu-BR100/,目前最新的是PandoraBox-ralink-br100-r474-20140703.bin,90秒后自动重启,注意不要断电。

至此,百度路由器成功刷入openwrt。现在回过头来再来说为什么要刷入openwrt。 openwrt是路由器开源的操作系统,基于liunx内核,刷了开源固件的路由器就相当于是一台性能较弱的电脑,几乎可以干你一切想干的事情。 对于我来说,脱机下载之类的应用不是太有吸引力,我主要是想实现两件事。一是安装服务器环境,把网站放到路由器上;另一是安装voip,实现网络电话。再分两篇文章来说。