1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > RT3070无线网卡AP模式——开发板实现路由功能

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

时间:2021-11-18 12:44:03

相关推荐

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

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才会出现那些不需要选的选项。

前期移植准备:

具体移植过程楼主不加说明,和之前的类似,可参考博客:

/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

libnllibnl-genllibnl-routelibnl-nf

参考:/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协议具体可参考:

/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 //检查DNS是否可用

附上一张流程图:

引用的是别人的图,我的板子默认网关应该是192.168.3.1。eth0和LAN之间为192.168.2.0

流程总结:

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

本文参考:/Edroid1530/article/details/72784383

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。