下沙论坛

 找回密码
 注册论坛(EC通行证)

用新浪微博连接

一步搞定

QQ登录

QQ登录

下沙大学生网QQ群8(千人群)
群号:6490324 ,验证:下沙大学生网。
用手机发布本地信息严禁群发,各种宣传贴请发表在下沙信息版块有问必答,欢迎提问 提升会员等级,助你宣传
新会员必读 大学生的论坛下沙新生必读下沙币获得方法及使用
查看: 3663|回复: 2
打印 上一主题 下一主题

用LINUX打造路由器

[复制链接]
  • TA的每日心情
    无聊
    2015-1-16 14:36
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    跳转到指定楼层
    1
    发表于 2003-8-14 23:12:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    用LINUX打造路由器 . s5 x' v+ H; I$ I韩波 (hbzzx2001@yahoo.com.cn)自由撰稿人 $ l# m9 o# `9 r5 q2003 年 2 月 6 X3 F; T' ^# L2 K8 @7 T& |7 k8 XLinux 作为一种新近崛起的操作系统,由于其性能稳定,源码开放及价格方面的优势而逐渐被广大用户所接受。现在Linux的主要用武之地在于服务器领域,但是,经过适当的配置之后,它还可以担当互联网的物理基石--路由器这一重要角色。- K- o: g3 W. d) G5 r# A; X3 l 路由器是通信子网中的通信节点,每个路由器都计算并维护一张路由表,并据此指导数据报前往最佳路径中的下一站,这便是所谓的路由。这样,经过互联网上所有路由器的通力合作,数据报就能够沿着一条"最佳"路径到达目的地。在 GNU 软件 Zebra 的协助下,我们可以将 Linux 机器打造成一台功能完备的路由器,它能够同时支持 RIPv1、 RIPv2、RIPng、OSPFv2、OSPFv3、BGP - 4 和 BGP - 4+ 等诸多 TCP/IP 协议。现在我们首先了解一下 OSPF 和 BGP 协议的运行模式和基本原理,然后介绍 Zebra 的安装配置方法,让你的 Linux 机器变成支持 OSPF 与 BGP 的路由器。" d' r% q9 `; a H: Q BGP/OSPF 概述 * B0 E- y( U+ y4 p1 z* s+ Y) \如今,许多公司都建有多个网络,如果这些网络的类型不尽相同,则需要用路由器进行互联。路由器是与两个或两个以上的网络连接的计算机,它根据路由协议生成并维护一个路由表,并按照该路由表中的信息转发包。这些路由器对公司内部的网络结构了如指掌,知道将分组送到目的地的全部细节,但对于其他公司的网络结构并不了解。像这样"在同一机构下管理的一系列路由器和网络"被称为自治系统(AS)。由不同机构掌管的自治系统,可以采用不同的路由选择算法;但同一自治系统内的所有路由器都使用同一路由协议,以便于自治系统内部各个路由器互换路由信息来维持相互的连通性。每一个自治系统都有一个16位的"自治系统(AS)编号"作为标志,就像 IP 地址一样,它是由专门机构来分配的。 " W6 q7 ^$ m# b: i# ^9 N( u: q9 B自治系统内的路由器称为"内部网关",所用的协议称为"内部网关协议"。内部网关协议大体上分为两类,一类是距离向量协议,如 RIP,EIGRP 协议;另一类是链路状态协议如 OSPF 协议。链路状态路由协议与距离向量协议的不同之处在于,采用链路状态路由协议的路由器不是交换到达目的地的距离,而是维护一张网络拓扑结构图。然后用数据库表示该图,其中的表项对应网络的一条链路。路由器根据数据库的信息计算出"最佳路由",由此指导包的转发。当网络拓扑结构发生变化时,只需将相应纪录而非整个数据库通知其他节点。各路由器做出相应修改并重新计算路由后,就可以继续正常工作。 ^# e4 F4 Y0 \3 A. H2 K+ f8 \& s 因为"开放式最短路径优先协议"的文档必须公开发表,所以它是"开放式的"(Open);又因为它采用"最短路径优先"(SPF)算法来计算一个节点到所有其它节点间的最短路径,故名为 OSPF。OSPF 具有支持多重度量制式和多重路径等诸多优点,因此成为因特网上推荐使用的内部网关协议,RIP 却由于自身的局限性而被打入冷宫。现在,在性能上唯一能够与 OSPF 相匹敌的内部网关协议便是 EIGRP--Cisco 的一个专有协议,但 OSPF 的"开放"本身就是一个响亮的招牌,因为谁也不想受制于某家供应商。. G5 Y9 D6 y2 y" f- ^ 前面提到,自治系统内的路由器不必知道其他自治系统的内部结构细节,从而有效地节约了路由器的内存和 CPU 时间,并提高了网络带宽的利用率。但是,如果想与其他公司(自治系统)通信时该怎么办呢?很简单,我们可以在自治系统内指定一个与其他自治系统相连的路由器为"外部网关",通过它进入其他自治系统。该路由器使用的协议叫做"外部网关协议",如边界网关协议(BGP)。相邻的两个网关必须首先互换"邻机探测"报文,协商是否愿意成为"邻机"。成为邻机则意味着两个自治系统同意中转双方的通信流。同意后,两个邻机互换"邻机可达性报文",来监督他们之间的链路的工作情况。接下来便是最重要的工作,用"网络可达性报文"来交换通过各邻机所能到达的网络的信息,从而实现自治系统之间的连通性。在外部网关的眼里只由外部网关和连接他们的链路,如此以来,自治系统内的通信由内部网关处理,自治系统之间的通信交由外部网关处理--一个分级路由的景象已经展现在我们面前,实际上,因特网正是由大量自治系统组成的。 8 v. m' C# d/ ^ F' J建立一个高级路由器, A- [3 ^; C8 k 许多人对路由器感到比较陌生,事实上作为一个防火墙使用的 Linux 系统已经是一个路由器了,只不过还有点"简陋"而已。然而,我们的目标是用 Linux 打造一个"高级"路由器,它必须能够利用动态路由协议(上文提到的协议皆为动态路由协议)工作。这些协议能够使路由器互换相关信息,从而共享穿越网络时所用的那些路径--路由。这一点对于大型网络(比如 Internet)而言是"异常"重要的,因为此时再用静态路由(也就是人工计算设置路由)是根本不现实的。 . k9 V* U2 a/ }4 M6 q举例来说,即使在比较理想--即不考虑路由的变化的情况下,一个边界网关协议(BGP)路由表也至少包含 100,000 条以上的表项。这时,手工建立这样的静态路由是难以忍受的。很明显,即使我们的网络小于 Internet--比如一个大型公司网络,我们还是更加喜欢动态路由协议。 ' {4 J- a+ b* O) a外部网关协议 BGP 通常作为 Internet 的骨干使用,而其它的协议(如 OSPF)则适于小型的互连网络。开放式最短路径优先(OSPF)协议是一个应用最广的内部网关协议(IGP)。Zebra 是一个开放源代码程序包,通过它你可以在 Linux 上运行 BGP 与 / 或 OSPF。 & {6 _( y# U: y安装 Zebra . I" \( T6 J1 Q& w1 A5 Q% W2 j: l你既可以从 Zebra.org 网站下载 Zebra 的最新源程序,也能从 Redhat 和 Debian 中获得它,但不一定是最新版的。从源代码中进行软件安装,你就会发现使用的是一些普通的安装过程。简介如下: 3 D& I3 Q, \7 D# F( K! K- W9 X2 k5 S./configure 3 c& B+ P! D3 w- M3 D1 U. Smake: e) a, t0 Z4 r# n3 D( n( U make install$ Z; l' P7 W' E7 I. O7 u 配置脚本会搜索系统上已经安装的 IP 栈并且自动地设置成支持他们。当前,IP 栈很可能仅仅是指 IPv4,但是 IPv6 用户也不用担心,因为 Zebra 也会发现并且支持它。 0 i2 _0 x5 N3 l$ E j# O1 b程序安装之后,还可能必须在 /etc/services 中增加一些命令行。Zebra 的守护程序在他们自己的虚拟终端连接(VTY)下运行,所以你的系统必须知道这些虚拟终端连接。这里是你应该增加的一些连接∶2 `: E1 B3 s: Z9 {8 l q# _' e U zebrasrv 2600/tcp # zebra service' W: e* E& D1 _ zebra 2601/tcp # zebra vty5 i H, ]# N" E: Y$ w. ~ ripd 2602/tcp # RIPd vty @$ E, M/ j7 L# w6 K ripngd 2603/tcp # RIPngd vty* T" S: B% W! o$ C# _/ a8 p3 ] m ospfd 2604/tcp # OSPFd vty* j' a \/ c3 }5 i. b5 a bgpd 2605/tcp # BGPd vty & g" K7 O8 t& k, E p7 L- Aospf6d 2606/tcp # OSPF6d vty7 e/ V2 H( P6 i% F 配置 Zebra, `& f, X0 z! f% q$ T 如果你已经熟悉 Cisco IOS,那你就能在短时间内掌握 Zebra,因为你会发现两者极为相似。Zebra 的每个守护程序使用一个单独的 VTY,这些 VTY 可以通过一个远程登录会话进行动态配置。所以,如果你需要设置 OSPF,简单地远程登录到该 Linux 上 2604 端口;为了修改内核的路由表或设置路由协议间的再分发,你可以远程登录到端口 2601,该 Zebra 守护程序充当内核管理器,管理其他的守护程序和系统本身之间的通信。 ) f/ F z7 h* Z, _, P% x+ E C现在介绍如何在一个服务器上创建和运行 OSPF 和 BGP。Zebra 的守护程序运用纯文本文件储存它们的配置。对于 OSPF/BGP 路由器,将用到三个文件∶zebra.conf、ospfd.conf 和 bgpd.conf。举例来说,zebra.conf 文件可能会是这样:& G( a; v2 \3 y& D+ k$ {3 T- e ! Zebra configuration saved from vty7 o* g' R1 Q) e. K. U! _0 q ! 2002/02/28 01:46:12 G8 n1 ~0 a b3 E- i' H!2 B5 [% k/ x: w* n. Q8 a hostname LinuxRouter /*主机名为 LinuxRouter*/ - E9 V+ b* I" J P% Q: D- r* a& epassword zebra /*口令为 zebra*/$ b7 v8 a* N k% k# {7 m/ s! c: z enable password z3bRa /*进入特权模式时的口令为 z3bRa */* e# b/ d* D# N$ u5 a log file /var/log/zebra/zebra.log /*日志文件的地址*/ 2 p0 `! V. W7 b+ I! _# o6 a" c! - y5 \% ^" J; k) ointerface eth0 /*以太接口 eth0*/' Q2 m' j; ?" ^ description Interface to External Network/*对接口的描述*/; T# V' S+ Q8 ~$ i o. R ip address 10.0.0.1/24 /*该接口的 IP 地址*/ # Z3 k; ^4 n- W1 P' E; D3 F( X0 j!* @/ i% _* [6 ~ P: }' m& | interface eth1/*以太接口 eth0*/- X) }0 H6 w j# Y& O* o7 S* H6 i description Interface to Internal Network/*对接口的描述*/8 y8 e" u# }; u$ m4 E2 [ ip address 192.168.66.1/24/*该接口的 IP 地址*/ 3 V: V k1 J/ A ! R' B5 U5 ~- v7 m% [这里的感叹号充当注解标识或分隔符。尽管存在大量不同的网络接口类型(Ethernet、ISDN 等等),但只要是 Linux 内核能够辨认的网络接口类型,Zebra 都可以使用。 ( g: ~# I. K* [子网掩码都带有网络位的位数(例如/24),默认掩码则不然(比如 255.255.255.0)。注意存在两个口令,一个用于用户模式而另一个用于特权模式。这不仅有利于向非管理员提供访问权限,而且对于创建路由服务器或者路由探测镜也是非常重要的。所有 BGP 管理员都知道,这些探测镜是调试路由问题的关键,因为他们能够使你就象从一个外部 AS( AS代表自治系统)一样查看路由。 BGP 路由需要用到 AS 编号,AS 编号是一些由 ARIN (美国互联网络号码注册机构)控制的注册号码。 ; l$ ~1 s3 n4 q6 R7 v) V下一步将启动一些必要的程序。用以下命令完成∶& {! a ^1 D+ \0 K /usr/sbin/zebra -dk , S' v3 B8 K4 W4 R/usr/sbin/ospfd -d ; P, h9 I0 b; `) G) d$ Y3 J! |/usr/sbin/bgpd -d 5 O% ^7 C5 M; ^6 w第一个命令,启动 zebra,该守护程序实际上用来更新内核的路由表。-dk 告诉该程序作为一个守护程序运行(d),它的大部分时间在后台运行。k 是另外的一个选项,告诉 Zebra 维护所有已配置的路由。它用来保证在你测试 Zebra 的时候不会意外地删除路由表。一般情况下,设置路由和接口,需要将 ifconfig 和 route 这两个命令配合使用。而 Zebra 完全可以替代这种路由管理方式,使用起来更为简洁。 ) N5 N. m. k \& V设置OSPF5 {: N& f* {9 r3 z# W. U% B3 g4 E) Y 至此,基本的服务已经具备,现在让我们 Telnet 到本地机器的 2604 端口,开始配置 OSPF。为进入特权模式,键入 enable (正如在Cisco IOS 中一样),然后键入特权模式口令。接下来,用 configuration terminal 命令切换到配置模式。值得一提的是 Zebra 也能接受命令缩写形式,这与 Cisco 极为相似,如 configuration terminal 可以简写为 config t,这大大缩短了输入时间,使用起来更为方便。另外,如果输入 list 和 ?,它将显示一个当前可用命令的清单,并附有一些简略解释。除此之外,还可以键入 tab 用于命令的自动完成。这就是说,如果你想键入命令 clock,只要键入前两个字母 cl 然后按 tab 键,机器就会自动"补全"这条命令--前提是你键入的字符足以唯一地确定这条命令。这是一个很好的功能,尤其是当你习惯于这种用法时。 ' O# s, A7 R* \4 G% J接下来,我们还需要告诉守护程序将通过 OSPF 广播哪些网络以及相关的域(area)。OSPF 的可伸缩性允许它支持多个域。键入 router ospf 开始配置 OSPF,然后键入 network 192.168.66.0/24 area 0。这告诉路由器,我们将使用 OSPF 广播一个子网掩码为 255.255.255.0 的 192.168.66.0 网络。 9 T5 p% y& r& n& f' o6 Z在本例中,我们让 eth0 接口变成一个被动(passive)接口,以便使它不能发送路由更新。这对于实验是非常重要的,因为在那个方向上的其他的路由器可能监听到发送的路由更新,将接口变成一个被动(passive)接口,从而有效的避免扰乱网络的正常运行。为此,键入命令 passive - interface eth0。如果打算将此路由器作为工作路由器使用时,就没有这个必要了。一旦你完成修改,用 end 命令从配置模式中退出,然后用 write file 命令保存。这里是一个快照:- m2 T6 s. E$ L& E3 h i labrat:~# telnet 0 2604 /*Telnet 到本地机器的 2604 端口*/ , k; a' M/ {9 ?Trying 0.0.0.0...5 j% @# z0 E% r2 ` Connected to 0.6 |/ n1 [6 m) ?- P4 E Escape character is '^]'. /*用 '^]'退出该会话*/ 2 ?/ M6 k5 P4 N- E% _ ' K8 R6 K+ W CHello, this is zebra (version 0.84b)+ R# L4 J6 q5 ~* e* K/ b) E0 u- j" K* r Copyright 1996-2000 Kunihiro Ishiguro& q9 k5 X6 n$ \& `" e . K+ Y2 x3 R% R+ U User Access Verification6 j5 [6 r: m' ~# k- l ' H& r% `; s( O- l0 @9 W) qPassword: /*在此键入口令,如 zebra*/9 c& z9 \' ^; c( l9 O: u/ ` z2 @ ospfd> enable/*进入特权模式*/3 e, d( L, J# U8 x Password: /*输入特权模式口令,如 z3bRa*/ + D* R0 W) o. A6 f, r% y: Eospfd# configure terminal /*从终端配置路由器*/ " |1 x- A8 _5 A8 [. E% [6 aospfd(config)# router ospf /*配置 OSPF*/. A7 V4 x5 @$ E1 t# n, s ospfd(config-router)# network 192.168.66.0/24 area 0 /*通过 OSPF 广播网络 network 192.168.66.0,/24 指出子网掩码为 24 位,area 0 指出该网络所在的域*/ 5 }% o; ^( d* X8 i0 m Wospfd(config-router)# passive-interface eth0 /*将 eth0 接口设置成一个被动(passive)接口*/ 4 L2 k4 R; J) V0 ^1 vospfd(config-router)# end /*退出配置模式*/6 I; I, U7 g. b, f; w# F ospfd# write file /*保存修改*/7 ?3 L( i8 C% x8 ~5 q& u0 h Configuration saved to /etc/zebra/ospfd.conf6 p% a9 f: y* K& O2 S" y# @- }( I 请记住,为了让 OSPF 或 BGP 在某接口上工作,那么该接口必须处于"运行"状态。为手工运行一个接口,登录到端口 2601 并且在该接口上执行 no shut 命令。& a' g1 b5 _! x" l) B 建立 BGP ! @9 V# I: Q: }$ O' p0 H7 JBGP 与 OSPF 的配置大致相同。开始,打开一个远程登录会话到端口 2605。之后执行 configure terminal,输入 router bgp 进入 BGP 配置模式。如前所述,BGP 使用 AS 编号建立邻机关系并路由通信流。在我们的试验中,我们将使用一个范围在 64512 到 65534 之间的私有 AS 号码(换句话说,该号码旨在机构内部有效,而在因特网上无效)。用 network 命令设置由 BGP 广播的那些网络,如 network 192.168.66.0/24.。与 OSPF 不同的是,BGP 邻机必须静态指定。如同下述∶neighbor remote-as 。这里是一个范例: ) S! D9 y# k1 f: ^: w- S5 M" nlabrat:~# telnet 0 26050 }2 g5 q# Q8 U Trying 0.0.0.0... * w" v! L; O4 b8 j4 M% Q( P* J8 U& V5 _Connected to 0.9 i8 q; s- n8 F% _! ]3 T/ O Escape character is '^]'. 7 t" C, }) m# [2 n; r) J @+ x : W" O7 K. ]7 ]: IHello, this is zebra (version 0.84b) 4 |0 S% {% N0 i+ E* uCopyright 1996-2000 Kunihiro Ishiguro+ U: Z8 R% L6 t8 N. Y9 C8 v$ f 8 Y# Y: ?1 U- D4 J# G, }+ HUser Access Verification 6 F- n: }! U$ F 6 `6 V @! w8 K& _( F# ?" o Password: 1 t* _( A: G, E- Bbgpd> enable " A& a# [8 |$ h6 j" g" W! P: jPassword: 2 B4 i/ u% i9 Z' q# G. {bgpd# configure terminal8 y2 g6 @" j6 _$ g! L' `% k bgpd(config)# router bgp 65530 /*配置 BGP,65530 是自治系统编号。也就是将该系统配置成自治系统 65530 上的外部网关*/+ [0 o* |) `3 X! `. D bgpd(config-router)# network 192.168.66.0/24 /*由 BGP 广播的网络*/ # L6 S8 y0 G6 h+ pbgpd(config-router)# neighbor 10.0.0.5 remote-as 65531 /*静态指定自治系统 65531 上 IP 地址为 10.0.0.5 的路由器为本机的邻机*/ # \+ j$ }& O$ a6 ^0 ^7 gbgpd(config-router)# end: B; ^7 g" ~& [1 x! u! E( Z bgpd# write file6 P8 x5 n P( N! o s0 t& i6 G. V Configuration saved to /etc/zebra/bgpd.conf ) a) i$ r" T7 f/ B对于 OSPF 和 BGP,有大量选项可用,限于篇幅不能在此一一介绍。对于每个协议,我建议在实际使用之前,不妨先研究一番。为此,可以参考 GNU Zebra 文档,它会给你提供许多帮助。 & b5 R2 J! @2 G0 B8 u8 H4 B! t结束语0 u2 f" H$ o: m0 V2 f 在网络中,路由通信流的方法有若干种。就路由器而论,虽然有用各种硬件可用,但是费用较高--人们自然就会想到运行一个用 Linux 系统构筑的功能丰富的路由器作为代替。Zebra 路由守护程序已经使这一切变为现实。因为支持 IPv4、IPv6 和其它各式各样的协议,所以 Zebra 能够满足我们所有的路由需求。它还有一个好处就是,因为 Cisco IOS 和 Zabra 极为相似,如果你以前在 Cisco IOS 环境中工作,可以轻松的过渡到 Zebra 系统;同时,使用 Zebra 也能让你积累起丰富的类似于使用 Cisco IOS 路由器的经验和知识。 * c/ v& |9 p0 L# K! {. m `: y. W作者简介:4 ?) s% y' b" w' H 韩波,自由撰稿人,有近十年的 C 语言编程经验,主要感兴趣的领域为 TCP/IP 协议以及 Linux 内核。个人认为自由撰稿人的价值在于:在不影响问题实质的前提下,用一种通俗的,易于理解的方式来阐述自己的见解。您可以通过 Email:hbzzx2001@yahoo.com.cn 与他取得联系。 ; N" |; o* t3 F% x. I$ M
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏 分享分享 顶 踩 转发到微博
  • TA的每日心情
    奋斗
    2015-9-17 00:58
  • 签到天数: 1 天

    [LV.1]初来乍到

    2
    发表于 2003-8-15 00:56:00 | 只看该作者
    说的比较浅,真不知道为什么这样的文章中国 2003年2月才写,应该早就可以写了,看来没有国外的别人的文章在先,自己组织不起来。
    + d% M. E$ O- a4 s6 e另外 “它能够同时支持 RIPv1、 RIPv2、RIPng、OSPFv2、OSPFv3、BGP - 4 和 BGP - 4+ 等诸多 TCP/IP 协议” 应该说 “诸多 路由 协议”比较容易理解和阅读。4 e4 x/ h& c3 Z9 l
    文章说得比较浅,没有深入下去,都是些皮毛,例如:
    " x2 ?; a. x3 d9 ]* z“RIP 却由于自身的局限性而被打入冷宫” 介绍都没有就说它有“自身的局限性”,让不知道人好象在看天书。因为 RIPv1 没有使用认证机制并使用不可靠的UDP协议进行传输,而且 RIPv1 只能通信自身相关的路由信息,却不能能与其他路由器进行通信,这个也许是作者说的局限,但是 RIPv2 有所改进。尽管很多地方都说 OSPF 要取代 RIP ,但是 RIP 去任在使用,并且我认为在非大型的内部网络的中,它是非常好的。
    5 ~  r! q4 g* i, S如果对路由有兴趣建议学习 linux 路由的人在去 看看 ip-route2 这个包,他所实现的动态路由功能非常强大好用。" ^; i$ t0 ]  {/ K4 ~( ^
    收藏的连接:
    - O* a/ V( Z, ^0 I; Q2 [" S0 v需要下在 zebra 的可以去这里6 V. O" f7 ^  [6 C
    ftp://ftp.zebra.org/pub/zebra , i2 \2 g  y" `3 X6 T
    需要iip-route2的可以去:7 h! c# H5 b- u6 q2 g( J
    http://rpmseek.com/rpm-dl/iproute2-2.4.7-owl4.alphaev56.html?hl=de&cbd=0:I:0:478607:61:0:0
  • TA的每日心情
    无聊
    2015-1-16 14:36
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    3
     楼主| 发表于 2003-8-15 12:02:00 | 只看该作者
    就那么几千字的文章,想复杂到哪里?能使用这套软件搭建起一个路由器来,还算不错啊,路由器是网络的核心,复杂程度可想而知,我现在也是在概念上认识RIP,OSPF协议,说到应用,没有做过项目,不熟啊,碰到问题更不知道从何入手如何解决,不过总有机会的一天,没有机会也要创造机会去摸,对于大部分没有接触过硬件路由器的人而言,在LINUX/UNIX下搭个软件路由器来玩玩不失为学习的好方法,有机会做东西或碰到问题有高手们指导,那更是爽了。

    本版积分规则

    关闭

    下沙大学生网推荐上一条 /1 下一条

    快速回复 返回顶部 返回列表