抵制小区宽带垄断 Dlink-DIR320+openwrt+evdo3G 实现家庭网关

November 17, 2009

很生气小区一直不能安装电信和网通的adsl只能用物业自己的小区宽带,
价格不便宜,速度和安全性都得不到保障,和邻居在live上玩halo3都不流畅。
试用了电信的usb3g卡以后,觉得速度不错,一晚上可以下载4-5g的东西:)
就想到一个新的上网方案就是带usb接口的route拨号,然后共享给家里的pc/游戏机之类的

1.硬件
带USB接口,54M WIFI,CPU 越快越好,内存越大越好,FLASH一定要是4M的,价格越便宜越好
选下来只有华硕的Asus WL500G Premium v1最合适,但是在hk光来光驱都买不到,只好买了个山寨王DLINK的dir320,硬件配置还不错,CPU:BCM5354 rev 3 at 240 MHz,RAM:32M,FLASH:4M
IMG_0105

2.OPENWART
比较了DDWRT和OPENWRT.DDWRT的控制界面做的非常好,但是限制太多几乎是个半黑盒,不会自己改造硬件的话,软件安装载体只支持jffs2,刷完firmware,jffs2只有1M不到,完全不好折腾,所以只好用OPENWRT
理论上OPENWRT可以非常好的支持BCM架构的设备,但是应为这是DLINK的产品,标准编译的OPENWRT素不能用的,用tftp upload进去以后,唯一的结果就是cycle reboot:(
我只好老老实实地弄个源码来编译~~~

a.建立环境,在VPC里安装ubuntu desktop,唯一要注意的是硬盘一定要6G以上,第一次我想一个嵌入内核应该没多大,只建立了一个4G的磁盘,结果历时5hours左右以后应为磁盘写满导致编译失败,大悲剧,然后下载安装编译工具
sudo apt-get install g++ libncurses5-dev zlib1g-dev bison flex unzip autoconf gawk make gettext gcc binutils patch bzip2 libz-dev libc headers

b.下载OPENWRT源码,理论上用乌龟下开发版本是最好的
mkdir OpenWrt
cd OpenWrt/
svn co svn://svn.openwrt.org/openwrt/trunk/
但是经历了第一次的打击我决定弄个稳定版本比较省心,现在OPENWRT的live版本是kamikaze,whiterussian已经没有鸟
wget http://downloads.openwrt.org/kamikaze/8.09.1/kamikaze_8.09.1_source.tar.bz2
tar -jxf kamikaze_8.09.1_source.tar.bz2
cd kamikaze_8.09.1

c.下面就是耗时的first编译
先编辑一下
./target/linux/brcm-2.4/config-default
为DIR320+一下两行
CONFIG_MTD_CFI_B1=y
CONFIG_MTD_CFI_I2=y
然后就是make menuconfig
target system 选Broadcom BCM947xx/953xx [2.4]
Packages 选All
make会检查环境并建立.config文件
.config文件出来以后运行make开始正式编译
这个过程比较长,OPENWRT的脚步做的不错,会自动下载需要的package建立交叉编译环境,保证网络一直畅通大约5-6hours,编译结束,所有的firmware会保存在bin目录,最后结果like这样
image

3.配置DIR320
a.用tftp把openwrt-brcm-2.4-squashfs.trx刷到DIR320里面等2分钟,电脑配置ip到192.168.1.10,就可以telnet到OPENWRT

b.想办法让DIR320上网:先编辑/etc/config/network把lan地址改成192.168.0.199,然后共享电脑上的3g上网卡,再在DIR320里+default gw 192.168.0.1,编辑/etc/resolv.conf 把nameserver 后面加 192.168.0.1,ping www.sina.com.cn有反应就说明ok

c.用opkg安装必要的软件包,重启一下DIR320
kmod-usb-core kmod-usb-ohci kmod-usb-serial
libusb usb-modeswitch
chat comgt
luci

d.在DIR320上配置3G卡
把3G卡插到DIR320上,查看一下usb信息
cat /proc/bus/usb/devices
T:  Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=12  MxCh= 2
B:  Alloc=  0/900 us ( 0%), #Int=  0, #Iso=  0
D:  Ver= 1.10 Cls=09(hub  ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=0000 ProdID=0000 Rev= 0.00
S:  Product=USB OHCI Root Hub
S:  SerialNumber=b8003000
C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr=  0mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
E:  Ad=81(I) Atr=03(Int.) MxPS=   2 Ivl=255ms
T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=12  MxCh= 0
D:  Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=12d1 ProdID=1001 Rev= 0.00
S:  Manufacturer=HUA�WEI TECHNOLOGIES
S:  Product=HUAWEI Mobile
S:  SerialNumber=�������������������
C:* #Ifs= 4 Cfg#= 1 Atr=a0 MxPwr=500mA
I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=serial
E:  Ad=81(I) Atr=03(Int.) MxPS=  16 Ivl=128ms
E:  Ad=82(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms
E:  Ad=02(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms
I:  If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=serial
E:  Ad=84(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms
E:  Ad=04(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms
I:  If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=serial
E:  Ad=86(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms
E:  Ad=06(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms
I:  If#= 3 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=serial
E:  Ad=87(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms
E:  Ad=08(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms
红色这部分就素需要的信息
编辑/etc/usb_modeswitch.conf找到Huawei的网卡把;去掉like below
########################################################                       
# Huawei E169                                                                  
#                                                                              
# Contributor: Dale Lane                                                       
DefaultVendor=  0x12d1;                                                        
DefaultProduct= 0x1001                                                         
# choose one of these:                                                         
;DetachStorageOnly=1                                                            
HuaweiMode=1   
编辑/etc/modules.d/60-usb-serial 把usb信息加进去
usbserial vendor=0x12d1 product=0x1001 # Huawei EC1260
重启一次DIR320,运行usb_modeswitch检查usb加载信息
dmesg | grep usb
usb.c: registered new driver usbdevfs
usb.c: registered new driver hub
usb-ohci.c: USB OHCI at membase 0xb8003000, IRQ 6
usb-ohci.c: usb-00:03.0, PCI device 14e4:471a
usb.c: new USB bus registered, assigned bus number 1
usb.c: registered new driver serial
usbserial.c: USB Serial support registered for Generic
usbserial.c: USB Serial Driver core v1.4
usbserial.c: Generic converter detected
usbserial.c: Generic converter now attached to ttyUSB0 (or usb/tts/0 for devfs)
usbserial.c: Generic converter detected
usbserial.c: Generic converter now attached to ttyUSB1 (or usb/tts/1 for devfs)
usbserial.c: Generic converter detected
usbserial.c: Generic converter now attached to ttyUSB2 (or usb/tts/2 for devfs)
usbserial.c: Generic converter detected
usbserial.c: Generic converter now attached to ttyUSB3 (or usb/tts/3 for devfs)
这样就对了

e.在luci里配置3G拨号
ctnet@mycdma.cn
vnet.mobi
#777
image

ifconfig 看看ppp0出来并且有ip就ok啦~~~~

内牛满面&OVER

垄断小区宽带的物业去死去死去死去死!!!

reference:
http://wiki.openwrt.org/inbox/howto.build.openwrt
http://wiki.openwrt.org/oldwiki/openwrtdocs/customizing/hardware/umts?s[]=3g
http://wiki.openwrt.org/oldwiki/openwrtdocs/hardware/d_link/dir_320
http://www.draisberghof.de/usb_modeswitch

7 Responses to “抵制小区宽带垄断 Dlink-DIR320+openwrt+evdo3G 实现家庭网关”

  1. 佩服的五体投地,牛啊!

  2. 太长了,没看完,怀着敬意回个贴。

  3. 太长太技术了嘛。中心思想就是说可以用电信的usb3g给家里所有设备上网了是不是嘛?

  4. 拜!

  5. 看不懂,但我知道的是以后有类似问题可以直接交给你了。

  6. 很好很强大

  7. 牛掰