2008/03/19

架設Vista認證網頁心得

前言:
因為在學校工作所以幫忙處理大量授權的啟用網頁
老闆是希望能以最簡單,使用者不用碰到鍵盤的情況下啟用

廠商是有提供交大(還清大)的架設案例
但是那非常的麻煩而且也不適用在北科上


其中認證程式當認證成功後就利用Linux中的Iptable轉PORT
看似架構很簡單,做起來也應該OK
但是有幾個缺點不適用
  1. 需要兩台機器來跑這個服務,浪費資源
    • 認證程式跑Linux
    • KMS跑Vista或WinServer 2003
  2. 校內使用者為虛擬IP,可以直接連到啟動伺服器;但北科不適用
  3. IPTABLE我看不懂  Orz...

所以尋求廠商有其他的解決方法,但是最後都不行:
  1. 將認證伺服器裝設VPN服務,利用撥入連線來做認證
    • 不過北科採用單一入口網站,帳號無法整合
  2. 我忘了XD,反正還有一種SOLUTION
所以列出幾點是北科的要求
  1. 希望共用SERVER,將認證與啟動在同一台
  2. 校內可直接啟動免認證,校外要最簡單的方式完成啟動
  3. 認證採校園單一入口認證(在學及教職員),另畢業校友也可以使用(EMAIL認證)
但問題來了,我怎麼讓認證程式轉到同台SERVER的啟動服務上呢?
經過某個超強資工系學弟的提示,在WINDOWS下有個指令可以將WINDOWS防火牆內的設定做修改

C:\Users\Asper>netsh /?
使用方式: netsh [-a AliasFile] [-c Context] [-r RemoteMachine] [-u [DomainName\]
UserName] [-p Password | *]
[Command | -f ScriptFile]

下列是所有可用的命令。
這個內容中的命令:
? - 顯示命令清單。
add - 新增項目清單中的設定項目。
advfirewall - 變更到 `netsh advfirewall' 內容。
bridge - 變更到 `netsh bridge' 內容。
delete - 刪除項目清單中的設定項目。
dhcpclient - 變更到 `netsh dhcpclient' 內容。
dump - 顯示設定指令檔。
exec - 執行指令檔。
firewall - 變更到 `netsh firewall' 內容。
help - 顯示命令清單。
http - 變更到 `netsh http' 內容。
interface - 變更到 `netsh interface' 內容。
ipsec - 變更到 `netsh ipsec' 內容。
lan - 變更到 `netsh lan' 內容。
nap - 變更到 `netsh nap' 內容。
netio - 變更到 `netsh netio' 內容。
p2p - 變更到 `netsh p2p' 內容。
ras - 變更到 `netsh ras' 內容。
rpc - 變更到 `netsh rpc' 內容。
set - 更新組態設定。
show - 顯示資訊。
winhttp - 變更到 `netsh winhttp' 內容。
winsock - 變更到 `netsh winsock' 內容。
wlan - 變更到 `netsh wlan' 內容。

下列是可使用的子內容:
advfirewall bridge dhcpclient firewall http interface ipsec lan nap netio p2p r
as rpc winhttp winsock wlan

所以啦,認證成功程式就打開PORT讓他連,然後五分鐘後就關掉
這麼簡單的IDEA就可達成這個看起來蠻麻煩的要求

打開PORT的指令                                                  ↓名稱   ↓啟動    ↓不打不能用
netsh firewall add portopening TCP 1688 KMS ENABLE custom $iplist                                      ↑動作          ↑協定  ↑PORT                                        ↑要開放的IP

關閉PORT的指令
netsh firewall delete portopening TCP 1688
不過呢這個指令很陽春,他要開就全部要一起加,同時很多人使用時,IPLIST就得要很多人的IP一起寫進去,關閉時也是全部一起清空

所以程式要在清空後在加回預設校內的IP才行

用PHP執行指令的函數
exec($cmd,$resault)                ↑指令     ↑執行的結果(會回傳"確定。")
不過他執行的時間大約3~5秒,要測試看看會不會讓PHP跑得很辛苦反而讓使用者觀感不好

最後搭配上帳號認證,LOG紀錄,其他有的沒有的
就是一個完整的系統啦

1 則留言:

  1. 您好:

    我是台北市教育網路中心的工程師,我們最近也是要開放windows 7的kms認證服務,正為了如何讓學術網路以外的ip也要能啟用的部份傷腦筋,看來您的解決方案不錯,不知是否可以提供較詳細的資料作參考~我是網路工程師~不太會寫程式.....謝謝!!

    版主回覆:(09/25/2008 12:35:57 AM)


    但是要網路自動化還是得用程式達成啦~不過目前有發現我的方法如果同時啟用數太高 程式會來不及反應而當掉 目前還在找更好的解決方法

    回覆刪除