点此下载,上传路由器即可安装
opkg update
opkg install http://crater.herokuapp.com/uploads/twittrouter_0.1.2-1_ar71xx.ipk
twittrouter -h #查看使用方法
因为twitter api被墙,需要使用shadowsocks或者VPN等网络工具,以实现无论在路由器内部还是连接路由器的设备无需任何设置即可翻墙,可以使用这个自动配置脚本pdnsd-ss-iptables.sh,此脚本已打包在twittrouter里,你可以在/etc/config/下找到,如果你碰巧使用TP-Link 703n这款路由器,也可使用编译一个tplink-703n自动凸墙的openwrt固件,配置好网络和简单测试是否OK
twittrouter -u kfc #测试网络及授权
如果测试OK的话
twittrouter -a #授权自己twitter帐号
授权很简单,按提示操作即可,也可以跳过授权快速体验此应用,因为已经默认配置好了@twitrouter的授权
twittrouter #运行此应用
/etc/init.d/twittrouter enable #加入开机启动
这里有一个同样功能的android应用,同样是个玩具,没啥实用性,代码是从fqrouter fork过来的,需要root权限才能运行
]]>cp /etc/config/network /etc/config/network.bak #备份一下network
cp /etc/config/network-pppoe /etc/config/network
然后修改一下你的宽带帐号,你也可以按network-pppoe直接修改network配置拨号连接,修改前最好也备份下,以备出错还原
固件中集成了twittrouter这个应用,默认是不会开机自启动的,设置开机自启动,去掉/etc/init.d/twittrouter注释的"#",即可开机自启动
#/usr/bin/twittrouter -f /var/run/twittrouter.pid
之前发过一个帖子详细介绍过这个功能,真心想体验这个功能的朋友在确认自己联网和凸墙OK后可以先测试一下
twittrouter -u kfc
Congratulations! Verify success,kfc is your twitter friend
/etc/config/twittrouter.json 已经配置好了我自己的一个新注册的twitter帐号,按README配置成你自己的,另外这个项目仍不完善,诚邀懂web前端的朋友帮助,有热心的朋友可通过博客的关于页面的信息联系我
官方固件的wifi开关默认关闭的,而且无web配置页面,我这个wifi开关已打开,而且web配置页面也是最新的bootstrap的主题,这个固件原厂的tp-link 703n即可刷,刷后还剩200多K的可用空间
此固件不作恶,所有代码都是开源的,集成的shadowsocks某一天到期后会导致你无法连接国外网站,所以请及时更换自己的帐号,使用此固件出现任何问题可更新官方的固件解决,本人不负担责任
https://www.dropbox.com/s/yiayc01wufu6c4x/tplink-703-cross-GFW.zip,或者http://crater.herokuapp.com/uploads/tplink-703-cross-GFW.zip 刷机前请做好校验
md5sum -c md5sums 2> /dev/null | grep OK
另外最好不要在failsafe模式下更新固件,我不确定是否可以,但是我在failsafe模式更新固件变过砖,还寄到这家taobao店http://jjwifi.taobao.com让店家给修砖,在此给他做个广告,新玩openwrt的话建议买他家升级后的路由,原厂的703n存储太小,玩起来捉襟见肘
可以从http://pan.baidu.com/s/1qW7CQra下载和这个固件匹配的所有packages,也可以使用我搭建的packages镜像http://openwrt.herokuapp.com/snapshots/trunk/ar71xx/packages
root@OpenWrt:/etc# cat opkg.conf
src/gz snapshot http://openwrt.herokuapp.com/snapshots/trunk/ar71xx/packages
另外这个packages中包含了shadowsocks,twittrouter,ChinaDNS
opkg_install_pkg: Package ddns-scripts md5sum mismatch. Either the opkg or the package index are corrupt. Try 'opkg update'.
这样的问题,一般使用trunk上的软件包安装可能会出现这个问题,trunk上的内核和软件更新最快,我们一般刷的固件都不是最新的,我买路由的时候店家已经刷好了openwrt的系统,好像是3.2.5的内核,我使用trunk上的源http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/安装软件一直出现上面的问题,走了不少弯路。后来把路由器弄坏了,逼着我有刷了最新trunk上的固件,终于不再出现上面内核与软件包不匹配的问题了,但是没过两天trunk上软件源又更新了,又出现不匹配的问题,搞得我又得刷最新的固件,都是没有经验啊,如果一直坚持使用http://downloads.openwrt.org/backfire/10.03.1/ar71xx/packages/的固件和源就不会出现不匹配的问题了,因为这上面的源是稳定版,不会像trunk那样三天两头的更新。现在我已经刷了trunk上的固件,为了避免trunk上的源马上更新,造成上面的问题,我必须搭建一个本地镜像,这样还能提高安装软件的速度
手动下载所有的ipk文件肯定不可取,所以必须使用爬虫抓取,我在twitter上关注的大侠@shell909090分享了一个抓取网页所有图片的脚本推出一个自动下载图片的工具,非常强大,只需小改一下就可以用来抓所有的ipk文件,只是我家的网速太慢,一直抓不全,VPS上两分钟全部抓取,在通过sftp下载到本地,网速好的话可以直接本地抓取,我在公司电脑上试了下,也很快就全部抓取了
使用python可以很方便造一个一样的镜像,这里我使用了flask web框架
from flask import Flask,send_from_directory
import os
UPLOAD_FOLDER = os.getcwd()
application = app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
@app.route('/snapshots/trunk/ar71xx/packages/')
def packages():
with open('packages.htm', 'r') as f:
return f.read()
@app.route('/snapshots/trunk/ar71xx/packages/<filename>')
def uploaded_file(filename):
return send_from_directory(app.config['UPLOAD_FOLDER'],
filename)
if __name__ == '__main__':
app.run()
然后使用uwsgi部署一下
uwsgi --http :8080 --chdir /home/scola/openwrt/ --wsgi-file wsgi.py -p 4 --enable-threads
在本地打开http://192.168.1.104:8080/snapshots/trunk/ar71xx/packages/试试
修改openwrt的/etc/opkg.conf
root@OpenWrt:/etc# cat opkg.conf
src/gz snapshot http://192.168.1.104:8080/snapshots/trunk/ar71xx/packages
这样就不再出现不匹配的错误了,还方便我以后重刷固件后安装软件,其实也可以搭建在VPS上分享给网友用
]]>最初的想法是将所有连接强制重定向到认证页面,除了twitter的相关页面,也就是除了twitter其他页面都跳转到认证页面,后来想想twitter的IP不止一个,做这么精细的控制反而麻烦,因为twitter的所有网站均是https的,所以我只将所有的http的80端口重定向到认证页面,其他端口不管,twitter,facebook,gmail的https 443端口自然是可以访问的,这样就限制了90%以上的网站,另外腾讯QQ客户端是可以上的哟,QQ是走的腾讯的私有协议,不是http,但是你上不了baidu和youku
iptables -t nat -I PREROUTING -s 192.168.1.237 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.1:8888 #限制
iptables -t nat -D PREROUTING -s 192.168.1.237 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.1:8888 #解除限制
其实懂点网络的朋友可以使用代理或者VPN跳过限制,根本不需要登录验证,但是直接认证是非常简单的,还帮你翻了墙
使用twitter的apihttps://dev.twitter.com/docs/api/1.1/get/friendships/lookup来查询两个twitter用户的好友关系,关于怎么使用twitter api,我使用了这篇blog中的代码,通过用户输入的twitter用户名来匹配twitter api返回的twitter friendship,如果是friend,解除重定向限制,如果不是,给出提示,用户可以从认证页面点击立即关注跳转到你的twitter页面,从而用户可以完成注册,登录,关注等。所以你必须先配置好路由器使客户端零配置翻墙,可以参考我的上一篇在openwrt路由器上部署代理,客户端零配置FQ,如果客户端访问不了twitter页面,所有的这一切都是毫无意义的,另外api.twitter.com也是被墙的,所以将其加入hosts防止dns污染,还可加快解析速度
root@OpenWrt:/etc# cat hosts
127.0.0.1 localhost
199.59.149.232 api.twitter.com
199.59.150.41 api.twitter.com
199.59.148.87 api.twitter.com
另外还需要将api.twitter.com的ip加入shadowsocks的代理转发规则
iptables -t nat -A OUTPUT -p tcp -d 199.59.0.0/16 --dport 443 -j SHADOWSOCKS
这部分算是最简单的了,可以直接参考我的代码https://github.com/scola/twittrouter,前端代码我参考了这里,使用一个线程循环扫描客户端,不知道有新的客户端连接,openwrt会不会收到通知,在论坛问了下,也没有人回复,所以只能循环扫描了,代码中有很多hard code,不具通用性,仍需完善,接下来改善代码,增加配置文件通用化
]]>root@OpenWrt:/mnt/sdc1/Tools/shadowsocks# cat shadowsocks-goagent.sh
#!/bin/sh
iptables -t nat -N SHADOWSOCKS
iptables -t nat -A SHADOWSOCKS -d YOUR-VPS-IP -j RETURN
iptables -t nat -A SHADOWSOCKS -d 0.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 10.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 127.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 169.254.0.0/16 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 172.16.0.0/12 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 192.168.0.0/16 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 224.0.0.0/4 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 240.0.0.0/4 -j RETURN
iptables -t nat -A SHADOWSOCKS -p tcp --dport 80 -j DNAT --to-destination 192.168.1.1:8087
iptables -t nat -A SHADOWSOCKS -p tcp -j REDIRECT --to-ports 8089
iptables -t nat -A PREROUTING -p tcp -j SHADOWSOCKS
iptables -t nat -I PREROUTING -p udp --dport 53 -j DNAT --to-destination 192.168.1.1:5353
iptables -t nat -A OUTPUT -p tcp -d 199.59.0.0/16 --dport 443 -j SHADOWSOCKS
ss-redir -c /etc/config/shadowsocks.json -f /var/run/shadowsocks.pid -v
为了防止dns污染,需要使用一个dnsproxy,goagent作者的另一大作,将端口改成5353,代码中的53端口被openwrt的dnsmasq占用,然后将所有的dns请求转发到5353端口,这个东东还有dns缓存功能,相当好用,第一次dns解析需要100ms多,比直接解析稍慢一些,为了凸墙,我认了
python dnsproxy.py
iptables -t nat -I PREROUTING -p udp --dport 53 -j DNAT --to-destination 192.168.1.1:5353
从上面的配置可以看出,我使用goagent代理所有的80端口的http请求,这样做是为了省流量,GAE的流量是免费了,随便用,尤其是看YouTube的视频,非常费流量,部署shadowsocks的VPS可是花钱的,所以VPS的流量还是省着用
如果将所有的网站都走代理,一是非常耗流量,同时走代理速度慢,二是youku这些网站限制国外IP,搞得我老婆看不了youku上的电视剧,我的麻烦就大了,所以必须跳过国内路由,我使用的是bestroutetb,这个是作者优化的路由表,我只用了其中的700多条,选择国内直连,本文结尾会附上配置文件
iptables -t nat -A SHADOWSOCKS -d chn-ip -j RETURN
最后就是将所有的配置进行开机执行,怎么设置开机执行某程序,请参考我上一篇博客在openwrt-tplink703n路由器上成功部署GoAgent,对连上这个wifi的人来说是傻瓜式翻墙,或者根本感觉不到墙的存在,安装和配置的过程中可能遇到很多问题,基本都可以用google帮忙解决,搜中文找不到答案就试试英文,实在不行就上论坛或者stackoverflow上求大神帮帮忙,最后谢谢我用到的开源项目代码的作者和一些blogger
使用goagent和shadowsocks代理国外的流量的配置文件https://www.dropbox.com/s/mj3cc6ucv4cxkwq/openwrt-fuckgfw.sh
]]>最近为了实现一个想法,需要一款开源系统的路由器,由于我也是一个linux小白用户,所以尽量选取大众一点且资料丰富的路由器系统和设备。从小虾的这篇在路由器上写CMCC自动登录验证脚本了解到TP-Link 703n这款路由器,在他推荐的那家淘宝店买来玩了下。店家已经刷好了openwrt系统,也不用自己刷机担心成砖了,动手安装
因为703n自身的flash只有4M,我买的那个被店家改装过了,增加到了8M.想直接安装python到flash上,存储肯定是不够的,我也尝试了下,的确提示内存不足,而且goagent本身也好几M。挂载U盘是必须的。首先找一台linux电脑将U盘格式化成ext4格式,然后创建分区
mkfs.ext4 /dev/sda
fdisk /dev/sda
将U盘插在路由器上,开始挂载U盘
mkdir /mnt/sdc1
mount /dev/sda1 /mnt/sdc1
运行df -h就会发现U盘已经挂载成功了
root@OpenWrt:~# df -h
Filesystem Size Used Available Use% Mounted on
rootfs 1.9M 1.0M 876.0K 54% /
/dev/root 5.3M 5.3M 0 100% /rom
tmpfs 30.3M 196.0K 30.1M 1% /tmp
tmpfs 512.0K 0 512.0K 0% /dev
/dev/mtdblock3 1.9M 1.0M 876.0K 54% /overlay
overlayfs:/overlay 1.9M 1.0M 876.0K 54% /
/dev/sda1 1.0G 123.8M 856.7M 13% /mnt/sdc1
修改配置执行开机自动挂载
root@OpenWrt:/etc/config# cat fstab
config global automount
option from_fstab 1
option anon_mount 1
config global autoswap
option from_fstab 1
option anon_swap 0
config mount
option target /mnt/sdc1
option device /dev/sda1
option fstype ext4
option options rw,sync
option enabled 1
option enabled_fsck 0
config swap
option device /dev/sda2
option enabled 1
调整启动顺序,关于linux的启动顺序,可以参考Linux 的启动流程
root@OpenWrt:/etc/rc.d# mv S39usb S19usb
首先改变opkg的安装目录
mkdir /mnt/sdc1/opt
ln -sf /mnt/sdc1/opt /opt
修改/etc/opkg.conf
dest root /opt
在我的电脑上执行opkg update,然后opkg install python会出现md5sum mismatch 错误
- opkg_install_pkg: Package ddns-scripts md5sum mismatch. Either the opkg or the package index are corrupt. Try 'opkg update'.
这个问题可能是因为linux内核版本和下载源不匹配造成的,一般是下载源比较新,系统比较老,还没有更新,尝试更改下载源地址http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/,变为http://downloads.openwrt.org/kamikaze/8.09.2/ar7/packages/,然后opkg update,此时/var/opkg-lists/snapshots会更新md5,然后从官方源中手动下载python的ipk文件,依赖什么就下载安装什么,虽然有些麻烦。
opkg install python_2.7.3-2_ar71xx.ipk
然后安装ssl库文件pyopenssl,python-openssl,libopenssl,可以参考goagent的wiki。记得将python的路径添加到/etc/profile
root@OpenWrt:~# python --version
Python 2.7.3
将goagent源码下载到U盘,修改proxy.ini,ip = 0.0.0.0,执行python proxy.py,可能会出现缺少ssl模块,说明ssl库没有装全。现在goagent是不就能正常运行了呢,设置电脑的浏览器代理地址。看看是不是能访问YouTube了。如果goagent运行终止且报错
OpenWrt user.info sysinit: python: md_rand.c: 322: ssleay_rand_add: Assertion `md_c[1] == md_count[1]' failed.'
看看这里OpenWRT路由里面运行一段时间后自动退出了,#3楼的方案绝对可行,我也遇到了这个错误。使用时建议不要覆盖旧的库文件,使用 LD_LIBRARY_PATH 环境变量加载此版本的库。
root@OpenWrt:/etc# cat profile
#!/bin/sh
[ -f /etc/banner ] && cat /etc/banner
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/mnt/sdc1/opt/usr/bin
export LD_LIBRARY_PATH=/mnt/sdc1/opt/usr/lib/libssl-thread-safe
现在goagent是不是可以稳定运行了,我这运行了一整天一切正常。
有两种方法可以执行开机启动,比较简单的一种是在/etc/rc.local中添加要执行的语句 。还有一种方法是在/etc/init.d/中建立启动脚本,我也是新学的,就随便选了第二种方法。
root@OpenWrt:/etc/init.d# cat goagent
#!/bin/sh /etc/rc.common
# /init.d/my-plugin
START=99
start() {
. /etc/profile
/opt/usr/bin/python /mnt/sdc1/Tools/Downloads/goagent-2.0/local/proxy.py
}
stop() {
echo goagent stoped
}
主要开机启动不会载入/etc/profile,这里必须在start里要首先载入
. /etc/profile
我之前没有载入也碰到了很多问题,比如在启动脚本里添加python /mnt/sdc1/Tools/Downloads/goagent-2.0/local/proxy.py根本不会运行,因为profile没有载入,导致python的环境变量没有加入。此时根本不会运行python,我又完整的添加了python的路径去执行 /opt/usr/bin/python /mnt/sdc1/Tools/Downloads/goagent-2.0/local/proxy.py ,此时重启路由后goagent终于可以运行了。但是不到一分钟,goagent就终止运行。打开系统日志发现之前碰到的那个错误
OpenWrt user.info sysinit: python: md_rand.c: 322: ssleay_rand_add: Assertion `md_c[1] == md_count[1]' failed.' 突然明白了之前添加到profile的
export LD_LIBRARY_PATH=/mnt/sdc1/opt/usr/lib/libssl-thread-safe
没有起作用,说明开机必须要载入profile。关于怎么载入,我通过google找到了OpenWRT: Start a python script at boot time 。创建好脚本后创建链接
ln -s /etc/init.d/goagent /etc/rc.d/S99goagent
此时重启路由后,goagent就自动运行了。只需要在电脑上设置好代理地址:路由器的IP和端口8087就可以科学上网了,我这是用的firefox+autoproxy。
说点和主题无关的,我在一系列的安装和配置中也不清楚动了哪根神经,导致我在电脑用浏览器登录路由器页面一直打不开,之前是没有问题的。于是ssh到路由器
netstat -tulpn
发现80端口没有监听,当然就没法通过http://192.168.1.1 登录到路由器,于是手动执行
./uhttpd -p 80 -h /www
可以访问http://192.168.1.1 来访问路由器了。再将这条命令加入开机启动,直接编辑/etc/rc.local 就行了。
安装和配置中可能会遇到很多问题,大部分通过google都能找到解决方法。我将整个过程记录下来,也希望能帮到和我遇到相同问题的人。现在连接路由器的设备仍需要设置代理地址才能凸墙,android上无法设置代理,所以仍需要继续配置路由器达到客户端零配置,这里有一篇自动转发特定网站到路由器GoAgent,实现客户端零配置可以参考.
但是想在手机上进行更加复杂的操作就不行了,比如文本编辑,毕竟手机的屏幕太小,触屏也很容易点错。于是想到用电脑ssh到手机,再ssh到vps,这样就可以通过电脑使用移动网络登陆vps了,万能的google帮我找到了QuickSSHd这个应用,使用方法在这里
使用这个应用很容易就通过putty登陆到手机了,另外这个应用不需要root就可以使用哟,我使用的是amazon家的免费一年EC2,需要使用一个.pem鉴权登陆,但是QuickSSHd这个应用不支持这种秘钥,于是需要秘钥转换,比如我之前使用putty登陆到这家的vps就将.pem转换成.ppk,但我折腾了很长时间也没有秘钥转换成dropbear支持的。
也许转换秘钥是可行的,却是不必要的,为什么不考虑密码登陆呢,于是在vps上配置了下,设置了用户和root的密码登陆。终于搞定了在电脑上以android为跳板登陆vps了,这篇blog就是用这种方式登陆vps写的,感叹一下,我的工作能力没咋提升,打酱油的功力更进一步。
]]>后来打算自己搭建blog,空间,域名都没有,只能搞免费的,找到了个google app engine的Micolog,于是搭建了个,没有折腾什么主题,页面效果一般,后来作者也不更新博客程序了,我在那上面记录的东西很少,算是废弃了吧。
最近强烈的感觉到做记录的必要,之前有一个电脑我安装了debian系统,折腾好了Linux下连接wifi,最近我又安装另一台电脑,完全一样的系统,折腾了半天也没有弄好无线上网,也有可能是网卡本身有问题,wifi的ssid还是可以扫描出来的,死活连接不上,如果我之前做了记录,就不至于现在这么折腾了。
开始准备做记录了,到底用什么工具呢,考虑过tumblr,现成的博客系统,很轻松直接开始写就行了,数据虽然没在我手上,但是国外的服务应该有节操的多,最多被墙,不会被删,但是有点不想在线写,安装一个语法高亮的插件也有问题。最终还是放弃了tumblr。
平时逛一下论坛,看blog,发现jekyll@github是个不错的选择。直接fork了Yonsm的博客程序,有需要写博客的朋友也可以直接fork他的程序,简单修改下就可以开始写了,开始学习用markdown写博客做记录了 ^_^
]]>