本文介绍了 Linux 软路由的工作原理,并使用普通 PC 计算机作为硬件设备,在实际网络环境中测试和讨论了 Linux 软路由的性能。实验证明,在百兆以太网络环境中, Linux 软路由的数据报转发速度取决于网络卡的实际速度,并随着软路由系统的应用层服务的增加而降低。该结果为 Linux 软路由的应用和普及提供依据。
0、引言
随着开源软件的发展,越来越多的人开始了解、使用和研究 Linux。目前 Linux 环境下的软路由设计和应用案例已有很多;但是对于实际网络环境中 Linux 软路由的负载性能一直缺乏相关的实测和讨论。本文从 Linux 软路由的框架和实验两部分进行讨论,并给出结论。
1、Netfilter 框架
Netfilter 框架上是整个 Linux 软路由运作的体系,是 Linux2.4 内核处理数据报的流水操作系统。它能够运做在 IPv4、IPv6 及 Decnet 等网络栈中。Netfilter 框架的概念的提出及主要实现者是 Rusty Russell。
Netfilter 框架如图所示:
(1)Netfilter 为每种网络协议定义一套钩子函数,其中为 IPv4 定义了以下5个钩子函数:
[1]NF_IP_PRE_ROUTING.
[2]NF_IP_LOCAL_IN
[3]NF_IP_FORWARD
[4]NF_IP_POST_ROUTING
[5]NF_IP_LOCAL_OUT
(2)这些钩子函数在 Linux 内核的模块中注册,并与之挂接。当数据报流入框架的网络层时,内核模块在框架的钩子函数处[1]接收数据报,并对它进行检查、转发、丢弃或指示 Netfilter 将该数据报通过[2]传入用户空间队列。
(3)如果该数据报被传递给用户空间,将在应用层被异步处理。该层的用户进程(Local Process)在对数据报进行更加精细的检查,修改和装配之后,通过钩子函数[4]把它重新递交给网络层。
Netfilter 框架的数据报分流结构使它极大地降低了数据报转发的延迟,提高了数据报控制的精度;在节省系统开销,提高数据报的处理效率上超越了工作在 Windows 平台的路由软件。
2、Iptables 指令系统
如果 Netfilter 框架是一个数据报流水线,那么我们就需要有能控制流水线作业的指令系统,这个指令系统在 Linux2.4 内核及以上版本中被称为 Iptables。Iptables 的指令由表和规则组成,它直接控制着钩函数和 Linux 内核模块完成数据报的过滤、转发和修改工作。
(1)数据报过滤(Packet Filter): Iptables 中 filter 表格负责检查数据报,并根据规则决定放行或丢弃资料报,它工作在 Netfilter 框架的 Local Process 中。
(2)网络地址转换(NAT:Network Address Translation):Iptables 中的 NAT 表格实现对需要转发的数据报的源地址和目的地址的转换。NAT 表格不同于 filter 表,它只将新连接的第一个数据报遍历表格,而随后的资料报将根据第一个数据报的结果进行同样的转换处理。这使得 NAT 表能在网络层上高速的转发数据报。
(3)数据报处理(Packet Mangling):Iptables 中的 mangle 表格可以实现对数据报的修改或给资料报附上一些额外数据。随着 Iptables 的升级,这个操作将越来越精确。 3、测试代码和计算机配置
Linux 软路由的硬设备采用普通 PC 计算机,计算机的其中一块网络卡(eth0)设置为内网网关,IP 地址为10.1.10.1;另一块网络卡(eth1)设置为外网 IP ,IP 地址为211.155.226.121
3.1、Iptables 代码
iptables –F
iptables -t nat –F
iptables -t mangle –F
##清空原有 Iptables 规则。
echo "1" > /proc/sys/net/ipv4/ip_forward
##打开 Linux 内核数据报转发功能
iptables -t nat -A POSTROUTING -s 10.1.10.0/24 -j |
##把原地址为局域网内的数据报通过 Linux 软路由转发出去
#log-level:debug,info,notice,warn/warning,
err/error,crit,alert,emerg/panic
iptables -A FORWARD -p tcp -m limit --limit
6/minute --limit-burst 1 -j LOG
--log-level debug --log-prefix "NAT:"
##开启日志记录功能
iptables -t nat -A PREROUTING -d 211.155.226.121 -p tcp --dport 80 |
##映像 HTTP 协议80端口
modprobe ip_nat_ftp
iptables -t nat -A PREROUTING -d 211.155.226.121 -p tcp --dport 21
-j DNAT --to 10.1.10.3:21
##映射 FTP 端口 Linux联盟收集整理。
1 条评论:
c编程示例程序
生成调色板
发表评论