【Mininet 路由實驗 — 1 router with 2 host】

我們在Mininet所模擬出來的網路拓墣來實驗一些網路原理,以下拓墣是一個Router連接兩個不同網段,且每個網段各有一台host,目的是讓兩台host彼此間可以進行通訊

005.png

實驗環境

  • ubuntu desktop 16.04
  • mininet 2.3.0

#執行mininet的拓墣檔案(router_1.py)

python ./router_1.py

Screenshot from 2017-12-01 22-15-44
拓墣檔案的內容
Screenshot from 2017-12-01 22-16-56
執行後會進入到mininet的提示字元

# xterm開啟r1 h1 h2

Screenshot from 2017-12-01 22-19-18.png
進入xterm後,上面是router1,左下是host1,右下是host2,建議視窗安排位置可以參考圖上拓墣,比較不會搞混,如果沒有特定指定IP,mininet預設使用10.0.0.1/8網段

#進行設備上IP的設定(有以下設定語法)

ifconfig [設備介面] [IP位址]/[遮罩數]
ifconfig [設備介面] [IP位址] netmask [子網路遮罩IP]

Screenshot from 2017-12-01 22-26-24.png
將h1的h1-eth0介面設為192.168.10.1/遮罩255.255.255.0,h2的h2-eth0介面設為192.168.20.1/遮罩255.255.255.0,r1的r1-eth0介面設為192.168.10.254/遮罩255.255.255.0,r1的r1-eth1介面設為192.168.20.254/遮罩255.255.255.0

# 進行主機Ping測試
我們發現r1可以ping通h1和h2,但h1和h2彼此間無法Ping通,我們接著來檢查路由表

Screenshot from 2017-12-01 22-30-57

#設定路由表,由於h1不認識192.168.20.0/24這個網段,因次要增加路由表告知h1將封包往指定地方轉送

ip route add [目的地IP網段]/[遮罩數] via [本地端IP閘道] dev [離開設備的介面]
[以host1為例]
ip route add 192.168.20.0/24 via 192.168.10.254 dev h1-eth0

Screenshot from 2017-12-01 22-38-26
可利用route -n指令檢查路由有沒有被新增進去,新增後h1可以ping到192.168.20.0/24的網段了

#增加h2到192.168.10.0/24網段的路由
ip route add 192.168.10.0/24 via 192.168.20.254 dev h2-eth0

Screenshot from 2017-12-01 22-45-38.png
h2可以ping到192.168.10.254網段了

h1可以ping到192.168.20.254,但無法ping到192.168.20.1
h2可以ping到192.168.10.254,但無法ping到192.168.10.1
原因是什麼呢?

Screenshot from 2017-12-01 22-48-22.png

推測結果是封包沒有被轉發出去,一直停留在r1裡面,所以我們要開啟路由轉發功能,請在r1執行以下指令來開啟路由轉發(0代表關閉,1代表開啟)
echo 1 > /proc/sys/net/ipv4/ip_forward

Screenshot from 2017-12-01 22-49-03.png

進行Ping測試

Screenshot from 2017-12-01 22-49-35.png
開啟轉發功能後,h1和h2彼此間可以進行通訊了
Screenshot from 2017-12-02 03-13-35
利用tracepath -n [IP位址] 來觀察封包流向

#其實實驗到此已經完成了,我們來進一步探討關於路由的問題
[以host1為例]
ip route add 192.168.20.0/24 via 192.168.10.254 dev h1-eth0——–(1)
ip route add default via 192.168.10.254 dev h1-eth0 ————–(2)

請比較不同和差異?
(1)和(2)的設定均可以讓h1和h2彼此通訊,但是未來如果新增一個192.168.30.0/24網域,使用(1)還要手動增加路由,而(2)卻不用
default代表目的地端的網段如果在路由表中找不到,最後就會依循default的設定往192.168.10.254送,此位址我們稱之為預設閘道

Screenshot from 2017-12-02 03-11-57.png

Screenshot from 2017-12-02 03-12-22
一樣h1和h2間可以互相通訊

如果不想經過這麼繁雜的設定,可以將上面的設定寫成python檔案,再做執行

Screenshot from 2017-12-02 02-48-00

 

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s