在 基于TCP/IP协议的网络结构中,路由器/防火墙的重要性不言而喻。作为伴随着互联网成长的操作系统,Linux在架构路由器/防火墙方面具有天然的优 势。LRP源自Linux Router Project(Linux路由器计划),其目标是要实现微内核结构的瘦服务器,用于网关/路由器/防火墙。与发行版Linux架构的路由器相比,LRP 路由器显著的优点是系统效率高、硬件成本低。本文以某具体网络拓扑结构为背景,探讨用LRP方案架构路由器/防火墙的过程及其相关问题。


从硬盘启动LRP


一 般而言,LRP软件仅用一张软盘便可容纳。其最基本的工作方式是由软盘启动,在内存中建立映像文件系统,并开始工作。系统投入运行后,不再需要该软盘。但 实践发现,由于软盘在可靠性、容量等方面的先天不足,在应用中难免会有软盘损坏或功能受限的情形发生。因此,完全可以用硬盘启动取代软盘启动。


首 先从http://lrp.steinkuehler.net下载LRP软件,软件名为dachstein-v1.0.2-1680.exe。准备两张空 白3英寸软盘,一张格式化为1.44MB,另一张则用刚下载的程序制作成1.68MB的LRP软盘,这就是从软盘启动的LRP。将新制成的软盘上除 Linux内核和ldlinux.sys以外的其它文件,复制到1.44MB软盘中,修改其中的配置文件syslinux.cfg,把软盘引导参数 “boot=/dev/fd0,msdos”改为硬盘引导参数“boot=/dev/hda1,msdos”。


为了能够从硬盘启动, 我们需要一个能够支持硬盘的系统内核linux+IDE.bin,将其从网上下载后改名为Linux。此外,还需要一个Linux引导加载程序 syslinux.com,可以从上述网站下载,也可以从http://www.kernel.org/pub/linux/utils/boot /syslinux下载最新的版本。另准备一张MSDOS启动盘,将新内核Linux和syslinux.com复制上去。


现在开始 安装LRP。为每个LRP准备一台PC机,CPU至少是486,内存12MB以上。实际选用了P5/100和16MB内存,一块IDE硬盘(容量不必太 大,10MB即可),两块网卡(10/100MB)。用DOS启动盘引导机器,执行fdisk命令,确保在硬盘上仅有一个DOS主分区(标记为 Active)。待重新引导机器后,执行如下命令:

#format c:

#syslinux -s c:

#copy linux c:"


格 式化新分区,安装Linux引导加载程序,并将内核文件Linux复制到硬盘。换上1.44MB的LRP软盘,将盘上内容全部复制到硬盘根目录下。至 此,LRP软件安装完毕。取出软盘,重启机器,LRP开始引导,待login提示符出现后,键入root,进入LRP系统。


配置网络接口


首 先考虑网卡驱动程序。LRP系统已经包含几个常用的网卡驱动程序模块,如3c509、3c59x和eepro100等,但没有包含D-Link 530TX(Rev A1/B1/B2)网卡驱动程序。可以从LRP网站下载一个与内核版本对应的530TX网卡驱动程序,名为via-rhine.o,复制到DOS软盘上。 注意,DOS文件名为8+3制,长文件名via-rhine.o最好先改短,如改成via.o。在LRP机器上,插入软盘,执行如下命令:

#mount -t msdos /dev/fd0 /mnt

#cp /mnt/via.o /lib/modules/via-rhine.o

#umount /dev/fd0


将 网络驱动模块复制到内存映像文件系统的/lib/modules目录中。注意,每次修改内存映像文件系统都需要及时备份.lrp文件,保存所做的变化。键 入lrcfg命令,选择配置选单的“Back-up ramdisk”条目,再选“modules”,备份modules.lrp即可。接着配置驱动程序,选择配置选单的第3项“Package settings”,再选“modules”,编辑/etc/modules文件(也可以在命令行键入命令edit /etc/modules),加入以下两行:

pci-scan

via-rhine


保存退出,并注意备份etc.lrp。


 


图1 校园网拓扑结构简图


图 1是一张简化的校园网拓扑结构图,其中网关1、网关2、伪网桥和防火墙都是LRP机器,两个机房通过路由器/网关接入校园网。假定机房1的网络地址为 192.168.1.0/24,网关为192.168.1.254;网关1出口端地址为192.168.0.253,默认网关为 192.168.0.254。机房2类似。注意,路由器两边都是静态IP地址。在默认设置中,LRP设定自己是外网的DHCP客户,同时又是内网的 DHCP服务器。因此,我们需要做一些改变,取消DHCP服务。执行如下命令:

#mount -t msdos /dev/hda1 /mnt

#edit /mnt/syslinux.cfg

#umount /dev/hda1


在编辑文件时删除“LRP=”中dhclient和dhcpd两项。再使用如下命令:

#edit /etc/network..conf


把其中的EXTERN_DHCP开关项改为NO。备份etc.lrp后,键入命令:

#shutdown -r now


重新启动机器。


现在来配置接口参数。选择配置选单的第1项“Network settings”,再选“Network Configuation”,编辑/etc/network.conf文件,进行如下配置:



IF_AUTO="eth0 eth1"

eth0_IPADDR=192.168.0.253

eth0_MASKLEN=24

eth0_BROADCAST=192.168.0.255

eth0_DEFAULT_GW=192.168.0.254

eth1_IPADDR=192.168.1.254

eth1_MASKLEN=24

eth1_BROADCAST=192.168.1.255




保存并备份etc.lrp。执行下面命令:

#/etc/init.d/network reload


使刚配置的接口生效。可以用ping命令来测试网络的连通性。


LRP的工作模式


LRP的一般工作模式有三种:直接路由方式、过滤式路由方式和防火墙方式。只要在/etc/network.conf文件中设置:

IPFWDING_KERNEL=YES

IPFILTER_SWITCH=none


就 构成了直接路由方式(网关)。前一项相当于做echo 1 > /proc/sys/net/ipv4/ip_forward,允许IP包转发。后一项则意味着不做包过滤。这种方式比较简单,但也带来了问题,机房中的 所有IP包将不受控制地涌向校园网络,给网络带来额外的负担。解决的方法就是加上IP包过滤,即过滤式路由方式。


同样在/etc/network.conf文件中设置:

IPFWDING_KERNEL=FILTER_ON

IPFILTER_SWITCH=router


对 流经LRP路由器的数据包进行有选择地转发。如果要对两个机房的流量集中控制,可以在出口网关和路由交换机之间增加一个“透明网桥”(不必改变它们原有的 路由关系),利用ARP代理来传递“网桥”两端路由设备的ARP消息,实现一种透明连接。通过对LRP的网络接口设置:

eth0_PROXY_ARP=YES

eth1_PROXY_ARP=YES


相当于

echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp

echo 1 > /proc/sys/net/ipv4/conf/eth1/proxy_arp


就能实现这样的连接。由于这种连接是在网络层(链路层的上一层)实现的一种伪网桥,因此可以在其上控制流经的数据包。


LRP的第三种工作模式就是防火墙。设置防火墙方式如下:

IPFWDING_KERNEL=FILTER_ON

IPFILTER_SWITCH=firewall


此外,除了要配置网络接口eth0和eth1外,还要进一步指出外网接口和内网接口:



EXTERN_IF="eth0"

EXTERN_IP= 221.xxx.xxx.1

INTERN_IF="eth1"

INTERN_NET=192.168.0.0/24

INTERN_IP=192.168.0.254

MASQ_SWITCH=YES




外部IP地址由ISP提供,内外接口的IP地址要与ethX_IPADDR中的地址一致。上面最后一项是启用IP伪装,即NAT(网络地址转换)。LRP已经安排好了一组基本的防火墙规则。当然,也可以制定自己的防火墙规则。


防火墙与DMZ


DMZ代表非军事区(Demilitarized Zone),是介于内网和外网之间的一个单独的网段,其上的服务器用来提供对外服务。DMZ是LRP防火墙的高级应用方式。


在作为防火墙的LRP机器上增加一块网卡,用于连接DMZ。配置网络接口eth2,启用DMZ:



IF_AUTO="eth0 eth1 eth2"

eth2_IPADDR=221.xxx.xxx.249

eth2_MASKLEN=29

eth2_BROADCAST=221.xxx.xxx.255

DMZ_SWITCH=YES

DMZ_IF="eth2"

DMZ_NET=221.xxx.xxx.0/29




DMZ网络使用ISP提供的一组公用IP地址。开放DMZ中的服务器:

DMZ_OPEN_DEST="tcp_${DMZ_NET}_www tcp_${DMZ_NET}_ftp"


允许外部访问WWW和FTP服务器。利用端口转发技术,LRP也支持一个独立的内部网段作为DMZ,将内部服务器用于对外服务。


远程管理LRP


配 置好的LRP机器可以放到机架上,通过SSH(Secure Shell)实施远程控制。从LRP网站下载三个文件:libz.lrp、sshd.lrp和sshkey.lrp,分别是OpenSSH的库文件、守护 程序和密钥生成器。将三个文件复制到DOS启动盘上,用DOS启动盘引导LRP机器,将三个文件复制到硬盘。取出软盘,重启机器,执行如下命令:



#mount -t msdos /dev/hda1 /mnt

#cd /mnt

#lrpkg -i libz

#lrpkg -i sshd

#lrpkg -i sshkey

#cd /

#makekey

#edit /mnt/syslinux.cfg

#umount /dev/hda1




动态安装三个文件,生成密钥。为保证下次启动时自动安装SSH,编辑/etc/syslinux.cfg文件,在“LRP=”中添加libz.lrp和sshd.lrp两项。注意,这次需要备份etc.lrp和sshd.lrp。


至 于SSH的客户端,Linux有ssh命令可以用。在Windows平台上,可以从http://www.chiark.greenend.org.uk /~sgtatham/putty取得一个支持SSH的客户端软件PuTTY。在PuTTY配置界面(如图2)中将IP地址设为 192.168.0.253,协议取SSH(端口号22),会话命名为Router01,单击Save按钮保存。单击Load按钮选取Router01会 话,单击Open按钮即可进入PuTTY终端窗口。


 


图2 PuTTY配置界面


另外,LRP有一个很小的Web服务器。在浏览器中输入LRP机器的IP地址,就能够以网页方式观察LRP机器的信息,如图3所示。


最 后,改动LRP机器的Award CMOS设置。将“标准CMOS设置”中的“Halt on”选项设为“All,But Keyboard”(忽略键盘,没有键盘照样启动)。将“电源管理设置”中的“HDD Power Down”设为15min(定时关闭硬盘电源,硬盘不再使用)。拔掉键盘和显示器,LRP机器就成为名副其实的LRP Box,可以摆上机架了。


LRP 还有许多高级应用,如均衡负载、公平队列、带宽控制、策略路由等。这些工作都是建立在iproute2和ipchains的基础之上。关于这方面的资料, 可参见《Linux Advanced Routing & Traffic Control》(Linux的高级路由和流量控制HOWTO),网址为http://lartc.org。


我们总会面临保护自己的硬件设备投资这样的问题。LRP让我们有机会从一个特别的角度来重新审视软件对于硬件及应用的作用和关系,这就是它的意义所在。