4.4 常见问题说明
其实这个小节也很重要的!因为可以让你在念完理论后,了解一下如何利用那些概念来查询你的网络设定问题喔! 底下我们就针对几个常见的问题来说说看吧!
4.4.1 内部网域使用某些联机服务(如 FTP, POP3)所遇到的联机延迟问题
你或许曾经听过这样的问题:『我在我的内部区域网域内有几部计算机, 这几部计算机明明都是在同一个网域之内,而且系统通通没有问题,为什么我使用 pop3 或者是 ftp 连上我的 Linux 主机会停顿好久才连上?但是连上之后,速度就又恢复正常!』
由于网络在联机时,两部主机之间会互相询问对方的主机名配合的 IP ,以确认对方的身份。 在目前的因特网上面,我们大多使用 Domain Name System (DNS) 系统做为主机名与 IP 对应的查询,那就是我们在上面提到的 /etc/resolv.conf 档案内设定的 IP 由来, 如果没有指定正确的 DNS IP 的话,那么我们就无法查询到主机名与 IP 的对应了。
公开的因特网可以这样设定,但是如果是我们内部网域的私有 IP 主机呢? 因为是私有 IP 的主机,所以当然无法使用 /etc/resolv.conf 的设定来查询到这部主机的名称啊! 那怎么办?要知道,如果两部主机之间无法查询到正确的主机名与 IP 的对应, 那么将『可能』发生持续查询主机名对应的动作,这个动作一般需要持续 30-60 秒,因此,你的该次联机将会持续检查主机名 30 秒钟,也就会造成奇怪的 delay 的情况。
这个问题最常发生在内部的 LAN ,例如使用 192.168.1.1 的主机联机到 192.168.1.2 的主机。 这个问题虽然可以透过修改软件的设定来略过主机名的检查,但是绝大多数的软件都是默认启用这个机制的, 因此,内部主机『老是联机时期很慢,联机成功后速度就会恢复正常』 时,通常就是这个问题啦!尤其是在 FTP 及 POP3 等网络联机软件上最常见。
那么如何避过这个情况?最简单的方法就是『给予内部的主机每部主机一个名称与 IP 的对应』即可。举例来说,我们知道每部主机都有一个主机名为 localhost ,对应到 127.0.0.1 ,为什么呢?因为这个 127.0.0.1 与 localhost 的对应就被写到 /etc/hosts 内嘛! 当我们需要主机名与 IP 的对应时,系统就会先到 /etc/hosts 找寻对应的设定值, 如果找不到,才会使用 /etc/resolv.conf 的设定去因特网找。这样说,你明白了吧? 也就是说,只要修改了 /etc/hosts,加入每部主机与 IP 的对应, 就能够加快主机名的检查啰!
了解了吗?所以说,你就要将你的 私有 IP 的计算机与计算机名称写入你的 /etc/hosts 当中了!这也是为啥我们在主机名设定的地方, 特别强调第五个检查步骤的缘故。我们来看一看 /etc/hosts 原本的设定内容吧!
[root@www ~]# cat /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
# 主机的 IP 主机的名称 主机的别名
在上面的情况中很容易就发现了设定的方法了吧!很简单吧!没错!那就是 IP 对应主机名啦! 那么现在知道为什么我们给他 ping localhost 的时候,地址会写出 127.0.0.1 了吧! 那就是写在这个档案中的啦!而且 localhost 那一行不能拿掉呦! 否则系统的某些服务可能就会无法被启动!好了!那么将我局域网络内的所有的计算机 IP 都给他写进去!并且,每一部给他取一个你喜欢的名字, 即使与 client 的计算机名称设定不同也没关系啦! 以鸟哥为例,如果我还额外加设了 DHCP 的时候,那么我就干脆将所有的 C Class 的所有网段全部给他写入 /etc/hosts 当中,有点像底下这样:
[root@www ~]# vim /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
192.168.1.1 + linux001
192.168.1.2 + linux002
192.168.1.3 + linux003
.........
.........
192.168.1.254 linux254
如此一来,不论我哪一部计算机连上来,不论是在同一个网段的哪一个 IP , 我都可以很快速的追查到!嘿嘿!那么区内网络互连的时候,就不会多等个好几时秒钟啰!
4.4.2 网址列无法解析问题
很多朋友常问的一个问题『咦!我可以拨接上网了,也可以 ping 到奇摩雅虎的 IP ,但为何就是无法直接以网址连上 Internet 呢!』嘿!被气死! 前面不是一直强调那个 DNS 解析的问题吗?对啦!就是名称解析不对啦!赶快改一下 /etc/resolv.conf 这个档案吧!改成上层 ISP 给你的 DNS 主机的 IP 就可以啦!例如 Hinet 的 168.95.1.1 及 Seednet 的 139.175.10.20 啰!例如底下的范例(这个范例就可以照抄了! ^_^):
[root@www ~]# vi /etc/resolv.conf
nameserver 168.95.1.1
nameserver 139.175.10.20
朋友们常常会在这个地方写错,因为很多书上都说这里要设定成为 NAT 主机的 IP , 那根本就是不对的!你应该要将所有管理的计算机内,关于 DNS 的设定都直接使用上面的设定值即可! 除非你的上层环境有使用防火墙,那才另外考虑!
4.4.3 预设路由的问题
记得我们在前两章提到的网络基础当中,不是讲了很多预设路由 (default gateway) 相关的说明吗? 预设路由通常仅有一个,用来做为同一网域的其他主机传递非本网域的封包网关。 但我们也知道在每个网络配置文件案 (/etc/sysconfig/network-scripts/ifcfg-ethx) 内部都可以指定『 GATEWAY 』这个参数,若这个参数重复设定的话,那可就麻烦啦!
举例来说,你的 ifcfg-eth0 用来做为内部网域的沟通,所以你在该档案内设定 GATEWAY 为你自己的 IP , 但是该主机为使用 ADSL 拨接,所以当拨接成功后会产生一个 ppp0 的接口,这个 ppp0 接口也有自己的 default gateway ,好了,那么当你要将封包传送到 Yahoo 这个非为本网域的主机时, 这个封包是要传到 eth0 还是 ppp0 呢?因为两个都有 default gateway 啊!
没错!很多朋友就是这里搞不懂啦!常常会错乱~所以,请注意, 你的 default gateway 应该只能有一个, 如果是拨接,请不要在 ifcfg-eth0 当中指定 GATEWAY或 GATEWAYDEV 等变量,重要重要!
更多的网络除错请参考后续第六章 Linux 网络侦错的说明。