在 Linux 上設定 DLNA 分享服務

DLNA 是 Digital Living Network Alliance 的縮寫,它是由 Sony 為首的多家廠商所組成的聯盟,並且制定出一套適用於數位媒體分享的協議。最近的家用數位產品,比如說手機、平板電腦、數位電視及遊樂器等幾乎都標榜它們是符合 DLNA 認證的多媒體裝置。

只要家中的數位裝置連接到同一個區域網路,使用 DLNA 就可以很方便地把數位媒體分享給不同的播放裝置。比如說把手機中的影片直接送到電視上播放,或是把照片送進印表機中列印等等。由於可以透過無線網路進行資料傳輸,不需要接上傳輸線也不需要額外的設定動作,相當方便。

這篇文章會簡單介紹如何在 Linux 上架設 DLNA server 來分享媒體,同時使用 ebtables 來限制使用裝置。

安裝 DLNA Server

首先是安裝 DLNA server,我使用的是 minidlna 這個很簡單的軟體。在 Debian 上只要用apt 就可以安裝了。

1
# apt-get install minidlna

接著,編輯 /etc/minidlna.conf 來設定分享目錄:

1
2
media_dir=/srv/media
media_dir=V,/srv/video

第一行會把 /srv/media 底下所有的媒體檔案(照片、影片、音樂)分享出去。如果想要限制媒體的種類,可以在目錄前加上 V(影片)、A(聲音)或 P(照片)來指定種類。

另外也別忘了指定 port 以及 server 的名稱:

1
2
port=8200
model_name=My DLNA Server

然後更新 cache

1
# service minidlna force-reload

這麼一來,支援 DLNA 的播放程式如 media player 就可以直接瀏覽 server 上的媒體,並且串流播放。當然,平板或手機也能輕易播放分享出來的媒體。


Sony 的手機和平板多半都有附上 DLNA browser,App 名稱是「已連線的裝置」,打開後便會自動搜尋區域網路中的 DLNA server。如果你的手機或平板沒有內建這類軟體,可以安裝 MediaHouse UPnP/DLNA Browser。需要注意的是,這些 DLNA browser 的功能比較類似檔案總管,點選媒體後它們會啟動系統中的媒體播放程式(比如說 mx player 或 poweramp)。至於 iOS 的用戶則有 AirPlayer 或是 media:connect 等選擇,它們多半本身就具備了媒體播放功能。

限制存取裝置

DLNA 是設計給家庭環境使用,它假設能夠連上家用區域網路的裝置都通過了某種程度的認證(比如說擁有無線網路密碼),因此它沒有認證與權限相關的設定,所有能連上區域網路的裝置都可以播放 server 上的媒體。

儘管大部份的家庭環境是這樣沒錯,但有時候我們還是不希望把媒體分享給所有網路上的裝置,比如說租房子時使用的網路是與其它房客共享的,若不想把照片影片一起分享給不認識的房客,該怎麼做呢?

常見的解法是使用 MAC address 來作為區分。一般來說在區域網路上的裝置都有一個 MAC address,我們可以設定只有登記在白名單上的裝置才能瀏覽媒體。在 Linux 上,利用 MAC address 來過濾封包的程式叫作 ebtables。

1
# apt-get install ebtables

ebtables 用起來很像 iptables,不同的地方在於他是作用在較低階的連結層(link layer)。首先我們把 DLNA 相關封包抽出來,並且設定它的預設處理方式為丟棄封包:

1
2
# ebtables -N dlna -P DROP
# ebtables -A INPUT -p IPv4 --ip-proto tcp --ip-destination-port 8200 -j dlna

接著把裝置的 MAC address 加進 dlna chain 中,並且設定為接受封包:

1
# ebtables -A dlna -s XX:XX:XX:XX:XX:XX -j ACCEPT

這麼一來就只有已登記 MAC address 的裝置可以看到 server 上的媒體了。不過這並不算是非常安全的保護措施,因此較為敏感的資料,建議還是不要使用 DLNA 分享。

分享到 評論