fl2440实现AP功能

本文主要内容转载自https://blog.csdn.net/Edroid1530/article/details/72784383,中间有自己的心得与补充,感谢博主分享。

前些日子完成了fl2440的一些功能,现在来对其做一些整理
RT3070无线网卡有两种工作模式STA模式和softAP模式,分别由STA驱动和softAP驱动来实现,STA驱动支持无线网卡工作在STA模式下,可以连接到网络实现上网功能。而SoftAP的驱动支持无线网卡工作在softAP模式下,可以作为一个软的接入点,实现无线路由器功能。

在前面一篇博客总结了STA模式的驱动移植,使得我们的开发板能够连接到互联网实现上网功能。这里对RT3070的第二种工作模式即softAP进行一个回顾总结,使FL2440开发板实现路由器功能,其他终端设备可以连接到「 路由器」实现上网。

内核配置

 [*] 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 menuconfig选项后重新编译内核并烧录到开发板。

接下来将开发板通过网线连接到已经连入因特网的路由器,然后通过SSH远程登陆软件软件登陆到开发板。注意:必须保证PC和开发板处于同一局域网并且在用以网段内,否则登录不上开发板。

配置无线网络的工具移植

移植Openssl库

Hostapd依赖于openssl与libnl这两个库。所以首先要移植openssl与libnl,openssl在前面使能RT3070 STA模式的过程中已经移植了,这里不再重复。

移植linbl库

libnl核心库提供了通过netlink socket连接所需要的基础函数,用于处理socket的链接和断开、数据收发、消息创建分析,提供用户可定制接收状态机,并提供一种抽象的数据类型框架,用于简化netlink 协议对象的实现。 linbl包括四个主要的lib,libnl,libnl-genl,libnl-route,libnl-nf。
更多关于linbl和netlink的介绍,大家可以参考这篇博客。下面进行libnl的移植操作。

安装完成后,将libnl-1.1/install/目录下的 libnl.so.1 拷贝到开发板/lib目录下。

移植Hostapd

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

[lwn@localhost hostpad]$ wget http://w1.fi/releases/hostapd-1.0.tar.gz
[lwn@localhost hostpad]$ tar -xzvf hostapd-1.0.tar.gz
[lwn@localhost hostpad]$ ls
hostapd-1.0  hostapd-1.0.tar.gz

进入hostapd-1.0修改相关配置文件

[lwn@localhost hostapd]$ cd hostapd-1.0
[lwn@localhost hostapd-1.0]$ cd hostapd/
[lwn@localhost hostapd]$ cp defconfig .config

1.修改.config,如下截图。
[lwn@localhost hostapd]$ vim .config
这里写图片描述

2.修改Makefile,添加相关依赖库。如下截图。
[lwn@localhost hostapd]$ vim Makefile
这里写图片描述

3.编译生成hostapd工具

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

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

创建hostapd.conf配置文件

hostapd.conf配置文件是用来设置wifi热点信息的文件,我们可以对hostapd目录下的hostapd.conf文件进行配置然后拷贝到开发板,也可以直接在开发板上新建名为hostapd.conf的配置文件。由于配置文件内容本身并不多,所以我直接在开发板新建一个配置文件。
在开发板/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、TKIP 或两者均使用*/

启动wlan0

>: ifconfig wlan0 up

这里写图片描述

启动守护进程

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

启动成功会出现上面的打印信息,使用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
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

然后设置并启动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表则主要应用在修改数据包内容上,用来做流量整形的。

有关iptables更详细的介绍,可以参见这篇博客

下面开始移植iptables

下载并解压

[lwn@localhost iptables]$ wget https://coding.net/u/sfantree/p/self_use_OSS/git/raw/master/source/iptables-1.4.12.tar.bz2
[lwn@localhost iptables]$ tar -xzvf iptables-1.4.12.tar.bz2
[lwn@localhost iptables]$ cd iptables-1.4.12
[lwn@localhost iptables-1.4.12]$ mkdir install
[lwn@localhost iptables-1.4.12]$ ./configure  --host=arm-linux --enable-static --disable-shared  --disable-ipv6 --disable-largefile --prefix=`pwd`/install 
[lwn@localhost iptables-1.4.12]$ make CC=/opt/dl/buildroot-2012.08/ARM920t/usr/bin/arm-linux-gcc CFALGS=--static LDFLAGS=-static
[lwn@localhost iptables-1.4.12]$ make install
[lwn@localhost install]$ ls
bin  include  iptab_lib.tar.bz2  lib  sbin  share
[lwn@localhost install]$ cd sbin/
[lwn@localhost sbin]$ ls
iptables  iptables-restore  iptables-save  xtables-multi
[lwn@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), not stripped

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

确保开发板连接的路由器能够上网,即开发板的eth0网卡连入互联网。
然后在开发板上对iptables如下配置

/*所有去往internet的流量进行地址伪装,即将源地址改为eth0*/
>:iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
/*对内转发,数据包从eth0流向wlan0*/
>: 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路由器』上,然后可以上网了。
这里写图片描述
这里写图片描述
这里写图片描述



版权声明:本文为博主Escorpion辛苦原创,转载请注明来源,谢谢理解。 https://blog.csdn.net/Edroid1530/article/details/72784383

猜你喜欢

转载自blog.csdn.net/xn6666/article/details/80217173
今日推荐