2008/06/28

在 VirtualBox 的 NAT 底下開 port

VirtualBox 預設的網路模式是 NAT。換句話說,Guest OS 可以透過 Host OS 連到外界,但 Guest OS 受到 NAT 的保護,外界無法連進去。

因此,若要在 Guest OS 架設任何服務 (例如:sshd),就必須設定 VirtualBox 的 port forwarding。方法如下:
VMNAME="Ubuntu"
SVR=ssh

VBoxManage setextradata "$VMNAME" \
"VBoxInternal/Devices/pcnet/0/LUN#0/Config/$SVR/HostPort" \
2222

VBoxManage setextradata "$VMNAME" \
"VBoxInternal/Devices/pcnet/0/LUN#0/Config/$SVR/GuestPort" \
22

VBoxManage setextradata "$VMNAME" \
"VBoxInternal/Devices/pcnet/0/LUN#0/Config/$SVR/Protocol" \
TCP
這樣,當外界連到 Host OS 的 port 2222,就等於連到 Guest OS 的 port 22。

當這種設定很多時,可以用以下的指令來列出所有的設定值:
VBoxManage getextradata "$VMNAME" enumerate
注意!做完上述設定之後,要重新啟動 VirtualBox 才會生效。

2008/06/27

在 Ubuntu 上安裝 VirtualBox OSE


貼後補充:亦可到 VirtualBox 官方網站 下載適合 Ubuntu 的最新版本,用 dpkg -i 即可安裝。


雖然 VMware Player 在 Windows 上用得很順手,我還是決定在 Ubuntu 上試試 VirtualBox。沒想到安裝和使用都出奇的簡單,而且操作介面和功能都令我驚艷。

安裝方法非常簡單,只要用 Synaptic 或 apt-get 安裝以下 package 即可:
  • virtualbox-ose
  • virtualbox-ose-modules-generic
安裝好了之後,在主選單會新增一組「系統工具」的選單,馬上就可以啟動 VirtualBox OSE。不過在你真正執行 virtual machine 之前,你必須先將自己加到 /etc/group 的 vboxusers group。

其實,我還是有遇到一點小麻煩。用此版的 VirtualBox,一旦將 keyboard 的控制權交給 virtual machine 之後,系統就卡住了:Host 和 Guest 都沒辦法控制,後來才找到解法:

2008/06/25

在 Ubuntu 上 mount USB drive

一般來說,在 Ubuntu Desktop 上掛 USB 碟並不需要特別處理,系統會自己處理。一插上去,就馬上可以使用。但有一些例外情況,需要自己手動 mount,例如從遠端 ssh 進去。

這時最麻煩的,就是怎麼知道這個 USB 碟的 device name。我發現最簡單的方法是:
ls /dev/disk/by-id/usb-*
搭配 lsusb 的輸出,很容易就可以找到可用來 mount 的 device name。

2008/06/16

錯誤代碼: 0x80072EE2

工作環境遷移之後,每次執行 Windows Update 總是出現 [錯誤代碼: 0x80072EE2] 。找到以下看似相當豐富的 support 資訊,卻一點用處也沒有:
http://support.microsoft.com/kb/836941/zh-tw
終於有一天福至心靈,猜出問題的原因:雙層 NAT。我的 Windows XP 是接在一台 D-Link DI-704P 之內 (簡稱 704P-NAT),而 DI-704P 的 WAN port 則接到另一個以 Linux 建構的 private network (簡稱 Linux-NAT)。

幾個簡單的實驗:
  • XP 放在 Linux-NAT + 704P-NAT 之內 => 結果一直出現錯誤
  • XP 只放在 Linux-NAT 之內 => 順利完成 Windows Update
  • XP 只放在 704P-NAT 之內 => 也順利完成 Windows Update
想要進一步分析,所以用 WireShark 在 XP 上抓封包。發現進行 Windows Update 時,一開始都會有2 至 3 秒的溝通 (HTTP),然後一分多鐘之後再啟動第二次的溝通 (目的主機是 www.update.microsoft.com),但此時是 TLS (https) 連線,無法進一步分析。只知若出現錯誤,溝通的資料只有 11K 左右;反之,順利進入更新畫面則有 88K 的溝通資料。

看起來,Windows Update 的通訊協定無法通過兩層的 NAT。或者應該說,Windows Update 的通訊協定是 NAT-unfriendly,但有考慮到一層 NAT 的狀況。

2008/06/14

在 Ubuntu 上裝 IE

將工作環境轉換到 Ubuntu 8.04 之後,一切都相當得心應手。不過有些時候需要用到 IE,若切回 Windows 會相當不方便,所以決定在 Ubuntu 上裝個 IE 來應急。透過 Google 很容易就可以找到安裝方法:
http://www.tatanka.com.br/ies4linux/page/Installation:Ubuntu
一開始,需先安裝 wine 和 cabextract 兩個 package:
$ sudo apt-get install wine
$ sudo apt-get install cabextract
接下來就是下載 IEs 4 Linux,也就是 http://www.tatanka.com.br 所開發的 shell script,可以自動從 Microsoft 網站抓取 IE 相關的檔案,並以適合 Wine 的方式來安裝。目前最新版本是 2.99.0.1:
$ wget http://www.tatanka.com.br/ies4linux/downloads/ies4linux-2.99.0.1.tar.gz
接下來要解開及執行 IEs 4 Linux 來安裝 IE。此版本的 ies4linux 已支援多國語言的 GUI 介面,但是在中文環境有一些問題,所以需強迫以英文介面進行 (若堅持要看中文,這裡 有修正方法):
$ tar xvzf ies4linux-2.99.0.1.tar.gz
$ cd ies4linux-2.99.0.1
$ LANG=C ./ies4linux
接下來,按照 GUI 指示進行就可以順利完成。若安裝時出現 No such file or directory 之類的錯誤,可能是抓檔的部份沒處理好,只要再重新執行幾次 LANG=C ./ies4linux 就可以解決。

要啟動 IE,請執行 ie6 或 ~/bin/ie6。