基于嵌入式linux操作系统的无线路由器设计
2015-09-11全瑞坤王宇俊方灿黄结申晨
全瑞坤++王宇俊++方灿++黄结++申晨阳
摘要:针对目前无线路由器设计方案难以满足高速接入网用户要求和存在系统稳定性方面的不足,以嵌入式Linux操作系统为基础,提出一种新的无线路由器设计方案,能够有效地提高系统的稳定性和安全性。在该设计中,以ARM926EJS微处理器为硬件核心,以Linux操作系统为软件核心,结合RTL8188EU无线模块设计了一种无线路由器。通过搭建硬件平台,移植Linux操作系统,移植无线网卡驱动,使用开源软件包hostapd实现了无线ap功能,通过使用开源软件包dhcpd实现了dhcp功能,最后通过设置NAT实现路由转发功能。相比较专用的无线路由器硬件平台,本设计具有一定的通用性和实用性。
关键词:嵌入式;Linux操作系统;NAT;hostapd;无线路由器
中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2015)17-0032-03
Design of Wireless Router Based on Embedded Linux Operating System
QUAN Rui-kun, WANG Yu-jun, FANG Can, HUANG Jie, SHEN Chen-yang
(Department of Computer and Information Science, Southwest University, Chongqing 400715, China)
Abstract:According to the design scheme of the wireless router is difficult to meet the high-speed access network user requirements and the lack of stability of power system, the embedded Linux operating system as the foundation proposed a new wireless router design, can effectively improve system stability and security. In this design, the ARM926EJS microprocessor is the core of the hardware, the Linux operating system is the core of the software, and a wireless router is designed with the RTL8188EU wireless module. Through building the hardware platform, transplant Linux operating system, transplantation wireless network card driver, using an open source software package hostapd realizes the function of wireless AP, through the use of open source software package implements the dhcpd DHCP function. Finally, the setup NAT for routing function. Compared with the hardware platform of the wireless router, this design has a certain generality and practicability.
Key words:Embedded system; Linux operating system; NAT; hostapd; wireless router
嵌入式系统如今已被广泛地应用于众多领域,在各个领域发挥着不可替代的作用。Linux 是一种源代码开放可以自由获取的操作系统,我们可以自由的修改和使用,而不需要任何费用。它是网络上众多的黑客共同设计和开发,无数的用户参与了系统的使用和测试,所以具有很高的实用性和安全性,通过内核提供的很多机制用户可以方便地加上自己需要的功能。嵌入式 Linux 是将普通 Linux 操作系统进行裁剪修改,使之能在嵌入式系统上运行一种操作系统。嵌入式 Linux 的特点是版权费免费,源代码开发,绝代部分代码使用C语言编写,所以软件移植特别容易,另外有许多用软件支持,能够实现用户所需要的各种功能。无线路由器是用户终端接入网络的一种重要方式,相比较有线接入具有灵活性高,易于使用,环境实用性强的特点,因此无线路由器发展很快。本文设计实现一种基于嵌入式Linux操作系统的无线路由器,通过使用开源工具包hostapd和dhcpd,实现网络接入,动态主机配置协议功能,最后通过配置Linux内核NAT功能实现网络地址转换和数据转发功能。
1 总体设计
无线路由器的硬件设计,采用主芯片为ARM926EJS的嵌入式系统,ARM926EJS内核微处理器工作频率为240M左右,以太网控制芯片工作频率一般为100M,无线芯片采用瑞昱半导体的RTL8188EU,该芯片支持IEEE802.11n标准,采用OFDM复用技术,理论传输速率600Mbps,并且支持USB2.0接口,能够满足大量数据传输。
无线路由器的软件设计,使用Linux操作系统作为嵌入式操作系统,通过移植无线网卡驱动,使用hostapd实现无线ap功能,使用dhcpd实现dhcp功能,最后通过设置linux内核iptables实现NAT功能,实现了数据转发和地址转换。该系统完全使用开放源代码的系统,具有很高的安全性和稳定性。
2 Linux系统移植和编译
Linux分为用户空间和内核空间,用户通常接触到的是用户空间,通过用户空间和内核空间的转换机制访问内核空间。用户空间里包含开源的GNU C Library库,提供了操作系统的系统调用接口,还提供了用户空间应用和内核空间切换的机制。由于内核空间和用户空间的应用程序使用的地址空间不同,所以只能通过系统调用进入内核。每个用户空间的进程都使用自己的虚拟地址空间,而内核则占用单独的地址空间。
Linux内核可以进一步划分成三层。最外面是系统调用接口,由于Linux操作系统把所有设备都当做文件看待,所以会有这些基本的功能,如open,read,write,close等,这些功能都是在该层提供的;接着是内核代码,即独立于处理器的内核代码,这些代码是所支持的所有处理器体系结构所通用的,包括进程管理,进程通信,文件管理,设备管理,内存管理,网络协议等;最底层是依赖于处理器的代码,构成了通常称为 BSP(Board Support Package)的部分,这些代码仅适用于特定处理器平台,我们移植的主要工作就是该部分与处理器相关的代码。
Linux内核被划分为多个子系统,是一种宏内核结构,这与微内核的结构不同。Linux内核在内存和 CPU 使用方面具有很高的效率,并且非常稳定,能够连续数年的工作。Linux 内核的主要子系统:1)进程管理,内核通过提供接口函数来创建一个新进程(fork、exec 或 POSIX机制),停止进程(kill、exit),并在进程之间进行通信(signal 或者 POSIX机制)。2)内存管理,为了提高效率,Linux支持虚拟内存技术,即运行程序的代码,数据,堆栈的总量可以超过实际内存容量的大小,操作系统只是把使用的程序代码保留在内存中,其余的则保留在硬盘中。必要时,操作系统负责在磁盘和内存间交换程序块。3)虚拟文件系统,虚拟文件系统是操作系统提供的一个通用的接口抽象,比如 open、close、read 和 write 之类,这也是Linux把所有设备和文件都当做文件看待的一个通用接口。4)网络堆栈,Linux本身是一个网络操作系统,实现目前大多数的网络协议。Socket接口是网络子系统的编程API,提供了一套用户编程接口。Socket接口可以实现从原始帧访问到PDU数据包,再到 TCP数据包 和 UDP数据包的访问。5)设备驱动程序,Linux内核中有大量代码都在设备驱动程序中,它们能够运转特定的硬件设备。Linux 源码有一个驱动程序目录,这个目录下有各种设备的驱动,例如 usb、net、serial 等。6)依赖处理器的代码,尽管 Linux 操作系统很大部分代码独立于所运行的处理器,但是中断等操作则必须考虑所使用的处理器才能正常操作并获得更高效率,本设计中使用的是arm处理器。
我们使用交叉编译工具arm-none-linux-gnueabi-gcc搭建交叉编译环境,进入linux目录后,在命令行输入make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- menuconfig进入内核配置界面,让后保存配置为.config文件,再执行make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-,即可进入内核编译过程,编译完成后会生成vmlinuz内核镜像,至此内核移植完成。
3 hostapd编译和设置
hostapd能够在用户空间通过守护进程的方式使得无线网卡切换为master模式,模拟软件AP(通常可以认为是路由器)功能。Hostapd的实现的AP具有认证服务器的功能,负责控制管理stations(通常可以认为带无线网卡的PC)的接入和认证。通过开启hostapd守护进程可以将无线网卡切换为AP/Master模式,通过修改配置文件,可以建立一个不加密的,WEP加密,WPA或WPA2加密的无线网络,并且可以设置无线网卡的各种参数,包括频率,信号,beacon包时间间隔,是否发送beacon包,是否响应探针请求等,还可以设置基于物理mac地址过滤条件等。Hostapd在Linux操作系统上运行时是一个后台守护进程,作为后台组件来控制和管理认证功能。Hostapd支持多个前台程序,如hostapd_cli,就是一个跟hostapd一起的命令行前台程序。Hostapd是一个访问点以及EAP服务器和RADIUS 授权服务器的运行于用户空间的守护程序。它实现了IEEE 802.11接入的管理功能,是IEEE802.1X/WPA/WPA2/EAP的认证服务器,是 RADIUS client, EAP server, and RADIUS认证服务器。
我们通过使用以前搭建好的交叉编译环境arm-none-linux-gnueabi-gcc,来实现软件包的移植和安装。首先编译hostapd依赖的软件包libnl库,使用以下命令进行配置./configure –prefix=$PWD/_install –host=arm-none-linux-gnueabi,然后再执行make,make install即可编译安装libnl库;然后进入hostapd源代码目录,执行export CC=/opt/buildroot/sysroot/usr /bin/arm-none-linux-gnueabi-gcc,然后再执行make,make install完成hostapd的编译和安装。然后进入嵌入式linux根目录,然后找到/etc/hostapd.conf,使用vi编辑器修改内容如下:
interface=wlan0
ssid=test
channel=9
hw_mode=g
ignore_broadcast_ssid=0
auth_algs=1
wpa=3
wpa_passphrase=12345678
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
启动嵌入式linux操作系统,在命令行输入./hostapd /etc/hostapd.conf –B,即可实现无线ap的功能,我们使用wifi终端设备可以搜索到一个ssid为test的无线wifi。
4 dhcpd编译和配置
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个TCP/IP网络协议,传输层使用UDP协议工作,主要有两个用途:给内部网络自动分配IP地址,使网络环境中的主机动态的获得IP地址、网关地址、DNS服务器地址等信息,并能够提升地址的使用率。DHCP协议采用客户端/服务器模型,主机地址的动态分配任务由网络主机驱动。当DHCP服务器接收到来自网络主机申请地址的信息时,才会向网络主机发送相关的地址配置等信息,以实现网络主机地址信息的动态配置。Dhcpd是在Linux操作系统上实现DHCP功能的一个开源软件包,该软件包具有占用资源小,可靠性高,性能很好的特点,因此特别适合嵌入式系统使用。
我们通过修改Makefile:添加:CROSS_COMPILE=arm-none-linux-gnueabi,然后执行make,把生成的dhcpd文件下载到板子上,再执行cp samples/udhcpd.conf /etc,将dhcpd的配置文件复制到系统根文件系统当中,使用vi编辑器修改/etc/udhcpd.conf文件如下:
# The start and end of the IP lease block
start 192.168.1.20
end 192.168.1.25
# The interface that udhcpd will use
interface wlan0
#Examles
opt dns 222.201.130.30 222.201.130.33
option subnet 255.255.255.0
opt router 192.168.1.10
option dns 192.168.1.10
option domain local
option lease 864000
然后就可以在linux系统启动后,使用./dhcpd &命令开启DHCP功能,我们使用PC测试可以获取一个192.168.1.20的ip地址。
5 NAT配置
路由器可以分为核心路由器、汇聚路由器以及把个人用户接入网络的接入路由器。接入路由器能够实现网络数据包的路由、过滤功能,并且采用NAT(Network Address Translation)转换技术,把局域网内部私用有IP 地址转换成一个合法的公网IP 地址,使私有网络中多台主机共享一个合法的IP 地址访问因特网,这一项技术极大地解决了Ipv4版本协议地址不足的问题。本设计中的无线路由器使用Linux内核的iptables技术实现NAT 转换功能,实现多台主机接入并访问因特网。NAT工作原理是:客户机将NAT 主机设置为默认网关,当NAT主机收到客户机的网络数据包时,对其进行修改,将源地址替换为自己的地址,将源端口号换成一个新的端口号,并且对该过程进行记录;当接收到响应数据包时,通过查看以上过程记录,再将网络数据包进行修改,将其目的IP 地址及端口号替换为原来记录的客户机IP 地址和端口号,然后再发送给内部网络的客户机。
在本无线路由器中,我们进行以下设置:首先打开内核的IP转发功能,输入以下命令sudo bash –c “echo 1 >/proc/sys/net/ipv4/ip_forward”;然后设置实现设置NAT功能,即网络地址转换,输入以下命令:sudo iptables –t nat –A POSTROUTING –o eth0 –j MASQUERADE,至此我们就开启了linux内核的数据转发和地址转换功能,无线路由器的功能就实现了。
6 结束语
本文设计一种基于嵌入式linux的无线路由器,使用hostapd软件包实现了无线ap功能,.使用dhcpd软件包实现了dhcp功能,最后利用linux内核的iptables实现了数据转发和地址转换功能。通过实际使用,该无线路由器能够实现无线路由器的基本功能,实现安全认证接入,而且能够长时间稳定工作,具有很强的稳定性和安全性。
参考文献:
[1] 查婧,刘波,曹剑中.Linux 内核在S3C2440 上移植的方法[J]..电子器件,2009,32(4):843-845.
[2] 刘国秀,王元伟,徐建华.基于arm 的嵌入式linux 内核的剪裁与移植[J]..电子元器件应用,2009, 11(11):66-69.
[3] 王长清;张素娟;蒋景红基于以太网帧的嵌入式数据传输方案及实现[J].计算机工程与设计,2011(6)
[4] 张宏科,张思东,苏伟. 路由器原理与技术[M].北京:国防工业出版社,2005.
[5] 徐煜,杨华. 基于嵌入式Linux 系统的高速设备驱动程序实现[J].微计算机信息,2008,3-2:6-7.