FL2440 RT3070 AP模式实现无线路由器

人生如同道路,最近的捷径通常是最坏的路——培根

前面已经完成RT3070的STA工作模式,STA驱动支持无线网卡工作在STA模式下,可以连接到网络实现无线上网功能,而在AP模式下,可以作为一个软的接入点,实现无线路由器的功能。也即可以将我们的开发板当成一个路由器来使用,只是网速太慢。

首先还是得配置我们的内核咯

export TERM=vt100
make menuconfig
[*] Networking support  ---> 
       Networking options  ---> 
            [*] Network packet filtering framework (Netfilter)  ---> 
                 [*]   Advanced netfilter configuration 
                       Core Netfilter Configuration  --->(除了下面选项外其他全选)
                           < >   SCTP protocol connection tracking support (EXPERIMENTAL)
                           < >   FTP protocol support 
                           < >   SIP protocol support 
                           < > Transparent proxying support (EXPERIMENTAL)
                           < >   set target and match support
                           < >   CHECKSUM target support
                           < >   "CT" target support
                           < >   "DSCP" and "TOS" target support
                           < >   "NOTRACK" target support
                           < >   "TRACE" target support
                  <*>   IP set support  --->
                       <*>   bitmap:ip set support
                       <*>   bitmap:ip,mac set support
                       <*>   bitmap:port set support
                       <*>   list:set set support 
                  <*>   IP virtual server support  --->(除了下面选项外其他全选)
                       [ ]   IP virtual server debugging
                       [ ]   SCTP load balancing support
                       < >   FTP protocol helper 
                    IP: Netfilter Configuration  --->(全选)
      <*>   RF switch subsystem support  --->     

这里的配置选项让人很无语,有些东西要按顺序来选择,或者编译以后才会出现相关选项,但是这些都不会影响我们,由于在配置内核的时候,本人的内核文件出了一些问题:

同名的大小写文件,大写名字的文件会被删掉了,然后大写名字相关的定义在对应的头文件也去掉了,即本来应该有xx_eed.c和xx_EED.c两个文件的,但是我的内核的xx_EED.c文件被自动删除了,然后相对应的头文件xx_eed.h和xx_EED.h中的内容也被修改了,所以编译内核报错,后来是通过将新内核源码中的文件拷贝过来才解决,后面分析了一下,可能是打补丁文件的时候搞错了,也可能是内核源码下载时丢了东西。

在查找错误过程中,因为所有配置工具都是通过读取Kconfig文件生成配置界面,这个文件是所有配置的总入口,通过追错误文件,可以找到相关的错误。

配置无线网络的工具移植

移植Openssl库

这个库在前面STA模式已经移植,这里不再赘述

移植linbl库,

libnl核心库提供了通过netlink socket连接所需要的基础函数,用于处理socket的链接和断开、数据收发、消息创建分析,提供用户可定制接收状态机,并提供一种抽象的数据类型框架,用于简化netlink 协议对象的实现。 linbl包括四个主要的lib,libnl,libnl-genl,libnl-route,libnl-nf。

下载并解压libnl库

[tangyanjun@VM_216_80_centos route]$wget http://www.infradead.org/~tgr/libnl/files/libnl-1.1.tar.gz
[tangyanjun@VM_216_80_centos route]$tar zvxf libnl-1.1.tar.gz
[tangyanjun@VM_216_80_centos route]$ls
libnl-1.1  libnl-1.1.tar.gz
[tangyanjun@VM_216_80_centos libnl-1.1]$mkdir install
[tangyanjun@VM_216_80_centos libnl-1.1]$./configure --prefix=`pwd`/install --host=arm-linux
[tangyanjun@VM_216_80_centos libnl-1.1]$make CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc
[tangyanjun@VM_216_80_centos libnl-1.1]$sudo make install
[tangyanjun@VM_216_80_centos libnl-1.1]$cd install
[tangyanjun@VM_216_80_centos install]$ls lib
libnl.so  libnl.so.1  libnl.so.1.1  pkgconfig

将libnl.so.1烧到开发板/lib目录下

移植Hostapd

hostapd 是一个用户态用于AP和认证服务器的守护进程。它实现了IEEE 802.11相关的接入管理,IEEE 802.1X/WPA/WPA2/EAP 认证, RADIUS客户端,EAP服务器和RADIUS 认证服务器。在Linux系统中,使用hostapd可以实现WIFI的无线接入热点(AP)。

下载解压

[tangyanjun@VM_216_80_centos route]$ wget http://w1.fi/releases/hostapd-1.0.tar.gz
[tangyanjun@VM_216_80_centos route]$ tar -zxvf hostapd-1.0.tar.gz
[tangyanjun@VM_216_80_centos route]$ ls
hostapd-1.0  hostapd-1.0.tar.gz
[tangyanjun@VM_216_80_centos route]$cd hostapd-1.0
[tangyanjun@VM_216_80_centos hostapd-1.0]$cd hostapd/
[tangyanjun@VM_216_80_centos hostapd]$cp defconfig .config

修改.config

23 CONFIG_DRIVER_NL80211=y

这里可能有些版本的源码默认就是y

修改Makefile,添加相关依赖库

  8 
  9 CFLAGS += -I../src
 10 CFLAGS += -I../src/utils
 11 
 12 CFLAGS += -I /home/tangyanjun/WIFI/route/libnl-1.1/install/include
 13 CFLAGS += -I /home/tangyanjun/WIFI/wifi/install/include/
 14 LIBS += -L /home/tangyanjun/WIFI/route/libnl-1.1/install/lib/
 15 LIBS += -L /home/tangyanjun/WIFI/wifi/install/lib
 16 LDFLAGS += -L /home/tangyanjun/WIFI/route/libnl-1.1/install/lib/
 17 LDFLAGS += -L /home/tangyanjun/WIFI/wifi/install/lib/
 18 
 19 # Uncomment following line and set the path to your kernel tree include
 20 # directory if your C library does not include all header files.
 21 # CFLAGS += -DUSE_KERNEL_HEADERS -I/usr/src/linux/include

这里的路径看清楚,不要搞错了

编译生成hostapd工具

make CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc   //交叉编译器路径
sudo make install

将生成的hostapd文件拷贝到开发板/user/bin下,记得给可执行权限

创建hostapd.conf配置文件

hostapd.conf配置文件是用来设置wifi热点信息的文件,我们可以对hostapd目录下的hostapd.conf文件进行配置然后拷贝到开发板,也可以直接在开发板上新建名为hostapd.conf的配置文件。由于配置文件内容本身并不多,所以我直接在开发板新建一个配置文件

~>:vi /etc/hostapd.conf
interface=wlan0 //网络接口
ssid=FL2440 //设置SSID为FL2440
driver=nl80211  //使用nl80211无线驱动
channel=3   //设置wifi信道为信道3
hw_mode=g   //使用80211g协议标准 , 有效的值取决于硬件,通常:a, b, g
ignore_broadcast_ssid=0 //禁用广播ssid
auth_algs=1 /*指定OSA认证算法, auth_algs=1 只支持 WPA2 身份验证算法。auth_algs=2 表示支持 WEP。永远不要使用有线等效加密 (wired equivalent privacy, WEP),因为它非常容易破解,并且多年前就已经被完全破解了。auth_algs=3 表示支持这两种方式。*/

wpa=3   /*指定WPA/WPA2类型, wpa=2 仅支持 WPA2。wpa=1 表示支持 WPA1,而 wpa=3 表示二者都支持。*/
wpa_key_mgmt=WPA-PSK    //指定支持的加密密钥算法
wpa_passphrase=12345678 //指定认证密钥
wpa_pairwise=TKIP   /*启用了WPA或WPA2则需要指定wpa_pairwise或rsn_pairwise。*/
rsn_pairwise=CCMP   /*wpa_pairwise 和 rsn_pairwise控制支持加密数据的密钥,可以使用 CCMP

最好还是给上可执行权限

启动wlan0

>:ifconifg wlan0 up

然后可看见wlan0已经被使能

启动守护进程

>: hostapd -B hostapd.conf 
...
/*启动hostapd成功的打印信息*/
Using interface wlan0 with hwaddr 00:12:04:24:06:93 and ssid 'FL2440'
...

这里有个版本问题,就是我们的libc.so库的问题,这个库是基本命令库,我在做的时候需要这个库,但是我的库是libc.so.0,因此将这个库拷贝一份重命名为libc.so即可,切不可直接改名,后果很惨哦。

启动成功后,ifconfig会多一个网络接口

这里写图片描述

现在通过手机或其他终端设备可以搜索到SSID为FL2440的wifi热点信号,并通过预设的秘钥12345678可以连上热点。然而此时并不能上网,因为还没有分配IP地址。

配置DHCP

为了使连上热点的中断设备能够自动获取IP,我们需要启用DHCP服务。busybox中已经集成了udhcp,我们可以直接对busybox-1.20.2/examples/udhcp/ 下的配置文件udhcpd.conf进行修改,也可以在开发板上/etc目录下新建一个名为udhcp.conf的配置文件。内容如下:

start 192.168.3.20   //指定可用的IP号
end 192.168.3.254  
interface wlan0
opt dns 8.8.8.8
option subnet 255.255.255.0
opt router 192.168.3.1    //我们模拟开发板的网关(即我们开发板成了路由器以后的IP)

然后设置并启动DHCP服务(开发板上操作以下命令)

>mkdir -p /var/lib/misc/ 
>touch /var/lib/misc/udhcpd.leases //创建租赁文件
>ifconfig wlan0 192.168.3.1 netmask 255.255.255.0 //设置接入点 
>echo "nameserver 8.8.8.8" > /etc/resolv.conf //DNS 
>udhcpd -f /etc/udhcpd.conf //启动DHCP,此时用手机连上FL2440『路由器』将打印以下信息
udhcpd (v1.20.2) started
Sending OFFER of 192.168.3.20/*分配给手机的IP地址为192.168.3.20*/
Sending ACK to 192.168.3.20

在开发板上用ping命令测试与手机的连通性

>: ping 192.168.3.20
PING 192.168.3.20 (192.168.3.20): 56 data bytes
64 bytes from 192.168.3.20: seq=0 ttl=64 time=72.368 ms
64 bytes from 192.168.3.20: seq=1 ttl=64 time=1280.778 ms
64 bytes from 192.168.3.20: seq=2 ttl=64 time=277.356 ms
64 bytes from 192.168.3.20: seq=3 ttl=64 time=74.611 ms
64 bytes from 192.168.3.20: seq=4 ttl=64 time=23.561 ms

成功返回数据,说明此时手机已经连接上『FL2440路由器』并且成功获取到IP。然而此时,依然还不能接入互联网。要使我们的『FL2440路由器』连上因特网,我们还需要移植iptables

移植iptables

iptables是功能十分强大的基于linux内核的防火墙,iptables内部集成了filter,nat,mangle三张表。

  • filter表负责过滤数据包,包括的规则链有,input,output和forward;
  • Nat表则涉及到网络地址转换,包括的规则链有,prerouting,postrouting和output;
  • Mangle表则主要应用在修改数据包内容上,用来做流量整形的。

下载并解压

[tangyanjun@VM_216_80_centos route]$wget https://coding.net/u/sfantree/p/self_use_OSS/git/raw/master/source/iptables-1.4.12.tar.bz2
[tangyanjun@VM_216_80_centos route]$tar jxvf iptables-1.4.12.tar.bz2
[tangyanjun@VM_216_80_centos route]$cd iptables-1.4.12
[tangyanjun@VM_216_80_centos iptables-1.4.12]$mkdir install
[tangyanjun@VM_216_80_centos iptables-1.4.12]$./configure  --host=arm-linux --enable-static --disable-shared  --disable-ipv6 --disable-largefile --prefix=`pwd`/install 
[tangyanjun@VM_216_80_centos iptables-1.4.12]$make CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc  CFALGS=--static LDFLAGS=-static
[tangyanjun@VM_216_80_centos iptables-1.4.12]$make install
[tangyanjun@VM_216_80_centos iptables-1.4.12]$cd install
[tangyanjun@VM_216_80_centos install]$ls
bin  include  iptab_lib.tar.bz2  lib  sbin  share
[tangyanjun@VM_216_80_centos install]$cd sbin/
[tangyanjun@VM_216_80_centos sbin]$ls
iptables  iptables-restore  iptables-save  xtables-multi
[tangyanjun@VM_216_80_centos sbin]$file *
iptables:         symbolic link to `xtables-multi'
iptables-restore: symbolic link to `xtables-multi'
iptables-save:    symbolic link to `xtables-multi'
xtables-multi:    ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), not stripped

将/install/lib文件夹的所有文件打包放入开发板/lib下,将xtables-multi放入开发板/bin目录下,给可执行权限后可将xtables-multi重命名为iptables

接下来就可以将我们的开发板用网线接入可上网的路由器,作为我们开发板的上行。注意了,我们的开发板的有线网卡是eth0,此时我的开发板接入的路由器IP为192.168.2.1。因此我们的eth0网卡应该配置为192.168.2.xx,然后方可在SecureCRT上接入eth0操作我们的开发板,因为前面已经设置我们的开发板作为路由器的IP为192.168.3.1,这里的网段切不可与我们的上行路由器和上上行路由器相同,因为我们的开发板现在是一个单独的路由器。要想永久的保存我们你的eth0网卡的IP,要在开发板这里修改:

~>:vi /etc/init.d/S01_network
ifconfig eth0 192.168.2.xxx up

这样我们的eth0的IP就永久换了

现在就在开发版上配置iptables:

/*将局域网内地址通过eth0接口伪装后转发出去*/
>:iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
/*开启转发功能,允许已建立连接及相关连接对内转发*/
>: iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISH -j ACCEPT 
/*对外转发,数据包从wlan0流向eth0*/
>: iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
/*开启内核转发*/ 
>>:echo "1" >/proc/sys/net/ipv4/ip_forward 
/*配置好默认网关 */
>: route add default gw 192.168.2.1 
 /*启动 dhcp服务*/
>: udhcpd -f udhcpd.conf

现在连接我们的“路由器”FL2440 就可以上网了,只是网速太慢!!!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值