RT3070无线网卡AP模式——开发板实现路由功能

来源:互联网 发布:看漫画软件 编辑:程序博客网 时间:2024/05/16 16:58

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  --->     

对于我的内核版本来说,需要将<> IP set support和<> IP virtual server support 先选上以后在Core Netfilter Configuration才会出现那些不需要选的选项。

前期移植准备:

具体移植过程楼主不加说明,和之前的类似,可参考博客:
http://blog.csdn.net/Edroid1530/article/details/72784383

需要移植的库,以及应用程序如下:
- Openssl库
- linbl库
- Hostapd
- iptables

1、Openssl库

1 介绍
OpenSSL是使用非常广泛的SSL的开源实现。由于其中实现了为SSL所用的各种加密算法,因此OpenSSL也是被广泛使用的加密函数库
1.1 SSL
SSL(Secure Socket Layer)安全协议是由Netscape公司首先提出,最初用在保护Navigator浏览器和Web服务器之间的HTTP通信(即HTTPS)。后来SSL协议成为传输层安全通信事实上的标准,并被IETF吸收改进为TLS(Transport Layer Security)协议。
SSL/TLS协议位于TCP协议和应用层协议之间,为传输双方提供认证、加密和完整性保护等安全服务。SSL作为一个协议框架,通信双方可以选用合适的对称算法、公钥算法、MAC算法等密码算法实现安全服务。

1.2 OpenSSL
OpenSSL是著名的SSL的开源实现,是用C语言实现的。
OpenSSL的前身是SSLeay,一个由Eric Young开发的SSL的开源实现,支持SSLv2/v3和TLSv1。
伴随着SSL协议的普及应用,OpenSSL被广泛应用在基于TCP/Socket的网络程序中,尤其是OpenSSL和Apache相结合,是很多电子商务网站服务器的典型配置。

2、libnl库

libnl 库封装了netlink socket 底层操作,提供了一系列高级API,简化了netlink编程。 libnl 包含四个主要的lib

  • libnl
  • libnl-genl
  • libnl-route
  • libnl-nf
    参考:http://www.tuicool.com/articles/j6f6z2

3、Hostapd

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

关于IEEE 802.11协议具体可参考:
http://blog.csdn.net/Peter_tang6/article/details/72850513

hostapd.conf配置文件是用来设置wifi热点信息的文件,我们可以对hostapd目录下的hostapd.conf文件进行拷贝到开发板然后进行修改。也可以在开发板/etc目录下创建hostapd.conf配置文件

interface=wlan0 //网络接口ssid=qicheng //设置SSID为qichengdriver=nl80211  //使用nl80211无线驱动channel=3   //设置wifi信道为信道3hw_mode=g   //使用80211g协议标准 , 有效的值取决于硬件,通常:a, b, gignore_broadcast_ssid=0 //禁用广播ssidauth_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 或两者均使用*/

4、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。


启动wlan0

: ifconfig wlan0 up


远程连接开发板:

 要是开发板实现路由功能,需将我们的开发板插到路由器上。然后将我们的eth0的IP地址和路由器设置子同一网段,当前连接的路由器网关为192.168.2.1

这里写图片描述

所以我们需要将开发板eth0设置在这个网段才能通过ssh远程登录开发板。我们的RT3070网卡只能一次实现一种模式,所以不能够既做路由器用,又做为设备连接互联网用,所以开发板连接到路由器必须采用有线的方式,即将网线插到路由器上,通过et0来连接
这里写图片描述


启动守护进程:

: hostapd -B hostapd.conf
这里写图片描述

你打开手机就可以发现有一个热点名为qicheng,但是现在还不能上网,因为此时还没分配IP地址。

>ifconfig

这里写图片描述


配置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.254interface wlan0opt dns 8.8.8.8option subnet 255.255.255.0opt router 192.168.3.1

IP地址分配范围是在2~254之间,开始的值最好不要太大,否则会出现问题。这里192.168.3.x是我们自己定义的,因为路由器默认网关为192.168.2.1所以我们不能再用2了,也可以设为192.168.4.x,这代表我们开发板作为路由器所在的网段。

然后设置并启动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) startedSending OFFER of 192.168.3.20 //分配给手机的IP地址为192.168.3.20Sending ACK to 192.168.3.20

此时,我们可以将手机连接到”qicheng”这个wifi,然后试着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

此时依旧不能上网,还需要用iptables工具进行相关配置。

iptable工具使用:

将上文中一直好的iptable,/install/lib文件夹下的所有库文件(所以.a或者.so)的文件到开发板/lib和将xtables-multi打包放/bin目录下,赋予可执行权限后将xtables-multi重命名为iptables。

确保开发板连接的路由器能够上网,即开发板的eth0网卡连入互联网。
然后在开发板上对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

然后可以在windons下打开cmd进行测试:

>ping 192.168.3.1         //检查网关是否可达>ping 114.114.114.114     //检查外网是否可达>ping www.baidu.com       //检查DNS是否可用

附上一张流程图:
这里写图片描述
引用的是别人的图,我的板子默认网关应该是192.168.3.1。eth0和LAN之间为192.168.2.0

流程总结:

内核配置—>工具以及库移植—>创建hostapd.conf配置文件(设置wifi信息)—>启动wlan0—>启动守护进程(可找连接wifi)—>配置DHCP(可连接并分配IP)—>iptables相关配置(手机可上网)

本文参考:http://blog.csdn.net/Edroid1530/article/details/72784383

阅读全文
0 0
原创粉丝点击