1.配置主机,使其可以处理多个ISP的流入信息。
2.网络流出连接的负载平衡。
3.配置各种服务以实现冗余。
4.使用ipchains或者iptables配置防火墙。
图1描述了小型企业或家庭计算机网络的结构。在图中,Linux是作为Internet和内部局域网两个部分之间的防火墙。在本例中,网卡eth1使用的DSL,网卡eht2使用的是线缆modem。Linux主机通过和两个ISP的连接实现负载平衡,这种方法不仅仅适用于高速网络连接。同样的技术也可以用于在两个拨号连接间实现负载平衡。
图1 实现Internet冗余连接的Linux主机
在图1中测试用的主机使用的是CPU为Intel Celeron 533MHz的计算机,操作系统使用的是Red Hat 6.2,内核为2.2.18。本文所述方法在内核为 2.4.13的Red Hat 7.2中也测试通过。不过,读者在实际应用中,不一定非得使用533MHz的CPU,事实上,在本例中,用一台老的配置有32M内存的Pentium 100机器作为防火墙也完全可以。此外,本文中一些例子虽然是针对Red Hat的,不过,只需稍加修改,就可用于其它Linux发行版。
在本文中,我没有提供网卡配置、Linux内核编译以及DNS配置等内容。因为这方面的信息在网上或者书店里都有大量的资料。此外,读者也可以到http://www.linuxdoc.org去查找一些相关的资料。
配置内核
Linux内核2.2以及更高版本支持高级路由技术,它可以在一个Linux主机中实现负载平衡和多个缺省的路由。为了支持多个Internet连接,在编译时必需加入下面几个内核网络选项:
CONFIG_IP_ADVANCED_ROUTER=y
CONFIG_IP_MULTIPLE_TABLES=y
CONFIG_IP_ROUTE_MULTIPATH=y
如果要想使用新内核中的高级路由功能,那么就必需要安装ip路由工具包(在Red Hat 7.1以上版本中均带有该工具包),如果没有该工具包,可以从以下地址下载:
ftp://ftp.inr.ac.ru/ip-routing/
ip路由工具包提供了两个专门的命令:ip和tc用于实现高级的路由功能,有关ip命令的文文件可查看以下地址:
http://snafu.freedom.org/linux2.2/docs/ip-...ef/ip-cref.html
源IP路由
缺省情况下,TCP/IP数据包是通过检测目的IP地址,然后在路由表中查找一个到达目的地的路径。路由表可以通过netstat ?r command命令来查看。如果发现了一个路径,数据包就会被送到网卡,否则,数据包就会被送到缺省的网关。对于大多数直接连入Internet的主机来说,缺省网关一般是某一个ISP。在本例中,这就意味着所有向外的Internet连接都通过DSL接口。这不是一个冗余Internet连接所希望发生的。很显然,当你在系统中加入一个线缆Modem后,你并不希望由DSL连接来响应你的线缆Modem连接。
要解决这个问题,我们使用ip命令建立一个多路由表。而路由表的选择是基于流出数据包的IP地址的。这可以通过以下的命令来实现:
# Setup source IP routing rules for DSL
ip rule add from 63.89.102.157 lookup 1
ip route add 10.0.0.0/24 via 10.0.0.1 table 1
ip route add 0/0 via 63.89.102.1 table 1
# Setup source IP routing rules for cable modem
ip rule add from 65.3.17.133 lookup 2
ip route add 10.0.0.0/24 via 10.0.0.1 table 2
ip route add 0/0 via 65.3.17.1 table 2
如果一个流出的数据包的源IP地址为63.89.102.157 (DSL),那么就在路由表1中选择,它有两条路径:
> ip route list table 1
10.0.0.0/24 via 10.0.0.1 dev eth0
default via 63.89.102.1 dev eth1
第一行把本地数据流路由到内部网,第二行则捕获所有剩下的数据包并通过DSL接口将其送到ISP。线缆Modem的路由表2使用的也是同样的方法。
负载平衡
在内部网中实现流出负载平衡,使用的是CONFIG_IP_ROUTE_MULTIPATH内核选项,它可以让系统有多个默认的网关。可以使用以下命令从/etc/sysconfig/network文件中删除默认网关,然后再使用高级路由功能设置缺省网关:
# ip route add default equalize
nexthop via 63.89.102.1 dev eth1
nexthop via 65.3.17.1 dev eth2
要查看高级路由表,使用以下命令:
> ip route list
255.255.255.255 dev eth0 scope link
255.255.255.255 dev eth2 scope link
255.255.255.255 dev eth1 scope link
10.0.0.1 dev eth0 scope link
63.89.102.157 dev eth1 scope link
65.3.17.133 dev eth2 scope link
10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.1
63.89.102.0/24 dev eth1 proto kernel scope link src 63.89.102.157
65.3.17.0/24 dev eth2 proto kernel scope link src 65.3.17.133
127.0.0.0/8 dev lo scope link
default equalize
nexthop via 63.89.102.1 dev eth1 weight 1
nexthop via 65.3.17.1 dev eth2 weight 1
CONFIG_IP_ROUTE_MULTIPATH内核选项将把所有这些路径(缺省路由)等同看待,然后再根据/usr/src/linux/Documentation/Configure.help来选择其特定的方式。Ip route命令的equalize选项,会让Linux内核基于IP地址平衡外部连接。对于一个特定的IP地址,内核会选择一个接口用于传输流出的数据包,然后内核会为该IP地址在路由缓冲中建一个记录。这样,其它到达的有相同IP地址的数据包就会使用同一个接口,直到该记录从路由缓冲中删除。我们可以使用ip route list cache命令来查看路由缓冲。
配置服务
各种不同的服务(DNS、SMTP、HTTP、LDAP、SSH等) 可以通过DNS循环来实现。减少每一个DNS记录里的TTL(存活时间),让远程系统只能缓冲IP信息30分钟。这样流入的信息就会分散在两个IP地址上。对于流入的SMTP连接,在DNS中添加了两个MX记录,这样如果一个接口关闭了,电子邮件将从另外一个接口传送。
你可以使用如下所示的dig命令来检查你的DNS配置:
> dig alphapager.org any
;DiG 8.2alphapager.org any
;; res options: init recurs defnam dnsrch
;; got answer:
;; ->>HEADER
页:
[1]