實驗:模擬實現主機跨路由通信
實驗目的:
通過虛擬機模擬路由器,實現兩臺主機之間跨路由通信。
實驗器材:
5個虛擬機,其中2個作為主機使用,3個模擬路由器使用。
本實驗中所用虛擬機均為centos6。
實驗步驟:
1、畫出構圖,部署所需要的網絡環境。
如圖所示,R1,R2,R3為模擬的路由器,A,B為兩個主機。配置IP也在圖中有所說明。
2、根據構圖,配置5個虛擬機的設置。
圖中可以看出,我們一共需要四個網段,我們可以在虛擬機中添加新的網段,具體步驟如圖:
至此,我們的網段添加完畢。
接著我們對虛擬機的網段進行設置:
我們把虛擬機進行重命名以確保我們能夠清楚的分辨每臺虛擬機的作用:
接著,我們以主機A的網段設置為例,來演示一下如何更改:
同理,對剩下四個虛擬機做相同操作,作為主機的兩臺虛擬機只需要設置一個網段,而作為路由器的三臺虛擬機則需要設置兩個網段,具體設置如下:
centos6.9-A eth1:VMnet11
node1 eth0:VMnet11
eth1:VMnet12
node2 eth0:VMnet12
eth1:VMnet13
node3 eth0:VMnet13
eth1:VMnet14
centos6.9-B eth0:VMnet14
全部設置完畢後,開啟所有虛擬機。
3、給用於通信的兩個主機添加相對應的IP和網關。
首先是centos6.9-A的eth1。我們直接修改配置文件 /etc/sysconfig/network-scripts/ifcfg-eth1。添加我們規劃的IP,子網掩碼和網關。
設置完畢後,我們來重啟一下網絡服務
圖中提示錯誤,是因為找不到eth0這個網卡,而在本實驗中,我本來就沒有設置該網卡,所以可以忽視掉。
接下來我們用“route -n”看一下這個設置有沒有生效
很顯然,我們的設置已經生效。
至此,我們已經完成第一個通信主機的設置,接下來,我們來配置第二個通信主機:
同樣的,我們直接修改配置文件 /etc/sysconfig/network-scripts/ifcfg-eth1。添加我們規劃的IP,子網掩碼和網關。
重啟服務,並查看是否成功:
至此,我們的兩臺通信主機已經設置完畢。
4、進行三個路由的IP和路由表的配置。
Node1:
至此,網絡IP已經配置完成。接下來,我們要來配置路由表,為了保證我們的兩臺主機可以連通,我們需要添加如下信息:
網絡ID |
子網掩碼 |
接口 |
網關 |
10.1.0.0 |
255.255.0.0 |
eth0 |
|
10.2.0.0 |
255.255.0.0 |
eth1 |
|
10.3.0.0 |
255.255.0.0 |
eth1 |
10.2.0.201 |
10.4.0.0 |
255.255.0.0 |
eth1 |
10.2.0.201 |
我們使用“route -n”命令查看現有的路由表
圖中發現,表中數據已經有兩個存在。所以我們只需要添加另外兩個進路由表就可以啦~所以我們來加吧!
至此,我們第一個路由器的配置就全部完成,接著,我們用相同的方法給剩下兩個路由器做配置。方法相同~所以下面就只列出剩下兩個路由器的路由表啦:
Node2:
網絡ID |
子網掩碼 |
接口 |
網關 |
10.1.0.0 |
255.255.0.0 |
eth0 |
10.2.0.200 |
10.2.0.0 |
255.255.0.0 |
Eth0 |
|
10.3.0.0 |
255.255.0.0 |
eth1 |
|
10.4.0.0 |
255.255.0.0 |
eth1 |
10.3.0.201 |
Node3:
網絡ID |
子網掩碼 |
接口 |
網關 |
10.1.0.0 |
255.255.0.0 |
eth0 |
10.3.0.200 |
10.2.0.0 |
255.255.0.0 |
eth0 |
10.3.0.200 |
10.3.0.0 |
255.255.0.0 |
eth0 |
|
10.4.0.0 |
255.255.0.0 |
eth1 |
|
全部設置完畢後,我們可以先試一下在相鄰的兩個虛擬機之間ping,如下圖:
在上面的幾個圖中我們可以看出,我們的相鄰虛擬機已經可以兩兩ping通,那麽,這是不是意味著我們的實驗完成了呢?接下來我們來試一試node2來ping主機A:
咦?為什麽ping不通?這就很尷尬了,我們來找找原因。
奧,原來是因為我們是把node1當做路由器,但是事實是他還是一個主機,它接收到來自node2的包發現不是自己的就扔掉了,而不會轉給主機A,所以,接下來我們就要把node1,node2,node3三個路由器設置成可以轉發的。具體操作如下:
echo 1 > /proc/sys/net/ipv4/ip_forward
我們在node1中輸入上面的命令,然後再用node2去ping 主機A:
當當當當~已經可以ping通了~
接下來我們要在剩下的兩個充當路由器的虛擬機中也輸入上述命令:
好了,接下來就是見證奇跡的時刻!我們用主機B來ping主機A:
啊咧,為啥還是ping不通呢?
讓我們來查一下防火墻
奧,原來是因為防火墻沒有關閉,好吧,我們把5臺虛擬機的防火墻都臨時關閉。命令是:“iptables -F”
全部關閉以後,我們再來試著ping一下~
當當當當,已經可以啦~
現在我們也可以用mtr來動態跟蹤路由狀態~
看,三個路由器的端口IP都有喏,當然,也少不了我們主機B的啦。
完成了!撒花??ヽ(°▽°)ノ?
以上,我們的實驗圓滿成功!
當然啦,既然我們做實驗,就要做得完美一點嘛~我們可以把實驗的過程進行優化呀~
我們可以看到,在路由器R3(node3)的路由表記錄中,有兩條記錄是基本一致的:
那麽,我們可以把這兩條記錄合並成一條嗎?如同下表中所示:
網絡ID |
子網掩碼 |
接口 |
網關 |
0.0.0.0 |
255.255.0.0 |
eth0 |
10.3.0.200 |
接著我們就來試試看:
首先,我們把這兩條記錄從路由表中刪除,然後,我們在添加新的記錄:
然後,我們用主機A來ping一下主機B,看看效果如何:
依然是可以ping通的。那麽,這是為什麽呢?這個是由於我們的R3是邊緣路由,我們完全可以把它配置成為默認路由,只負責轉發就好啦~同理,R1也可以進行這樣的設置。
接下來我們來試一試另外一種操作,如果我們只給R1的路由表中添加10.4.0.0網段的路由信息,而不添加10.3.0.0網段的路由信息,那麽,我們的消息可以到達10.4.0.0網段嗎?我們來實驗一下:
把R1路由表中的10.3.0.0網段的路由信息刪掉:
刪掉了以後,我們再用主機A來ping一下主機B,看看結果如何:
還是可以ping通的吖~這是為什麽呢?
我們先來動態跟蹤一下路由信息:
咦,有沒有發現,我們的第三個是???狀態,這是因為我們的R1一頭連著主機A,一頭連著外面,當數據發送到R1時,R1直接負責轉發就可以了,通過R1到達R2,然後從R2繼續向下一個路由器轉發,也就是我們的R3,最終通過R3到達我們的目的網段。由於在R1中沒有配置10.3.0.0的網段信息,所以我們的路由跟蹤是讀不出來R3的IP的。當然,如果這個實驗的目的網段為10.3.0.0,就不能實現啦!
至此,我們的實驗已經全部結束0.0
實驗:模擬實現主機跨路由通信