>
首页 » 技术文章 » 用uClinux中的IPtables实现IP共享器

用uClinux中的IPtables实现IP共享器

作者:■  广东工业大学自动化学院    蔡型  时间:2005-07-26 14:43  来源:本站原创

摘 要:本文阐述了Linux中IPtables的工作原理和利用其IP伪装的功能实现IP共享器的方法,并设计了一个多机共享上网的方案。
关键词:Linux;IPtables;IP共享器

IP共享器的作用和工作原理
目前广泛使用的IPv4规范中的IP地址空间几乎分配完毕。随着网络的快速发展,需要上网的计算机数目还在急速增加,让每一台想访问Internet的主机都具有一个合法IP地址是不现实的。IP共享器就是解决这种困境的一种办法。

图1 IP共享器的硬件结构框图

图2 开发板路由功能测试


当内部计算机要与外部Internet网络进行通信时,必须把私有IP地址转换成合法IP地址,这种网络地址转换技术称为NAT(Network Address Translation,网络地址转换)。
在一个实际的私有网络中,NAT功能通常内建在IP共享器、路由器和防火墙等设备内,网络中的主机将这些设备作为自己的默认网关。这样配置,每一台内部主机发送往Internet的数据就会被送到具有NAT功能的设备中进行地址转换。
NAT是IP共享器的必备功能。只需给IP共享器WAN(Wide Area Network,广域网)口分配一个合法IP地址,其余LAN(Local Area Network,局域网)口连接的主机全部使用私有IP地址,并将网关设为IP共享器的WAN口合法IP地址。这样,内部主机发出的目的地址是Internet有效IP地址的报文就会被默认路由发送到IP共享器LAN口。IP共享器对报文进行地址转换,将报文从IP共享器的WAN口发送到Internet上去。这样私有网络中多台主机就能共享一个合法IP地址,以访问Internet。
Linux IP伪装原理与实现
Linux中的IP伪装(IP masquerading)是动态NAT技术的特例。之所以称为IP伪装,是因为在一个使用合法IP地址充当IP共享器的Linux主机后面隐藏着很多使用私有IP地址的主机,充当IP共享器的Linux主机的任务就是地址转换。不论称之为NAT或IP伪装,实际上都是Linux通过对进出系统的数据包按一定过滤规则进行处理实现的。这种对数据包的过滤方案在Linux 2.4.x核心中则是IPtables。
Netfilter 组件是Linux 2.4.x内核的一部分,它由一些数据包过滤表组成,这些表包含内核用来控制数据包过滤的规则。IPtables是一种可以让用户访问内核Netfilter过滤规则和命令的工具,它使添加、修改和删除数据包过滤表中的规则变得容易。通过使用IPtables,用户可以定制自己的规则,并将这些规则存储在内核空间的数据包过滤表中。这些规则告诉内核对来自某些源地址、前往某些目的地或具有某些协议类型的数据包做些什么。如果某个数据包与规则匹配,那么允许(ACCEPT)该包通过。还可以根据规则丢弃(DROP)或阻塞(REJECT)数据包。

IP共享器硬件设计
系统硬件设计
本文设计的IP共享器开发板由图1所示各部分组成。
电源电路:输入5V,经过DC-DC变换分别给微处理器提供1.8V和3.3V的电压。
晶振电路:10MHz有源晶振经过倍频分别为ARM940T核/系统提供166/133MHz的时钟频率。
微处理器:是系统的工作和控制中心。ARM系列处理器由于具有良好的性价比,较强的软件兼容性以及支持各种开发工具等优异特性而成为网络互联设备的理想开发平台。
S3C2500微处理器是三星公司使用ARM公司ARM940T内核开发的用于网络通信、工业控制等方面的新一代网络专用微处理器。本文设计的IP共享器是针对数据流量不太大、几台至上百台机器规模的小型局域网或家庭应用环境,不需要具有核心路由器那样多的功能和那样高的报文转发量。采用ARM9系列的S3C2500芯片作为系统核心处理器,具有较高性价比。由于S3C2500内部没有MMU(Memory Management Unit,内存管理单元),所以操作系统选用mClinux。
Flash:可存放嵌入式操作系统、用户应用程序或其它在系统掉电后需要保存的数据。
SDRAM:是系统代码的运行场所。
网络端口:两个10/100Mbps速率的RJ45接口,为系统提供以太网接入的物理通道。
串口:用于S3C2500系统与其它应用系统的短距离双向串行通信。
JTAG接口:通过该接口可对系统进行调试、编程等。
系统总线扩展:引出数据总线、地址总线和必需的控制总线,便于用户根据自身的特定需求,扩展外围电路。

IP共享器软件构建
基于mClinux的应用开发环境一般由目标系统硬件和宿主PC机构成。硬件开发板用于操作系统和目标系统应用软件的运行,而操作系统内核引导、编译、应用软件的开发和调试则需要借助宿主PC机来完成。双方之间一般通过串口或网口建立连接关系。主要通过以下几个部分来构建IP共享器软件系统。
引导装载程序(BootLoader),作为可执行程序驻留在开发板上,它在开发板加电后首先被执行,对CPU、内存等主要资源进行初始化后,完成内核映象文件的装载和引导。本系统使用小巧灵活的ARMBoot作为引导装载程序。
网络驱动程序。由于本开发板主要用来实现IP共享器,所以在引导装载程序ARMBoot和mClinux中,都需要对网络驱动程序进行正确配置,以保证两个网络端口正常工作。
将mClinux移植到ARM平台上,为整个系统提供一个可运行的操作系统。开发板外围设备的驱动,嵌入式文件系统和应用程序都建立在这个操作系统上。这里重点分析mClinux中IP共享功能的配置。
mClinux中IP共享功能的配置
在通常的配置模式下,mClinux系统不具备IP共享的功能,因此,必须重新配置mClinux,对内核、文件系统和应用程序进行定制,然后重新编译。
在mClinux-Samsung目录下输入make menuconfig命令,进入内核配置。mClinux的配置主要分为两部分,前一部分是通常的Linux内核配置,后面部分是应用文件系统配置。
1. Target Platform Selection是目标平台的选择,有下面几个选项:
Vendor/Product:选择芯片,本文选择Samsung/2500;
Kernel Version:内核版本,选择linux-2.4.x;
Libc Version:选择库函数的版本,选择mClibc。mClibc是在改进mC-libc缺点的基础上形成的,比mC-libc支持更多的处理器;
[ ]Default all settings:使用默认配置文件,不选;
[*]Customize kernel settings:对内核进行定制,选中;
[*]Customize Vendor/User settings:定制厂商和库函数、用户程序设置,选中;
[ ]Update Default Vendor settings:以现有设置取代厂家默认设置,不选。
顶级配置完成后,退出并保存。因为这里选择了Customize kernel settings和Customize Vendor/User settings,下面将进入Kernel Configuration(配置所需要的内核)、文件和应用系统配置。否则将跳过该部分配置。
2. Kernel Configuration(内核定制)
[ ]Networking options:网络选项。这里配置的是网络协议。
[ ]Network device support:网络设备支持。
进入Ethernet并选中Ethernet(10/100Mbit) Samsung S3C2500 Embedded Ethernet support。
其它Block devices(块设备支持)、File system(文件系统)和Character devices(字符设备)等可根据需要选择,在此不再详述。配置完这部分以后,退出并保存,然后系统自动进入下一部分,即mClinux文件系统的配置。mClinux嵌入式操作系统的功能主要由这部分的应用程序实现。
3. mClinux的文件及应用系统配置
mClinux操作系统能否正常工作与文件系统有密切的关系。mClinux初始化的最后阶段要建立文件系统,并且要从文件系统中读取相关文件,如果读取错误,则mClinux不能运行。
IP共享器基本功能的配置
经过上述配置之后,执行make dep,make命令进行编译,如果编译没有错误,就会在mClinux-Samsung/images目录下生成mClinux映象文件image.cramfs.img,把它烧写到开发板的Flash上,然后运行。就可以看到开发板的bin目录下包含了iptable等可执行程序,在/proc/sys/net/ipv4目录下有可以实现数据包转发的ip_forward、IP伪装等路由功能的函数。虽然已经具备了实现IP共享的条件,但还必须进行一系列规则配置工作,才能使这些程序发挥作用。
还需要配置IP地址和路由,更改MAC地址,设置打开ip_forward,配置IPtables规则等。如果要求开发板一上电就执行这些功能,就必须把对IP地址、路由和包过滤规则的设置添加到开发板的/etc/rc文件中。
在mClinux-Samsung/vendors/Samsung/2500/rc中加上两条最简单的IPtables配置脚本:
1. /bin/iptables -A FORWARD -i eth0 -j ACCEPT:该命令确定接收并转发所有来自端口eth0的数据包。
2. /bin/iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth1 -j SNAT--to-source 202.116.135.135:该命令把来自源地址192.168.10.0/24子网并通过eth1出去的访问请求做NAT,把发送到外部数据包的源地址修改为202.116.135.135。在192.168.10.0/24中,24代表子网掩码掩到第24位,即255.255.255.0。

测试结果
烧写内核
首先连接好宿主机和开发板之间的串口线和网线,把它们的IP地址配置在同一网段。在windows上运行tftp程序,把编译生成的image.cramfs.img文件放在windows的C盘目录(tftp程序默认)下,开发板上电,首先运行ARMBoot,在开发板上也运行tftp程序,搜索到与作为服务器的windows上tftp的联系后,就开始往开发板下载映象文件。
下载完毕后,再用flwrite 8002000 0命令把Image文件烧写到Flash,烧写完毕之后,用fsload命令先解压到SDRAM,然后用go 40000命令运行mClinux。进入sash后,在/bin目录可以看到iptables等程序已成功编译,而ip_forward文件在/proc/sys/net/ipv4目录下。
测试及结论
如图2所示,设网卡的IP地址为192.168.10.5,子网掩码为255.255.255.0,根据前面的配置,默认网关应该是开发板上eth1的地址202.116.135.135, DNS根据网络环境添加。
则现在eth0连接的是私有网络地址,eth1连接的是合法网络地址,两个端口分别处于不同的网段上,用eth0连接的私有IP地址的计算机ping 外部网段上的机器,能够ping通,说明内部私有网络已经能够跟Internet进行数据通信。实现了最简单的IP共享功能。■

参考文献
1 um_s3c2500_rev0.pdf, S3C2500 USER'S MANUAL
2 俞时权,秦明.用Linux中的IPChains实现路由器和防火墙.计算机工程,2001.2

相关推荐

Linux将进军汽车智能系统领域

Linux  汽车智能系统  2013-07-09

Android回归Linux核心怀抱

Google  Linux  Android  2012-11-01

EXT4数据损失bug影响Linux稳定版内核

EXT4  Linux  2012-10-25

Fedora Linux 18 延期至年底

Fedora Linux 18  2012-10-17

Marvell和Tuxera推出业界最快的全功能NAS解决方案

Marvell  Linux  NAS  2012-01-19

ARM-Linux嵌入式系统的BootLoader分析与设计

嵌入式系统  Linux  2011-09-19
在线研讨会
焦点