分类目录归档:openwrt

漫谈家用软路由WIFI的方案,为什么minipcie网卡不合适

首先直接抛出结论,建议使用软路由+硬件无线AP的方式最稳定靠谱。

我们使用的普通路由器,一般都包含了 路由功能和wifi无线功能,那么意味着我们只需要把无线路由器连接外网,然后内部就可以通过一个设备搞定。但是目前的软路由使用中,软路由主要突出在他的处理能力上,主要负责的是路由和NAT转发方面的处理,而无线功能则是没有的。

为什么软路由没有无线呢?

答案也很简单,因为软路由天生就不是路由,而是被折腾出来的, 所以在硬件上面,本身就不具备无线的硬件。试想一下,巧妇难为无米之炊,没有WIFI的硬件芯片,又怎么能发射出来无线信号呢?

普通家用路由器都是把CPU主芯片,RAM,ROM,网卡/交换机芯片,无线网卡,信号放大,天线等都整体设计好了,开发出来的成熟产品。

那么,软路由是否就不能实现无线功能呢?答案其实是可以的,但是仅仅用作研究折腾,目前似乎还没有见过有商用级别的X86软路由加无线网卡组成的无线路由器方案。

那么,我们来看看软路由要实现无线AP功能,要注意什么?

硬件方面,其实软路由本身就包含了CPU处理器,主板,内存,存储,电源,网卡。OK,那么以上就是一套软路由的基础硬件了,我们只需要再增加一个无线网卡+天线就可以了。

这里首先要看看自己的主板能通过什么方式增加无线网卡,目前我知道的就是如下几种,PCIE接口,MINI-PCIE接口,以及其他主板上的扩展接口,如MINI-PCI接口,PCI接口,甚至USB接口。

95a076cb913d4401976f1610ecc275d5.jpeg4bb7f97c9702435a9207c747db8e2a0d.jpegd3d0da89f9e04d4a92576bd6e85f4ce3.jpeg

如上图所示,几种无线网卡分别是,MINI-PCI,MINI-PCIE,USB无线网卡。其他的无线网卡猫猫无线手里没有,所以没办法拍照片了,各位自己去搜索看吧,

有了硬件,需要用驱动来控制才行,那么就限制你用什么方式来架构这个软路由。大概可以分成两组方式。

1.纯软路由,系统装在U盘中启动,或者装在小容量的固态硬盘上,这台机器就只是软路由功能。

2.虚拟机软路由,设备本身有一套系统,然后在系统下虚拟机安装一个软路由系统,这台机器可以多用,功能不局限于软路由。

至于你是用哪种方式,就看需求情况了。但是经过测试,其实纯软路由的方式,增加无线功能是最容易的。

为什么纯软路由最方便实现无线功能?

因为纯软路由的话,系统直接调用硬件,比如软路由系统openwrt 直接就能使用pcie接口,只要驱动合适,就能激活无线网卡,可以说太简单了。

但是如是是经过虚拟机,由于硬件直接是与虚拟机系统连接的,而不是软路由系统,所以就困难多了,虽然困难,但是方法还是有,但是效率,驱动,识别,和性能都打了折扣。

这里主要是硬件直通技术,如果你觉得本文提到的思路非常好,一定要照着葫芦折腾一番,那就需要选择能支持硬件直通的CPU和主板。

如果你觉得纯路由不够逼格,浪费你的I9顶级CPU,那么虚拟机软路由也是一个充分利用硬件资源的方式。

上面提到, 支持硬件直通的CPU 和主板,主要作用就是能把pci扩展接口直接 绕过系统底层,划分给软路由系统直接驱动

但是这里说的系统底层, 主要是两种,纯虚拟机系统,主要是esxi, 冷门点的有微软的hyper-v。

在Window系统下面,硬件直通功能,我折腾过,研究不深,所以只能简单说说失败的经历。

同样的硬件, 用纯路由,就能识别并使用无线网卡,但是经过esxi 硬件直通后,能识别,但是无法使用,

所以后来发现这是一条漫漫长的折腾路,果断放弃。

那么问题来了,虚拟机软路由就不能使用无线AP 功能了吗?

答案当然可以,那么我们就曲线救国吧。使用window系统,安装wifi网卡并装好驱动,使用wifi共享软件

看似很完美,但是,只能使用2.4G 频率,5G 折腾不出来。

需要设置以下几点:需要开机启动,Wifi不能休眠,Wifi的信道,模式等。

但是发现,wifi 的信道,根据不同网卡,设置也不同,有的能设置信道,有的不行。

那么说回正题,如果选择最简单的纯软路由方式,需要注意的是, 不是所有无线网卡,都能使用,这里主要是受限于软路由系统的驱动,理论上,你能搞定驱动,任何网卡都可以,但是如果你能搞定这些,就不用看本文了。

最后来实战

注意:不是所有软路由系统都支持无线,目前主流的比如openwrt,LEDE这类家用系统,是支持的, 但是爱快,海蜘蛛之类商业性质的软路由就不支持,因为这种系统,根本就没有编译无线芯片的驱动。

那么我们的方向只能锁定openwrt 之类的开源系统, 但是一般情况下,原生openwrt 是没有无线网卡驱动,其实我们平时能下载到的,已经是经过大神优化过,添加好驱动的了。

目前我折腾过成功的就是 AR9380,9280这类的网卡,openwrt下X64下,插上就能识别并使用,其它的具体确实需要自己到专业论坛去查阅资料。

最后,软路由装好了,网卡插上了,是不是有点小激动呢,谁说软路由不能带无线AP 了,不信邪,咱来试验一下。

那么开机测试一下, 网络- 无线能看到 这个网卡了,开心吧。

2fea75848fc44e6d808dd484fabedba9.jpeg

那么如果你不顺利的话,会发现如下一些问题:

1.无线模式只能2.4G或者5G其中一个,不能像普通路由器那样双频

2.无线只能接收,不能发射(意味着你只能蹭网转换成有线,不能把宽带转换成无线)

3.能建立AP,或者接收信号,但就是死活用不了(悲剧吧)

4.能用一会,但是一会就断了,要重启才能识别(哈哈)

5.或者压根就找不到这个无线网卡,识别不了。

OK ,如果上面这些问题,你都没遇到过,那么恭喜你,你最终还是会放弃,你将面临最后一个选择,

哇靠,网速怎么这麽慢?

对,没错,不管你的无线网网卡是AC双频,300M,450M 也好,速度就是上不去, 具体是多少

根据我自己的折腾,不管是300M的双频和866M的AC,内网速度只有3M~8M以下(不是kpb)

打个比方,如果你是100M光纤,那么你的下载速度应该是10M左右, 那么如果用这套方案,你的下载速度只有8M以下。如果你用的是千兆路由, 你内网拷贝文件的时候,也是8M以下,意味着,如果你没有内网需求(NAS存储之类的应用),恭喜你,这个问题困扰不了你,但是可能不大稳定, 3M~8M速度,不过其实上上网也够用了。

但是,如果你的应用就这麽简单,貌似根本就不用软路由吧?

好吧,你说你就是一个需求不高,但是爱折腾的人,你将面临最后一个问题,也是影响你一辈子的事情,那就是:哇靠,怎么连多几个无线设备,就这麽不稳定,经常上不了网了!是的,没错,上面说的,3M~8M ,是单机的速度, 如果多台wifi设备连接,你自己去分配吧,不稳定。

那么WIFI 这么忙,不稳定问题是什么呢?

我查阅资料,其实还是无线网卡的质量上,minipcie网卡一般都是用于笔记本上,其实主要负责单机接收,和单机发射。意思就是这个网卡的设计初衷,就是满足单机对路由上的使用,那么无线能力自然就不需要这麽强,只要无线路由能力强,就能显得网速好,这里指的是处理能力和收发的强度。

但是无线路由器只要的工作就是 单机对多机, 处理能力和收发能力要同时 满足多台wifi设备同时使用才可以,所以,以上这套方案,如果连接的wifi设备越多,越不稳定,至于能接受多少设备,那么取决于你的无线网卡了,在笔记本上用的无线网卡,一百元级别,比如AC7260 这类的算很不错了。

但是这个网卡我折腾过,与50元级别的AR9380差不多,只比后来买的20元级别的博通网卡强一点点。

那么有没有强大的无线网卡呢,有的,虽然我对网卡了解不多,但是也看到几款强大的卡,比如AR9880,9580这类的,听说是内置了功放,芯片也强大的,但是,有两个问题:价格太高,200元起步,这个价格,我可以买不错的无线路由了吧?体积太大,比全高minipcie卡板还大一倍,一般主板位置都装不了,这种只能用于特殊主板或者加pcie延长线安装。

高端无线网卡我没折腾过,所以就不发言了,我仅代表广大工薪阶层写下此篇折腾后感想。如果你看完上面我的废话,还坚持用这套方案,觉得平时就一个笔记本或者手机连完全够用,那么恭喜你,你是一个热爱生活,勇于创新,永不服输,DIY能力超强的,单身狗。

后记

其实这个文章目前来说有些地方是需要修正的,无线网卡之所以用在软路由器上效果没有单独接AP效果好,是因为受制于无线芯片的开源驱动,这个非常重要。驱动可以说是灵魂,而硬件仅仅是肉体而已。古往今来,无数发明创造都出自于杰出的人才,也是同样的道理。

目前,openwrt对无线芯片的驱动支持可以说已经很全面很健全了,比如我在一台ATOM270的小主机上,使用AR9287无线网卡,使用完全OK,当然这个网卡只有2.4G频段,受周边干扰影响较大,效果嘛跟普通2.4G的300Mbps无线AP效果差不多,甚至信号还要好一些。

57b4bc5b46de4122abed0ca46e3a583e.jpeg2e7afefc5c1445c38143ebf179ac4b92.jpegda2bdbd9c1134fbf8a8e7b9586f94f1c.jpeg

以上是这个自制的软路由的照片,有人可能会问,一个有线网口的软路由怎么使用呢,至少要有一个WAN口和LAN口才能称之为路由器吧。其实可以使用一个支持VLAN的千兆交换机轻松搞定,具体可以去搜索单臂路由。而且这个路由器的网口是千兆的,在使用中,200M宽带毫无压力。读写硬盘速度受制于CPU性能,千兆局域网大概在25-70MB/S左右浮动。

继续阅读

发表在 openwrt | 留下评论

openwrt实现单臂路由

1.必须是802.1Q基于tag的vlan,基于端口的不行 
2.划分7个vlan,最后一个端口是trunk用于连接路由器
3.OP用vconfig命令增加7个vlan子接口对应交换机上的7个vlan以及7个接口

4.openwrt开启kmod-8021q支持

5.busybox开启Support for 802.1Q VLAN parameters 

还未测试 应该是这样的。

######################################

VLAN有两种方式,一种是基于端口的VLAN;一种是基于802.1Q的VLAN。基于端口的VLAN不支持单端口对应多个VLAN,并且不支持跨越设备的VLAN,VLAN的最大数目是交换机所具备的端口数目,一般为16或24。支持该方式的交换机有安奈特AT-8118、金长城GES-3517M和首信ST3124。 
基于802.1Q的VLAN支持单端口对应多个VLAN,并且支持跨越设备的VLAN,VLAN的最大数目不受交换机所具备的端口数目的限制,最大可达到4096个VLAN。这样使得划分广播域更为方便、灵活,广播域成员不受空间地点的限制。支持该方式的交换机有清华紫光ES6243S、TCL S4226MF、安奈特COM8224XL、全向QS-516V、上广电InfiniteSwitch 5024,凯创VH-2402S和中兴ZXB10-S300。 
Intel Express 530T、实达Star-1924f+和神州数码DES-3624i既支持基于端口的VLAN,又支持基于802.1Q的VLAN。

继续阅读

发表在 openwrt | 标签为 , , , | 一条评论

在openwrt上实现rsync同步备份NAS数据

主路由器是X86 openwrt,SATA接口接了个250G硬盘做NAS存储。

家里一台上网本闲置,不久前拆下屏幕做了个显示器接在监控录像机上用,剩余下半身正好可以装个硬盘来做rsync热备。

同样为这个上网本编译了openwrt,整合了rsync,rsyncd,以及无线网卡驱动。有线网口作为wan,无线作为LAN

QQ截图20170106103412.jpgQQ截图20170106103424.jpg

采用主路由器推,上网本接受的方式同步。

上网本rsync设置:

# /etc/rsyncd.conf
# Minimal configuration for rsync daemon

# Next line required for init script
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
use chroot = yes
uid = nobody
gid = nobody
read only = no
charset = UTF-8

# Simple example to configure server
#[openwrt-etc]
path = /mnt/sda1
comment = OpenWrt Configuration Files
#exclude = /init.d

然后设置为开机自动启动就可以。

主路由器上运行rsync -avP –delete /mnt/sdb1/Downloads/*  root@上网本IP:/mnt/sda1/Downloads/即可进行同步。

注意:这样运行后,实际上在上网本的/mnt/sda1/下面生成的文件是主路由器/mnt/sdb1/Downloads/下面的文件,不会创建Downloads目录。

rsync -avP –delete /mnt/sdb1/*  root@192.168.2.111:/mnt/sda1/ 将主路由器/mnt/sdb1/下面的文件同步到上网本/mnt/sda1/ 下面

另:如果采用/*的文件夹参数,会导致目标文件夹不能增量删除对应文件。 解决办法

rsync -avP  –delete /mnt/sdb1/  root@192.168.2.111:/mnt/sda1/

继续阅读

发表在 openwrt | 标签为 , , | 留下评论

批量转换优酷路由宝缓存文件为flv

那些dat文件是加料的FLV文件,用WinHex找到0x46 0x4C 0x56开头,将后面保存成flv文件就可以用播放器播放了。这个是 http://blog.csdn.net/yu_yuan_1314/article/details/9358849 有关FLV文件格式的科普,有兴趣可以看一下,没兴趣跳过。 
不过不用那么复杂,因为那个头部固定1048904字节,为用这个命令搞定,举个栗子: 
dd if=/tmp/youku/mnt/tf1/youku/youkudisk/200000001F5B2D654F166E04C5D43CC17AA3BA63.dat bs=1048904 skip=1 of=/tmp/youku.flv 
ln -s /tmp/youku.flv /www/youku.flv 

然后在浏览器或者暴风影音中输入http://192.168.11.1/youku.flv,就可以播放了。 

#!/bin/sh
ls /mnt/sda1/youku/youkudisk | while read line
do
    echo $line
name=$(echo $line|cut -d "." -f1)
echo $name
dd if=/mnt/sda1/youku/youkudisk/$line bs=1048904 skip=1 of=/mnt/sda1/medias/$name.flv
done

继续阅读

发表在 openwrt | 留下评论

changeIP ddns service running on openwrt

DDNS 服务商的网站是https://www.changeip.com
wget  ‘http://nic.changeip.com/nic/update?u=wifizoo&p=12345678&hostname=wifizoo.dnset.com&iffline=1’
搞定

继续阅读

发表在 openwrt | 留下评论

批量烧写openwrt系统

OEM mass flashing

Flashing hundreds of devices using the web interface can be a real pain. You can use this shell script to automate it:

#!/bin/bash
  # Pass the firmware image file to be flashed as the first and only # command line argument. # # The second curl call will time out, but it is expected. Once the # script exits, you can unplug the ethernet cable and proceed to the # next router, but do KEEP each router ON POWER until the new image is # fully written! When flashing is done the router reboots # automatically (as shown by all the leds flashing once).
 
curl \ --user admin:admin \ --user-agent 'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:12.0) Gecko/20100101 Firefox/12.0' \ --referer 'http://192.168.1.1/userRpm/SoftwareUpgradeRpm.htm' \ --form "Filename=@$1" -F 'Upgrade=Upgrade' \
  http://192.168.1.1/incoming/Firmware.htm > /dev/null
  sleep 1
 
curl \ --max-time 2 \ --user admin:admin \ --user-agent 'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:12.0) Gecko/20100101 Firefox/12.0' \ --referer 'http://192.168.1.1/incoming/Firmware.htm' \
  http://192.168.1.1/userRpm/FirmwareUpdateTemp.htm > /dev/null

继续阅读

发表在 openwrt | 留下评论

迅雷远程下载修改最大任务数

要修改两个文件

一个是download.cfg里面的system.max_tasks

一个是etm.cfg里面的system.max_running_tasks

完了./portal一下

OK


继续阅读

发表在 openwrt | 留下评论

16M闪存版小度路由刷如意云、华硕、极路由固件教程

首先强调一下,玩这几个固件互刷需要把路由器升级为16M闪存,没有能力或者不愿拆机的朋友就不要看了。

本帖介绍了基于小度路由换Uboot和各种固件互刷的方法,提到一个抛砖引玉的作用,希望基础较为薄弱的网友从中体会到其他路由的相应做法,举一反三。

我自己的小度路由已经升级为双16M闪存,256M内存,双外置天线,引出TTL口至外壳。硬改方法及效果不在这里讨论。

固件互刷教程,包括:

1、百度路由更换UBOOT

2、百度固件刷极路由1S编程器固件

3、极路由固件回刷百度固件

4、刷如意云固件和华硕RT-N14固件

请注意:

小度路由刷如意云和华硕RT-N14时,必须用极路由1S的UBOOT

下面是教程连接,请自行下载

http://pan.baidu.com/s/1eQ7mRy6



关于闪存分区:

每家固件对闪存的分区定义是不同的,导致eeprom和固件的存放地址不一致,具体地址安排在教程内有说明。因为分区定义不同,所以Uboot也必须不一样,否则会出现无法启动或者不能正确获取eeprom等问题。

闪存分区定义主要有两种:百度路由自成一家,如意云、华硕和极路由是另外一家(定义和7620N的基本一致)。



关于Uboot:

1、uboot主要用来预处理、引导固件和刷机等操作。

2、
小度路由和极路由1S是7620A方案,如意云一代、华硕RT-N14是7620N方案,UBOOT不能互换。互刷uboot之后可能会变砖!

3、
目前7621A方案的UBOOT有两个

lintel的Uboot主要用于百度路由固件和相应的潘多拉固件,分为64M/128M/256M三种内存版本,每种版本又分57600和115200两个波特率。
但是刷如意云、华硕和极路由就不行,不能正确获取eeprom(主要是因为闪存分区定义不一样,这个在教程里有解释)

极路由1S的UBOOT只能识别128M内存,更换256M内存后也只能识别到128M,64M内存的没有尝试是否可以刷(64M内存用户请慎重)。1S的UBOOT可以刷如意云、华硕固件,具体方法参见教程。


,也许极二的Uboot也可以(应该更好,因为支持256M内存),但是暂时还没发现有人放出改Uboot或者编程器固件。估计再等一段时间就会有相关Uboot放出。请各位有兴趣的朋友仔细看教程,用心体会理解,看完教程后有疑问或者建议的,可以回帖提问;如果不仔细看教程,就不要随便问了。

继续阅读

发表在 openwrt | 留下评论

本店的开发板MT7620上OpenWRT固件编译

下载源码

首先创建一个名为openwrt的工作目录:

$ mkdir openwrt
$ cd openwrt

然后从OpenWRT的SVN服务器中取出39786这一版本的源码:

$ svn co -r 39786 svn://svn.openwrt.org/openwrt/trunk

再下载相应的patch修正ramips.sh脚本中的一个小错误:

$ cd trunk
$ wget --no-check-certificate https://raw.githubusercontent.com/WRTnode/openwrt-patches/master/R39786/wrtnode_ramips_name.patch
$ patch -p1 < wrtnode_ramips_name.patch

更新feeds

取出源码之后执行下面的命令,对OpenWRT的feeds进行更新和安装:

$ wget --no-check-certificate https://raw.githubusercontent.com/WRTnode/openwrt-patches/master/R39786/feeds.conf
$ ./scripts/feeds clean
$ ./scripts/feeds update -a
$ ./scripts/feeds install -a

这些提供的feeds.conf会从OpenWRT网站上下载指定版本的软件包,以便保证与内核和其它软件的兼容性。为了确保每次下载的软件包都是正确的版本,需要执行feeds脚本中的clean命令将之前下载的feeds配置文件删除掉,实验中发现如果多次执行update时会自动更新到最新版本,从而导致随后的编译过程出现错误。
除了OpenWRT提供的标准feeds,上述feeds.conf文件里也包括了WRTnode所需要的一些额外的软件包,这些都放在WRTnode项目的github服务器上。

配置源码

OpenWRT源码的编译过程是由源码根目录下的.config文件进行控制的,你可以使用make menuconfig命令来对最终编译出来的固件进行配置。不过刚入手的时候建议先使用WRTnode提供的标准.config文件作为开始:

$ wget --no-check-certificate https://raw.githubusercontent.com/WRTnode/openwrt-patches/master/R39786/wrtnode_standard.config
$ cp wrtnode_standard.config .config
$ make oldconfig

在执行make oldconfig命令时如果出现提示信息,一路回车用默认选项就可以。

编译固件

此时在OpenWRT源码的根目录下执行下面的命令就可以开始固件的编译了,整个编译过程所持续的时间较长,请一定耐心等待。

$ make V=s

如果一切正常,你最终可以在bin/ramips目录下找到WRTnode所需要的固件文件openwrt-ramips-mt7620n-wrtnode-squashfs-sysupgrade.bin。

继续阅读

发表在 openwrt | 留下评论

MT7620开发板上OpenWRT固件编译

下载源码

首先创建一个名为openwrt的工作目录:

$ mkdir openwrt
$ cd openwrt

然后从OpenWRT的SVN服务器中取出39786这一版本的源码:

$ svn co -r 39786 svn://svn.openwrt.org/openwrt/trunk

再下载相应的patch修正ramips.sh脚本中的一个小错误:

$ cd trunk
$ wget --no-check-certificate https://raw.githubusercontent.com/WRTnode/openwrt-patches/master/R39786/wrtnode_ramips_name.patch
$ patch -p1 < wrtnode_ramips_name.patch

更新feeds

取出源码之后执行下面的命令,对OpenWRT的feeds进行更新和安装:

$ wget --no-check-certificate https://raw.githubusercontent.com/WRTnode/openwrt-patches/master/R39786/feeds.conf
$ ./scripts/feeds clean
$ ./scripts/feeds update -a
$ ./scripts/feeds install -a

这些提供的feeds.conf会从OpenWRT网站上下载指定版本的软件包,以便保证与内核和其它软件的兼容性。为了确保每次下载的软件包都是正确的版本,需要执行feeds脚本中的clean命令将之前下载的feeds配置文件删除掉,实验中发现如果多次执行update时会自动更新到最新版本,从而导致随后的编译过程出现错误。

配置源码

OpenWRT源码的编译过程是由源码根目录下的.config文件进行控制的,你可以使用make menuconfig命令来对最终编译出来的固件进行配置。不过刚入手的时候建议先使用这里提供的标准.config文件作为开始:

$ wget --no-check-certificate https://raw.githubusercontent.com/WRTnode/openwrt-patches/master/R39786/wrtnode_standard.config
$ cp wrtnode_standard.config .config
$ make oldconfig

在执行make oldconfig命令时如果出现提示信息,一路回车用默认选项就可以。

编译固件

此时在OpenWRT源码的根目录下执行下面的命令就可以开始固件的编译了,整个编译过程所持续的时间较长,请一定耐心等待。

$ make V=s

如果一切正常,你最终可以在bin/ramips目录下找到板子所需要的固件文件openwrt-ramips-mt7620n-wrtnode-squashfs-sysupgrade.bin。

做个广告:
http://wifizoo.taobao.com|双拨多拨|脱机下载|无线网桥|无线路由|专卖店|

继续阅读

发表在 openwrt | 留下评论