企业网中用Linux作为路由器

现在,因为使用线缆和DSL的Internet连接速度已经超过了T1(传输速率可达1.544Mb/s的通讯线路),所以这两种连接方式已经在商业领域得到了广泛的应用。对于DSL和线缆连接来说,使用Linux来做路由器,是一个非常经济的解决方案。特别是和一些高端商家(比如Cisco)的解决方案相比,这种优势尤为明显。

使用Linux路由器作为一个现有的、已经成熟的网络的一个部分,将会有一个比较特殊的问题。如果我们使用Linux服务器作为DSL或者线缆连接的NAT(网络地址转换)服务器,那么我们将可通过Linux路由器对外提供服务。但是,对于大多数已经成熟的企业网络基础构架,这种方式却不一定实用,也不一定可行。比如,如果你的公司在现有的内部HTTP和SMTP服务上已经投入了可观的资金,或者在一个HTTP服务器上使用了负载平衡以支持电脑商务交易,那么你的公司将不太可能把这些服务移植到Linux服务器上。但是,如果公司想寻找一种经济的途径来同时控制一些Internet服务,那么基于Linux的路由器将是一个很好的选择。

NAT的使用
    让我们来看一看公司的DSL/线缆连接只有一个IP地址的情况。我们如何才能把这个只有一个IP地址的流入数据包映射到内部主机呢?事实上,Linux已经把这一功能内建到了自己的内核中,所以我们只需几个免费的软件工具就可以来管理这个功能。
    在数据包流出内部网时,我们使用一个叫做IP伪装的功能来提供NAT解决办法,它可以让众多的内部网主机共享一个IP地址。而对于外部连接来说,似乎所有的得到的信息都来自同一个IP地址。在Linux里,具有NAT功能的组件是一个比较容易搞混的功能,它可以在端口级别执行入站数据包的翻译(有进也叫反向NAT或者解除伪装)。Linux路由器会监听端口80(HTTP服务使用的默认端口)的所有连接请求,并且当检测到一个连接请求时,它会自动地把数据包转发到内部网对应的主机上。
    事实上,之所以我们对反向NAT功能不太了解,是因为在主流的Linux发行版本中,一般没有包括对该功能的配置工具。一个最一般的,也是用得最广泛的用于管理这一功能的应用程序是“ipmasqadm”。要检查你是否安装了这一应用程序,你可以以系统管理员的身份登录,并在shell提示符下输入“ipmasqadm”,如果得到“Command not found”的错误信息,那么你可以从网上下载最新的RPM安装包(比如:rpmfind.net就有)。

典型的网络配置
    下图描述的是一个线缆连接中使用Linux作为路由器的典型的网络结构图。其中一个以太网端口(eth0)为线缆调制解调器提供了物理连接,另外一个端口(eth1)把路由器连接到LAN。此外,我们还可以使用第三个以太网端口eth2,虽然这不是必需的,但是使用它来提供一个独立的DMZ (demilitarized zone,即非军事区)。DMZ是放置公共信息的最佳位置,这样用户、潜在用户和外部访问者都可以直接获得他们所需的关于公司的一些信息,而不用通过内网。你公司中的机密的和私人的信息可以安全地存放在内网中,即DMZ的后面。DMZ服务器上的破坏最多只可能造成在你恢复服务器时的一段中断服务。这样通过使用独立的NIC(网卡)把服务器隔离,我们就把他们所有的活动和企业局域网其它的部分分开。一般来说,我们使用DMZ来提供更好的防火墙保护,但是不管有无DMZ,在Linux服务器上的端口转发都不会受到影响。

图1 典型的网络结构图

端口转发的配置
端口转发的功能很简单:与Sendmail、Apache响应SMTP和HTTP信息不同,我们使用“ipmasqadm portfw”来转发所有的信息。
在激活端口转发之前,要确保所有相关的内核都已加载。和端口转发服务相关的有三个模块,具体命令是(以root身分执行):

# insmod ip_masq_autofw.o
# insmod ip_masq_portfw.o
# insmod ip_masq_mfw.o

一旦运行了这些命令,Linux路由器就开始准备处理端口转发请求。来看下面的指令:

# ipmasqadm portfw -f

其中-f选项告诉Linux路由器刷新端口转发规则表。执行这个命令不是必需的,只不过如果当前的表有多余或者错误条目时,这是一个好办法。
接下来的一系列命令将建立起Linux路由器转发信息的规则。语法如下所示:

# ipmasqadm portfw -a -P PROTO -L LADDR LPORT -R RADDR RPORT [-p PREF]

其中-a参数指示这条规则应该被加入规则表中;-P PROTO参数告诉Linux路由器转发到哪一个IP地址(该选项只对TCP和UDP有效);-L参数指示要监控的IP地址和端口(默认的IP地址和Internet网卡端口);-R参数告诉路由器把数据包送到哪儿(IP地址和端口)。
在上述例子中,要路由流入的SMTP和HTTP的信息,我们使用如下指令:

# ipmasqadm portfw -a -P tcp -L 172.16.1.1 25 -R 192.168.1.1 25
# ipmasqadm portfw -a -P tcp -L 172.16.1.1 80 -R 192.168.1.2 80

第一行设置一个规则,告诉Linux路由器监听对IP地址为172.16.1.1,端口为25的连接请求。并且把这些请求路由到内部网中IP地址为192.168.1.1的电子邮件服务器的25端口上。同样,第二条规则告诉路由器监听端口80的连接请求,并将其路由到IP地址为192.168.1.2的HTTP服务器的端口80上。
好了,现在所有在端口25和80的连接请求,都会被自动地转发到应的内部网主机上了。并且,任何时候,我们都可以使用“ipmasqadm portfw -l”命令来查看正在起作用的端口转发规则:

prot localaddr rediraddr lport rport pcnt pref
TCP 172.16.1.1 192.168.1.2 80 80 10 10
TCP 172.16.1.1 192.168.1.1 25 25 10 10

-n标记告诉命令不要执行DNS查找IP地址,并且只打印出所指定数量的IP地址。

非默认端口的连接
当然,我们也可以使用Linux的端口转发能力来转发非默认的端口到默认的端口,反之亦然。比如下例:

# ipmasqadm portfw -a -P tcp -L 172.16.1.1 11011 -R 192.168.1.1 110
# ipmasqadm portfw -a -P tcp -L 172.16.1.1 80 -R 192.168.1.2 25044

以上所示的第一行告诉Linux路由器把端口11011的连接请求,转发到内部主机192.168.1.1的端口110(POP3端口)。如果内部主机是一个POP3服务器,那么这个命令将可以让远程用户使用非默认的端口连接到他们的POP3信箱。这可以阻止一些网络黑客试图使用公共端口入侵POP邮件系统。
以上所示的第二行把Linux路由器上HTTP服务器标准端口80上的请求转发到非标准端口25044上。这种情况主要是用于已经在默认端口上运行了Web服务器,但是又想让其能够响应其它非默认的端口。

负载平衡
如果公司有一个高层的电子商务站点,而同时又运行着一些Web服务器,那么就可以使用ipmasqadm portfw的 -p PREF参数来实现在这些服务器中的负载平衡。
-p的值虽然被称为首选项,事实上它实现的是一个计数器的功能。一旦Linux路由器建立起了规则所指定的相应数目的连接,它就会跳到下一个入口。
比如,现在我们来创建如下所示的端口转发规则:

# ipmasqadm portfw -a -P tcp -L 172.16.1.1 80 -R 192.168.1.2 80 -p 5
# ipmasqadm portfw -a -P tcp -L 172.16.1.1 80 -R 192.168.1.3 80 -p 25
# ipmasqadm portfw -a -P tcp -L 172.16.1.1 80 -R 192.168.1.4 80 -p 10
# ipmasqadm portfw -a -P tcp -L 172.16.1.1 80 -R 192.168.1.5 80 -p 30

上面的指令说明,首先和Linux路由器连接的5个请求,将被送到IP地址为192.18.1.2的HTTP服务器;接下去的25个连接将被送到地址为192.168.1.3的HTTP服务器;接下去的10个连接送到192.168.1.4;下30个连接送到192.168.1.5。一旦30个连接都被送到192.168.1.5以后,整个过程重新开始。
这个转发顺序的规则说明192.168.1.3 和192.168.1.5两个服务器处理连接的能力要强于192.168.1.2 和192.168.1.4。通过监测这些机器的服务器负载,网络管理员就可以调整服务器的映射参数,以使整个站点保持最佳的响应时间。
总结
在Linux里,端口转发是一个强大的功能,但是相关的文档较少。不过通过以上的学习,我们发现,其实这个功能并不难实现。现在,你不仅可以把所有流入的Internet信息转发到内部网中的对应主机上了,而且还可以使你的整个网络在信息流入和流出时共享一个IP地址,这将可以大增强内部网络的安全性。

文章录入:csh    责任编辑:csh

(0)

相关推荐

  • 用Linux打造路由器

    Linux 作为一种新近崛起的操作系统,由于其性能稳定,源码开放及价格方面的优势而逐渐被广大用户所接受.现在Linux的主要用武之地在于服务器领域,但是,经过适当的配置之后,它还可以担当互联网的物理基石--路由器这一重要角色. 路由器是通信子网中的通信节点,每个路由器都计算并维护一张路由表,并据此指导数据报前往最佳路径中的下一站,这便是所谓的路由.这样,经过互联网上所有路由器的通力合作,数据报就能够沿着一条"最佳"路径到达目的地.在 GNU 软件 Zebra 的协助下,我们可以将 Li

  • 软件路由器coyote Linux安装使用指南

    coyote Linux(北美土狼)是一款非常小巧方便的软件路由器和防火墙软件,它以一张软盘为载体,可以使用一些比较古老的机器做为代理防火墙,而它的功能却很强大,本文简要介绍一些coyote Linux的安装及配置使用. 首先到http://www.vortech.net/ 上下载coyote Linux的最新版本,到目前为止,最新版本是2.4.0.注意:其网站上提供了若干平台的制作版本,我们一般采用Windows Disk Creation Wizard v2.24.0版本,意思是在windo

  • CentOS6环境下搭建路由器的方法

    网络之间的通信主要是依靠路由器,当然生成环境中是拥有路由器的,但是系统中的路由配置也是需要了解一下地,今天讲解一下在CentOS6环境下搭建路由器,此乃入门级的简单实验.拓扑如上图已经规划好,暂且使用静态路由演示. 配置 1.如图所示先配置所有的IP地址 2.针对不同的机器配置路由 Aubin-CentOS1 route add default gw 10.0.1.1 CentOS-R1 route add -net 10.0.3.0/24 gw 10.0.2.2 route add -net

  • 企业网中用Linux作为路由器

    现在,因为使用线缆和DSL的Internet连接速度已经超过了T1(传输速率可达1.544Mb/s的通讯线路),所以这两种连接方式已经在商业领域得到了广泛的应用.对于DSL和线缆连接来说,使用Linux来做路由器,是一个非常经济的解决方案.特别是和一些高端商家(比如Cisco)的解决方案相比,这种优势尤为明显. 使用Linux路由器作为一个现有的.已经成熟的网络的一个部分,将会有一个比较特殊的问题.如果我们使用Linux服务器作为DSL或者线缆连接的NAT(网络地址转换)服务器,那么我们将可通过

  • 正确认识宽带路由器的主要参数

    随着宽带网络的逐步普及,宽带路由器已经得到越来越广泛的应用,衍生并发展了宽带路由市场,各厂家纷纷推出功能各异.名目众多的路由器产品,使大多数想要购买路由器但又缺乏基本技术的消费者无从选择,因此,我们在这里对选购宽带路由器的主要性能指标逐一进行分析解读,对广大消费者选择宽带路由器提供一个帮助. 1.处理器主频 分析: 首先,路由器的处 理器同电脑主板.交换机等产品一样,是路由器最核心的器件.处理器的好坏直接影响路由器的性能,处理能力差的处理器,路由器性能好不了,但反过来处理器好了,路由器性能却未必

  • 宽带路由器性能评判常见误区

    宽带路由器性能评判常见误区 刘敏 宽带和窄带比起来,最主要就是个"快"字,所以大家在选购宽带路由器时,非常关心其性能怎么样,通俗来说就是"快不快".于是很多人提出各种各样的证据来,证明自己的宽带路由器性能很好,很快.但许多证据往往是片面的,等你买回去发现性能不足的时候已经悔之晚矣.本文就从专业角度出发,分析几个大家经常引用又容易误导大家评判的"证据",告诉大家应该怎样客观地看待这些证据,以及怎样正确地评判一个宽带路由器的性能. 证据一:处理器主频

  • linux shell在while中用read从键盘输入的实现

    系统是ubuntu 14.04 64bit,之前曾想安装Stream来玩dota2,但最终没成功.由于Stream只有32bit,安装Stream时也安装了大量32bit的库.删除Stream后,这些库也一直没管,今天忽然心血来潮,想清理一下系统,把不必要的32bit库都干掉. dpkg -l | grep "i386"看一下,32bit库太多,一个个敲sudo apt-get purge xxx显然有点累,分析了一下输出, 格式大概如下: rc libkrb5support0:i38

  • 在linux中用同一个版本的R 同时安装 Seurat2 和 Seurat3的教程

    Seurat  作为单细胞分析中的重量级R包,有多好用用,用过的人都知道.Seurat 分析流程基本涵盖了单细胞分析中的所有常见分析方法,包括filtering,tSNE,UMAP降维及画图等.还有一个重量级功能就是矫正不同实验之间的批次效应.然而Seurat 2和Seurat 3的矫正方法完全不一样,得到的结果也不一致. Seurat 2是基于CCA (典型相关性)的,可以矫正肿瘤,外周血及癌旁组织间由于实验带来的批次效应,也能很好的矫正用不同的单细胞实验平台进行试验带来的批次效应.虽然速度慢

  • Linux中用PHP判断程序运行状态的2个方法

    有时候在服务器上面写一些脚本的时候,经常要放到crontab里面定时运行.时间长了就有一个问题,那就是程序重复运行消耗太多的资源,怎么处理呢?下面我写了两种方法: 第一种:用linux里面的正则匹配 复制代码 代码如下: function ifrun($clsname,$bf = 0){    //下面进行检测,如有一个进程正在运行,则不运行    $str=shell_exec("/bin/ps ax > /home/root/".$clsname."_run.txt

  • Linux中用rename命令批量替换文件名方法实例

    前言 在Linux系统中修改文件名可以用mv命令,但是它只能对单个文件进行操作,如要要批量执行还要写shell脚本,用for语句迭代执行,不过Linux中另外一个命令支持批量替换文件名,它是rename,rename支持正则表达式匹配. 需要注意的是:rename命令在不同的Linux发行版语法格式不一样. 语法 在Debian或者Ubuntu环境下使用的语法是: rename 's/stringx/stringy/' files 而在CentOS下或者RedHat下是: rename stri

  • linux中用shell快速安装配置Go语言的开发环境

    介绍 go1.5+版本提供编译好的安装包,我们只需要解压到相应的目录,并添加一些环境变量的配置即可. Go语言的安装步骤 下载安装包go1.7.linux-amd64.tar.gz 解压文件到指定目录: tar -zxf go1.7.linux-amd64.tar.gz 设置环境变量:GOROOT, GOPATH, PATH 既然我们可以列出这些步骤,那么便可以将整个过程自动化. 下面是安装脚本 #!/bin/bash #Upgrade go version to 1.7 #wget https

随机推荐