fl2440模块学习——RT3070无线网卡SoftAP模式实现路由器功能

18 篇文章 1 订阅
7 篇文章 0 订阅

上一篇博文记录了fl2440添加了RT3070作为STA模式,并成功连接路由器上网。
这篇则记录第二种模式:SoftAP模式。以开发板fl2440作为一个路由器,并使自己的手机、笔记本电脑连接到这个“路由器”上网。

在这里我们会用到几个软件hostapd、udhcpd、iptables。基于内核的mac80211驱动框架来实现。

一、内核配置

这里写图片描述
这里写图片描述
make之后烧录到开发板。

把开发板用网线连接一个路由器的LAN口,接下来登陆开发板的话使用ssh来登陆。

二、软件工具移植

1、Hostapd移植

Hostapd依赖于openssl与libnl两个库。而openssl在上次已移植。
我们移植libnl库 。

官方说明:

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

Netlink is a IPC mechanism primarly between the kernel and user space processes. It was designed to be a more flexible successor to ioctl to provide mainly networking related kernel configuration and monitoring interfaces.

libnl是提供基于Linux内核的netlink协议的API的库的套件。

Netlink是内核与用户空间进程之间主要的IPC机制。它相比ioctl设计得更加灵活,并提供了关于内核配置和监视接口的主要的通信方式。

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

下载:wget http://www.infradead.org/~tgr/libnl/files/libnl-1.1.tar.gz
解压:tar zvxf libnl-1.1.tar.gz
进入libnl-1.1:

[tangbin@localhost libnl-1.1]$ mkdir install
[tangbin@localhost libnl-1.1]$ ./configure --prefix=`pwd`/install --host=arm-linux
[tangbin@localhost libnl-1.1]$ make CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc
[tangbin@localhost libnl-1.1]$ sudo make install

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

1.2移植Hostapd
hostapd 是一个用户态用于AP和认证服务器的守护进程。它实现了IEEE 802.11相关的接入管理,IEEE 802.1X/WPA/WPA2/EAP 认证, RADIUS客户端,EAP服务器和RADIUS 认证服务器。Linux下支持的驱动有:Host AP,madwifi,基于mac80211的驱动。

下载地址:wget http://w1.fi/releases/hostapd-1.0.tar.gz
下载并解压后,进入hostapd-1.0:

[tangbin@localhost wifi]$ cd hostapd-1.0
[tangbin@localhost hostapd-1.0]$ cd hostapd/
[tangbin@localhost hostapd]$ cp defconfig .config
[tangbin@localhost hostapd]$ vim .config

修改如下:
这里写图片描述

修改Makefile:
[tangbin@localhost hostapd]$ vim Makefile

 8 
  9 CFLAGS += -I../src
 10 CFLAGS += -I../src/utils
 11 
 12 CFLAGS += -I /home/tangbin/fl2440/wifi/libnl-1.1/install/include
 13 CFLAGS += -I /home/tangbin/fl2440/wifi/openssl-1.0.0s_tb/install/include
 14 LIBS += -L /home/tangbin/fl2440/wifi/libnl-1.1/install/lib
 15 LIBS += -L /home/tangbin/fl2440/wifi/openssl-1.0.0s_tb/install/lib
 16 LDFLAGS += -L /home/tangbin/fl2440/wifi/libnl-1.1/install/lib
 17 LDFLAGS += -L /home/tangbin/fl2440/wifi/openssl-1.0.0s_tb/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
 21 

(请对照好自己各个库的安装目录再修改!)

[tangbin@localhost hostapd]$ make CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc
[tangbin@localhost hostapd]$ sudo make install

这里写图片描述
将生成的hostapd拷到开发板/bin目录下,并给予可执行权限。

1.3hostapd.conf配置文件
可以将hostapd目录下的hostapd.conf修改后拷贝到开发板/etc下,也可以直接新建一个,这里选择直接新建:
在开发板/etc目录下创建这个文件hostapd.conf:

interface=wlan0 //网络接口名称
ssid=FL2440 //热点名称
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 或两者均使用*/

1.4启动wlan0
>: ifconfig wlan0 up
这里写图片描述
以守护进程启动:
>: hostapd -B hostapd.conf
出现随机数问题可采用符号链接解决:

>: mv /dev/random /dev/random.org
>: ln -s /dev/urandom /dev/random 

成功的话会打印如下信息:

>: hostapd -B hostapd.conf
Configuration file: hostapd.conf
Using interface wlan0 with hwaddr 00:12:04:24:b7:55 and ssid 'FL2440'

并且ifconfig,新增加了一个网络接口:

mon.wlan0 Link encap:UNSPEC  HWaddr 00-12-04-24-B7-55-00-00-00-00-00-00-00-00-00-00  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:169 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:39235 (38.3 KiB)  TX bytes:0 (0.0 B)

此时电脑和手机已经能搜到wifi信号了,但是这时是连不上的,因为没有IP
这里写图片描述

二、DHCP配置

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

>: cat udhcpd.conf 
start 192.168.3.20
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

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

成功会打印:

udhcpd (v1.20.2) started
Sending OFFER of 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

但是还不能上网的。
我们还需要移植iptables。

三、iptables移植

iptables简介
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。

参考:http://www.cnblogs.com/metoy/p/4320813.html

下载并解压:

wget https://coding.net/u/sfantree/p/self_use_OSS/git/raw/master/source/iptables-1.4.12.tar.bz2
tar xvjf iptables-1.4.12.tar.bz2

[tangbin@localhost wifi]$ cd iptables-1.4.12
[tangbin@localhost iptables-1.4.12]$ mkdir install

[tangbin@localhost iptables-1.4.12]$ ./configure  --host=arm-linux --enable-static --disable-shared  --disable-ipv6 --disable-largefile --prefix=`pwd`/install 
[tangbin@localhost iptables-1.4.12]$ make CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc CFALGS=--static LDFLAGS=-static

[tangbin@localhost iptables-1.4.12]$ make install

[tangbin@localhost iptables-1.4.12]$ cd install
[tangbin@localhost install]$ ls
bin  include  lib  sbin  share
[tangbin@localhost install]$ cd sbin/
[tangbin@localhost sbin]$ ls
iptables  iptables-restore  iptables-save  xtables-multi
[tangbin@localhost 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), stripped

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

首先要确保eth0是可用的,能上网的(已经连接一个路由器)。
这里写图片描述

在开发板上iptables配置 :

使用iptables命令接着配置nat转发表
/*将局域网内地址通过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 //配置好默认网关
>: udhcpd -f udhcpd.conf //启动

此时手机已经能连上wifi热点,并上网:
这里写图片描述
这里写图片描述

最后来一个流程总结:
1、确保开发板用网线和路由器LAN口相连。
2、启动网卡wlan0,ifconfig wlan0 up,设置wlan0的ip和netmask(ifconfig wlan0 192.168.3.1 netmask 255.255.255.0)
3、执行命令hostapd -B etc/hostapd.conf。
4、执行udhcpd -f etc/udhapd.conf。此时手机已经能连上,且能ping通,手机上的IP是分配的IP的第一个,即:192.168.3.20。
5、iptables配置,四条命令。
6、eth0的IP确保和连接的路由是在同一个网段的(如我的:192.168.2.200),不然连不上外网的。
7、设置默认网关:route add default gw 192.168.2.1。
8、再次执行udhcpd -f etc/udhapd.conf,此时手机能连上并能上网了。

在这一步时,如果出现
>: udhcpd -f /etc/udhcpd.conf
udhcpd (v1.20.2) started
udhcpd: max_leases=235 is too big, setting to 155
解决方法:
把start 192.168.3.100
改为
start 192.168.3.20

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值