多IP与Router的架设

来源:岁月联盟 编辑:zhuzhu 时间:2007-02-11
多IP与Router的架设内容简介: 多 IP 与 Router 的架设


------------------------------------------------------------------------------------------------

1. 学习本章的必备技巧

2. 多个 IP 在一块网络卡上面:为何多 IP 如何实作 command line 参数设定档 注意事项

3. Router:什么是 Router 为何需要 Router 观察与修改路由

4. 一个 Router 架设范例

5. 建议

------------------------------------------------------------------------------------------------


学习本章的必备技巧:

  在这个章节中,我们将要介绍的是 Linux Router 的设定方法,与一块网络卡上面设定多个 IP 的方法!那么由于这个地方需要谈到相当多的网络观念,所以请您详细的再看看网络基础 的文章,此外,我们也会提到相关的网络指令,所以这部份也不能忽略!再来, Linux 的基础方面, vi 是绝对不能少的,那个 bash shell 当然还是得熟悉啰!

· 学习 vi

· 认识 bash shell

· 网络基础

· 网络相关指令

· 局域网络架构

  无论如何,还是会讲到那句老话,『 Linux 基础文件 去看看吧! 』

返回页首
-----------------------------------------------------------------------------------------------

多个 IP 在一块网络卡上面:


· 为何需要多 IP ?


  好好一块网络卡,为何需要多个 IP 呢?难道是鸟哥没事找事作?!嘿嘿!我又不是闲的发慌,干嘛没事找事作呢?!其实多个 IP 是有其必要性的啦!在什么时候『可能』会用的上呢?这样说好了现在你的局域网络当中,由于有些朋友一开始设定错误,结果一个 Hub 却接了两个网域,分别是192.168.1.xx 及 192.168.0.xx ,但是你的朋友们却又都不想改变他们的网络设定,这个时候怎么办?『因为不同的网域之间不能直接互相沟通』这个概念还没忘记吧?!所以 192.168.1.xx 及 192.168.0.xx 就不能直接沟通资料啰!因此,你如果要与 192.168.1.xx 沟通,你的 IP 就必须设定在该网域内,但这个时候另一个网域 192.168.0.xx 的资料却又无法沟通了!所以你就必须要常常变更 IP 啰!那你又不想常常变更你的 IP ,呵呵!这个时候多个 IP 就派上用场啦!你可以在一块网络卡上面同时设定 192.168.0.xx 及 192.168.1.xx 的 IP ,如此则你的系统可同时接受来自这两个不同网域的资料流!嘿!还不错吧!

  除此之外,其实还有很多的用的到多个 IP 的地方啦!例如 Router 的设定,有时后也会使用的到的!另外,在测试系统的时候,也常常会使用到多 IP 的设定!基本上,多 IP 的用途还不少就是了!

· 如何实作?

  其实多个 IP 在一块网络卡上面的设定很简单啦!就只要记得一个概念就够了,那就是网络界面卡( Network Interface Card, NIC )与网络界面( Interface )不一样的东西!一个是实体界面,一个则是联机的虚拟界面,两者并不相同!但是 Interface 必需要架构在 NIC 之上才行!好了!我们来谈一谈实际面吧!你应该知道 Linux 第一块网络卡的代号为 eth0 吧?!OK!那么在这个网络卡上面的第一个虚拟界面( Interface )的代号是什么呢?那就是 eth0:0 啰!第二个虚拟界面则为 eth0:1 .....以此类推!以要激活 eth0:0 时, eth0 务必要被激活!而当关闭 eth0 时,其所有相关的 eth0:n ( n 是数字,0, 1....)将会全部被关闭!这就是刚刚上面提到的『虚拟界面是架构在实体界面之上』的意思!好了!那么设定的方式主要又可以分为直接以『 command line 』手动激活,也可以使用『 装置设定档案 』来设定!分别说明如下啰!

o command line 手动设定多个 IP :

  在 Linux 网络常用指令篇 里面我们曾经提到 ifconfig 可以用来达成多个 IP 的设定功能!他的主要设定语法与范例为:





  如此一来,你这块网络卡上面就已经有两个界面啦!分别是 192.168.0.2 及 192.168.1.2 !很简单吧!不过,这样还是有点问题,那就是每次开机你都得在手动的输入一次( 除非写到 /etc/rc.d/rc.local 这个档案当中 ),好了!底下我们就介绍一下如何以装置设定的方式来设定多个 IP 的方法吧!

o 装置设定文件设定多个 IP:

  这个东西也不难!还记得我们在 连上 Internet 一文当中,曾经提到网络卡的参数设定档吧!没错!那就是 /etc/sysconfig/network-scripts/ifcfg-eth0 啰!好了!那么我们目前是以装置 eth0:0 做为装置代号,自然文件名就需要改一改啦!所以你可以这样做一次,来达成与上面 command line 的设定相同的状况!




  很简单吧!这样就可以达到你的多个 IP 在同一块网络卡上面的目标啰!

o 需要注意的地方:


  一般而言,鸟哥个人是比较偏向于『使用参数设定档案的方式』来进行我的多个 IP 的设定!这样有很多好处啦!包括我可以在 ifcfg-eth0:0 这个档案里头,先以 # 批注符号后面来说明一下当初我为何要建置这个档案,以及可以使用档案的型态来了解一下我的设定档,再来,由于所有的网络卡参数档案都在这个目录下『 /etc/sysconfig/network-scripts』,所以我可以很轻易的就找到相关的设定档啰!所以,比较推荐这个方式!

  不过需要特别注意的地方是,我试过好几次了,每次重新开机激活的时候,即使你设定 ONBOOT=no ,但是当 eth0 这个实体网络界面被激活时,所有跟 eth0 有关的虚拟界面 eth0:n 都会被激活!然后,当你关闭掉 eth0 时,则所有跟 eth0 有关的 eth0:n 都会被关闭掉!这点还请特别留意呦!

返回页首
----------------------------------------------------------------------------------

Router: 什么是 Router, 为何需要 Router,

· 什么是 Router ?


  还记得我们在 网络基础 里面提过的几个东西吗?『不同网域的资料流,必需要透过 Router 来转译彼此』,也就是说,我们必需要藉由 router 来沟通不同的网域之间的资料啦!通常我们发现 router 的地方,都是在不同的网域之间相互连通的节点上面,好了,那么我们也晓得 Router 是一个『很贵的机器』,呵呵!那么 Linux 可以做成 router 吗?嘿嘿!很好!他可以!

· 为何需要 Router ?


  既然 Router 的作用是连通不同的网域,那么我的公司所有的计算机只要都在同一个网域之内,那不就得了!根本就用不着 Router 嘛!不过,不要忘记了我们在 网络基础 里面曾将向大家提过的『封包碰撞』与『节点的最大传输量』限制!举个例子来说好了:

o 当你的公司成长到需要 200 部计算机好了,这个时候假如你还是将所有的 200 部计算机都给他在同一个网域之内,那么当一部计算机要将资料丢出来的时候,嘿嘿!所有的网络卡将会停顿一下等他的广播!这会造成相当大的网络负荷!此外,在 Hub 里头,所有的资料都在里头流窜,你会发现你的资料很容易有损失而无法联机的情况!这会造成内部网络的极大负荷....

o 那或许你会说:『如果 Hub 不行,那么我将他换成 Switch 总可以了吧! Switch 不是可以将封包碰撞的机率降至最低吗?』是的!您说的没错!但是很不幸的,您买的 Switch 应该是 10/100Mbps 的吧!果然如此的话,那么你的 Switch 最大的实时传输量为 12.5 MBytes 左右,如果平均分配给你的 200 部计算机的话,那么每一部的频宽是多少?答案是 60 KBytes 左右!嘿!在局域网络内的计算机流量怎么会这么慢?!尤其当一个人死命的捉某部计算机的资料的时候,那就惨咯!其它人的平均频宽将会降的更低!

  这个时候或许 Router 的功能就可以显现出来啰!怎么说呢?因为不同的网域之间不能直接广播,所以你必需要将网域分别开来,而假设以 200 部计算机平均分为 5 个网域好了,这个时候一个网域里面只有 40 部计算机,在这个情况之下,不但布线容易( 针对 40 部计算机来说 ),而且由于不同网域之间不会互相广播,所以你的广播时产生的网络停顿情况将会减少非常的多!如此一来,对于您内部局域网络的网络流量舒缓,将有相当大的助益!『请特别留意,通常比较大的局域网络( 指计算机数量较多的企业 ),如果规划不良,则你对外联机的时候,最大的速度瓶颈可能来自于内部网域!这是因为内部网络的 loading 比起外部网络要『慢的很多!』因为内部网络互连的状况( 例如网络芳邻的资源共享、打印机的分享、档案服务器的分享等等 )就会导致你的 Switch/Hub 的频宽被占用光了! 』

  一般不想要管事的网管人员,最喜欢直接将布线设计成类似底下的模样:



  这样做最大的好处就是『简单』,你只要控管一个 服务器 就够了!其它的完全不用去理他,管他什么封包碰撞,反正你内部网络的 loading 太大也没有关系,对于懒惰的网管人员来说,他根本就不痛不痒....这个时候你的内部网络的流量可能真的会负荷很大啦!此时,相当的建议设定成类似底下的模样!



  这样有个好处啦!你的服务器上面有两块网络卡,分别负责不同的网域,那么由于这两个网域之间分隔开来了,因此广播停顿、封包碰撞与 Hub/Switch 流量限制的情况就会比较舒缓一些!而两个不同的网域之间的资料分享呢?嘿嘿!则可以透过服务器架设的 Router 功能来达成呀!这样你可以了解为何需要设定成这个模样了吧?!

· 观察与修改路由:


  其实就如同前面说的, Router 的最大用途就是将不同网域的资料互相流通,而要沟通这些资料,必然就需要有所谓的『路由, route』这个东西了!以我的情况为例,我是以 ADSL 拨接上 Internet 的,但是我有个内部网域,192.168.1.0/24 这一个东西,所以在我的 Linux 底下输入 route 时,会得到如下的结果:



· 上面显示什么意义呢?简单的说,就是:

1. 当我有一个封包要送到 192.168.1.0/24 这个网域时,我的输出接口为 eth0 这个接口;

2. 当我有封包要送到 127.0.0.0/8 ( A Class ) 时,我的输出接口为 lo 这个接口;

3. 当我有资料要送到 140.116.142.253 时,由于他是 p-p-p 的协议,所以是单点对单点,而接口为 ppp0 这个;

4. 至于其它没有规定到的所有网域,则统一由 default 这个 Gateway 140.116.142.253 ,接口为 ppp0 丢出去!由于 ppp0 传送到的这个 140.116.142.253 是 ISP 的接口,该接口通常为 Router ,所以他会自动的将你的封包再往前面送,使之最后可以到达目的地!

  这样了解了吗?那个 default 里头的 Gateway 就是我们在 /etc/sysconfig/network 这个档案里面设定的啦!
  好了!那么假设你的网域当中还有另外一个不同的网域,假设为 192.168.0.0/24 好了,而这个网域同样的是接在 eth0 这个网卡上面,所以你要你的 eth0 同时还负责 192.168.0.0/24 这个网域时,可以这样做!



  这样就增加啰!不过,这个时候或许你可以连上人家的机器,但是人家却无法连接到你的机器!因为你的网络并没有 192.168.0.0/24 里面的任何一个 IP ,所以别人的计算机自然无法透过广播来与你进行资料的交流!这个时候就必须要激活 Routing 的功能啦!如何激活呢?继续看下去吧!

  注:请特别留意,当你使用 route 来秀出目前的路由表时,如果显示的讯息非常的缓慢,不要怀疑!一定有地方设定错误。请依照 route 所显示的讯息来修改你的网络参数!通常最容易发生 route 问题的地方在于 gateway 的设定啦!或者是重复激活多次的虚拟接口卡时,也会有这样的情况,例如我曾经看过在 route table 上面出现同一个路由状态共三次以上!例如上面 192.168.0.0 .... 那一行,若在 route table 上面竟然重复出现三次!这肯定有问题呀!!处理的方法为:

1. 将该相关的网络接口关闭!使用 ifdown 来关掉;

2. 使用 route 的功能,将该路由删除!

3. 修改相关的接口,将接口符合我们的需求!

4. 重新激活接口,并持续观察 route !

返回页首
------------------------------------------------------------------------------------------------

一个 Router 架设范例:

  好啦!既然知道 Router 的好处之后,再来当然就是要来架设他啰!其实架设的方法真的很简单!你只要作几个动作就可以啦!(注:请特别留意,本文仅在测试 Routing 的功能而已,如果您在贵公司内部需要架设 Router 时,可以依照本文的概念来架设,但是实体布线则需要用『实体网络卡』来区隔,请不要使用本文的 IP Alias 的方式!切记!)

1. 设定网络卡,使连接不同的网域;

2. 设定 route 路由表,让两网域可以互通;

3. 激活 ip_forward 的选项;

4. 在 Client 端设定 gateway 分别为 server 端的两个 IP !

  由于我们的 Router 需要直接跟两个网域互相连通,所以啰,你的 Router 上面就需要同时具有在这两个网域之间的 IP 啦!此外,由于不同的网域需要激活 Routing 的功能!所以你必须要做一个动作,那就是让目前内存里面的 Routing 功能激活!那么我们在 资源管理 的文章里面曾经提过,那个核心的程序都是记录在 /proc 里面的,至于我们 Linux 核心的网络功能则都记录在 /proc/sys/net/ipv4 这个目录内!而激活 Routing 的程序为 ip_forward 这个档案!只要将内容设定为 1 即为激活,而当为 0 时,就是显示关闭的啦!因此,若要激活 Routing 则需要『 echo 1 > /proc/sys/net/ipv4/if_forward 』即可!底下是我的测试环境啦!请注意,这个范例单纯仅只是在测试 Router 的功能罢了!你应该依照你的需求来架设你的 Router 呦!那么就将我的联机图标秀出来啰!

· 测试环境说明:


  在我的实际测试环境当中,每个组件的内容如下:

1. Linux 主机:我的 Linux 服务器本身作为 NAT 之用,里面有两张网络卡,一张连接 ADSL 调制解调器,这张对外卡的代号为 eth1 ,一张连接内部网络,代号为 eth0 ;

2. Hub 连结计算机:Linux 主机对内的网络卡 eth0 连接到 Hub 上面,同时,Hub 上面还存在其它四部个人计算机,取两部来进行测试, IP 分别为 192.168.1.11 及 192.168.0.11 ;

3. eth0 对内网络卡:由于对内有两个 C Class 的网域,所以我的网络卡 eth0 设定为 192.168.1.2 而另一个虚拟接口 eth0:0 设定为 192.168.0.2 !

4. Client 端的操作系统:我的 client 端的设定方面,在 192.168.1.11 使用 Windows 2000 随机版,而 192.168.0.11 则使用 Red Hat 7.3 这个咚咚啰!

基本的图标如下示意:



· 设定说明:

  在这个章节当中,我们不谈怎么架设 NAT 主机,那个是下一个章节才要提到的东西,所以焦点的地方在于 NAT Server 的左边之设定,也就是 eth0 的设定!亦即是内部网域的设定而已!基本上,这个可以视为 局域网络架构 那一篇文章的内容延伸啦!在这个地方,我们的网络卡有两个 IP 呦!

· 开始设定:

  我们就照着上面的步骤一步一步做来吧!






  这样就设定完成了!如何?很容易吧!这样一来,就可以让你的很多计算机的内部网域之网络流量舒缓很多啰!此外,这里必须提出一点说明,因为我上面的范例直接就是要用来作为测试用的,所以搞的比较简单,而且还是在同一块 Linux 主机的网络卡上面搞定的!请注意,如果要架设较大流量的 Router 时,请分别以两张网络卡来分隔不同的网域,这样应该会比较好呢!而至于 client 端的设定方面可以参考:

o Windows 的网络参数设定

o Linux 的网络参数设定

  另外,请特别留意,就如同刚刚前面我们提过的信息来看,开机的时候,不论你的 alias 的设定为何 ( 是否设定为 ONBOOT ),只要激活 eth0 则相关的 eth0:n 都会被激活!这个时候请特别留意!如果其中有一个 IP alias 设定错误的话,那么将会导致你的网络整体都会不通!原因多半出在 GATEWAY 上面!建议设定完成之后,先将 eth0 整个 shutdown ,然后再激活,亦即『 ifdown eth0; ifup eth0 』然后再来看看 route 的情况!这样可以避免这次设定成功,下次开机却是不通的情况发生的!

· 测试 Router 工作:

  好了,不可免俗的,我们可要好好的测试一下我们的 router 啰!如何测试呢?很简单呀!

1. 在 192.168.1.11 这个 client 端,先联机到 192.168.1.2 试看看能否联机;

2. 在 192.168.1.11 这个 client 端测试是否可以联机到 192.168.0.2 这个 Server 端的另一个网络连接接口;

3. 在 192.168.1.11 这个 client 端测试是否可以连接到另一个 client 端,亦即 192.168.0.11 这个 clinet !?

4. 将 Linux 主机的 /proc/sys/net/ipv4/ip_forward 功能关掉,然后再检验上面的三个步骤看看!试看看网络是否能够沟通呢?

  测试的工作就是这么简单!来吧我们来测试看看吧!





  呵呵!测试的结果也告诉我们啰!没错!有没有激活 Routing 的功能将会影响 Linux 是否可以具有 Router 的能力!

返回页首
------------------------------------------------------------------------------------------------

建议:

  上面的那个范例单纯只是为了作为范例来示范!要注意,我们在公司内部架设 router 的时候,通常是希望降低内部网络流量的负载,这个时候,当然是将两个网域分别分开在两个实体网络卡上面比较好!而不是在一块网络卡上面设定两组 IP ,这样做对于减低流量负荷的帮助应该不大!所以,您的实体线路配线方面可能要变成如下图所示的模样( 当然,设定方面则是完全一样啦! ):



  无论如何,上面的方式可以提供一些中小企业,计算机数要多不多,偏偏又会影响整体流量的情况时,可以使用来解决问题!再来,对于中小学的网络布线情况呢,也可以达到不错的降地整体网络负荷的效果!而这个简单的 Router 你可以使用 486 那种等级的旧旧烂烂的计算机来架设就可以啦!反正他的 loading 又不重~~此外,附上一篇小州前辈的建议给大家参考: