⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 0230router.htm

📁 鸟哥的linux私房菜
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<span class=term_say># 你应该会发现上头这一条规则存在才行!</span>
</pre></td></tr></table>

			如此一来,你的 Router A 及 Linux Router 之间就可以沟通,并且可以传递
			192.168.10.0/24 的网域呐!<br /><br />
		</div>

		<hr /><li><span class=text_import1>PC1 直接与 PC2 的沟通方式∶</span><br />
		<div class=block2>
			在图一当中,你会发现那个 PC1 必须要将预设路由设定为 192.168.0.254 ,
			所以当 PC1 要与 PC2 沟通时,封包将由∶<br /><br />
			<span class=text_import2>PC1 --> Router A --> Linux Router --> PC2</span><br /><br />
			不过,在图一当中我们知道其实 PC1 与 PC2 同时接到 Linux Router 上嘛!
			所以 PC1 其实可以直接加入一条路由规则,规定当 192.168.10.0/24 的封包目标时,
			他可以直接传到 Linux Router 上即可,那可以这样做∶<br />

<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>route add -net 192.168.10.0 netmask 255.255.255.0 \</span>
>  <span class=term_command>gw 192.168.0.100</span>
</pre></td></tr></table>

			最后只要 PC2 使用 ping 可以连到 PC1,同样的, PC1 也可以 ping 到 PC2 的话,
			就表示你的设定是 OK 的啦!嘿嘿!搞定!而透过这样的设定方式,您也可以发现到一件事,
			那就是∶『<span class=text_import2>路由是双向的,你必须要了解出去的路由与回来时的规则</span>』。
			举例来说,在预设的情况下 (Router A 与 PC1 都没有额外的路由设定时),其实封包是可以由 PC2 
			连线到 PC1 的,但是 PC1 却没有相关的路由可以回应到 PC2 ~所以上头才会要您在 Router A
			或者是 PC1 上面设定额外的路由规则啊!这样说,了了吧? ^_^<br /><br />
		</div>

		所以说,用 Linux 作一个静态路由的 Router 很简单吧!以上面的案例来说,你在 Linux Router 
		上面几乎没有作什么额外的工作,只要将网路 IP 与网路介面对应好启动,然后加上 IP Forward 的功能,
		让你的 Linux 核心支援封包转递,然后其他的工作咱们的 Linux kernel 就主动帮你搞定了!
		真是好简单! ^_^<br /><br />

		不过这里必须要提醒的是,<span class=text_import2>如果你的 Linux Router 有设定防火墙的话,
		而且还有设定类似 NAT 主机的 IP 伪装技术,那可得特别留意,因为还可能会造成路由误判的问题</span>~
		上述的 Linux Router 当中『并没有使用到任何 NAT 的功能』喔!特别给他留意到!<br /><br />
	</div>

	<hr /><a NAME="route_dynamic"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class="text_h2">动态路由之路由器设定∶zebra</span><br />
	<div class=block2>
		如前所述,系统管理员可以利用 route 这个指令手动的将路由规则加入核心当中,这个方式称为静态路由。
		动态路由同样是将路由规则加入核心当中,只是这个加入的动作交由软体服务 (daemon) 自动来执行,
		在 Linux 上面常见的路由服务就是 zebra 这个套件所提供的。<br /><br />

		动态路由通常是用在路由器与路由器之间的沟通,所以要让您的路由器具有动态路由的功能,
		你必须要了解到对方路由器上面所提供的动态路由协定才行,这样两部路由器才能够透过该协定来沟通彼此的路由规则。
		目前常见的动态路由协定有∶RIPv1, RIPv2, OSPF, BGP 等等,
		zebra 都有支援这些路由协定喔!<br /><br />

		在 CentOS 上头,我们使用 quagga 这个套件来提供 zebra ,因为 quagga 是更新 zebra 而来的,
		事实上,你可以说, quagga 就是 zebra 啦!赶紧安装他先∶<br />

<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>yum install quagga</span>
[root@linux ~]# <span class=term_command>ls -l /etc/quagga</span>
-rw-r--r--  1 root   root      410 Jun  2 02:38 ripd.conf.sample
-rw-r-----  1 quagga quagga     30 Aug 29 10:50 zebra.conf
-rw-r--r--  1 root   root      373 Jun  2 02:38 zebra.conf.sample
<span class=term_say>.....其他省略.....</span>
</pre></td></tr></table>

		这个套件所提供的各项动态路由协定都放置到 /etc/quagga/ 目录内,底下我们以较为简单的 RIPv2 协定来处理动态路由,
		不过你得要注意的是,不论你要启动什么动态路由协定,那个 zebra 都必须要先启动才行!
		这是因为∶<br />
		<ul><span class=text_import2><li>zebra 这个 daemon 的功能在更新核心的路由规则;
		<li>RIP 这个 daemon 则是在向附近的其他 Router 沟通协调路由规则的传送与否。</span></ul>
		而各个路由服务的设定档都必须要以 /etc/quagga/*.conf 的档名来储存才行,如上表我们可以发现 zebra
		这个服务是有设定好了,不过 ripd 的档名却不是 .conf 结尾。所以我们必须要额外作些设定才行。
		而假设我们的网路连结如下图二所示∶<br /><br />

		<a name=fig_2></a><center>
		<img src="0230router/dynamic_router.png"
		title="动态路由的简易图示" alt="动态路由的简易图示"><br />
		图二、动态路由的简易图示</center><br />

		这两部 Linux Router 分别负责不同的网域,且可以透过 192.168.0.0/24 这个网域来沟通。
		在没有设定额外路由规则的情况下,那个 PC1 与 PC2 是无法沟通的!另外,
		<span class=text_import2>zebra 必须要同时安装在两部 Linux Router 上头才行</span>,
		而且我们只要设定好这两部主机的网路介面 (eth0, eth1)
		后,不需要手动输入额外的路由设定喔!可以透过 RIP 这个路由协定来搞定的!<br /><br />

		<hr /><li><span class=text_import1>设定 zebra </span><br />
		<div class=block2>
		我们先设定图二右手边那一部 Linux Router,关于 zebra.conf 你可以这样设定的∶<br />

<table class="term"><tr><td class="term"><pre>
<span class=term_hd>1. 先设定 zebra 并且启动 zebra </span>
[root@linux ~]# <span class=term_command>vi /etc/quagga/zebra.conf</span>
<span class=term_write>hostname linux.router1  <span class=term_say>&lt;==给予这个路由器一个主机名称,随便取!</span>
password linux1         <span class=term_say>&lt;==给予一个密码!</span>
enable password iinux1  <span class=term_say>&lt;==将这个密码生效!</span>
log file zebra.log      <span class=term_say>&lt;==将所有 zebra 产生的资讯存到登录档中</span></span>

[root@linux ~]# <span class=term_command>/etc/init.d/zebra start</span>
[root@linux ~]# <span class=term_command>netstat -tunlp</span>
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address   Foreign Address   State   PID/Program name
tcp        0      0 <span class=term_write>127.0.0.1:2601</span>  0.0.0.0:*         LISTEN  6422/zebra
</pre></td></tr></table>

		仔细看,由于 zebra 这个服务的任务主要是在修改 Linux 系统核心内的路由,
		所以他仅监听本机介面而已,并不会监听外部的介面才对!另外,在 zebra.conf 这个档案当中,
		我们所设定的那个密码是有作用的喔!可以让我们登入 zebra 这套软体呢!
		好了,我们来查一查这个 2601 的 port 是否正确的启动的呢?<br />

<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>telnet localhost 2601</span>
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

Hello, this is Quagga (version 0.98.3).
Copyright 1996-2005 Kunihiro Ishiguro, et al.

User Access Verification

Password: <span class=term_say>&lt;==在这里输入刚刚你设定的密码啊!</span>
linux.router1> <span class=term_say>&lt;==在这边输入『 ? 』就能够知道有多少指令可使用</span>
  echo      Echo a message back to the vty
  enable    Turn on privileged mode command
  exit      Exit current mode and down to previous mode
  help      Description of the interactive help system
  list      Print command list
  quit      Exit current mode and down to previous mode
  show      Show running system information
  terminal  Set terminal line parameters
  who       Display who is on vty
linux.router1> <span class=term_command>list</span>
  echo .MESSAGE
  enable
  exit
  help
  list
  quit
  show debugging zebra
  show history
  show interface [IFNAME]
  show ip forwarding
  show ip route
<span class=term_say>....其他省略....</span>
linux.router1> <span class=term_command>show ip route</span>
Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
       I - ISIS, B - BGP, > - selected route, * - FIB route

K>* 0.0.0.0/0 via 192.168.0.254, eth0
C>* 127.0.0.0/8 is directly connected, lo
C>* 192.168.0.0/24 is directly connected, eth0
C>* 192.168.10.0/24 is directly connected, eth1
linux.router1> <span class=term_command>exit</span>
Connection closed by foreign host.
</pre></td></tr></table>

		仔细看到,我们登入这个 zebra 的软体之后,可以输入『help』或问号『?』, zebra 
		就会显示出你能够执行的指令有哪些,比较常用的当然是查询路由规则棉!
		以『 show ip route 』来查阅,结果可以发现目前的介面与预设路由都被显示出来了,
		显示的结果当中,<span class=text_import2>K 代表以 router 这个指令直接加入核心的路由规则,C 
		则代表你的网路介面相关的路由规则</span>。<br /><br />

		事实上,如果你还想要增加额外的静态路由的话,也可以透过 zebra 而不必使用 route 指令呢!
		例如想要增加 10.0.0.0/24 给 eth0 来处理的话,可以这样做∶<br />

<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>vi /etc/quagga/zebra.conf</span>
<span class=term_say># 新增底下这一行喔!</span>
<span class=term_write>ip route 10.0.0.0/24 eth0</span>

[root@linux ~]# <span class=term_command>/etc/init.d/zebra restart</span>
[root@linux ~]# <span class=term_command>telnet localhost 2601</span>
User Access Verification

Password: <span class=term_say>&lt;==这里输入密码</span>
linux.router1> <span class=term_command>show ip route</span>
Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
       I - ISIS, B - BGP, > - selected route, * - FIB route

K>* 0.0.0.0/0 via 192.168.0.254, eth0
<span class=term_write>S>* 10.0.0.0/24 [1/0] is directly connected, eth0</span>
C>* 127.0.0.0/8 is directly connected, lo
C>* 192.168.0.0/24 is directly connected, eth0
C>* 192.168.10.0/24 is directly connected, eth1
</pre></td></tr></table>

		嘿嘿!立刻就会多出一笔路由的规则,而且最右边会显示 S,亦即是静态路由 (Static route) 的意思。
		如此一来,我们系统管理员可就轻松多了!
		设定完 zebra 之后,接下来我们可以开始看看 ripd 这个服务棉!<br /><br />
		</div>

		<hr /><li><span class=text_import1>设定 ripd 服务</span><br />
		<div class=block2>
		ripd 这个服务可以在两部 Router 之间进行路由规则的交换与沟通,
		当然啦,如果你的环境里面有类似 Cisco 或者是其他有提供 RIP 协定的路由器的话,
		那么你当然也是可以透过这个 RIP 让您的 Linux Router 与其他硬体路由器互相沟通的呐!
		闲话少说,来设定 ripd 吧!<br />

<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>vi /etc/quagga/ripd.conf</span>
<span class=term_write>hostname linux.router1  <span class=term_say>&lt;==这里是设定 Router 的主机名称而已</span>
password linux1         <span class=term_say>&lt;==设定好你自己的密码喔!</span>
router rip              <span class=term_say>&lt;==启动 Router 的 rip 功能</span>
network 192.168.0.0/24  <span class=term_say>&lt;==针对这个网域来进行监听的动作!</span>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -