2011-06-05 更新
剛發現可以透過 GUI 介面直接從 Network -> Advanced -> Port forwarding 裡新增 forwarding rules, 以下的記錄就當歷史吧......。
( 原文如下 )
之前在 Windows 下試過一些寫 Python 的方案, 最後得到的結論是: 裝 andLinux 再用 putty 連 localhost 開 screen 最好用!! 姑且不論這種作法到底還算不算是「在 Windows 下寫 Python」, 我個人覺得這樣滿順手的, 而且只要習慣一種開發環境即可。不幸的是, andLinux 無法裝在 64bit Windows 下, 只好改裝 VirtualBox 再裝 Ubuntu 10.04。裝 VirtualBox 和 Ubuntu 10.04 超級簡單, 就和裝一般軟體沒兩樣。反正是 VM, 而且是自己練習 coding 用的系統, 直接一個大 partition 搞定, 什麼設定也不管, 沒多久就裝好了。裝好後如同 andLinux, 網路都設好了, guest OS 透過 host OS 用 NAT 的方式可連到 Internet。但是, host 預設無法連回 guest, 於是找了一下設法。
參考 Howto Access via ssh a Virtualbox Guest machine 的說明和留言的指示, 外加一些 try & error, 整理出方法如下:
- 在 guest OS 用 ifconfig 找出網卡名稱 (如 eth0)
- 在 guest OS 用 dmesg 配合網卡名稱找出 device (?) 類型 (dmesg | grep eth0), 可能會找到 pcnet 或 e1000。我的情況是 e1000
- 在 host OS 的命令列執行指令 VBoxManage (Windows 的見下面補充說明):
VBoxManage setextradata "GuestName" "VBoxInternal/Devices/e1000/0/LUN#0/Config/ssh/HostPort" 2222 VBoxManage setextradata "GuestName" "VBoxInternal/Devices/e1000/0/LUN#0/Config/ssh/GuestPort" 22 VBoxManage setextradata "GuestName" "VBoxInternal/Devices/e1000/0/LUN#0/Config/ssh/Protocol" TCP
- 用 VBoxManage getextradata "Guest Name" enumerate 查看是否有設進去。
- 關閉 guest OS, 再重開 guest OS。記得要關掉再開機, 不能用 reboot, 因為要重設 VM 的網路設定
- 成功的話, 若 host OS 是 Windows, 應該會跳出防火牆設定的通知, 詢問是否同意讓 VirtualBox 使用網路之類的問題。接著按「允許」
- 用 ssh/putty 連向 localhost 的 port 2222, 會透過 port forwarding 的方式導到 guest OS 的 22 port。
補充說明
- Windows 7 的 VBoxManage 放在 c:\Program Files\Oracle\VirtualBox\ 下, 進 cmd 後要切到該目錄下才能執行。不然就是將它加到 environment path 裡
- 注意大小寫, 別把 VBoxInternal 打成 VboxInternal, 或是 Protocol 打成 Protocal
- 注意 guest OS 用的 device adapter, 網路上的範例有的是 pcnet 有的是 e1000, 要查一下自己的是什麼
- 在 Windows 下可用 netstat -a 確認是否有聽 port 2222; 在 Linux 下用 netstat -lntp 查看。
- 若用 VBoxManage 設錯 extradata, 刪除的方法是用 setextradata 配合空的 value
滿好奇背後是怎麼運作的, VirtualBox 怎麼將 guest 和 host 的網路串起來? 改天有機會再來看看吧。
2011-06-05 更新
透過指令列用 VBoxManage 設定實在是太麻煩了, 試了一下, 找出直接改設定檔的方法。首先要關掉 virtual box host server, 不然手動改完後之後又會被覆蓋回去。關掉 server 後編輯 C:\Users\*YOUR_ACCOUNT*\VirtualBox VMs\*YOUR_VM*\*YOUR_VM*.vbox。改完後再啟動 virtual box host server。
透過指令列用 VBoxManage 設定實在是太麻煩了, 試了一下, 找出直接改設定檔的方法。首先要關掉 virtual box host server, 不然手動改完後之後又會被覆蓋回去。關掉 server 後編輯 C:\Users\*YOUR_ACCOUNT*\VirtualBox VMs\*YOUR_VM*\*YOUR_VM*.vbox。改完後再啟動 virtual box host server。
如果local有gateway, 直接把vm的網卡設成bridged, 然後用static ip就好了 XD
回覆刪除我也有查到有人這麼寫, 隨便試一下沒成功, 又換回 VBoxManage 設 port forwarding 的路線。待要弄的服務太多時, 改試這方案看看, 謝啦。
回覆刪除