【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:不錯,不錯,這個辦法不錯。
這個網絡故障的排除就算勝利結束了,關鍵是我們不僅做到“知其然”,而且通過溝通實現了“知其所以然”,網管員就是在不斷解決故障的過程中成長起來的。
轉自:https://blog.csdn.net/yu132563/article/details/51348205