网络通信 频道

实战案例:一台主机不能设置两个网关

  【IT168专稿】一台主机能够对外部网络进行正常的访问(不论是上互联网或是访问别的网段),必须设置IP地址、子网掩码、网关、DNS服务器(如果仅是访问内网的话,DNS服务器地址可以不设)等四项信息,这个观点已经逐渐被大家所认识和接受了,但是如果一台主机有两块网卡,那么是不是这两块网卡都要设置网关呢?实际情况是:即使有两块网块,也只能在其中的一块网关上设置一个网关,如果两块网卡都设置了网关的话,很可能造成无法正常的访问网络。这个观点我对许多人都讲过,但是效果不是太好,很多人很多时候还是会把两块网关都设置上网关,结果是网络故障就出现了,下面我结合一次具体的工程实践为大家解释一下这个问题。

  周末的时候到机房,发现有两位同事正忙得热火朝天,厂家的软件工程师也在那里,几个人都盯着电脑屏幕,一筹莫展,我问出了什么情况,同事说是有一台接口服务器自从更改了IP地址后,到SMS(用户管理系统)和CA(条件接收系统)等服务器就不通了,搞不清楚是怎么回事。对于这个项目的网络规划我是了解的,现在先为大家简单的介绍一下这个项目,拓扑图如图1所示:

  BOSS系统的设计思路是BOSS系统内部组成局域网,与CA服务器的通讯通过接口服务器来实现,因此接口服务器就安装了两块网卡,一块是连接BOSS系统内网的(以下简称网卡1),IP地址为10.232.0.11,一块是连接CA服务器的(以下简称网卡2),IP地址为10.230.0.40,我们首先按照这个思路设计并实现了网络连接,并为网卡1分配了网关:10.230.0.1。但是在测试期间我们要保证BOSS系统的服务器和SMS服务器均可被CISCO3550交换机上的其它客户端同时访问到,这样的话,就需要跳过接口服务器,将BOSS系统内网的交换机直接连到CISCO3550交换机上,由于是不同网段的互访问(10.230/24和10.232/16网段),我们又为网卡2分配了网关:10.232.1.1,新的网络组网图如图2所示。

  现在的故障现象就是自从按照图2的规划更换了网络结构和重新设置了接口服务器的IP地址等信息后,接口服务器就无法对CA服务器进行访问了,在接口服务器上ping CA服务器,出现的提示是:

  Reply from 10.230.0.1: Destination net unreachable.

  看到这个提示,我已经大致明白了产生网络故障的原因,肯定是接口服务器上面网卡2设置了网关以后,没有将网卡1上面的网关删除造成的。但是这台服务器所用的操作系统是REDHATAS4.7,大家也知道LINUX中查看网卡的信息比较别扭,怎么说呢?当键入ifconfig –a时会出现所有网络设备的IP地址信息,但是这其中并不包括网关的信息,为了争取时间,我们就不再琢磨在命令行中怎么把网关信息给找出来了,好在这台服务器可以进入窗口模式,我们双击电脑屏幕右下角表示网络连接的那个小图标,下面的操作就跟在WINDOWS一样了,层层深入后,果然看到两块网卡都设置了网关,这样就验证了我的判断,解决方法也很简单,去掉第一块网卡上的网关,然后重启服务器即可。

  故障解决了,我们坐下来,一起来讨谈这个一台主机不能同时设置两个网关的话题,C和X分别代表小崔和祥子,下面是对话过程:

  一、用路由器做比喻说明为什么不能同时设置两个网关

  C:为什么一台主机不能同时设置两个网关,电脑都要设置网关才能正常的与网络通讯啊,为什么设置了两个网关后反而出现故障了吗?

  X:这个问题吗,就要看从哪个角度理解了,以前老说的不够彻底,这样吧,我们从网络的基础构造来说可能容易理解一些。举个例子,咱们平常使用的哪些网络设备是有两个网口的?

  C:(眨了眨美丽的大眼睛)可能是光纤收发器吗,我看机房里用了好多双网口的光纤收发器。

  X:(只觉得喉咙里有点甜,感觉跟自己想像的结果差得实在太远,稳了稳神说),是路由器啊,大姐,怎么想到光纤收发器上面去了。

  C:(温柔的笑了笑),对对对,是路由器。

  X:(总算开始进入正确的轨道了),是的,路由器,或者是硬件防炎墙这一类的网络设备,它们一般都至少有两个网口,那么再想一想,咱们配置这些设备时候都是进行了哪些操作呢?

  C+X:先配置两个端口的IP地址(外网口的一般是公网IP地址,内网口一般是私网IP地址)、子网掩码,然后配置了默认路由(也就是相关于外网口的网关),做完这一步后,我们在路由器上就可以PING通 ISP分配给我们的DNS服务器地址了,说明我们跟外网已经联通了。

  X:是吧,路由器的两个网络端口是不是相当服务器的那两块网卡呢?它是不是只设置了一个网关?

  C:嗯,好像是这样。

  X:那路由器内网口的地址有什么用呢?

  C:是作为内网主机的网关。

  X:就是这个意思,内网口与外网口是可以互相通讯的,所以不需要设置内网的网关,虽然它不需要设置网关,但是它却成为了内网内主机的网关地址。咱们再回到一台主机同时安装了两块网卡这个课题上来,一般来说,一台主机有一块网卡,它就可以理解为一台普通的主机,只要能够满足上网的需要就可以了,为了访问外部网络或者与不同网段之间的主机进行通讯,必须要设置网关,但是一台主机安装了两块网卡,它的作用就不一样了,这时候它的作用就可以理解为一台服务器,或者更直接一些,就相当一台路由器。

  C:一台主机+两块网块=一台路由器?

  X:是啊,咱们再把时间往前推几年,在01、02年的时候,很多单位上网都是通过代理服务器的方式,就是在一台PC机(或者服务器)上安装两块网卡,然后通过PROXY软件来实现代理局域网内主机上网,那个时候就有很多人将代理服务器上的两块网卡都设置了网关,结果造成了很多莫名其妙的网络故障。

  C:感受这个好遥远啊。

  X:(赶快拉回来)对,那用路由器来做比喻,明白为什么一台主机即使有两块网卡也不能同时设置两个网关了吧

  C:好象有点明白了。

  二、“Destination net unreachable”这个提示是怎么来的

  C:今天看到的ping的提示信息很奇怪,里面有“Destination net unreachable.”的提示

  X:是啊,通常见到的ping操作,返回的提示不是“request time out”,就是“Reply from 10.75.0.6: bytes=32 time=1ms TTL=127”,这两类,但是只要出现“Destination net unreachable”,就说明到目标主机不一定真的不通,而是出于某种原因被限制了。

  C:被限制了?怎么还有这样的事?

  X:是的,比如以前我经常在路由器和硬件防火墙上做的内网用户不能访问某一个或某一类网站,就是通过创建一个禁止访问的ACL,里面包含相应的非法网站,这时候用户再去ping那个网站,就会出现“Destination net unreachable”这样的提示,这就说明不是那个网站不存在,而是不让你去访问它。

  C:这样的功能也能实现?

  X:是啊,操作起来其实很简单,我们来做个简单的实验吧,正好现在手头上有一台CISCO3550的交换机,咱们搭一个简单的测试环境就可以把这个现象模拟出来,如图3所示:

  咱们现在就创建一个ACL,并把它应用到VLAN65上,如下所示:

  3550#show ip access-lists no5

  Extended IP access list no5

  deny ip any host 10.75.0.8

  permit ip any any (93467 matches)

  3550#show run

  interface Vlan65

  description link to 2floor

  ip address 10.65.0.1 255.255.0.0

  ip access-group no5 in

  在应用这个ACL之前,就打开一个DOS窗口一直在10.65.88.8上ping 10.75.0.8,会出现如下提示:

  C:\Documents and Settings\lrx>ping 10.75.0.8

  Pinging 10.75.0.8 with 32 bytes of data:

  Reply from 10.75.0.8: bytes=32 time<1ms TTL=127

  Reply from 10.75.0.8: bytes=32 time<1ms TTL=127

  说明从10.65.88.8到10.75.0.8是通的,但应用完ACL后,ping的信息就显示为如下所示了。

  Reply from 10.65.0.1: Destination net unreachable.

  Reply from 10.65.0.1: Destination net unreachable.

  这个时候我们对于网络结构并没有做任何的改动,即网线仍然是连接的,但是却出现了“Destination net unreachable.”(目标网络无法到达的提示),说明ACL已经成功的阻止了从10.65.88.8到10.75.0.8的访问。

  C:真神奇啊。

  三、LINUX系统中网卡IP地址信息修改的方法

  X:刚才咱们为了尽快的解决问题,采用的是进入LINUX的窗口界面对网卡的相关信息进行了修改,并通过重启服务器使修改生效的,但是很多时候,服务器是无法进入窗口界面的,也不允许进行重启操作,这个时候我们就要在命令行中进行操作了。

  C:很复杂吧?

  X:也不是太复杂,我们只要记住“/etc/sysconfig/network-scripts”这个目录就可以了,由于LINUX具有自动补全命令的功能,我们只需记住一些关键的词,就可以一步一步的进入到这个目录中来,里面对应着相应的网卡的信息,比如第一块网卡就叫ifcfg-eth0,里面就有详细的IP地址、子网掩码、网关等信息,如下所示:

  [root@localhost network-scripts]# more ifcfg-eth0

  DEVICE=eth0

  BOOTPROTO=none

  HWADDR=00:0C:29:8D:CB:99

  ONBOOT=yes

  TYPE=Ethernet

  NETMASK=255.255.0.0

  IPADDR=10.65.88.1

  USERCTL=no

  IPV6INIT=no

  PEERDNS=yes

  GATEWAY=10.65.0.1

  如果不需要为第一块网卡设置网关的话,把GATEWAY=后面的值删除即可,存盘退出后,再执行一遍ifdown eth0 ;ifup eth0即可以实现网卡的重启,以便使新的设置生效,两个命令一起写的好处可以保证我们还要以连接到服务器上。

  C:不错,不错,这个办法不错。

  这个网络故障的排除就算胜利结束了,关键是我们不仅做到“知其然”,而且通过沟通实现了“知其所以然”,网管员就是在不断解决故障的过程中成长起来的。

1
相关文章