分享
 
 
 

使用Linux实现Internet冗余连接

王朝system·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

随着ISP开始向用户提供高速的Internet连接,普通小型企业及计算机用户要建立自己的Web服务器、FTP服务器或者Mail服务器,就变得非常的容易。但是,如果ISP出现错误的话,我们将怎么办呢?一个最常用的解决方法就是进行另外一个ISP的冗余连接。本文将介绍使用一个Linux主机来完成Internet冗余连接,主要有以下内容:

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-cref/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.2 alphapager.org any

;; res options: init recurs defnam dnsrch

;; got answer:

;; -HEADER

;; flags: qr rd ra; QUERY: 1, ANSWER: 9, AUTHORITY: 0, ADDITIONAL: 5

;; QUERY SECTION:

;; alphapager.org, type = ANY, class = IN

;; ANSWER SECTION:

alphapager.org. 30M IN A 63.89.102.157

alphapager.org. 30M IN A 65.3.17.133

alphapager.org. 30M IN NS ns.alphapager.org.

alphapager.org. 30M IN NS ns.herdejurgen.com.

alphapager.org. 30M IN SOA proxy.alphapager.org. root.proxy.alphapager.org. (

2001031000 ; serial

3H ; refresh

1H ; retry

1W ; expiry

30M ) ; minimum

alphapager.org. 30M IN MX 10 ns.herdejurgen.com.

alphapager.org. 30M IN MX 10 ns.alphapager.org.

;; ADDITIONAL SECTION:

ns.alphapager.org. 30M IN A 63.89.102.157

ns.herdejurgen.com. 30M IN A 65.3.17.133

;; Total query time: 98 msec

;; FROM: pandora to SERVER: default -- 192.168.100.1

;; WHEN: Sat Mar 10 22:15:22 2001

;; MSG SIZE sent: 32 rcvd: 326

所有的DNS记录(除了ns.alphapager.org和ns.herdejurgen.com)现在都被解析成了两个IP地址。比如:

nslookup seann.herdejurgen.com

Server: proxy-in.alphapager.org

Address: 10.0.0.1

Name: seann.herdejurgen.com

Addresses: 65.3.17.133, 63.89.102.157

对于Apache,可以更改httpd.conf中的以下行来实现多个名字的虚拟主机:

NameVirtualHost 63.89.102.157:80

NameVirtualHost 65.3.17.133:80

Inbound LDAP and SSH traffic are distributed using round-robin DNS and require no special configuration.

启动脚本

为了支持我们的网络配置,必须对启动脚本进行一些更改。这里更改的脚本是指Red Hat的,不过我们很容易将其推广到其它的Linux发行套件。系统启动以后,ip rule命令只能被执行一次。我们可以把以下的行添加到/etc/rc.d/init.d/network脚本中来实现这一目的:

# Add non interface-specific static-rules

if [ -f /etc/sysconfig/static-rules ]; then

sh /etc/sysconfig/static-rules

fi

/etc/sysconfig/static-rules文件内容:

# Setup source IP routing rules

ip rule add from 63.89.102.157 lookup 1

ip rule add from 65.3.17.133 lookup 2

# Setup load balancing

ip route add default equalize

nexthop via 63.89.102.1 dev eth1

nexthop via 65.3.17.1 dev eth2

每一次对某个接口执行ifup后,都必须要执行ip route命令。我们可以在/etc/sysconfig/network-scripts/ifup-routes中添加以下行来实现该目

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有