實戰案例 一台主機不能設定兩個閘道器

2021-07-11 16:43:41 字數 4521 閱讀 8895

0王冠

【it168專稿】一台主機能夠對外部網路進行正常的訪問(不論是上網際網路或是訪問別的網段),必須設定ip位址、子網掩碼、閘道器、dns伺服器(如果僅是訪問內網的話,dns伺服器位址可以不設)等四項資訊,這個觀點已經逐漸被大家所認識和接受了,但是如果一台主機有兩塊網絡卡,那麼是不是這兩塊網絡卡都要設定閘道器呢?實際情況是:即使有兩塊網塊,也只能在其中的一塊閘道器上設定乙個閘道器,如果兩塊網絡卡都設定了閘道器的話,很可能造成無法正常的訪問網路。這個觀點我對許多人都講過,但是效果不是太好,很多人很多時候還是會把兩塊閘道器都設定上閘道器,結果是網路故障就出現了,下面我結合一次具體的工程實踐為大家解釋一下這個問題。

週末的時候到機房,發現有兩位同事正忙得熱火朝天,廠家的軟體工程師也在那裡,幾個人都盯著電腦螢幕,一籌莫展,我問出了什麼情況,同事說是有一台介面伺服器自從更改了ip位址後,到sms(使用者管理系統)和ca(條件接收系統)等伺服器就不通了,搞不清楚是怎麼回事。對於這個專案的網路規劃我是了解的,現在先為大家簡單的介紹一下這個專案,拓撲圖如圖1所示:

現在的故障現象就是自從按照圖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分別代表小崔和祥子,下面是對話過程:

一、用路由器做比喻說明為什麼不能同時設定兩個閘道器

x:這個問題嗎,就要看從哪個角度理解了,以前老說的不夠徹底,這樣吧,我們從網路的基礎構造來說可能容易理解一些。舉個例子,咱們平常使用的哪些網路裝置是有兩個網口的?

c:(眨了眨美麗的大眼睛)可能是光纖收發器嗎,我看機房裡用了好多雙網口的光纖收發器。

x:(只覺得喉嚨裡有點甜,感覺跟自己想像的結果差得實在太遠,穩了穩神說),是路由器啊,大姐,怎麼想到光纖收發器上面去了。

c:(溫柔的笑了笑),對對對,是路由器。

x:(總算開始進入正確的軌道了),是的,路由器,或者是硬體防炎牆這一類的網路裝置,它們一般都至少有兩個網口,那麼再想一想,咱們配置這些裝置時候都是進行了哪些操作呢?

c+x:先配置兩個埠的ip位址(外網口的一般是公網ip位址,內網口一般是私網ip位址)、子網掩碼,然後配置了預設路由(也就是相關於外網口的閘道器),做完這一步後,我們在路由器上就可以ping通 isp分配給我們的dns伺服器位址了,說明我們跟外網已經聯通了。

x:是吧,路由器的兩個網路埠是不是相當伺服器的那兩塊網絡卡呢?它是不是只設定了乙個閘道器?

c:嗯,好像是這樣。

x:那路由器內網口的位址有什麼用呢?

c:是作為內網主機的閘道器。

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

inte***ce vlan65

description link to 2floor

ip address 10.65.0.1 255.255.0.0

ip access-group no5 in

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:不錯,不錯,這個辦法不錯。

這個網路故障的排除就算勝利結束了,關鍵是我們不僅做到「知其然」,而且通過溝通實現了「知其所以然」,網管員就是在不斷解決故障的過程中成長起來的。

一台機器跑兩個apache

分別為 d dev apache2.2 d dev apache2 2 需要修改conf httpd.conf檔案,把裡面相應的目錄,分別改為自己所在目錄。另外更改監聽埠 如 serverroot d dev apache2.2 listen 80 我在apache2.2裡面執行了 httpd k ...

一台linux下啟動兩個tomcat

linux伺服器下啟動兩個tomcat 前言 之前測試過一台伺服器跑兩個tomcat例項,成功過。後期有人問我卻答不出來,今天重新測試,分享記錄下來。其實網上有好多教程,但是些有冗餘,我做了乙個最簡單的。一 解壓tomcat包 二 只修改tomcat2裡面的server.xml檔案即可啟動兩個tom...

一台機器,兩個Oracle資料庫,兩個SDE服務!

伺服器上安裝了oracle11g和sde10,通過arcdigrammer匯入的資料庫模型,經常出問題,arccatalog經常莫名其妙的就崩潰了!執行一段時間,有的人以sde使用者建立的表看不到,後來通過oracle進去刪除這些表之後,就再也不能通過arccatalog進行增加和刪除表了,彈出表或...