|
最近更新日期:2011年07月22日
8.1 路由
8.1.1 路由表产生的类型 8.1.2 一个网卡绑多个 IP:IP Alias 的测试功能 8.1.3 重复路由的问题 大标题的图示8.1 路由 我们在第二章网络基础里面谈到过路由的相关概念,
他最大的功能就是在帮我们规划网络封包的传递方式与方向。至于路由的观察则可以使用
route 这个指令来查阅与设定。
好了,那么路由的形式有哪些?你又该如何确认路由是否正确呢? 小标题的图示8.1.1 路由表产生的类型 如同第二章网络基础里面谈到的,每一部主机都有自己的路由表, 也就是说,你必须要透过你自己的路由表来传递你主机的封包到下一个路由器上头。 若传送出去后,该封包就得要透过下一个路由器的路由表来传送了,此时与你自己主机的路由表就没有关系啦! 所以说,如果网络上面的某一部路由器设定错误,那...封包的流向就会发生很大的问题。 我们就得要透过 traceroute 来尝试了解一下每个 router 的封包流向啰。 OK!那你自己主机的路由表到底有哪些部分呢?我们以底下这个路由表来说明: [root@www ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 <== 1 169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0 <== 2 0.0.0.0 192.168.1.254 0.0.0.0 UG 0 0 0 eth0 <== 3 首先,我们得知道在 Linux 系统下的路由表是由小网域排列到大网域, 例如上面的路由表当中,路由是由『 192.168.1.0/24 --> 169.254.0.0/16 --> 0.0.0.0/0 (预设路由) 』来排列的。 而当主机的网络封包需要传送时,就会查阅上述的三个路由规则来了解如何将该封包传送出去。 那你会不会觉得奇怪,为什么会有这几个路由呢?其实路由表主要有这几种情况来设计的:
事实上,在 Linux 的路由规则都是透过核心来达成的,所以这些路由表的规则都是在核心功能内啊!也就是在内存当中喔! ^_^ 小标题的图示8.1.2 一个网卡绑多个 IP: IP Alias 的测试用途 我们在第五章的 ifconfig 指令里面谈过 eth0:0 这个装置吧?这个装置可以在原本的 eth0 上面模拟出一个虚拟接口出来,以让我们原本的网络卡具有多个 IP ,具有多个 IP 的功能就被称为 IP Alias 了。而这个 eth0:0 的装置可以透过 ifconfig 或 ip 这两个指令来达成, 关于这两个指令的用途请翻回去之前的章节阅读,这里不再浪费篇幅啊! 那你或许会问啊:『这个 IP Alias 有啥用途啊?』好问题!这个 IP Alias 最大的用途就是可以让你用来『应急』! 怎么说呢?我们就来聊一聊他的几个常见的用途好了:
不过,你需要知道的是:所有的 IP Alias 都是由实体网卡仿真来的,所以当要启动 eth0:0 时,eth0 必须要先被启动才行。而当 eth0 被关闭后,所以 eth0:n 的模拟网卡将同时也被关闭。这得先要了解才行, 否则常常会搞错启动的装置啊!在路由规则的设定当中,常常需要进行一些测试,那这个 IP Alias 就派的上用场了。 尤其是学校单位的练习环境当中! 基本上,除非有特殊需求,否则建议你要有多个 IP 时,最好在不同的网卡上面达成,如果你真的要使用 IP Alias 时,那么如何在开机的时候就启动 IP alias 呢?方法有很多啦!包括将上面用 ifconfig 启动的指令写入 /etc/rc.d/rc.local 档案中 (但使用 /etc/init.d/network restart 时,该 IP alias 无法被重新启动), 但鸟哥个人比较建议使用如下的方式来处理:
透过这个简单的方法,你就可以在开机的时候启动你的虚拟接口而取得多个 IP 在同一张网卡上了。不过需要注意的是, 如果你的这张网卡分别透过 DHCP 以及手动的方式来设定你的 IP 参数,那么 dhcp 的取得务必使用实体网卡,亦即是 eth0 之类的网卡代号,而手动的就以 eth0:0 之类的代号来设定较佳。 Tips: 在旧版的 CentOS 4.x 中,如果你的 eth0 是使用 DHCP 来取得 IP 参数的话,那么由于 ifup 及 /etc/init.d/network 这两个 script 内程序代码撰写的方式,将会导致 ifcfg-eth0:0 这个配置文件不会被使用到喔!不过这个问题在 CentOS 5.x 以后的版本中已经被克服啰! 鸟哥的图示 小标题的图示8.1.3 重复路由的问题 很多朋友可能都有一个可爱的想法,那就是:『我可不可以利用两张网卡, 利用两个相同网域的 IP 来增加我这部主机的网络流量』?事实上这是一个可行的方案, 不过必须要透过许多的设定来达成,若你有需求的话,可以参考网中人大哥写的这一篇 (注1): 如果只是单纯的以为设定好两张网卡的 IP 在同一个网域就能够增加你主机的两倍流量,那可就大错特错了〜 为什么呢?还记得我们在路由表规则里面提过网络封包的传递主要是依据主机内的路由表规则吧! 那如果你有两张网络卡时,假设: (底下信息请思考,不用实作!)
[root@www ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 也就是说,(1)当要主动发送封包到 192.168.0.0/24 的网域时,都只会透过第一条规则 ,也就是透过 eth1 来传出去! (2)在响应封包方面,不管是由 eth0 还是由 eth1 进来的网络封包,都会透过 eth1 来回传!这可能会造成一些问题,尤其是一些防火墙的规则方面,很可能会发生一些严重的错误, 如此一来,根本没有办法达成负载平衡,也不会有增加网络流量的效果! 更惨的是,还可能发生封包传递错误的情况吶!所以说,同一部主机上面设定相同网域的 IP 时, 得要特别留意你的路由规则,一般来说,不应该设定同一的网段的不同 IP 在同一部主机上面。 例如上面的案例就是一个不好的示范啊! Tips: 为什么会特别强调这个观念呢?大约 2000 年前后,鸟哥刚接触 Linux 时,由于当时的网络速度相当缓慢, 为了提升网络流量鸟哥费尽心思啊〜后来想到说,如果有两片网卡,不就可以增加流量了吗?于是就设定了两个同网域的 IP 在一部主机的两张网卡上,结果呢?很多服务都无法连通了!就是因为痛过,所以才有更强烈的印象啊!错误经验学习法则 ^_^! 鸟哥的图示 |
本网页主要以Firefox配合解析度 1024x768 作为设计依据 鸟哥自由软件整合应用研究室