2007年9月25日

新神兵利器~UPnP(miniupnpd)

說來有點遜,很久前就把UPnP弄上FreeBSD了,可是一直以來都怪怪的,對UPnP又不瞭解,也就一直放著爛~
UPnP在FreeBSD上得資料不多,永遠都是安裝libupnp和LinuxIGD,然後就是開MSN測試,話是沒錯,可是MSN怎樣都會上線,也只會顯示個你是透過UPnP上線,過程順不順利,完全不知道~

最近重新安裝Azureus後,發現它UPnP的部份很詳盡,對於成功、失敗、和Server的對談都有顯示,才發現UPnP已經掛點很久了~更進一步發現,LinuxIGD和libupnp在FreeBSD上根本不支援pf,因此重新搜尋相關資料。
搜尋後發現,BSD系列有另一套UPnP,而且整個程式很小,甚至被移植到Linux上,像是OpenWRT就有它的身影,它叫做miniupnpd。

miniupnpd設定不難,也就1個設定檔miniupnpd.conf,裡面設定也很簡單,也就設定WAN界面卡和LAN IP,還有allow的網路區段。
不過它很方便的是,它可以直接執行,用「-d」參數即可前端執行,然後就可以看到UPnP Client和它的對話,像是Azureus、MSN都很清楚~
最最重要的是,它在設計時,就是針對pf設計,所以對pf的支援性很好。

話說UPnP在Linux、FreeBSD上,幹嘛要跟防火牆配合?
這就是我一直不瞭解的部份,這次找資料後終於理解了~

UPnP它當然有它的規範,就像其他protocol一樣,他有自己的protocol spec,簡單的來說,UPnP Server其實是一個小型的應答器,走的是類似Web Server的protocol(根本就算是),對於Client,Client部份發出Request,UPnP Server則利用Web Server的對話方式,提供以xml檔案為基礎的對話內容。

在FreeBSD上,基本的UPnP Server設計很簡單,它的功能就是幫你作Port對應,而實際上,就像前面說過的,它本身只是應答器,所有的對應動作,它還是交給Firewall,因此UPnP Server要支援防火牆,針對特定防火牆下Port對應的指令,以miniupnpd來說,在BSD上支援pf,在Linux上支援Netfilter;而LinuxIGD+libupnp在FreeBSD上則是支援IPFilter(ipnat)。

此外,miniupnpd除了UPnP Server之外,也有開發UPnP Client,最重要的是,miniupnp整個講求的就是小,因此不論是Server還是Client,都很容易被移植,所以miniupnp的client支援Linux、FreeBSD、Windows(MinGW),而且Client還可以用來顯示目前UPnP Server的狀態(Server資訊和目前對應情況),這樣一來,任何時候要開任何Port,都可以很輕易的用Client程式對應,任何時候要查詢Server目前的對應狀況,也可以輕鬆的查詢。

沒有留言: