在局域网路内经常需要的网络服务,以及很重要的 LACP 功能!虽然有 10G 就没这需要...
假设你已经看过 Linux 私房菜的基础学习篇与服务器架设篇, 那么你应该会知道,架设一个在网络实体媒体分离的局域网路 (LAN) 其实不难,最简单的作法,那就 (1)买个便宜的 IP 分享器来处理对外连接, (2)内部的 LAN 使用一个便宜的 giga hub 来串接所有的 PC 与行动设备,一切就结束了。好开心!好愉快啊!
只是,如果 (1)你的 LAN 里面总共会有超过 60 部以上的电脑,而且这些电脑还需要常常共享数据,因此数据传输带宽非常大, 一般的 5~8 端口数的 hub 根本不够用!那该怎办?此外, (2)由于想要预防局域网路被恶搞,或者是需要加上一些防火墙控制参数来避免用户在区网内误用网络资源时, 如果考虑 IP 分享器,它根本没办法提供这些功能,又该怎办?又或者是 (3)LAN 里面有部大家都需要使用的文件服务器,当所有人都连上去时, 总带宽该怎么算?由於单张 Gb 网卡最多就只能提供 1Gbits/s 的带宽啊!但又不想要买 10Gbits/s 的网络设备 (现阶段还贵的要死),那又该如何增加有效带宽?
这些东西在服务器架设篇里头并没有仔细说明,因为那是给一般互联网环境使用的架构!互联网使用的数据量并不会太庞大! 但如果是校园或企业内部强调高速传输的环境底下,总传输数据量或尖峰传输量可能是相当庞大的!例如近年来相当热门的虚拟化技术就用到很多区网内部的高速保存设备! 这时,一个仔细规划过的局域网路就很重要啦!
鸟哥这里并没有谈到给高端保存设备使用的环境,因为那属于大型企业的尺度,那种环境的网络媒体,没有数百万是搞不定的。 我们这边强调的是给校园及中小企业使用的环境,包括一般校园的电脑教室或小型计算机中心的环境架构,想要高速运作网络传输时, 那就得要加些功夫进来,否则,你常常会发现,怎么局域网路的传输速度那么慢啊!呵呵!醒一醒吧!来用功啰!
如果你有看过私房菜服务器篇了,那么局域网路的建置应该不怎么难才对~尤其是硬件的部分,不就是通过星形连接方式,中央部分使用集线器 (hub) 或交换器 (switch) 连接各个终端设备 (指的大部分就是 PC 啦),然后在各个终端设备上面搞定好操作系统,之后在区网内搞个路由器 (router) 或 IP 分享器提供局域网路的对外连接,一切就搞定了!有啥难度的啊?
话是这么说没错啦!不过,想一想,如果你的电脑数量是 60~100 台 PC,这么大量的电脑设备要连接,现在常见的多端口数交换器,最多也不就是 24~48 port 而已,那你要买几部?此外,switch 对 switch 又要如何连接?连接几个 port 会比较好?需要怎么进行 switch 设置?这些好像都应该要考虑考虑才好!
一般家庭使用的局域网路,不过是区区五、六台电脑,所以买个小型的桌面型 gigabit 交换器也就搞定了,小型 8 port 交换器不过一两千块就搞定了。 而且体积小也不占空间。唯一需要考虑的,是这个交换器不要放在密不通风的地方,例如桌子底下或柜子里面。因为鸟哥家里实际使用的小型 8 port gigabit 交换器,连续两三部都因为热当的问题导致数个 port 损毁,每个交换器大约使用 3 年就寿命终了了~没办法,鸟哥的机器所在的工作室,人不在的夏天没开冷气的情况下, 室内温度是高的吓人的~所以,夏天的时候,调制解调器、无线 AP 与交换器上方还会摆个小电风扇去吹他~电风扇再用定时器去控制~避免交换器热当导致没有网络可以用...
家庭环境还好啦,简单就搞定了。不过一般中小型企业所在的环境就不是这么简单了!举个例子来说,鸟哥服务的昆山科大信息传播系,系上有四间电脑教室,其中一间内部含有 61 台 PC、一部防火墙系统、一部打印机,随便加一加就有 63 个设备,也就是说,至少得要有 63 port 的交换器才能够处理这个环境。问题是,早期的交换器较多 port 数的通常比较贵,加上厂商认为我们可能会在交换器上面做些控制,因此采购的是 3 台 24 port 的有网管功能中低级交换器,每一台大约是一万多块台币吧。 由于 3 台 switch 也需要连接,两两连接的结果,就占用了 4 port 了,所以全部可用的端口数为 3*24-4=68 个,看起来,这个数量好像还够喔!
原本以为上述的规划就够了,因为都已经是 gigabit 的网络了嘛!但后来接触到 DRBL+clonezilla (这个后面章节会谈到),同时鸟哥之前也自己搞一套信息传播系自己的快速复原系统, 这些系统都是统一通过一部 server 来提供用户端的快速复原。想一想,每一部 PC 都是向同一部 server 要数据啊,而一部 server 仅使用到一个 port, 每个 switch port 最高仅能使用 1Gbit/s 的速度,因此,60 台 PC 中,每部 PC 仅能分到 (1Gbits/s)/60=(1000Mbits/s)/60=17Mbits/s=2.1MBytes/s,要死了~如果每部 PC 同时下载一个 1GBytes 的文件,那得要花上 (1024Mbytes/(2.1Mbytes/s))=480sec=8分钟左右,这还是理论极限速度喔!哇!老师们随便提供的一个作业视频,光是上传就要死人~ 更何况是当系统需要复原时,需要传输的数据量通常是数十GBytes以上的数据量!所以,这样的架构看起来是有些问题了。
我们是定位在中小企业的实作环境啊,也就是说,我们需要的是使用较少的钱可以取得较大的电脑与网络使用效益。所以,上述的环境如果要改善,有经验的朋友当然会说, 阿全部换成 10Gbit 的网络就好了啊!那比 gigabit 的速度要再快上 10 倍呢!肯定没问题了吧?问题是,钱钱啊! 10Gbit 在目前 2013 年的现实环境下,还是贵的要命! 而且不只交换器,连电脑的网卡都要换掉才行~这样区网才能够全部上 10Gbit 啊!一张 10Gbit 网卡可能比一部低级的主机还要贵了哩 (上万块新台币)!那怎么有这么多钱钱? 所以,底下就得要来谈谈,有没有比较便宜且可行的方案呢?
既然还是得要在 gigabit 的网络上面着手改良,那想一想,有没有办法增加 Server 的带宽呢?举例来说,能不能使用多张 gigabit 网卡来增加 server 的总带宽? 如果可以用两张网卡来处理,那不就可以增加 100% 的带宽了 (从 1Gbits/s --> 2Gbits/s)!好棒呢!听网络上许多前辈在说,bonding 这个技术可以使用多张网卡来绑定成为一个 IP, 如此一来,该 IP 就能够使用多张网卡,就能够解决带宽问题了呢!真的吗?当然要考虑很多方面啦!最重要的地方是,带宽频颈可能在 switch 对 switch 的连接处喔! 怎么说呢?让我们看看底下的连接范例:
仔细看上图的结果喔,当有三部 PC 直接连上 B 这个 switch 时,这三部 PC 可以获得完整的服务器提供的三张网卡总带宽。但如果是 A 与 C 区连接的 PC 呢?由于 A 到 B 两个 switch 仅使用到一个端口口,因此这两个 switch 之间最大的带宽当然也只有 1Gbits/s 的量,所以,如果 A 区有三部 PC 要使用服务器的资源时,你猜猜网络流量的频颈在哪里?想也知道是两个 switch 间的总流量啊!那怎么办?能不能在两部 switch 之间接上两条以上的网络线啊?
后来又听说,如果要增加两个 switch 间的总带宽,可以通过一个称为 LACP 的协定来处理 (本章稍后会谈到) ,当两个 switch 想要分别使用到超过两个以上的端口口来互连时, 如上图的 A 到 B ,使用两条网络线来连接这两个 switch 时,可以通过这个协定来让两个端口口合成一个进行网络流通,如此一来,两个 switch 间的流量就可以倍增了! 这真是好棒啊!那就能够增加 A 区的 PC 连接到服务器的总带宽啰!
由于 LACP 仅存在于有网管功能的 switch 上头,如果你使用的是无网管功能的 switch ,那么就无法使用 LACP,也就无法在两个 switch 之间使用多条网络线串接了! 好佳在,当初我们系上请的厂商规划的是有网管的 switch,那我们就可以使用多条网络线串接两部 switch 来增加局域网路内的带宽了吗?当然不是!没有这么愉快!为什么?
再回到图 1.1-3 的鸟哥服务的单位的网络环境。由于我们的服务器上头可以接上最多 3 个对内的 Gbits/s 网络,为了让 A, B, C 的 PC 均能够顺利的使用服务器 3 张网卡的功能,因此每个 switch 之间我们打算使用 3 条网络线来串接。由于 switch 是两两成对的,因此用在连接 LACP 的端口口数将到达 12 个这么多! 然后服务器提供了三张网卡进行 bonding,加上一台打印机、61 台 PC 电脑,则总端口口数需求为 12+3+1+61=77 !但我们的 24 port 3 台 switch 最多仅有 24*3=72 个啦! 少了五个...所以说,预留 switch 端口口数以供未来利用有多重要了!
综合来说,小型局域网路当然不用考虑底下的需求。但如果您的区网有超过 50 部以上的终端电脑设备,而且可能未来会考虑使用无硬盘环境、虚拟化环境, 或者是需要比较高数据传输的带宽设置时,同时,你没有钱钱购买较大型的网络设备 (10Gbits/s 之类的网络媒体),那你应该要注意:
事实上,不同的网络使用行为产生不同的连接思考方向。如果你的环境仅是要实现大家都可以连上 Internet 的话,那么简单的连接即可。如果是想要在区网内部作个大流量的实验, 那可就不能随便连接而已,得要思考如何扩大带宽频颈处才行!
如上个小节说的,小型区网只要星形连接中间的 switch/hub 所提供的 port 数量够,将所有的 PC 与终端设备通通使用 cat6 以上等级的网络线连接在一起就好了! 但如果是具有比较多终端设备的环境下,就得要考虑考虑不同的方案了!上个小节鸟哥也提到我们系上的某间具有 61 台 PC 的电脑教室环境,使用了 3 台 24port switch 的环境。不过,后来我们在该教室内使用 PC 操作系统大量网络还原的机制,这就发现网络速度有点慢~因此只好将原本的网络环境稍作调整~
过去的文档都说,最好将每个小区网独立出来,这样除了可以克服网络封包的碰撞问题之外,管理与调试也会变的比较方便(参考注1, 2文档)。举例来说, 如果你所在的企业环境内部有三个部门,每个部门有大约 20 个左右的终端设备需要连接时,那么在每个部门摆上一部 24port 以上的 switch,然后将三个部门的 switch 统一拉到公司对外的线路所在的那个 switch 上,而公司内部的服务器也是连接到该部对外的 switch 上头,如此就完成整个区网的连接设置。如下图所示:
上述的连接方式是比较简单且单纯的,如果你的区网内,每个员工常常有需要连接到 FTP 去下载大型文件时,那么这个连接的架构的频颈将会发生在 FTP server 到 switch 这一段。 如果区网-1的内部网络中,有个特殊的服务被启动,而区网-2的员工都得要去访问他时,那么频颈就会发生在 switch 到 switch 连接的那个 port 上面啰。
如果将上述的环境思考成在同一个电脑教室内呢?而且,在这个拥有 60 部电脑的教室中,若考虑统一控管电脑的操作系统,所以所有的 PC 其实内部并没有硬盘,而是使用服务器所提供的网络文件系统呢?那么上图的链接方式就不行啦!因为性能频颈会卡在服务器上面的那张网卡,全部的带宽仅有 1Gbits/s 而已。
在继续说明之前,让我们来作个数学吧!现在的新型桌机硬盘数据读写率大约在 100~150Mbytes/s 左右,至于中低级的笔记本电脑读取性能则可能在 40~80Mbytes/s 左右。 如果我们的 PC 是无硬盘环境,因此操作系统碟的数据是来自于服务器,PC 与服务器之间使用的是 1Gbits/s 的网络设备,转成文件容量单位,则最大磁盘访问率约为 125Mbytes/s 左右, 这差不多是一般一部桌机的硬盘读写率。
好了,一部这样的无碟设备是很 OK 的喔,如果是整间电脑教室 60 台电脑都使用这样的无碟环境呢?那么 125Mbytes/s 就得要分享给 60 部电脑,算一算喔, 平均每一部电脑能够用到的数据量大约是 2Mbytes/s 喔!请查找一下这个数据与一般低级笔电的 40~80Mbytes/s 数据比较看看,这 60 部电脑想要完成开机, 他开机所花费的时间是低级笔电的 20 倍以上时间喔!因为网络在很繁忙的时段将会造成更多的封包碰撞,导致网络性能低落~所以,想想看,一张 Gbytes 的网卡能够符合我们的需求吗?
为了改善单张 Gbits/s 网卡的困扰,台湾的国家高速网络中心所发展的 DRBL (Diskless Remote Boot in Linux, 注1) 安装环境中,他们建议,在一间 40 部电脑的教室中, 服务器至少得要有 4 张 Gbits/s 的网卡,每张网卡独立分给 10 个用户,因此分成 4 个小型区网。这 4 个区网得要分别安插在 4 个没有串接的 switch 上面 (有网管交换器的 VLAN 功能也属于没有串接的环境),且这四个区网的网络 IP 网段是不一样的 (考虑的每个区网的 NAT 与路由器设置之故)。详细的 DRBL 建议 40 台电脑串接与 IP 网段示意如下:
继续来作个数学好了,上图中,由于每个单张网卡仅负责 10 个用户,因此每个用户可使用的网络速度平均可达 10~12Mbytes/s 左右, 由于 DRBL 主要是提供开机时读取数据量相对较少的 Linux 系统,因此整体的开机速度是可接受的。不过根据 DRBL 官网的说明,在这样的环境底下, 10 个用户同时打开 OpenOffice 这模拟较大型的办公室软件时,得要等待数分钟才能够打开完毕~虽然是比单机要慢很多,但至少是在可接受的范围内~
虽然说上述的网络连接环境可以满足 DRBL 的需求,不过就鸟哥个人的观点来看,实在有点不太舒服~怎么说呢?鸟哥所服务的单位,很多老师教导的是属于影音实务方面的课程, 得要使用到 Windows 加上 Adobe 这些较庞大的软件怪物。由于 DRBL 暂时不支持 Windows 系统,因此,我们得要在个别的 PC 上面安装各项所需要的软件。 问题来了,假设老师的电脑放置于 192.168.100.0/24 的网段,那么同网段的十个人可以很轻松的链接到老师端的网芳来下载老师提供的范例档。 但是其他三个网段就没有这个福利了!因为『网芳缺省仅提供区网内的用户端连接』而已。因此 192.168.101.0/24 之后的网段就无法使用老师的网芳了! 除非老师自行将 Windows 防火墙关闭或更改设置,否则就是很麻烦~
那有没有办法将所有的电脑放置在同一个区网内?不要再分不同网段了啦!是可以啊!不过可能需要有网管功能的 switch 协助才行喔!就如上个小节谈到的, switch 对 switch 之间可以通过 LACP (下个小节会谈) 的功能将几个端口口绑在一起来加大两者间传输的带宽。
以鸟哥自己来说,鸟哥在自己的服务单位内,以一间共 61 台电脑的教室为示范空间, 里头摆了四部有网管的低级 switch,通过主控 switch 连接到其他三部 switch ,每部 switch 间使用 3 条网络线串接,通过 LACP 的功能,理论上可以让每个 switch 对 server 的带宽放大成三倍!同时 server 使用 bonding 功能安插了共 3 port Gbits/s 网卡,提高所有 PC 对 server 的总带宽。如此一来,所有的 PC 将可以在同一个区网内, 而且带宽方面也算是在还能接受的范围~底下为实际连接的示意图:
如上图所示,主控的 (最上方那部) switch 仅直接连接服务器与 switch 而已,并不接受一般 PC 的连接。至于其他三部 switch 则是每部连接 20 个 PC 终端设备。 因为使用 24 port switch,所以这三部 switch 总共会花费 20+3 个端口口,就剩下一个备用的啰。其他共用设备 (打印机、服务器等) 就都接在主控 switch 上头, 如此一来,一般的互联网连接,就只会经过主控 switch 与该 PC 连接的 switch,其实是有扩大带宽的功能的。
除了扩大带宽功能之外,这个方案与图 1.2-2 的方案来比较,虽然封包碰撞的情况可能较严重,或许不利于 DRBL 的环境。但考量到目前电脑很少会没有硬盘的状况, 所以这个方案着重在上课过程中,除了同学间的数据分享可以具有较高的带宽之外,所有设备都在同一个网段下,让教学的网络环境较为单纯,是比较优良的地方。
既然我们的局域网路连接需要使用到 LACP 来扩充带宽,不了解一下怎么行?所以底下就先来聊聊 LACP 吧!
LACP 的全名是 Link Aggregation Control Protocol,中文翻译为『链路聚合控制协定』,这个通信协定可以在 switch 对 switch 之间,或 switch 对 PC 之间有连接的需求时,可连接多条实体网络线,以达到网络连接容错以及增加两者间带宽的目的。
我们知道 swtich 对 switch 之间,如果没有激活特殊的功能,当连接两个以上的连接时,恐怕会造成 switch 的内部广播循环,导致整个 switch 或某些端口口的失败。 因此一般 switch 对 switch 之间,仅能连接一条实体网络线。但 switch 对 switch 之间如果仅有一个端口口的连接时,由于端口口速度的关系,整体网络传输总量的频颈将会产生在两个 switch 对接的端口口上。因此,这个 LACP 协定最初发展的目的就有两个,一个是由于有多条连接,因此连接就具有容错功能,可以在某条连接失败时, 两者间的连接依旧可以通过其他存在的连接来达成。另一个就是在增加整体的网络流量传输率(throughput)。
那么 LACP 实际上在 switch 的连接是如何进行数据发送的呢?其实所有的数据都会被分散在实体的 switch 间的连接中,另外,我们知道 switch,尤其是第二层的 switch 主要是针对网卡卡号 (MAC) 来进行数据的发送,为了不要让 switch 一直在端口口间切换同一个 MAC,因此,同一部主机所发出的连续讯框 (frame), 基本上都会通过同一个实体网络线来发送,而不是交替在不同的网络线间发送。举例来说,如果有两条对接的线,在两边的 switch 各有两部主机,并且分别对另一台 switch 的主机连接。理论上,两两 PC 连接会通过不同的两条实体线路连接,所以总带宽就可以增加一倍了!当然,这是最佳的情况啦!
事实上,两个 switch 间多条连接达成的设置模式有两种,一种是静态的固定设置 (static),一种是让 switch 自动动态询问的模式 (就是 LACP):
既然可以直接静态设置好 LAG 的链路聚合,干嘛需要使用 LACP 呢?这么说好了,假设你有三条固定的 switch 间的连接加入静态的固定设置方式, 那么这三条线都得要同时达成连接成功,有任何一条连接失败时,这两个 switch 间的连接都会失败了,因为这种方式并没有容错啦!那 LACP 就不一样, LACP 可以自动询问两个 switch 之间的连接是否有加入 LACP 协定,若有的话就会达成连接,若是该连接失败了 (例如线路脱落),那么该连接就会自动脱离 LACP 的控制,以让还存在的连接继续运作,这就是具有容错的能力了。
同时,动态的 LACP 模式提供两种类别的设置,包括 active 与 passive 两种类型,说说两种类别的运作方法吧!
所以,要达成 LACP 连接,switch 两端可以都是 active 连接,或是一边是 active 一边是 passive 才行!如果两边都是 passive 的话,那就不会有 LACP 询问讯框产生,那么 passive 就不会回应,自然也就无法达成 LACP 连接了。也就是说,接口两边至少需要有一边是 active 类别才行!
不知道你会不会觉得很奇怪,既然两者间的连接需要两个端口口间的主动沟通询问来达成 LACP 的完整连接行为,那为何需要 passive 这种类别呢? 根据 wiki 的内容说明,这是因为当 LACP 设置在 passive 类别时,即使你的环境没有任何 LACP 的连接,你的网络就不会去回应与发出任何 LACP 的讯框,如此一来,你的网络就可以持续正常运作,也不会有任何的 LACP 讯框产生。有何好处?可以节省设置的手续啦!何解?听鸟哥慢慢道来!
妳可以将你的 switch 设置启动 LACP 并且启动在 passive 类别下,那当你的 switch 并没有任何的多条网络连接与 active 的设置,那也不会有任何的干扰!可作为缺省的设置值也没关系!当有 LACP 的 active 讯框产生时,你的 passive port 就会自动的跟对方达成连接,想想看,这样是否就变得比较人性化些呢?有要求就连接,没要求就保持正常工作啊!
能不能设置 LACP 还是有一些限制的,前提之下当然就是你的 switch 要支持这个协定,一般来说,switch 上面写有支持 IEEE 802.3ad 或 IEEE 802.1ax 的, 理论上就可以支持啦!另外还有一些小细节要注意:
由于鸟哥所接触的环境中,目前仅测试过 ZyXEL 对接的系统,以及 ZyXEL 对接到 Cisco 的 switch 系统,其中又由于 Cisco 得要使用终端接口登录 RS232 的连接环境, 所以这边鸟哥就不列出示意图,详细数据可以参考文末的参考文献 (注3) 的说明内容。底下仅列出 ZyXEL 他们家的设置, 其他厂牌的 switch 请各自参考使用手册来设置吧!反正只要注意到几个重点,对接的端口口号码要对、模式要启动成 LACP,LACP 类别要设置成 Active,这样通常就能够设置妥当了。
请回到图 1.2-3 的内容,我们区网共有四台 switch,其中三台分别负责内部的 20 部电脑 (所以总量为 60 台电脑), 一台则是主干用的。主干 switch 必须要设置三个 LAG 群组,每个群组分别对应到一部 switch 的相对应群组。所以看起来主干 switch 最麻烦~ 我们就拿主干 switch 来设置给大家瞧瞧,那其他的三部依样画葫芦即可完成啰!
首先,妳必须要依据你的产品手册,找到能够登录这部 switch 的连接方式,包括 IP、帐号、密码等,ZyXEL 刚刚好有提供 web 接口的设置,于是我们就用浏览器来设置啦! 输入正确的参数后,理论上妳会看到如下的画面示意图:
如上图所示,左上角主要有四个设置值,详细的各项设置请参考您的使用手册。我们主要是找出 LACP 的设置而已,因此,依据上图箭头所指,依序点击 1 (Advanced Application), 2 (Link Aggregation), 3 (Configuration) 号按钮,同时请注意,因为这个 switch 的设置值已经实际在运作了,因此妳会看到上图画面已经有 4 个 LAG 群组!如果是您的环境,应该会看到上图右侧画面会空空如也~依序按了箭头之后,就会出现如下的画面了!
上图是设置画面的上半部,首先,请勾选 1 号箭头指的位置,那是启动 switch 的 LACP 支持的意思,这个设置项目务必要激活! 因为这是全域设置,如果妳没有勾选他,那么后面的所有设置值都缺省不会运行的!妳可以看到底下有四个 Group ID,这代表这个 switch 只支持最多四个 LAG 的群组而已。请选择你需要的项目,勾选 Active 与 Dynamic(LACP) 这两个设置值。为什么要两个通通勾选? 请自行参考上个小节 1.3 的介绍吧!不再赘述了!
上图中鸟哥会四个通通勾选,是因为除了这间教室的三部其他 switch 之外,我们还另外拉了三条网络线到主控机房,因此就得要有四个 LAG 群组。 这个示意图并不是要您全部都勾选喔!请依据妳的环境来设置即可。如果妳只有两部 switch 要互相作为 LACP 的话,那只要勾选 T1 那一列的 Active 与 Dynamic(LACP) 即可,不必每项都勾选!注意注意喔!勾选完毕后,将画面往下拉一些,妳会看到如下的图标出现了:
由于考虑到预留端口口的问题,所以我们原本是使用 9~12, 13~16, 17~20, 21~24 作为四个群组,但由于 9, 11 两个端口口又刚好出问题~ 因此,最终我们是使用如下的端口口对应到各个 LAG 的 ID:
选择好了每个 port 对应的 LAG 群组 ID 之后,那么每一个 port 最后面的 30 seconds 又是什么呢?那个是 LACP 发送检测讯框时间啦 (Control Frame Interval)!缺省应该是 1 秒钟才对,那个检测讯框时间,指的是 LACP 多久检测一次实体连接有没有保持在连接的状态中!Wiki 是说不可以设置的太长,否则当实体连接失败时,整个 LACP 群组恐怕会有一小段时间的连接中断的问题。鸟哥是建议使用 ZyXEL 的缺省 30 秒~ 这个时间不算太频繁,但也不会太短暂~算很 OK 的时间啰!
设置完毕之后,回到状态栏,妳就会看到如下图所示的模样!在这个画面截取的时候,这间电脑教室的四部 switch 是正常运作的, 所以 T1, T2, T3 就会看到设置的端口口 (Enabled Ports) 有对应到同步的端口口 (Synchronized Ports)。但第四个拉到外部的那三条线, 由于设置完毕之后,鸟哥的学生突然又重新整线,整线的时间超过了 30 秒以上,结果机房的 Cisco switch 就认定这组 LACP 完全失败了! 根据 Wiki 的文档显示,某些不同品牌的 switch 互相作为 LACP 时,确实会发生这样的情况。那怎么解决呢? 妳一定想不到!解决的方法就是,将 switch 重新设置或重新开机即可。在我们将 Cisco switch 重新开机后,嘿嘿! 整个画面就正常了! ^_^
根据 wiki 的 LACP 文档内容说明,由于讯框在 LACP 各个实体连接之间散布,其实整体性能并不可能有几条网络线就提升几倍!所以, 老实说,如果每条网络线都可以增加 50~80% 的话,那就赚到了!
为了测试整体性能,鸟哥在作好了教室内的 LACP 之后,就开了 8 部 Linux 主机来进行测试。 这 8 部主机中每 4 部串接在同一个 swich 上面,也就是说,两部 switch (假设为 A, B) 上各有 4 部主机的意思。然后两两成对,A switch 上的四部主机打开 NFS 文件系统,B switch 上的四部主机则分别挂载了 A switch 上的不同主机的 NFS 文件系统。接下来鸟哥这样做测试:
上面的测试中,我们大概可以看出来,LACP 的讯框分布演算机制可能没有这么完美,因此没有办法将四部主机平均分散到三条网络线。同时,根据信号的观察, 三条网络线接口的闪灯,通常仅有两条在闪烁,其中一条可能没有被分配到,所以常常都没有闪烁的情况...
另外,如果将四部主机同时运作的速度相加, 那么可得到整体的传输性能是 65+40*3=185 Mbytes/s ,这差不多是两条 Gbits/s 网络线的带宽了!因为通常一条 Gbits/s 的网络线,能够取得的传输带宽达到 100Mbytes/s 就很不错了啦!因此,上述的测试结果,还是可以看出 LACP 是有帮助的!而且, 当用户端数量越大时,应该可以越看得出效果呢!
谈完了区网内硬件连接的方式,加上以 LACP 的手段来处理 switch 间的带宽合并功能后,接下来我们得要谈谈区网内最重要的一部设备,那当然就是 NAT + 防火墙设备! 但是大家都会忘记,其实区网内还有两个很重要的服务,那就是自动发派 IP 的 DHCP 服务以及私有领域名称解析的 DNS 服务!咦!不是只要 DHCP 就好吗? 不要忘记了,现在很多服务都会主动的去查找『反解』的,因此,这个 DNS 真的很重要!不要忽略他~
另外,既然连 switch 之间的带宽都增加了,那如果 server 还是仅有区区那 1Gbits/s 的流量,不是很可笑吗?这时有用的 Linux bonding 技术就得要来讨论讨论才行呦!不过, bonding 的使用还是有限制的喔!并不是加了更多张网卡对于局域网路的速度就一定会有帮助的! 那就让我们来谈谈如何使用吧! ^_^
承接上一章的内容,在局域网路里面,如果考量用户端彼此之间的流量,以及整体局域网路的性能频颈,那么 LACP 是不可或缺的好帮手! 但是,一般企业或者是学校的电脑教室环境,还有后续章节我们会持续介绍的 DRBL 无碟环境中,其实大家访问最频繁的应该是服务器才对吧! 尤其是电脑教室环境中,常常需要做为用户端复原的镜像档提供者 (Server),在大家都来取得镜像档的时刻,网络说有多忙就有多忙! 所以啦,当然就得要增加服务器的带宽才行啊!
增加带宽?能不能将服务器的网卡变换成为 10Gbits/s 呢?当然不行!因为局域网路内各网络媒体如果要达成连接功能, 那么网络传输的速度必须要相同才行!如果只是将 server 的网卡改成 10Gbits/s 的情况,其他的设备通通不变,那么这张 10Gbits/s 网卡将必须要向其他 Gbits/s 妥协,所以他的速度将会降到 1Gbits/s 来跟大家连接才行!真是浪费钱了~
那我能不能用数张 Gbits/s 的网卡组合起来,让这些网卡的带宽通通绑在同一个 IP 底下,这样不就能够放大带宽了吗?OKOK!这样想才有通! 这就是 Linux kernel 里面谈到的 bonding 技术啰!
早期由于以太网路卡的速度还不够快,那如果妳的服务器需要比较大的带宽使用时,就得要购买更昂贵的设备才行。 那为什么不能将几张网卡合并成为一张来扩大带宽呢?此外,对于重要的服务来说,网络是不能中断的!所以,能不能使用两条以上的线路连接到我的服务器呢? 因此,(1)合并网络卡的带宽与 (2)让网络具有容错能力 (fault tolerance) 就成了 Linux bonding 最主要的考量了!目前 Linux bonding 功能已经加入内核,所以妳只要启动它即可!不需要额外安装其他软件呦!
另外得要注意的是,如果妳的服务器想要使用 bonding 来增加合并带宽的话,那就不能使用 hub 了!因为 hub 是共享媒体,总带宽是不变的! 要使用 switch 才行!这样才能够增加服务器的整体带宽使用喔!不过还是有些限制的~后面会再来讲一讲。
既然 Linux bonding 主要的任务是将多张网卡合并带宽或者是作为备援与容错,那么妳的服务器上面当然就得要有多张网卡才行!那这么多张网络卡组合起来使用, 到底可以怎么用呢?这时候就得要考虑到妳想要达成什么功能啦!底下就来谈谈~
根据 wiki 的文档以及相关内核文档的说明, Linux bonding 共有七种模式!不过我们仅说说常见的几种模式而已:
让我们回到图 1.2-3 的环境下,所有的 switch 之间的连接已经改成 LACP 了! 这个图标中,我们是可以使用 LACP 的 mode=4 的方式来处理 bonding,不过,鸟哥比较建议使用 mode=6 这个简单的设置方式!性能其实没有差很多, 设置与使用上则更简便!图 1.2-3 里面的那部主机,其实是 2009 年左右的产品,里头仅有一张内置的网卡而已。鸟哥在上头额外安插了三张网卡 (所以共有 4 张), 一张作为 Gateway 对外提供 Internet 连接,三张 (连同内置网卡) 则做为内部的区网环境使用。
设置 bonding 的方法其实很简单,首先,(1)妳必须要加载 bonding 模块,且将妳的 bonding 接口取个名字,通常最常取的名字就是 bond0。 如果妳想要做成两个 bonding 的话,那就得要有 bond0, bond1.. 依此类推。再来,(2)妳得要修改归这个 bonding 接口管理的网络卡设置档, 就是在 /etc/sysconfig/network-scripts/ifcfg-ethX 的文件内容,改完之后,(3)接下来就是创建 bond0 这个新的接口的网络设置档, (4)最后重新启动网络就成功了!就让我们来实际测试看看吧!
[root@centos ~]# vim /etc/modprobe.d/bonding.conf alias bond0 bonding # bond0 为我们需要的接口, bonding 则是 Linux 的内核模块之意! |
[root@centos ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1 DEVICE="eth1" HWADDR="00:1B:21:3E:8C:47" <==某些情况下,可能要对应好网卡卡号,才能够让网卡正确取得代号 NM_CONTROLLED="yes" ONBOOT="yes" MASTER=bond0 SLAVE=yes USERCTL=no # 最重要的是那个 MASTER 与 SLAVE 两个设置项目。且因为是受 bond0 管理,所以不需要网络参数。 # 至于 eth2, eth3 则是依样画葫芦,这里就不示范啰!自行修订即可。 |
[root@centos ~]# vim /etc/sysconfig/network-scripts/ifcfg-bond0 DEVICE=bond0 USERCTL=no BOOTPROTO=none ONBOOT=yes IPADDR=192.168.42.254 NETMASK=255.255.255.0 BONDING_OPTS="miimon=100 mode=6" TYPE=Unknown IPV6INIT=no # 重点是 BONDING_OPTS 这一串!mode=6 不用谈,当然就是各个模式!这里我们用 6 , # 至于那个 miimon 指的是『多久侦测一次各个 slave 网卡的连接状态』的意思, # 这个值的单位是『毫秒』,就是 10 的 -3 次方秒~1000毫秒为一秒~ # 也就是说,我们大约 0.1 秒就侦测一次每张网卡的状态!据以进行网络容错测试! |
[root@centos ~]# /etc/init.d/network restart [root@centos ~]# ifconfig bond0 Link encap:Ethernet HWaddr 00:1B:21:3E:8C:47 inet addr:192.168.42.254 Bcast:192.168.42.255 Mask:255.255.255.0 inet6 addr: fe80::21b:21ff:fe3e:8c47/64 Scope:Link UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1 ....(中间略过).... eth1 Link encap:Ethernet HWaddr 00:1B:21:3E:8C:47 UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1 ....(中间略过).... eth2 Link encap:Ethernet HWaddr 00:07:E9:5E:2D:76 UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1 ....(中间略过).... eth3 Link encap:Ethernet HWaddr 00:07:E9:5E:09:8D UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1 |
[root@centos ~]# cat /proc/net/bonding/bond0 Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009) Bonding Mode: adaptive load balancing <== 注意到,是否为 mode 6 才行! Primary Slave: None Currently Active Slave: eth1 <== 目前以哪张网卡为主要网络服务提供者! MII Status: up MII Polling Interval (ms): 100 <== 多久侦测一次网卡连接有问题否 (单位毫秒) Up Delay (ms): 0 Down Delay (ms): 0 Slave Interface: eth1 MII Status: up Speed: 1000 Mbps <== 这张网卡的速度有多快? Duplex: full <== 是否为全双工/半双工 Link Failure Count: 0 <== 这张网卡连接曾发生过几次错误? Permanent HW addr: 00:1b:21:3e:8c:47 Slave queue ID: 0 Slave Interface: eth2 MII Status: up Speed: 1000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: 00:07:e9:5e:2d:76 Slave queue ID: 0 ....(底下省略).... |
虽然说 Linux bonding 有很多好处,但是它并不是万灵丹!某些场合底下还是无法增加带宽的!很多文档都没有写到这点,或者是虽然有带到,但是却没有特别强调! 因此,鸟哥一开始利用 bonding 来增加虚拟机的带宽时,曾经遭遇到非常多的问题,导致有一阵子有点厌恶 bonding 哩~就是没有搞清楚的原因啦! 那就来让大家搞清楚一点好了!来看看吧!
另外,鸟哥用过最简单而且性能最好的应该是 mode 6 这个模式!简单好用,又不用重新设置 switch,缺少网卡就叠上去,非常简单! 所以,有兴趣的伙伴们,可以使用这个模式来制作一下,应该可以得到不错的效果呦!
我们知道 gigabit 网络卡的理论极限速度可以到达大约 120Mbytes/s 的文件传输量。不过,由于 gigabit 网络卡设计的插槽接口的差异,速度落差非常大喔! 鸟哥去年 (2012) 为了研究上面的需求,又因为要买比较便宜的 GB 网卡 (没有钱作大量研究啦),因此购买了数十张的 Intel PCI 接口的网卡,原本想说,PCI 的传输率为 32bit * 33MHz => 1000 Mbits/s ,这与 GB 网卡的速度应该是差不多才对!没想到实际应用之后,可能 PCI 接口的传输已经快要饱和, 所以测试出最快的 PCI 传输率大约只到 70Mbytes/s 而已,与理论值也差太多了...
后来还是为了经费,所以还是买了比较便宜的 PCI-E 1X 一倍数的网卡,只是没想到,这个 PCI-E 的 GB 网卡 (用的是螃蟹卡芯片组) ,性能随随便便就可以上 90~100 Mbytes/s,与 Intel 的 PCI-E 1X 的 105~110 Mbytes/s 差异没很大,但跟 PCI 接口也差太多了!因此,建议如果想要使用 bonding 时,最好所有的网卡速度能够差不多比较妥当!不要使用 PCI-E, PCI 接口混插,不然好像效果会没很好,因为这与 bonding 的主控 slave 网卡找到哪一张有关~
那怎么测试性能呢?过去鸟哥都习惯使用 NFS 然后一堆用户端挂载服务器后,用力的 dd 下去!后来发现,这样的测试方法不太准确,因为都卡在磁盘的性能上~测不出网络性能。 因此,如果想要测试 bonding 到底有没有效果,你可以这样实验看看:
这个测试中,因为服务器的大文件仅提供用户端读取,并没有写入。如果你的内存够大 (超过 4G 以上),这个文件将被内存缓存住!此时,所有传输将不会再次的读取硬盘了。 而你在用户端使用 dd 读入大文件后直接丢入垃圾桶 (/dev/null) ,这样用户端也没有用到磁盘读写,如此就可以单纯的去测试网络性能了。
在鸟哥的测试中,四部主机同时跑时,由于鸟哥用了三 GB 网卡作 bonding,此时将会有两部主机共用一张网卡,所以有两部主机速度可达 80~90Mbytes/s,另外两部仅能到达 60Mbytes/s 而已。 不过,这样也差不多有 70~80% 的理论速度啦!还算很 OK 的啦!
整理完服务器与局域网路内的网络带宽问题后,再来就是得要处理处理局域网路内的整体网络参数啦!在鸟哥本章的案例中,我们用的是图 1.2-3 里头的环境,因应该环境所在的教室编号,所以鸟哥使用的是 192.168.42.0/24 这一段私有网域啦!在鸟哥的习惯上,会使用最后一个可用 IP 作为路由器设置,因此,鸟哥这部服务器对内的 IP 就会是 192.168.42.254 啰。另外,本教室对外的那个 IP 我们就假设为 1.2.3.4/24 ,Gateway 就设为 5.6.7.8 (详细的对外 IP 就得要询问贵中心啰)。
另外,在服务器架设篇当中,我们提到通常局域网路的主控电脑防火墙中,对内部的主机管理会比较松散,对外则比较严格。不过,由于这是个电脑教室环境,啥时会有人来恶搞,你也不知道, 也就是说,对内的防火墙设置恐怕也得思考才行!不能随便通通放行的!底下我们就来谈一谈吧!
其实网络参数设置在本案例中,就仅有 eth0 与 bond0 需要设置而已,其中 bond0 已经在前一个小节里面谈过了。至于 eth0 这个对外的 IP 设置,你只要注意到 IP, Netmask, Gateway 必须要跟你的 ISP 取得正确的数据来设置即可,并没有什么难处啊!不过这里得要特别强调一下,希望不要启动 Network Manager 这个网络管理模块, 否则常常会出现一些奇奇怪怪的问题喔~
# 1. 先设置好 ifcfg-eth0 设置档吧!ifcfg-bond0 请参考上一小节的设置: [root@centos ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE="eth0" HWADDR="00:26:18:C3:7D:21" NM_CONTROLLED="yes" ONBOOT="yes" IPADDR=1.2.3.4 <== 重点是改这三行! NETMASK=255.255.255.0 GATEWAY=5.6.7.8 # 2. 设置好 DNS server 的设置: [root@centos ~]# vim /etc/resolv.conf nameserver 120.114.150.1 <== 先用教室所在处的昆山科大的 DNS 服务器!这未来会变喔! nameserver 120.114.100.1 # 3. 关闭 Network Manager 之后,重新启动网络并观察: [root@centos ~]# /etc/init.d/NetworkManager stop <== 立刻关闭 [root@centos ~]# chkconfig NetworkManager off <== 重新开机也不会启动 [root@centos ~]# chkconfig NetworkManager --list NetworkManager 0:off 1:off 2:off 3:off 4:off 5:off 6:off [root@centos ~]# /etc/init.d/network restart [root@centos ~]# ifconfig <== 看 IP/Netmask 对否 [root@centos ~]# route -n <== 看 GW 对否 [root@centos ~]# ping -c 3 5.6.7.8 <== 看与 GW 的连接正常否 [root@centos ~]# dig www.google.com <== 看 DNS 设置正确否 # 建议上面的检查步骤请每次设置完网络且重新启动后,一定要进行一次!避免出现问题啊! |
还记得服务器篇里面说过吗?针对你开放的网络服务来说,防火墙其实一点用处也没有~那如何强化你的网络服务呢?最简单的想法就是『更新到最新版本!』 虽然对某些强调酷炫的 Linux distribution 来说,升级到最新的版本不见得是有修补漏洞的结果,但针对企业版的 CentOS 来说,更新到最新版,确实就有一定程度的保护力。
考虑到中小企业对外网络带宽可能原本就不够啊,因此,找一个最靠近你的映射站是很重要的!以昆山科大来说,我们学校有提供 FTP 服务,且 FTP 里面就有 CentOS 的映射数据了!当然就选择校内的网址为优先!如果你是非昆山校内的机器,那就建议使用国家高速网络中心的 FTP 啰!
# 如果是在昆山科大校内,那就使用校内的 FTP 服务器了: [root@centos ~]# vim /etc/yum.repos.d/CentOS-Base.repo [base] name=CentOS-$releasever - Base baseurl=http://ftp.ksu.edu.tw/FTP/CentOS/6/os/x86_64/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 [updates] name=CentOS-$releasever - Updates baseurl=http://ftp.ksu.edu.tw/FTP/CentOS/6/updates/x86_64/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 # 建议就保留这两个,其他的都先杀掉或者是加上 enabled=0 的设置来暂时不使用! # 如果不在昆山科大,但是在台湾本岛,那就使用国家高速网络中心吧! [root@centos ~]# vim /etc/yum.repos.d/CentOS-Base.repo [base] name=CentOS-$releasever - Base baseurl=http://ftp.twaren.net/Linux/CentOS/6/os/x86_64/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 [updates] name=CentOS-$releasever - Updates baseurl=http://ftp.twaren.net/Linux/CentOS/6/updates/x86_64/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 # 选择好你的 YUM 软件仓储来源后,开始更新系统啊!依据 CentOS 版本不同,速度会有差异! [root@centos ~]# yum clean all [root@centos ~]# yum -y update # 开始一堆升级进程!这里鸟哥就略过不写了! [root@centos ~]# vim /etc/crontab 10 0 * * * root /usr/bin/yum -y update <== 每天凌晨 12 点进行一次自动更新!! |
更新了软件之后,还得要记得,不用的软件最好将他关掉!不但节省系统资源,也能够避免某些忘记关掉的网络服务被攻击!那么哪些服务可以关闭呢? 这就得要看您的环境而定了,并没有一定的规范~不过,鸟哥通常喜欢用『 netstat -tlunp 』这个指令来查出目前有启动于 TCP/UDP 监听的服务, 然后再去 /etc/init.d/* 找到相对应的启动脚本,进入该脚本去查找该功能为何,如果该功能真的不需要,那就予以关闭,如果不知道是啥咚咚,通常会先保留啦!
[root@centos ~]# vim close_service.sh #!/bin/bash services="NetworkManager autofs avahi-daemon certmonger cups kdump rpcbind rpcgssd rpcidmapd nfslock" for service in ${services} do chkconfig ${service} off /etc/init.d/${service} stop done # 将不需要的服务一个一个关掉~请依您的需求写入上头的 services="" 双引号内即可! # 完全照上面的抄写时,可能会有某些不存在的服务,发生一些错误也没关系~ [root@centos ~]# sh close_service.sh |
在更新系统完毕且关闭不必要的服务后,如果你从来没有更新过,或者是好长一段时间忘记更新了,那可能就得要重新开机 (reboot)!原因是, 你的系统内核可能已经被更新过,内核升级一定要重新开机才能选择新内核,否则升级的内核是不会被使用的!这与一般软件不太一样喔!注意注意!一般来说, 更新完毕后如果有:(1)内核与 (2)重大软件函数库 (例如 glibc, openssl 等软件) 时,就一定要重新开机!否则调用这些函数库的软件并不会使用新的函数库功能之故!
前面稍微提到,我们的重点是想要让这部服务器针对内网提供一堆服务~不过又担心被内网的用户搞破坏~所以,针对 Internet 应该要严格限制, 但对于内部网络而言,还是仅开放要让用户连接的服务之端口口即可!没必要全部放行啦!我们这部服务器『并不针对 Internet 放行任何服务』,不过, 由于管理者可能会从另一段局域网路连进来,因此可能还是得要设置信任 IP 给互联网连进 port 21, 22, 80 来进行测试才行啊!预计的服务器对内、对外服务以及信任 IP 分别是:
针对上述功能,鸟哥拿服务器架设篇的简易防火墙来进行修改,并将整个脚本再简化,得到如下的结果:
[root@centos ~]# vim iptables.sh #!/bin/bash # 先设置好本脚本所需要的各项参数: nic_out="eth0" <== 对外部连接的网卡代号 nic_in="bond0" <== 对内部连接的网卡代号 trust_ip="1.2.3.4/24,4.3.2.1" <== 来自外部连到本服务器的信任 IP # 底下 6 行在清除规则与设置缺省防火墙政策 iptables -F iptables -X iptables -Z iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT # 底下三行放行服务器本机所需要的网络封包 iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -p icmp -j ACCEPT # 底下数行是针对内网开放各式服务!请参考上述说明,就知道这几个 port 的意义为何了! iptables -A INPUT -i ${nic_in} -p tcp -m multiport --dport 21,22,53,80,3128 -j ACCEPT iptables -A INPUT -i ${nic_in} -p udp -m multiport --dport 53,67,69 -j ACCEPT iptables -A INPUT -i ${nic_in} -p tcp -m multiport --dport 111,2049,901:904 -j ACCEPT iptables -A INPUT -i ${nic_in} -p udp -m multiport --dport 111,2049,901:904 -j ACCEPT iptables -A INPUT -i ${nic_in} -p udp --dport 9000:9001 -j ACCEPT iptables -A INPUT -i ${nic_in} -j REJECT # 针对外部来的信任 IP 网段之设置! iptables -A INPUT -i ${nic_out} -p tcp -m multiport --dport 21,22,80 -s ${trust_ip} -j ACCEPT # 清除内部要连到外网的 SNAT 功能!并设置好 IP 伪装,后面几行则是保留给未来使用的! iptables -t nat -F iptables -t nat -X iptables -t nat -Z iptables -t nat -P PREROUTING ACCEPT iptables -t nat -P POSTROUTING ACCEPT iptables -t nat -P OUTPUT ACCEPT iptables -t nat -A POSTROUTING -s 192.168.42.0/24 -o eth0 -j MASQUERADE #iptables -t nat -A PREROUTING -s 192.168.42.0/24 -p tcp --dport 80 -j REDIRECT \ # --to-ports 3128 #iptables -t nat -A PREROUTING -i ${nic_out} -p tcp --dport 8080 -j DNAT \ # --to-destination 192.168.42.40:80 /etc/init.d/iptables save <== 这行加上去,自动保存防火墙规则! [root@centos ~]# sh iptables.sh [root@centos ~]# vim /etc/sysconfig/iptables-config IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp" # 找到上面这行,将内容加上两个可以让 FTP 顺利运作的模块呦! [root@centos ~]# /etc/init.d/iptables restart # 不要忘记还得要启动内核转递的规则才行呦! [root@centos ~]# vim /etc/sysctl.conf net.ipv4.ip_forward = 1 <==将这一行的 0 改成 1 即可! [root@centos ~]# sysctl -p |
这样就整个处理完毕啰!有够好简单吧! ^_^!不过由于你开放内网与信任网段的 ssh 连接,这里鸟哥也是要建议您,/etc/ssh/sshd_config 这个设置档中, 针对 root 是否可以登录的项目部分,最好是设置为 no,不让 root 登录为宜喔!
区网的硬件网络带宽搞定、服务器本身的网络参数搞定,再来要干嘛?当然是局域网路内部用户端的网络参数分派啦!用户端取得的网段为 192.168.42.0/24, 至于 Gateway 则是服务器本身内网的 IP (192.168.42.254),那 DNS 呢?
大家知道,很多软件都会去反向检查 DNS 的反解~我们知道 192.168.42.0/24 是私有 IP 的网段,因此,当有内部网络连接的需求时,如果没有加上反解的确认, 在达成连接的时间会比较久~为解决这问题,因此鸟哥的服务器也会提供 DNS 的服务,因此,用户端取得的 DNS 也是咱们这部服务器的 IP 喔!
老实说,这件示范教室还挺有趣的,因此很多会议或研习都会在这里举行,因此,很多时候,伙伴们都会携带笔电或者是其他行动设备来这里上网~一听到这种模式,当然 DHCP 自动分配 IP 是最简单的!不过,由于这间教室平时是电脑教室课程来上课的,老师们喜欢固定座位有固定的 IP,这样也比较好管理啊!也就是说,这间教室在台式机的部分, 希望是固定 IP 的分配,但是额外还会提供一些 IP 来给行动设备使用的。
鸟哥的规划是,自动分配的是 192.168.42.101~192.168.42.200 这 100 个可用 IP,至于 192.168.42.1 到 192.168.42.100 则保留给教室内的固定终端设备使用。 但这间电脑教室共有 62 个设备ㄟ!包括 61 部主机以及一部打印机。如果要每部主机都去登记网卡的 MAC 再来服务器设置 dhcp 设置档,真的很头昏~因此,固定 IP 的部分, 我们通过的方式,是先去用户端电脑启动一个 Linux 系统,将该 Linux 系统手动设置 IP (ifconfig eth0 192.168.42.X),然后通过 ARP 的指令去侦测 IP 与 MAC 的对应, 最终写入设置档即可。这样可以避免抄错卡号,在实作上面也比较能够相信实际座位与主机 IP 的对照表!
在你完成后面几章才会谈到的 kickstart 大量部署 Linux client 端操作系统后,教室内每部电脑都会有一个可用的 Linux 系统,登录他,用上述的方法实作, 然后运行下列的功能来取得每部电脑的 MAC 吧!
[root@centos ~]# vim getmac.sh #!/bin/bash read -p "How many PC's in this class (31, 54, 61)? " num if [ "$num" != "" ]; then for site in $(seq 1 ${num}) do siteip="192.168.42.${site}" allip="$allip $siteip" ping -c 1 -w 1 $siteip > /dev/null 2>&1 if [ "$?" == "0" ]; then okip="$okip $siteip" else errorip="$errorip $siteip" echo "$siteip is DOWN" fi done [ -f getmac.conf ] && rm getmac.conf for site in $allip do pcname=pc$(echo $site | cut -d '.' -f 4) mac=$(arp -n | grep "$site " | awk '{print $3}') echo " host $pcname {" echo " hardware ethernet ${mac};" echo " fixed-address ${site};" echo " }" echo " host $pcname {" >> getmac.conf echo " hardware ethernet ${mac};" >> getmac.conf echo " fixed-address ${site};" >> getmac.conf echo " }" >> getmac.conf done else exit 0 fi echo "You can use getmac.conf (this directory) to modified your /etc/dhcp/dhcpd.conf" echo "Finished." [root@centos ~]# sh getmac.sh How many PC's in this class (31, 54, 61)? 4 host pc1 { hardware ethernet 52:54:00:ac:30:56; fixed-address 192.168.42.1; } ....(底下省略).... You can use getmac.conf (this directory) to modified your /etc/dhcp/dhcpd.conf Finished. |
最终你会在该目录中取得一个名为 getmac.conf 的文件,将里面的数据粘贴 dhcpd.conf 即可。但是,dhcpd.conf 内容要怎么制作呢?我们用最阳春的方式来设置他! 而且,预计每部主机的名称会是 pcX.i4502.dic.ksu ,其中 i4502 就是我们这间电脑教室的编号!
[root@centos ~]# yum -y install dhcp [root@centos ~]# vim /etc/dhcp/dhcpd.conf ddns-update-style none; default-lease-time 259200; max-lease-time 518400; option routers 192.168.42.254; option broadcast-address 192.168.42.255; option domain-name-servers 192.168.42.254; subnet 192.168.42.0 netmask 255.255.255.0 { range 192.168.42.101 192.168.42.200; option subnet-mask 255.255.255.0; option domain-name "i4502.dic.ksu"; # 从这行底下的,都是刚刚 getmac.conf 的内容抓过来使用的! host pc1 { hardware ethernet 52:54:00:ac:30:56; fixed-address 192.168.42.1; } ....(中间省略).... } <== 不要忘记这个大刮号! [root@centos ~]# /etc/init.d/dhcpd restart <== 立刻启动 [root@centos ~]# chkconfig dhcpd on <== 下次开机也会启动 [root@centos ~]# vim /var/log/messages <== 重点是看一下注册表有没有顺利启动 |
你没有看错喔!这样就结束了!更多 DHCP 相关的介绍,请参考服务器篇的相关内容吧!
如果你真的很有服务器课程的经验时,那偶而可能会发现,在比较高端 switch 的教室环境中,介绍如何自动取得 DHCP 网络参数的课程时,让学生重新取得 IP 的速度怎么会这么慢? 大概得要等个十几秒到半分钟左右!怎么会这样?明明都是 gigabit 的网络速度了!不可能这么慢吧?其实,这是由于 switch 为了要避免某些呆瓜不小心让 switch 之间连接错误, 导致循环 (loop) 来造成广播风暴,最终让整个区网的网络停止的问题,而增加的 STP (Spanning Tree Protocol) 这个通信协定的问题。
我们在前面的小节里面谈到 LACP 之前,曾经说过,有两部 switch 之间如果没有做好一些通信协定的设置,直接拿两条网络线同时串接起来,switch 之间可能就会产生广播风暴, 造成整个 switch 的停顿。那个广播风暴的成因就是 switch loop (交换器内部封包循环问题)。那你会说,好!我知道了,为了避免这个问题,每个 switch 之间都最多串接一条线就好! 这样总不会出问题了吧?很可惜,还是会出错!怎么回事?找个案例好了,如下图所示:
每间电脑教室都已经串接在一起,主要通过教室 A 来跟其他两个教室的 switch 串接。有个同学来这个环境后,想说,那我能不能直接将教室 B 与教室 C 串在一起, 实体线路串在一起比较快嘛!所以,拿了条网络线就直接串在一起啦!如上图所示的环境。这时,有没有看到一个圈圈啊!这就形成一个回路 (Loop)!这个时候就会产生广播风暴了! 没有人是故意的!问题是,如果线拉的够长,就有可能会出现这个情况啊!理解乎?
为了解决这个问题,因此,国际组织就核定了 STP (Spanning Tree Protocol) 这个通信协定!这个通信协定的目的,就是在于解决 switch loop 的问题! 通过的解决方式是:『让产生 loop 的端口口中,找出最无关紧要的那条线,让那条线中断 (down) 』就解决了!但这里就产生几个问题要处理:
更详细的 STP 相关介绍可以参考文末的参考文献的数据,这里不再重复。你要问的问题是,那为何 STP 会影响 DHCP 呢? 由于 switch 会侦测 switch 之间是否有产生 loop 的情况,因此当你在某个端口口安装一部主机后,这部主机的网络使用权大约得花 30 秒钟才能够启动。 那当你重新取得 IP 时,某些 swtich 就有可能误判你这个 switch port 有重新被调整过,为了避免 loop,于是他就进入检测状态,一般得要花 30 秒钟才能够侦测完毕啊!
所以,为了节省不必要的等待时间,你可以:
如同在 LACP 设置的小节里面谈到的,鸟哥管理的这间电脑教室目前使用的是旧式的 switch,过去全部的端口口都激活 STP 的缺省设置时,dhcp 的延迟非常严重! 很多同学甚至会发生 DHCP timeout 的惨剧,导致无法取得 IP 来进行上课!这真是非常的杯具啊~(喝茶去)~后来问了昆山科大计中的罗丰彬组长,这才发现有可能是 STP 这玩意儿的影响! 相当感谢罗组长大人的提醒啊!
之前我们是将 STP 整个关闭的,不过,STP 既然可以避免 switch loop 的状况,那,在做成 LACP 的那几个端口口,应该还是打开一下 STP 比较好!同时, 为了降低 DHCP 的延迟,因此鸟哥将整个 STP 的收敛时间设置的比较短些,因此目前 DHCP 的 IP 参数取得,大约是在 10 秒钟内可以顺利完成!算是可接受的范围内啦! 底下还是使用 ZyXEL 的交换器来作个简单的示范吧:
如上图所示,按下 1 号箭头『 Spanning Tree Protocol 』的设置后,再按下右上角的『 Configuration 』进入设置环境中!如下图所示:
为了避免用户端电脑通过 LACP 的线路向 server 要求 DHCP 服务而有延迟现象的状况,所以我们是将这个 STP 的许多收敛时间整个缩小了!基本上,Hello Time 保留 2 秒钟, Max Age 则从 20 秒修订为 7 秒,Forwarding Delay 则由 15 秒缩减为 5 秒,这样的设置完成之后,用户端取得 DHCP 的时间可大幅的从 timeout 的悲剧性状况, 变成小于 10 秒内完成的可接受范围内。这个是整体设置,那设置仅将 STP 开放于 LACP 端口口上的情况,就得要针对每个端口口来调整,如下:
如上图所示,我们仅针对有设置 LACP 的端口口作 STP 的设置而已。其实如果修改了上面的时间参数,全部的端口口启动应该也还 OK 没问题~ 不过如果没有调整 STP 的收敛时间,那你的 DHCP 恐怕会很慢!
局域网路的 DNS 设置那就简单了!重点是你务必要有正解与反解~因为『反解』才是我们要作内部区网 DNS 的主要原因啊!再重复一次我们预计要处理的网域名称对应:
其实,整个 DNS 的设置与注意事项,都在服务器篇里面谈过了,这里仅是很快速的将我们所需要的环境,如果你需要每个设置项目的详细说明,就请参考服务器篇里面的 DNS 吧!那就让我们开始来处理啰!只要两个 domain,一个正解的 i4502.dic.ksu,以及一个反解的 192.168.42.254 即可!
[root@centos ~]# yum install bind bind-chroot [root@centos ~]# vim /etc/named.conf options { directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-query { any; }; recursion yes; }; zone "." IN { <== 一定要存在的项目 type hint; file "named.ca"; }; zone "i4502.dic.ksu" IN { <== 这是正解的相关设置 type master; file "named.i4502.dic.ksu"; }; zone "42.168.192.in-addr.arpa" IN { <== 这是反解的相关设置 type master; file "named.192.168.42"; }; |
[root@centos ~]# cd /var/named [root@centos named]# vim named.i4502.dic.ksu $TTL 86400 @ IN SOA @ root ( 20130401 1D 1H 1W 3H ) @ IN NS @ @ IN A 192.168.42.254 server IN A 192.168.42.254 pc1 IN A 192.168.42.1 pc2 IN A 192.168.42.2 ....(中间省略).... pc199 IN A 192.168.42.199 pc200 IN A 192.168.42.200 [root@centos named]# chmod 640 named.i4502.dic.ksu [root@centos named]# chown root.named named.i4502.dic.ksu |
[root@centos named]# vim named.192.168.42 $TTL 86400 @ IN SOA server.i4502.dic.ksu. root.server.i4502.dic.ksu. ( 20130401 1D 1H 1W 3H ) @ IN NS server.i4502.dic.ksu. 254 IN PTR server.i4502.dic.ksu. 254 IN PTR i4502.dic.ksu. 1 IN PTR pc1.i4502.dic.ksu. 2 IN PTR pc2.i4502.dic.ksu. ....(中间省略).... 199 IN PTR pc199.i4502.dic.ksu. 200 IN PTR pc200.i4502.dic.ksu. [root@centos named]# chmod 640 named.192.168.42 [root@centos named]# chown root.named named.192.168.42 |
[root@centos ~]# /etc/init.d/named start [root@centos ~]# chkconfig named on [root@centos ~]# vim /etc/resolv.conf nameserver 127.0.0.1 <== 注意!这要在上面才对!才会用到自己的 DNS! nameserver 168.95.1.1 [root@centos ~]# vim /var/log/messages Apr 1 12:14:53 centos named[2212]: zone 42.168.192.in-addr.arpa/IN: loaded serial 20130401 Apr 1 12:14:53 centos named[2212]: zone i4502.dic.ksu/IN: loaded serial 20130401 Apr 1 12:14:53 centos named[2212]: managed-keys-zone ./IN: loaded serial 0 Apr 1 12:14:53 centos named[2212]: running # 要看到如上图的特殊字样才好! [root@centos ~]# dig server.i4502.dic.ksu [root@centos ~]# dig pc1.i4502.dic.ksu [root@centos ~]# dig -x 192.168.42.254 [root@centos ~]# dig -x 192.168.42.1 # 要有出现个别的 IP 以及个别的主机名称才是对的! |
进行到这一步,你的整个区网内部网络连接,应该是有备援的稳定,以及合并带宽的优点~接下来的章节,就让我们来搞一搞怎么大量部署内部网络的用户端吧! 期待下一章的内容吧! ^_^
其实,这整篇文章最重要的地方在讲一个概念,那就是我们的局域网路使用 1Gbits/s 的流量已经不够用了!尤其是在需要较大带宽的电脑教室或中小型企业环境下。 这时就得要进行一些手脚才能够让区网的带宽给予提升!所以才会谈到 LACP 以及 bonding 等功能。此外,未来的世界里面,非常多的虚拟化啊!这些虚拟化的服务器, 最可怕的地方在于文件系统的跨网络访问,恐怕连 10G 都无法解决虚拟化的大带宽需求!这时,很多上面用到的技术就值得来练习啰!
这篇文章也很感谢鸟哥的学生们,包括吴虹霖、刘俊睿帮忙查找 LACP 以及 Cisco 的 switch 设置仿真,苏伟哲、施译其、林佳辰等人协助局域网路的线路设置, 还有其他的同学们,感谢妳们喔!
另外,上面的实作中,其实最简单的是服务器的设置,最麻烦的地方在于网络线路的配置!实际动工过,您就知道鸟哥为什么这么讲了! 所以,如果对自己的施工没有信心,记得一定要请专家来配线!因为,线路一配下去,一用就是十数年~留心!留心!注意!注意!