摘要
本文記錄以運行於Oracle VM VirtualBox的Ubuntu作為網路路由器(router)來進行封包轉送(packet forwarding)的注意事項。說明
路由器是一種網路設備,其工作之一為封包轉送,亦即將封包由某一個網段接力傳送至另一個網段,這項工作由OSI(Open Systems Interconnection)模型中的網路層來負責。為了進行封包轉送的實驗,這裡啟動了三台運行於VirtualBox的虛擬機器,一台作為路由器,另外兩台作為路由器兩端的主機。
第一台擔任主機之虛擬機器的網路卡設定如下,值得注意的是其附加為「橋接介面卡」、而MAC位址為「0800272ce3b9」。
虛擬機器的網路卡設定–主機1 |
第二台擔任主機之虛擬機器的網路卡設定如下,值得注意的是其附加為「橋接介面卡」、而MAC位址為「0800271320e2」。
虛擬機器的網路卡設定–主機2 |
擔任路由器之虛擬機器的第一張網路卡設定為「橋接介面卡」且MAC位址為「0800279bb28d」、而第二張網路卡設定為「橋接介面卡」且MAC位址為「080027c5c4c3」。
虛擬機器的網路卡設定–路由器的第1張卡 |
虛擬機器的網路卡設定–路由器的第2張卡 |
替擔任路由器的虛擬機器兩張網路卡分別設定了不同網段的IP位址(這裏為192.168.1.1和172.16.1.1)、並且啟用了ip_forward核心變數後(利用sysctl工具程式將其設定為1),該虛擬機器便具備封包轉發的能力。
路由器的ip_forward變數值與各網路卡的IP組態設定 |
替擔任主機1的虛擬機器設定了IP位址(這裏為192.168.1.100)、與前往主機2網段的路徑(即閘道器為192.168.1.1)之後,主機1便可以跟主機2進行溝通(例如透過ICMP的echo-request與echo-reply)。
主機1的路徑表與網路卡的IP組態設定 |
替擔任主機2的虛擬機器設定了IP位址(這裏為172.16.1.101)、與前往主機1網段的路徑(即閘道器為172.16.1.1)之後,主機2便可以跟主機1進行溝通(例如透過ICMP的echo-request與echo-reply)。
主機2的路徑表與網路卡的IP組態設定 |
此時在擔任路由器的虛擬機器利用wireshark工具程式監聽兩張網路卡的封包,可以觀察到主機1的echo-request封包先是送到路由器的08:00:27:9b:b2:8d網路卡,緊接著路由器再藉由08:00:27:c5:c4:c3網路卡將echo-request傳送予主機2,再觀察主機2的echo-reply先是送到路由器的08:00:27:c5:c4:c3網路卡,緊接著路由器再藉由08:00:27:9b:b2:8d網路卡將echo-reply傳送予主機1。值得留意的是這個轉發的過程中,來源IP位址和目的IP址皆保持不變,變化的只有封包的MAC位址。
監聽的介面 |
接收echo-request |
傳送echo-request |
接收echo-reply |
傳送echo-reply |
網誌管理員已經移除這則留言。
回覆刪除