OpenWrt Overview

Wireless Freedom

Openwrt 是一个运行在MIPS, ARM, X86等各类嵌入式设备上的Linux系统。它的文件系统是可写的,意味着修改系统不需要重新编译整个系统。
开发者可以交叉编译软件到Openwrt,也可以使用它自带的opkg包管理系统安装软件/库。

1
2
opkg update
opkg install libpcap

没错,这就是一个liunx!

只是性能有所不足而已: 典型CPU

  • MT7620: 580MHZ, MIPS, Single-Core

  • AR71xx: MIPS, Single-Core, <800MHZ

典型RAM/FLASH

  • FLASH: 4M, 8M, 16M

  • RAM: 16M(天坑), 32M(主流), 64M(主流), 128M, 256M

硬件支持列表:

Openwork Wiki, 好像除了tplink新出的坑爹货,其他基本都可以刷openwork的系统。

路由器

路由器无论搭载什么系统, 首要要求就是稳定性, 稳定性好的, 才能讨论五花八门的高级功能。Openwrt作为一个老牌的开源路由器系统,它的稳定性比起那些MT762x之流的智能路由器(极路由1s, 360智能路由, 小米路由mini, 联想newwifi mini)高的不是一条街。和那些TP-LINK早期用料足的路由器在一个水平段(如WR841N v5)。
如何选择一个稳定的路由器:

  • TP-LINK远古时期的路由器, 确定能刷Openwrt, 缺点是很多都是二手。
  • 一些智能路由器,用的都是类似的方案(ODM), soc性能也过得去,刷了Openwrt也没用什么问题。

    基本用途

    整理一下思路,从连上网之前到连上网之后,到高级用途。

    联网前: 认证

    高校大量的openwrt路由器,基本都是为了绕过那些校园网的认证而刷的,神州数码, DrCOM, iNode之流,不仅客户短写的好像上世纪80年代的风格,尤其是图标,XP下都嫌难看,而且还限制wifi分享软件。所以刷openwrt跑认证就成了一种刚需。
    开源的客户端:

  • DrCOM: DrCOM-generic

  • 神州数码: zdclient

联网后

  1. 翻墙: 前有PPTP,OpenVPN被GFW处理的服服帖帖,现在主流出墙基本都是shadowsocks。在路由器上配置ss, 并且使用PAC判断网站是否在墙外,并且自动代理,是目前最好的出墙方案。
  2. 多播: 如果测试本地运营商没有限制宽带多播的话,可以尝试虚拟WAN口多播叠加带宽。(移动好像一直都不可以)
  3. NAS, 离线下载: Openwork极少有带STAT或者USB3.0接口,部分带USB2.0接口的路由器IO性能不佳,加上孱弱的SOC性能,基本上只能处理百兆网口的下载流量,由于USB口性能的限制,很多时候还达不到10MB/s(参考Raspberry 1代的usb和有限网口)。所以做NAS就一鸡肋,聊胜于无。但是离线下载一些720P的视频还是不错的。 配置transmission
  4. 去广告:…..

Python

如果要在Openwrt上写C程序,还是比较麻烦的。还要找一个linux的机器交叉编译,光配置和下载依赖包,可能就要一个晚上的时间,加上编译系统的3 4个小时,是一件费时费力的过程。况且C程序编程还十分繁琐。所以能运行Python就好了。

1
2
3
4
# 安装
opkg update
opkg install python-simple
opkg install python-codec

大致会消耗2.7MB的空间,对于8M Flash的路由器来说应该没有太多的压力。之后就可以使用socket模块愉快的抓包了。

Scut python版Drcom认证:

Scapy

毕竟在包分析方面,用Raw socket写的程序还是比不上成熟的网络分析工具Scapy,所以安装一个scapy对包分析还是很有帮助的。安装过程:

1
2
3
4
5
6
7
8
9
opkg update
opkg upgrade tar wget
opkg install python tcpdump unzip
wget http://www.secdev.org/projects/scapy/files/scapy-latest.tar.gz
tar -xvf scapy-latest.tar.gz
cd scapy*
python setup.py install
cd ..
rm -rf scapy*

抓一波包压压惊。

1
sniff(iface='ppp0', prn=lambda x: x.summary())

HttP Server

不知道能不能跑得动…