2019-05-18

Oracle VirtualBox Ubuntu Guest 與 Host PuTTy SSH 連線處理

Oracle VirtualBox 在 Ubuntu Guest VM 安裝好 SSH Service,無法由 Host 和 Ubuntu Guest VM 進行 SSH 連線的處理方式…



Oracle VirtualBox 網路卡預設使用 Network Address Translation (NAT),這是最簡單的方式不需要其它設定,只要 Host 能連網,Guest VM 就能連網。

Network Address Translation (NAT)
這個方法是由 Oracle VM VirtualBox Networking Engine 擔任 Host 和 Guest VM 間的 router,Guest 的請求交由 router 透過 Host 進行對外連接,返回的資訊再由 NAT Engine 傳給 Guest。
這個方法的好處是安全性很高,隱藏在 router 之後的 Guest VM,外部網路是無法找到的。而且每個 Guest VM 完全獨立,VM 和 VM 間不能互連,Host 也不能連到 Guest。
不過若想在 Guest VM 上運行 Server,外部網路根本找不到,有以下限制:
  • VM → Host : 可以,VM ping 得到 Host。
  • VM ← Host : 預設不可以,Host ping 不到 VM。
  • VM1 ↔ VM2 : 不可以,VM 和 VM 間不能互連。
  • VM → Net/LAN : 可以,VM 可以透過 Host 連網。
  • VM ← Net/LAN : 預設不可以,外部網路不能連到 VM。
Host 和 Net/LAN 連接 VM 是「預設不可以」,而不是「不可以」,所以當然就是 VirtualBox 有給辦法了,這個辦法是「Port forward」。

Port forward
Port forward 讓我們可以保有 VM 的安全性,同時讓 VM service 可以被外部找到。
我們以 Ubuntu Guest VM 的 SSH service 及 MS Windows Host 使用 PuTTy SSH 連線,說明設定方式:
1. 查看 Host 分配給 VirtualBox 的 IP
在 MS Windows Host 開啟命令提示字元,以 ipconfig 指令,就可以看到如下 Host 分配給 VirtualBox 的 IP。

2. 查看要 Port forward 的 VM 的 IP
在 Ubuntu Guest VM 開啟命令提示字元,以 ip a 指令,就可以看到如下 VM 的 IP。

3. 在 VirtualBox 設定中將這兩個 IP 連起來
這個設定方式,可以在 VM 運行中設定。
VirtualBox VM Settings 設定 --> Network 網路 --> Adapter 1 Advanced 介面卡1 --> Port Forwarding 連接埠轉送 --> 按右上角的新增 --> 輸入 Host IP, Guest IP 和 Port 22。


參考資料 (References):
😺 Oracle VM VirtualBox User Manual - Chapter 6. Virtual Networking