經歷硬碟掛點,決定改變電腦使用習慣,防止悲劇重演。

學到一個教訓-非企業級硬碟只是一般兵,經不起7x24小時兩棲偵營魔鬼操練,有提早升天的風險!改善之道很簡單:只要由7x24待命責任制回歸5x8下班打卡制,就能有效延長硬碟乃至整台機器的使用壽命,另一方面還兼顧省電環保。

原本機器不關機是工作需要,方便從家裡走VPN連回公司機器遠端桌面處理,同時有些私有排程或服務也放在自己機器上跑。排程及服務可以重新評估規劃,集中到少數機器,大部分個人主機下班時便可睡眠或休眠,需要遠端連線時再開起來,這倒也不難,打電話給家離公司最近的同事,要他馬上衝去辦公室幫忙開機不就好了~ 喂!不要這樣陷害同事啦,有更高級的做法-網路喚醒(Wake On LAN,WOL)。在軟硬體支援的前題下,電腦在休眠(Hibernation)或睡眠(Sleep)期間,網路卡仍能接收及解讀封包,當接收特定內容封包(稱為Magic Paket,內含該網卡的MAC地址)就會叫醒電腦。透過WOL技術,即能達成「下班先休眠,需要連線再開」的目標。

原本工作機安裝Windows 2008 R2,啟用Hyper-V後得動點手腳才能休眠。趁著硬碟故障重灌,索性改換Windows 8.1,更符合其開發者客戶端性質,真需要伺服器,再跑Hyper-V VM模擬。

Windows要設定WOL,第一步得啟用網卡的WOL功能,如下圖由網卡內容找到「允許這個裝置喚醒電腦」及「只允許Magic封包喚醒電腦」選項勾選起來,一般多會限定Magic封包(封包內需包含該網卡MAC地址),以免意外被無關封包喚醒。

接著,我們需要網卡IP及MAC地址以便產生Magic封包,可透過ipconfig /all取得。

Windows 8及8.1要啟用WOL,還有一個額外步驟:停用快速啟動,理由是快速啟動會讓系統進入Hybrid Shutdown狀態(S4),而WOL功能只支援從Sleep狀態(S3)或Hibernation狀態(S4)被喚醒。如下圖所示,要使用WOL記得要在電源選項取消快速啟動。

最後一步是取得發送WOL Magic封包的軟體,WOL Magic Packet Sender是個介面簡潔易用的小程式,更重要的是,它是用.NET寫的, 二話不說,非它莫屬了。

輸入IP、MAC地址,按下送出鈕,程式會送出一個六個Byte 0xff外加MAC地址重複16次,共102個Byte的封包到指定IP。若此封包能順利送抵睡眠中的電腦,即可將其喚醒。而如何能將封包送達目的地,便是WOL成敗所在,公司的網路環境有些複雜,花了點功夫摸索外加溫習了當年考MCSE所學的Network Essentials,大略摸出輪廓,細節留待後面再提。先回到WOL軟體,我們可以在目標機器也執行該軟體的Receive功能進行測試,發送端按下送出鈕後,接收端應跳出訊息顯示MAC網址,代表發送成功。接著實測,讓目標電腦睡眠,在同一網段(Subnet,在本例中即為192.168.1.*的其他電腦)送出WOL封包,機器果然成功被喚醒。

不過,多做一些測試後發現結果不如預期:

  1. 目標機器為192.168.1.91,睡眠後由192.168.1.90送出Magic封包至192.168.1.91可將其喚醒,但等待一段時間後再送封包卻無效。
  2. 由另一個網段192.168.2.1送出Magic封包,192.168.1.91開機用軟體Receive功能測試OK,睡眠後隨即傳送可喚醒,但等待一段時間後喚醒功能亦會失效。
  3. 將發送目標IP改為192.168.1.255,睡眠後不管多久,都可順利喚醒。

由以上結果,推敲與網路交換器(Switch)特性有關,192.168.1.91在開機期間有網路活動,Switch會記錄並保留192.168.1.91對應MAC地址及實體插孔資料,當有傳給1.91的封包,Switch才知道要往哪個實體插孔傳送。機器睡眠後不再傳送封包,經一段時間後Switch認定該MAC所屬機器離線,便不再傳送給91的封包到該實體線路上。這可解釋剛關機時可喚醒,一段時間後Switch資料更新,便無法再用Magic封包喚醒主機。第三項實驗將目標IP設為192.168.1.255,末碼255會使Switch對全網段廣播,以MAC地址ff-ff-ff-ff-ff-ff送出封包,該網段所有網卡都會看到,睡眠電腦由封包內容識別出自己的MAC地址,就能被喚醒。

因此,WOL最容易實現的情境是在同一網段下以廣播方式(IP用*.*.*.255)傳送Magic封包。想跨網段傳送,需Switch或路由器配合,例如:設定一靜態IP 192.168.1.253 MAC定為ff-ff-ff-ff-ff-ff[參考],傳送Magic封包時將目標IP設為192.168.1.253,即可達到廣播效果。VPN連到主機是跨網段無誤,但公司Switch不在掌控範圍內,此路不通,最後只能繞路解決,不過這又是另一段故事了…


Comments

# by jandow

謝謝您!受益良多。 另一段故事可否說來聽聽?!

# by kk

你好,請問一下,我也有2小時後不能喚醒的問題。我的家中電腦在router綁定了192.168.31.110跟電腦的mac address,然後如果根據你的提議。就是想要先移除這個綁定,然後新增一個192.168.31.110跟mac address是 FF-FF-FF-FF-FF-FF的靜態ip嗎?

# by Jeffrey

to kk, 如果只是2小時後無法從LAN發Magic Packet喚醒,將發送對象IP改為192.168.31.255即可。如果你是要從非192.168.31.*網段送出喚醒封包,才需要在Router/Switch上「增設」192.168.31.253並指向ff:ff:ff:ff:ff:ff,原來的192.168.31.110不用修改。

# by kk

謝謝你的回覆。我的情況是,用teamviewer 喚醒電腦。teamviewer裡面只容許我輸入在no.ip 得來的域名還有port位。 所以發送的位置我不能指定.255進行發送。 我的router用小米mini,裡面支援dhcp靜態ip,ddns可以輸入no-ip的域名。還有連接埠轉發。 如果我綁定ip跟mac的時候,也不能指定.255作為電腦的ip綁定。

# by Playrain

不好意思 請問我也是兩小時後就不能從網外開機 也嘗試著打192.168.0.255但路由器 卻回答我 無效ip

# by Jeffrey

to Playrain, .255這招用於LAN環境,如果要從網外傳送,要參考內文所說的「在Switch/網路分享器設定一靜態IP 192.168.1.253 MAC定為ff-ff-ff-ff-ff-ff」做法。

# by playrain

我是用凱破網路 一樓是凱破主機 三樓是接路由器.電腦在三樓 (在Switch/網路分享器設定一靜態IP 192.168.1.253 MAC定為ff-ff-ff-ff-ff-ff」做法) 靜態IP 設在一樓的 三樓的 (三樓有一個固定IP) 然而靜態IP192.168.1.253 是一定要設成這樣嗎 ?? 謝謝

# by Jeffrey

to playrain, 我沒有處理過相同情境,分享我知道的原理給你參考琢磨:機器在分享器(或路由器/防火牆)後方,你要設法送出封包讓它收到,正常情況用 IP就好。闗機兩小時後因IP/MAC對應被清掉,即使指定IP分享器也不知要送往哪個MAC哪塊網卡,故要走廣播把封包丟給所有連上網路的網卡。同網段可用.255直接對應ff-ff-ff-ff-ff-ff進行廣播,但.255不能跨網段使用(例如:你的IP是192.168.1.x,只能送192.168.1.255,不能送192.168.2.255或192.168.3.255),故克服的方法才會是設定一個靜態IP 192.168.1.253 MAC定為ff-ff-ff-ff-ff-ff並開放這個靜態IP讓外界存,當外界傳送封包到這個IP,路由器查得MAC為ff-ff-ff-ff-ff-ff會變成封包廣播,醒眠中的電腦也會收到,完成喚醒動作。

# by playrain

我的凱破主機 是192.168.0.1 我三樓的路由器IP是192.168.0.11(有綁一個固定IP 233.17.XXX.XX) 但是我的電腦IP是 192.168.10.104 這樣.255是設在哪?? 我區網 都可以開機成功(經過兩小時也會開機成功) 但是網外就不行

# by Jeffrey

to playrain, 你的「網外」是指192.168.0.x? 還是人在外面可以連回家用233.17.x.x IP喚醒192.168.10.104? 我的想法是路由器(分享器?)設定一個 192.168.10.253 對映到 ff-ff-ff-ff-ff-ff 若你的網外是指 192.168.0.x,則路由器增設 192.168.0.253 對映到 192.168.10.253 若你的網外是指 Internet,則路由器需設另一個233.17.x.x 對外IP對映到 192.168.10.253 (我不是這方面的專家,僅依所知提供想法,你再參考看看)

# by playrain

我的網外是指 兩者都是 一樓的主機IP是192.168.0.X 人在外面用4G網路都是 不行的 我的分享器有綁固定IP 一樓的主機 有綁分享器的IP位址也有綁MAC 路由器增設 192.168.0.253 對映到 192.168.10.253 這是指PORT嗎???

# by Jeffrey

to playrain, 我找到幾篇較詳細的做法參考:https://hackernoon.com/wake-on-lan-through-the-internet-491817e2dd41 https://www.howtogeek.com/192642/how-to-remotely-turn-on-your-pc-over-the-internet/

# by kk

請問例如停電或是跳電後無法WOL 有人有遇到嗎??

# by DOFU

你好 我想請問我有一台路由器WAN是123.192.x.x內部LAN是192.168.0.1,遇到的問題是關機十分鐘後無法喚醒,看了你的文章後,使用內網WOL Magic Packet Sender設定192.168.0.255電腦IP(192.168.0.100),十分鐘後可以成功,但外部連進123.192.x.x,需要甚麼設定也可以十分鐘後成功喚醒

# by Jeffrey

to DOFU,最簡單的做法是用 VPN 連回 AP,再對 192.168.0.255 送出封包。若無 VPN,則可考慮用 Port Forwarding,再將外部 IP 123.192.x.x 的 Port 9 對映到 192.168.0.255 Port 9,由 Internet 喚醒時以 123.192.x.x 為對象。但以上做法的可行性要視你的 AP 或分享器支援程度而訂,詳細做法可參考這篇 https://noob.tw/wake-on-wan/

Post a comment