因為 Hyper-V 沒有直接提供 NAT 功能,為了要將測試環境與真實環境的網路實體隔開,所以一直以來,我都是利用 Windows Server 2003 開始就內建的 RRAS (路由及遠端存取服務),獨立一台虛擬機器當路由器,架構多重網路的 LAB 測試環境。
前陣子意外在微軟 Ask Premier Field Engineering (PFE) Platforms 部落格看到這篇文章:Your Personal Isolated Lab - Featuring Windows 8 + Hyper-V,這才知道原來知名的第三方分享器韌體 DD-WRT 也能塞進 Hyper-V 的虛擬機器中執行,而且佈署方式出奇簡單。
換句話說,我可以輕鬆改用 DD-WRT 來取代原有用 Windows Server 當路由器的角色。以下圖文廢話很多,不代表操作困難。
首先到 DD-WRT 網站下載 x86 的映像檔,選擇 Support -> Other Downloads,接著參考下圖路徑結構找到想使用的釋出版本。
當然一般都是選擇最新日期。然後找到 x86 的目錄,下載「dd-wrt_public_vga.image」的映像檔;請不要開心地想下載 full 版本,除非有付錢買完整版(這蠢事我已經幹過...)。從這頁發現,日後更新應該也很簡單,在管理介面塞入「dd-wrt-webupgrade_public_vga.bin」就好了。
下載完成後,建立 DD-WRT 虛擬機器所需要的虛擬硬碟檔。建立方式不只一種,但因為之後的步驟,虛擬硬碟檔需要掛載到實體處理,推薦直接在磁碟管理中操作。
虛擬硬碟檔可以不用太大,像我才在主機設定個 128MB 來玩,虛擬硬體類型也不需要用動態擴充了。
掛載後請初始化,但不用特別格式化,或者給磁碟代號。還有,務必請注意圖片中的磁碟代號,以本文來說是磁碟 5。
之後須下載 physdiskwrite 這支小工具,來協助我們將映像檔直接轉進 VM 硬碟檔中。這支指令工具的使用方式真的很簡單,並不需要特別使用 GUI 版本,因為 GUI 版本需安裝 .Net Framework 3.5,對於 Windows Server 2012 來說還要特別裝,所以這邊也不用 GUI 版做示範。
執行指令方式如下,接著再輸入欲寫入的磁碟代號就完成:
physdiskwrite -u image_name -d
前面有提到要注意磁碟代號,是因為這邊可以看到相同的對應代號 PhysicalDrive5。假使不小心選錯,就會讓實體硬碟的資料 GG 了。
做完上面這些,就等同搞定 DD-WRT 塞進虛擬硬碟的工作。如果用檔案總管想點進這個磁碟機看內容,卻發現無法存取,請別慌張這是正常狀況,因為 DD-WRT 不是用微軟的磁碟格式。
接下來請準備掛進虛擬機器。別忘記先中斷虛擬硬碟檔與實體的連結。
建立 DD-WRT 虛擬機器。有以下幾點要注意:
1. 建立第一代的虛擬機器 ( Windows Server 2012 R2/ Hyper-V 3.0 R2 以上 )
2. 請新增至少兩張「傳統網路介面卡 ( Legacy Network Adapter )」。因為要當路由器/分享器,一張勢必主外,一張主內,而且 DD-WRT 沒有完整支援 Hyper-V 標準版本的虛擬網路介面卡。
3. 請先不要掛上虛擬交換器。避免掛錯而對外部網路發出 DHCP,造成外部使用者的連線問題。
4. 記憶體真的不用太大,除非想展現田僑仔風範。DD-WRT 網站有建議,假使韌體版本是 2010/08/13 之後的,請至少設定 64MB 以上。
看到如下畫面,請當做開機完成,就可以不用再理他了。因為之後的設定工作都可以從用戶端電腦透過 Web 去管理。
DD-WRT 預設內網管理的 IP 及網址是 http://192.168.1.1 ,所以測試環境中的用戶端電腦,請務必設定與 DD-WRT 先處於同一組虛擬交換器及 192.168.1.0/24 網段。
前面有講到不要讓 DD-WRT 先掛上虛擬交換器,是因為 DD-WRT 第一次開機會把哪張網卡當 LAN,真的誰也不知道,只能像這樣切換跟用 Ping 才能找到。
實際測試使用後,有些心得想做分享。
假使希望知道對應到 LAN 的虛擬網卡是哪一張,可以參考下圖,在 DD-WRT 的機器狀態選擇系統資訊,及虛擬機器的網路介面卡設定中用 MAC 位址確認。
若一直沒有對 WAN 的功能做設定,很容易導致重開機後,對應到 LAN 的虛擬網卡被置換到另一張。像這張 LAN MAC 就跟上圖不一樣,觀察發現元兇似乎就是那時沒設定 WAN。
稍微可惜的是,Hyper-V 最多只能指派四張傳統網路介面卡給虛擬機器,若有更多重的網路環境想架設,用 DD-WRT 可能就不是這麼方便。
再新增兩張傳統網路介面卡到虛擬機器,也真的在 DD-WRT 中辨識成功。
儘管 DD-WRT 在 Hyper-V 中執行,真的是超羽量級地執行,但我必須誠實地說,小弟對於 Linux-Based 的系統並沒有很熟,如果希望架構出我在 Windows Server RRAS 裡相同的網路設定,DD-WRT 內建的 GUI 介面是不夠使用的,必須改透過指令模式去設定,所以最後還是選擇我最熟悉的 Windows Server 做路由服務。但還是希望這篇文章,能幫助到有需要的朋友們。
Dear askasu:
我建置好以後,果然「分不出來」哪一張是「Lan」,哪一張是「Wan」,使用「askasu」方法測試「兩張」傳統網卡,一張先掛起來,然後 Ping 看看,通了就表示那一張是「Lan」。
謝謝 askasu 老師,分享如此好的文章,萬分感激。
您好
我也打算使用虛擬機器來運行ddwrt
可是我卡在一個步驟
在磁碟管理中 建立vhd時 是要先在hyperV先建立虛擬機器嗎?
我這一個步驟看不懂說 是要先創一個虛擬硬碟出來 然後在從磁碟管理中建立vhd嗎?
感謝~
先新增一個虛擬硬碟沒錯,然後
1. 在實體機用磁碟管理掛載該虛擬硬碟檔
2. physdiskwrite 工具將下載回來的 IMG 轉進該虛擬硬碟中