##把原地址为局域网内的数据报通过Linux软路由转发出去
#log-level:debug,info,notice,warn/warning,err/error,crit,alert,emerg/panic
iptables-AFORWARD-ptcp-mlimit--limit6/minute--limit-burst1-jLOG\ --log-leveldebug--log-prefix"NAT:" |
##开启日志记录功能
iptables-tnat-APREROUTING-d211.155.226.121-ptcp--dport80\
-jDNAT--to10.1.10.2:80 |
##映像HTTP协议80端口
modprobeip_nat_ftp
iptables-tnat-APREROUTING-d211.155.226.121-ptcp--dport21\ -jDNAT--to10.1.10.3:21 |
##映射FTP端口
3.2、计算机配置
表1.硬件配置
设备 |
型号 |
实际带宽约 |
100M 网络卡×2 |
DLink DFE-530TX |
10.7 MBps |
32位33MHz PCI总线 |
MSI865PE |
60.0 MBps |
7200rpm 硬盘 |
SAMSUNG SP0812C |
39.3 MBps |
400MHz 内存 |
威刚512M DDR400 |
405.8 MHz |
800MHz System Bus |
Pentium4 2.4c |
811.5 MHz |
由表1可知,网络卡的实际数据传输速度为10.7MBps,若使用两块PCI网络卡则带宽需2×10.7MBps=21.4MBps,小于32位33MHzPCI总线带宽60MBps;而计算机CPU、内存传输速度远远大于PCI总线和网络卡数据传输速度,因此理论上软路由数据报转发速度取决于网络卡速度。
4、测试结果
软路由稳定运行10天后系统性能:
内核空间CPU占用率(sy)为0.3%,空闲CPU(id)为99.7%
系统占用物理内存稳定在198M(系统启动时占用物理内存74M)
5Min内TCP连接数最大值为4120
网络卡eth0平均数据流量2.77MBps,网络卡eth1平均数据流量2.45MBps,网络负载较轻
通过网关传输文件实测平均速度约为7.64MBps,最高速度10.8MBps,较好的符合了表1中的实际带宽。这个数值约为网络卡理论速度的86.4%(网络卡理论速度为12.5MBps)
开启并使用VPN和DHCP服务10天后,测试系统性能:
内核空间CPU占用率(sy)为0.7%
系统占用物理内存稳定在297M
5Min内TCP连接数最大值为4108
网络卡eth0平均数据流量2.81MBps,网络卡eth1平均数据流量2.52MBps,网络负载较轻
通过网关传输文件实测平均速度约为7.57MBps;最高速度即10.21MBps。这个数值约为网络卡理论速度的81.68%
加载Linux软路由防火墙策略,测试系统性能:
内核空间CPU占用率0.9%
系统占用物理内存提升为在301M
通过网关传输文件实测平均速度约为7.31MBps,最高速度9.64MBps。这个数值约为网络卡理论速度的77.1%
5、带宽和并发连接数讨论
5.1、带宽的分配和计算
由测试结果可知,Linux软路由CPU占用率极低,内存稳定。而网络传输平均速度7.64MBps+2.77MBps=10.41MBps,最高速度10.8MBps,较好符合表1中的网络卡的实际速度10.7MBps。因此,百兆的网络中软路由数据报转发速度取决于网络卡速度。在网络繁忙时期,软路由的网络卡负载会很重,损耗几率也大大增加。实际使用中,某些网络卡在高负载下往往容易坏。
如果软路由为纯NAT应用,由于NAT表工作在网络层,理论上应比应用层服务IIS测出的网络卡实际速度要高,估计可以接近或达到网络卡理论速度的90%,即11.25MBps带宽。但如果在软路由中配置高级应用服务,如VPN,DHCP,HTTP等和复杂防火墙策略;那么就会占用掉有限的网络卡资源,降低软路由数据报转发速度。根据高级应用服务的数量、开销等实际情况差异,Linux软路由实际数据报转发速度大约为网络卡理论速度的70%-90%。
假如纯NAT总带宽约为11.25MBps,某时刻有200台机器共享网络,那么平均每台机器可分到带宽57.6Kbytes/sec,实际带宽由软路由根据每台PC计算机的TCP连接数量动态分配。57.6Kbytes/sec是一个比较理想的数值,因为这样的速度可以保留充足的带宽以预防P2P软件的增多和蠕虫病毒突发所带来的冲击。
5.2、局域网并发连接数计算
在Linux中运行“cat/proc/sys/net/ipv4/netfilter/ip_conntrack_max”命令可得到ip_conntrack_max值,该参数标志着Linux软路由可承受的TCP最大并发连接数,它随着计算机物理内存增加而增加,256M内存时为16384个;512M为32696;1G为65392…
在局域网任意PC计算机上运行“netstat–s”可得到该计算机的当前TCP连接数。当一台PC计算机仅为浏览网页,聊天和单线程下载檔等应用,实际TCP连接数量不会大于20个。当它运行P2P软件时,根据实际使用情况,TCP连接数约为200~400个。以200台PC计算机共享网络为例,正常情况下有15%的PC计算机正在使用P2P软件,则并发TCP连接可能会达到400×30+170×20=12190个。该数量随P2P软件使用数量和对外WEB、FTP网站流量情况而有所变化。
6、结论
软路由的CPU、内存处理速度已经远远超过网络卡和PCI总线速度;在百兆以太网中软路由数据报转发速度仅决定于网络卡的线速度。笔者曾用赛扬450MHZ的CPU,256M的旧机器架构,软路由在数据包转发性能上完全没有损失。因此Linux软路由完全可以采用更低主频率的内存和CPU的旧机器来架构。
软路由数据报转发速度与机器应用情况相关,在软路由上运行较多的高级应用服务会占据有限的网络卡资源,降低数据报转发速度。若采用文中的测试代码和计算机配置,Linux软路由能带200~300台PC计算机,该数量因实际网络情况稍有不同。