我們在Mininet所模擬出來的網路拓墣來實驗一些網路原理,以下拓墣是一個Router連接兩個不同網段,且每個網段各有一台host,目的是讓兩台host彼此間可以進行通訊
實驗環境
- ubuntu desktop 16.04
- mininet 2.3.0
#執行mininet的拓墣檔案(router_1.py)
python ./router_1.py


# xterm開啟r1 h1 h2

#進行設備上IP的設定(有以下設定語法)
ifconfig [設備介面] [IP位址]/[遮罩數]
ifconfig [設備介面] [IP位址] netmask [子網路遮罩IP]

# 進行主機Ping測試
我們發現r1可以ping通h1和h2,但h1和h2彼此間無法Ping通,我們接著來檢查路由表
#設定路由表,由於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

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

h1可以ping到192.168.20.254,但無法ping到192.168.20.1
h2可以ping到192.168.10.254,但無法ping到192.168.10.1
原因是什麼呢?
推測結果是封包沒有被轉發出去,一直停留在r1裡面,所以我們要開啟路由轉發功能,請在r1執行以下指令來開啟路由轉發(0代表關閉,1代表開啟)
echo 1 > /proc/sys/net/ipv4/ip_forward
進行Ping測試


#其實實驗到此已經完成了,我們來進一步探討關於路由的問題
[以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送,此位址我們稱之為預設閘道

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