VirtualBox 做 Port Forwarding 時保留客戶端 ip 位址

VirtualBox 的虛擬機器把網路連線設定為 NAT 的時候,從虛擬機外面無法連線到裡面,必須透過連接埠轉送 (Port Forwarding) 才能讓外部電腦可以連線到虛擬機內的
server。然而在預設情況下,VirtualBox 會將轉送後的封包的來源 ip 位址改成在虛擬機裡面看到的 host 的位置 (10.0.2.2)。如果想要針對外部 ip 做存取控制,例如讓 ftp 只能從特定幾個 ip 登入,需要知道連上來客戶端的 ip 位址,必須設定成讓
VirtualBox 轉送時不改變封包的來源位址 (proxy only)。注意設定前要先關閉
VirtualBox Manager,否則設定完的東西可能會被蓋掉。設定方法如下:

方法一:使用 VBoxManage 設定

VBoxManage 是 VirtualBox 的指令界面設定程式,假設該虛擬機只有開啟第 1 張虛擬網卡並設定為 NAT,則設定成 proxy only 的方式如下:

VBoxManage modifyvm "<虛擬機名稱>" --nataliasmode1 proxyonly

如果要設定的是第二張網卡,請將 --nataliasmode1 改成 --nataliasmode2 即可,其餘依此類推。

方法二:直接修改 *.vbox 設定檔

VBoxManage 其實只是修改目標虛擬機的設定檔 (*.vbox),我們也可以手動修改設定檔來達到一樣的效果。首先開啟虛擬機的目錄[^1],然後用文字編輯器開啟虛擬機名稱.vbox 檔案。先找到要設定的的網卡,例如:

<Adapter slot="0" enabled="true" MACAddress="080027B7366D" cable="true" speed="0" type="82540EM">

然後再找到它裡面的 Alias 設定,例如:

<Alias logging="false" proxy-only="false" use-same-ports="false"/>

proxy-only="false" 改成 proxy-only="true"

按照以上方法設定完之後,再啟動虛擬機器之後, port forwarding 都會保留來源 ip
位址,就可以在 ftp server 或是 http server 針對不同 client 位址做限制了。

[^1]: 如果不知道虛擬機目錄在哪裡的話,可以開啟 VirtualBox 管理員,然後在虛擬機上按右鍵 -> 顯示在檔案管理員,就會用預設的檔案管理程式開啟虛擬機目錄。