Psiphon for OpenWrt

本文谢绝转载与链接。软件包:openssh-client、empty(用于自动输入密码)处理服务器列表的脚本psi_list.sh:

#!/bin/shsed -r 's/\{"data": "([^"]*)".*/\1/' |\sed 's/\\n/0a/g' |\while read -n2 c; do printf "\x$c"; done |\sed -r -n 's/.*"region": "([^"]*)".*"capabilities": \[.*"SSH".*\].*"sshPort": ([0-9]*).*"sshUsername": "([^"]*)".*"ipAddress": "([^"]*)".*"sshPassword": "([^"]*)".*/\4\t\1\t\2\t\3\t\5/p'

使用:wget -O – https://psiphon.ca/server_list | ./psi_list.sh > /etc/psi_server建议在pc上执行,路由器上shell处理hex string的那步太慢。仅支持ssh服务器。ossh懒去编译的,meek是go语言写的,重写太难。服务启动脚本/etc/init.d/psiphon:

#!/bin/sh /etc/rc.commonSTART=95PID_FILE=/var/run/psiphon.pidstart() {while read host region port user pass; do[ ${host:0:1} = '#' ] && continueecho "Try connecting $host"empty -f -p $PID_FILE ssh -C -N -D 0.0.0.0:1080 -p $port -l "$user" "$host"while true; do	empty -w -t 2 'yes/no' 'yes\n' 'assword:' "$pass\n" >/dev/null	case $? in	2)		echo 'Connected'		exit		;;	255)		echo 'Connect failed'		empty -k		break		;;	esacdonedone < /etc/psi_server}stop() {kill `cat $PID_FILE`}

参考文献:Build a wheel of autossh using expect

OpenWrt usb挂载与samba 配置与测试

软件包

usb基础软件包:kmod-usb-core kmod-usb-ohci kmod-usb2(ehci)等。newifi mini的官方14.07已打包。
usb存储:kmod-usb-storage block-mount
fat32文件系统:kmod-fs-vfat kmod-nls-cp437 kmod-nls-iso8859-1(字符编码包必须要装)
ntfs文件系统:ntfs-3g。不要装kmod-fs-ntfs,umount的时候内核不稳定。

挂载与卸载

mount /dev/sda2 /mnt/usb
umount -l /mnt/usb

也可以指定文件系统:mount -t ntfs-3g /dev/sda2 /mnt/usb
或是直接运行ntfs-3g:ntfs-3g /dev/sda2 /mnt/usb
mount会自动调用/sbin/mount.ntfs-3g,符号链接到/usr/bin/ntfs-3g

参考:http://wiki.openwrt.org/doc/howto/usb.storage

Samba

软件包:samba36-server luci-app-samba

默认情况下无密码访问会遇到可读不可写的权限问题,比较方便的解决方法是让samba以root账户运行:
修改/etc/samba/smb.conf.template:
guest account = root
#invalid users = root

exFAT

需要自己编译,可checkout极路由的package:https://github.com/hynnet/hiwifi-openwrt-HC5661-HC5761/tree/master/package/exfat

挂载:mount.exfat /dev/sda1 /mnt/usb

有时候卸载不干净会导致再度加载不上,需要拔下来重插,甚至要在电脑上插一下自动修复。
大硬盘如果簇分得太小会因为路由器内存不够而失败。

性能

newifi mini,使用2.4G无线网络测试samba复制文件速度。

fat32读写速度能达到8M,似乎是2.4G无线的上限。
ntfs-3g读速度6M多,写速度2M多。瓶颈是CPU。

所以下载速度在2M以下的是可以考虑用ntfs挂下载的,但是不推荐,万一中头彩微软可不负责:http://bbs.cfanclub.net/thread-497916-1-1.html

6M读速度可以满足任何高清电影的播放,6M等于48M码率呢。

newifi mini不要用5G网络使用samba共享。mt7612e驱动在samba时有故障,5G网卡似乎与USB总线冲突,影响包括PandoraBox在内的很多第三方固件:http://www.right.com.cn/forum/thread-149292-1-1.html#pid936103

 

 

newifi mini纯净版OpenWrt兼容内核固件,集成rt2860v2、mt76x2e驱动

基于原生OpenWrt Barrier Breaker 14.07,使用SDK && ImageBuilder构建,与官方14.07内核兼容,可直接安装官方源任意软件包(包括内核模块)

尝试做这个事情主要是因为PandoraBox固件没有打包某些我需要的内核模块,因为都是3.10内核,有些ko是可以忽略警告强行安装的,但少部分ko因引用内核头文件config而无法二进制兼容(例如ipset,你懂的)。

友情提醒1:此固件不适合普通小白使用,需要对OpenWRT有一定的了解,具备初级的Linux折腾能力,至少要会用vim编辑network、wireless等配置文件,因为LuCI不支持配置rt2860v2驱动的无线参数。
友情提醒2:此固件是纯净版,不因任何用户喜好集成任何功能,需要各种功能的请自己opkg安装。

感谢泄漏驱动代码的有关单位以及lintel、dq等大神的贡献:https://github.com/qdk0901/openwrt-mt7620

已知问题:
1、无法通过LuCI配置无线。这是原版ralink驱动的硬伤,请参考下面的范例配置/etc/config/wireless。
2、5G驱动使用samba时会抽,PandoraBox也有这个问题,见http://www.right.com.cn/forum/thread-149292-1-1.html#pid936103

变更历史:

20141104 r2:
1、Port到14.07正式版(14.07-rc3无法正常使用USB)。
2、添加5G驱动kmod-mt76x2e。
3、无线配置脚本使用最新PandoraBox里的脚本。
4、恢复默认的USB软件包。
5、修复2.4G与5G的LED。

20141023 r1:
1、移除mac80211及rt2800相关的驱动。
2、添加rt2860v2驱动,修复了读取ROM的一处错误。
3、添加luci-i18n-chinese
4、移除ipv6相关软件包及uci初始化时写入的ipv6相关配置。
5、移除usb相关软件包(内核兼容用时再装)。
6、修正newifi mini的交换机接口定义。
7、初始ip地址为192.168.99.1(大多人买这个当从路由)
8、初始root密码为admin。

/etc/config/wireless范例:

config wifi-device 'ra0'
	option type 'rt2860v2'
	option mode '9'
	option channel '6'
	option txpower '100'
	option ht '20+40'
	option country 'US'
	option disabled '0'

config wifi-iface
	option device 'ra0'
	option network 'lan'
	option mode 'ap'
	option ssid 'NEWIFI'
	option encryption 'psk2'
	option key 'xxxxxxxx'

config wifi-iface
	option device 'ra0'
	option network 'wwan'
	option mode 'sta'
	option ssid 'TPLINK'
	option encryption 'psk2'
	option key 'xxxxxxxx'

config wifi-device  rai0
	option type     mt7612
	option mode 	14
	option channel  auto
	option txpower 100
	option ht 20+40+80
	option country US
	
config wifi-iface
	option device   rai0
	option network	lan
	option mode     ap
	option ssid     NEWIFI_5G
	option encryption psk2
	option key xxxxxxxx

下载地址:openwrt-newifi-y1-r2-20141104

在openwrt brcm63xx优雅地安装broadcom wl无线驱动

原生的openwrt在63xx设备上自带的是b43驱动,而(据说)博通官方的wl驱动要比社区的b43要稳定一些。

我个人的使用感受是b43好像是不能中继的(至少我当年在DB120、10.03.1系统上测试不成功),以及流量大时cfg80211会占用很大的cpu,挂下载的时候延迟会飙到2000ms,有时还会断线,总之是各种不爽,后来不得不插一个tplink的usb供电小ap才稳定下来。

最近终于折腾好了wl驱动,发现如果是挂迅雷、连接数多的情况下延迟同样会飙高,但总算没掉线,迅雷限制连接数的话就没有任何问题。个人感受比以前好一些。

下面说优雅地安装方法。官方wiki有提到wl驱动,但说的不仔细,如果按照wiki上说的只是安装一个kmod-brcm-wl的话,恭喜上当。

经过很多次失败的配置,最后对imagebuider中profile的阅读,笔者发现wl驱动至少需要安装3个包:
kmod-brcm-wl:内核驱动
wlc:wl的uci客户端,安装后才能在/etc/config/wireless中设置参数
nas:用于无线加密,如果不安装,会出现无线信号,但是连不上

如果有洁癖,想删掉原来的b43,可以移除以下所有包(测试发现opkg不会优雅地autoremove没有被依赖的包),注意顺序为反依赖顺序,不可随意改变:
kmod-b43
kmod-bcma
kmod-mac80211
kmod-crypto-arc4
kmod-crypto-aes
kmod-crypto-core
kmod-cfg80211
iw
wpad-mini

最后重启系统。重启系统的目的是运行wlunbind脚本,取消b43与pci什么的绑定,否则wl驱动将无法启动。如果dmesg中有这个原因启动失败的消息,可以尝试/etc/init.d/wlunbind boot。

如果/etc/config/wireless中没有出现wl设备,可尝试wifi detect写入配置。

至此,wl无线应当可以正常工作。

20150703 Edit: BB固件将wireless放到了netifd中,造成启动路由器以及重启network服务不会自动执行wifi up。建议装AA固件。

使OpenWRT支持河南联通特殊拨号

近日购RG100A若干,其中一台带回老家测试ADSL modem功能拨号上网,使用的是guzhifeng制作的固件

modem部分按照说明设定还算比较顺利,vpi/vci通过网线直连现有的猫进入管理界面找到,我家所在地区为8/81。注意设置后执行的是/etc/init.d/modem boot,而非start,因为猫需要先初始化硬件(需要将闭源的近500K的电话线信号软调制代码以二进制shellcode的方式映射到内存中然后交给brcm6358的另外一个核心执行),而后才是ADSL拨号服务。

河南联通的主要难点是对pppoe用户名进行了加密处理,更要命的是加密后的字符串中故意含有\r\n这个换行符,具体可见以前的这篇文章。OpenWRT中网络配置是通过UCI脚本界面读取/etc/config/network配置文件来进行的,经测试,直接在配置文件中填写为’3:\r\n***’,或者填写为$’3:\r\n***’这样的linux shell转义均无法正确识别,logread显示用户名错误。

考虑到pppoe拨号实际上是执行pppd,用户名与密码通过命令行传参,若假设shell仅通过空格和制表符分隔参数,则可以尝试对pppoe的uci脚本做patch。编辑/lib/network/ppp.sh,在从配置文件读取用户名之后添加username=`echo -e $username`,即可借助echo命令对原字符串转义。如图所示。

CNC_OpenWRT_20140804220405

之后即可在/etc/config/network中直接以3:\r\n***的形式填写用户名,经实验验证可以正确拨号上网。

 

抽风的路由器

昨天回来路由器挂了,频繁的出现wifi挂掉、死机、自动重启等情况。系统设置方面折腾半天无果(事实上就没能进几次设置,22端口一连就重启)。推测是RAM或者ROM哪块出了点小毛病。

于是只能进安全模式复位系统。但是依旧不稳定,估计是复位影响不到的ROM有毛病。

考虑重新刷。恩。经过几次刷机,终于不会抽风死机了。恩。找出以前的配置手记一点点弄——装ip、macvlan软件包啊,建虚拟网卡啊,拷贝以前写的拨号程序啊,新建一个interface加入防火墙的wan区域啊。我确信所有的步骤都和以前一样,但是——

路由器上了网电脑上不了。。。电脑ping外网显示Destination port unreachable。这个应该是和路由与防火墙相关,处理办法一般是检查下防火墙设置,或者就是简单地重启一下防火墙就可以了。

但是我的防火墙设置真的没有错。。。真的真的保证和以前一样。。。哪怕我把所有的设置都改为accept还是不行。。。

开始怀疑会不会是其他的地方出了问题,比如macvlan啊什么的。就关了虚拟网卡,改掉eth0.1的mac地址直接在这上面拨号,没用。后来索性刷了压根没有macvlan的2.4内核系统,还是没用。(如果是单拨,个人非常建议使用2.4内核的系统,这个系统的无线驱动用的是wl,很稳定,如果是2.6的就会时不时当cpu有点负荷时就挂掉。我当时用2.6是因为考虑到是不是要将寝室所有人的帐号都要来做带宽叠加,后来证明还是各用各的比较好,他们平时就用网线通过我路由器的交换机模块连外网,该怎么802.1x还怎么802.1x,用手机或者没钱了的紧急情况用下我的。)

已经知道是防火墙抽风,索性把防火墙关了。这个时候电脑ping外网会超时——很简单,无论是Windows还是Linux下,防火墙和NAT都是在一起的,Windows是ipsec,linux是iptables。

实在没招了,我想他既然这么抽风,我自己做一下NAT总可以了吧。上网搜了下iptables做NAT的简单用法。发现不考虑太多的话一句话就可以了:

iptables -t nat -A POSTROUTING -j MASQUERADE

打了进去,居然治好了。

那么就把这句话放到rc.local里开机自动运行,然后禁用自带防火墙组件的开机启动。

下面总结一下这次配置的整体步骤。

1、使用10.03.1的2.4内核固件。设置root密码(因为这次要关闭默认的防火墙,机器会暴露在外网,所以安全考虑一下吧)

2、修改wan接口(eth0.1网卡)的设置为静态IP(这样就不会有后台驻留的udhcpc。学校的802.1x设备在收到重复的dhcp请求会踢掉连接。这之后貌似udhcpc不会自动结束,如果不重启的话记得kill掉那个udhcpc)。设置mac地址为电脑有线网卡的mac地址以通过802.1x。(不用担心mac地址重复,wan与lan在物理上是隔离的)

3、禁用firewall组件的开启启动,将开启NAT的命令写入rc.local中。

4、复制拨号程序到/sbin。拨号。当然,最好是先重启一下。

本来是应该去探讨下自带防火墙抽风的原因的,但是毕竟对linux与网络了解还是有很多欠缺,iptables命令完全不会用,现在又是准备音乐会的关键时期,没时间和精力再折腾了。まあまあ、能上网就知足了吧,全校几千用校园网的群众都还在苦逼地拖着网线呢。。何况这次修好也不用担心wifi挂掉了。。