fl2440-RT3070无线网卡(AP模式)实现路由器功能

**************************************************************************************************************************************************************************************

开发板        :fl2440

CPU             : s3c2440

linux内核   :linux-3.0

交叉编译器:arm-linux-gcc

开发模块    :RT3070

****************************************************************************************************************************************************************************************

前言:上篇博文是利用RT3070无线网卡通过其STA模式实现fl2440开发板无线连接路由器上网功能,而本篇博文是通过RT3070的另外一种模式SOftAP实现fl2440开发板作为路由器功能,手机,电脑等设备能连接开发板上网。因为linux3.0以上的内核中已经含有了RT3070的通用mac80211驱动框架,所以我们只需要在linux内核中添加相应的驱动支持,利用第三方软件实现RT3070的SoftAP模式。需要用到的工具有:hostapd、udhcpd、iptables。

1.内核配置

[*] 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  --->  
make编译之后重新将内核烧录到开发板。

2.软件工具下载移植

2.1.HOSTPAD移植

   Hostapd依赖于openssl与libnl两个库。而openssl在上次已移植,则我们只需移植libnl即可。

(1)libnl移植

 libnl官方介绍:

The libnl suite is a collection of libraries providing APIs to netlink protocol based Linux kernel interfaces.

This package is known to build and work properly using an LFS-8.0 platform.

******************************************************************************************

注意:Hostapd使用的libnl库为1.x版本,2.0版本的API与1.0的并不兼容,这里移植1.1版本。

**************************************************************************************************************************

下载,解压,安装libnl,

[zoulei@CentOS tftp]$wget wget http://www.infradead.org/~tgr/libnl/files/libnl-1.1.tar.gz 
[zoulei@CentOS tftp]$tar zvxf libnl-1.1.tar.gz
[zoulei@CentOS tftp]$cd libnl-1.1
[zoulei@CentOS libnl-1.1]$ mkdir install
[zoulei@CentOS libnl-1.1]$ ./configure --prefix=`pwd`/install --host=arm-linux
[zoulei@CentOS libnl-1.1]$ make CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc
[zoulei@CentOS libnl-1.1]$ sudo make install

安装完毕后,进入本目录下的install下,将libnl.so.1拷贝到开发板/lib目录下

(2)Hostapd移植

     hostapd 是一个用户态用于AP和认证服务器的守护进程。它实现了IEEE 802.11相关的接入管理,IEEE 802.1X/WPA/WPA2/EAP 认证, 

RADIUS客户端,EAP服务器和RADIUS 认证服务器。Linux下支持的驱动有:Host AP,madwifi,基于mac80211的驱动。

arm-linux-readlf -d ./hostapd 命令查看hostapd工具所依赖的库


这就是移植libnl的原因。

下载,解压,移植hostapd

[zoulei@CentOS tftp]$ wget http://w1.fi/releases/hostapd-1.0.tar.gz 
[zoulei@CentOS tftp]$ cd hostapd-1.0
[zoulei@CentOS hostapd-1.0]$ cd hostapd/
[zoulei@CentOS hostapd]$ cp defconfig .config
[zoulei@CentOS hostapd]$vim .config

对.config文件修改:

 # Driver interface for Host AP driver
 #CONFIG_DRIVER_HOSTAP=y
 # Driver interface for drivers using the nl80211 kernel interface
    CONFIG_DRIVER_NL80211=y

修改Makefile:

[zoulei@CentOS hostapd]$vim Makefile

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

修改Makefile,追加以下字段OPENSSL_PATH,LIBNL_PATH分别是openssl,libnl的安装路径.

[zoulei@CentOS hostapd]$ makeCC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc
[zoulei@CentOS hostapd]$ sudo make install

将生成的hostapd拷到开发板/usr/bin目录下,并给予可执行权限。
3.开发板上操作
首先用网线连接开发板,网线的另一端连接路由器的LAN口。
*************************************************************************************************************************************
注意:开发板的ip地址与所连接的路由器一定要在同一网段内,这样就可以通过ssh代理远程登陆开发板了,不过这是用网线连接实现。
所以后面测试的时候不要用自己的电脑来连接fl2440开发板实现的路由器。否则ssh代理登陆开发板就会自动掉线,这时候就又得重设
开发板的ip,感觉特别麻烦,不过你也可以直接用串口来登陆开发板。
*************************************************************************************************************************************

3.1.hostapd.conf文件配置

在开发板/etc目录下创建这个文件hostapd.conf:

interface=wlan0    //网络接口名称
ssid=zoulei        //热点名称
driver=nl80211     //默认使用nl80211无线驱动
channel=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、TKIP 或两者均使用*/
3.2.启动wlan0
插上RT3070无线网卡,开发板的系统内核打印相关信息。
(1)ifconfig wlan0 up:开启无线网卡wlan0

ifconfig查看:

(2)以守护进程启动
>: /usr/bin/hostapd -B /etc/hostapd.conf 

********************************************************************************************************
注意:出现随机数问题可采用符号链接解决
>:mv /dev/random /dev/random.org
>:ln -s /dev/urandom /dev/random
********************************************************************************************************
这时候ifconfig可以发现多了一个网络接口:

此时电脑和手机已经能搜到wifi信号了,但是这时是连不上的,因为还没有给电脑的无线网卡分配IP。


3.3.DHCP
我们需要启动DHCP服务器,让手机或者电脑自动能获取IP。busybox已经集成了udhcpd。 
同样我们可以在busybox-1.20.2/examples/udhcp/ 下修改配置文件udhcpd.conf,然后拷到开发板上。也可以直接在开发板上新建,
由于我们目前只需要最基础的功能,所以选择在开发板/etc目录下新建这个文件,内容如下:
>: vi udhcpd.conf 

start 192.168.3.16
end 192.168.3.254
interface wlan0
opt dns 114.114.114.114
option subnet 255.255.255.0
opt router 192.168.3.1
启动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

连接wifi成功则打印如下信息:
udhcpd (v1.20.2) started
Sending OFFER of 192.168.3.16
Sending ACK to 192.168.3.16
*************************************************************************************************************************
注意:这时候使用手机连接Fl2440开发板实现的路由器,如果是用ssh代理连接开发板的话,最好别用电脑连接。
这个ip地址就是路由器分配给手机的,因为只有一个手机连接,故为我设置的首ip.
**************************************************************************************************************************
ping手机ip测试:


但是这时候还是不能上网的,我们还需要移植iptables。
4.iptables移植
-----------------------------------------------------------------------------------------------------------------------------------------------
介绍:iptables 是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务
器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置,
-----------------------------------------------------------------------------------------------------------------------------------------------
iptables是基于内核的防火墙,功能非常强大,iptables内置了filter,nat和mangle三张表:
Filter表: 负责过滤数据包,包括的规则链有,input,output和forward; 
Nat表: 则涉及到网络地址转换,包括的规则链有,prerouting,postrouting和output; 
Mangle表: 则主要应用在修改数据包内容上,用来做流量整形的。 
默认的规则链有:INPUT,OUTPUT,NAT,POSTROUTING,PREROUTING; 
INPUT匹配目的IP是本机的数据包,FORWARD匹配流经本机的数据包,PREROUTING用来修改目的地址用来做DNAT,
POSTROUTING用来修改源地址用来做SNAT。
4.1.iptables下载解压,移植:
[zoulei@CentOS tftp]$wgethttps://coding.net/u/sfantree/p/self_use_OSS/git/raw/master/source/iptables-1.4.12.tar.bz2
[zoulei@CentOS tftp]$tar xvjf iptables-1.4.12.tar.bz2
[zoulei@CentOS tftp]$cd iptables-1.4.12/
[zoulei@CentOS iptables-1.4.12 ]$mkdir install
[zoulei@CentOS iptables-1.4.12 ]$./configure--host=arm-linux--enable-static--disable-shared--disable-ipv6
--disable-largefile--prefix=`pwd`/install
[zoulei@CentOS iptables-1.4.12 ]$makeCC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gccCFALGS=--staticLDFLAGS=-static
[zoulei@CentOS iptables-1.4.12 ]$make install
[zoulei@CentOS iptables-1.4.12 ]$cd install
[zoulei@CentOS install ]$ls
bin include lib sbin share
[zoulei@CentOS install ]$cd sbin/
[zoulei@CentOS install ]$ls


将/install/lib文件夹的文件和xtables-multi打包放到开发板/lib和/usr/bin目录下,赋予权限后将xtables-multi重命名为iptables
4.2.iptables配置

首先要确保eth0是可用的,能上网的,因为我的开发板连上了一个路由器。

采用DHCP

ifconfig eth0 up
udhcpc -i eth0

采用静态IP设置

ifconfig eth0 up
ifconfig eth0 192.168.2.60
route add default gw 192.168.2.1
echo "nameserver 114.114.114.114" > /etc/resolv.conf
******************************************************************************************************************************************************
注意:我的开发板连接的路由器的网关是192.168.2.1,我的开发板要和所连接的路由器要在同一网段内,才是那么设置的。所以我们连接的

路由器不同,开发板的有线网卡ip也将不同。

*******************************************************************************************************************************************************

测试之后发现我的eth0有线网卡是可以上网的。

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


4.3.连接再次测试
















































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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值