IP-Forwarding,IP转发。一种路由协议。

IP转发是操作系统的一种选项,支持主机起到路由器的功能。在一个系统中含有两块以上的网卡,并将IP转发选项打开,这样该系统就可以作为路由器进行使用了。



1、打开包转发功能:


echo "1" > /proc/sys/net/ipv4/ip_forward


2、修改/etc/sysctl.conf文件,让包转发功能在系统启动时自动生效:


# Controls IP packet forwarding


net.ipv4.ip_forward = 1


3、打开iptables的NAT功能:

iptables -F

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 136.17.172.86

或者:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE


通过动态拔号方式连接互联网的命令如下所示:ppp0是拔号网络接口别名


iptables –t nat –A POSTROUTING –d 192.168.1.0/24 –s 0/0 –o ppp0 –j MASQUERD



通过IP ROUTE工具来实现LINUX系统的路由功能

  通过动态拔号上网方式连接互联网的命令如下所示产:

  # ip route add via ppp0 dev eth0

  通过固定公网IP连接互联网的命令如下所示:

  # ip route add via 202.103.224.58 dev eth0



说明:上面的语句中eth0是连接外网或者连接Internet的网卡. 执行下面的命令,保存iptables的规则: service iptables save

==============================


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 SNAT --to 211.155.226.121

##把原地址为局域网内的数据报通过 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 \
-j DNAT --to 10.1.10.2: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 软路由性能测试及分析

本文介绍了 Linux 软路由的工作原理,并使用普通 PC 计算机作为硬件设备,在实际网络环境中测试和讨论了 Linux 软路由的性能。实验证明,在百兆以太网络环境中, Linux 软路由的数据报转发速度取决于网络卡的实际速度,并随着软路由系统的应用层服务的增加而降低。该结果为 Linux 软路由的应用和普及提供依据。


0、引言

随着开源软件的发展,越来越多的人开始了解、使用和研究 Linux。目前 Linux 环境下的软路由设计和应用案例已有很多;但是对于实际网络环境中 Linux 软路由的负载性能一直缺乏相关的实测和讨论。本文从 Linux 软路由的框架和实验两部分进行讨论,并给出结论。

1、Netfilter 框架

Netfilter 框架上是整个 Linux 软路由运作的体系,是 Linux2.4 内核处理数据报的流水操作系统。它能够运做在 IPv4、IPv6 及 Decnet 等网络栈中。Netfilter 框架的概念的提出及主要实现者是 Rusty Russell。

Netfilter 框架如图所示:

Figure xxx. Requires a heading

Figure xxx. Requires a heading

(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 的升级,这个操作将越来越精确。

5、带宽和并发连接数讨论

5.1、带宽的分配和计算

由测试结果可知,Linux 软路由 CPU 占用率极低,内存稳定。而网络传输平均速度 7.64MBps+2.77MBps=10.41MBps,最高速度 10.8MBps,较好符合表1中的网络卡的实际速度 10.7MBps。因此,百兆的网络中软路由数据报转发速度取决于网络卡速度。在网络繁忙时期,软路由的网络卡负载会很重,损耗几率也大大增加。实际使用中,某些网络卡在高负载下往往容易坏。

如果软路由为纯 NAT 应用,由于 NAT 表工作在网络层,理论上应比应用层服务 IIS 测出的网络卡实际速度要高,估计可以接近或达到网络卡理论速度的 90%,即 11.25MBps 带宽。但如果在软路由中配置高级应用服务,如 ×××,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 计算机,该数量因实际网络情况稍有不同。

参考资料

转载:

http://www.ibm.com/developerworks/cn/linux/l-cn-linuxrouter/