2015/05/10

以運行於VirtualBox上的Ubuntu Linux來進行封包轉送

摘要

本文記錄以運行於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



1 則留言: