在基于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两项。注意,这