DLNA分享服务设置(Linux minidlna版)

date: 2016.06.23; modification:2016.06.24

目录:

转自: http://electronic-blue.herokuapp.com/blog/2013/01/sharing-digital-media-by-dlna-on-linux/ 并有所修改.

1 背景

DLNA 是 Digital Living Network Alliance 的缩写, 它是由 Sony 为首的多家厂商所组成的联盟, 并且制定出一套这用于数字媒体分享的协议.

最近的家用数字产品, 比如说手机, 平板电脑, 数字电视等几乎都标榜它们是符合 DLNA 认证的多媒体设备.

只要家中的数码设备连接到同一个区域网路, 使用 DLNA 就可以很方便地把数字媒体分享给不同的播放设备. 比如说把手机中的影片直接送到电视上播放, 或是把照片送进印表机中列印等等.

由于可以透过无线网路进行资料传输, 不需要接上传输线也不需要额外的设定动作, 相当方便.

这篇文章会间单介绍如何在 Linux 上架设 DLNA server 来分享媒体, 同时使用 ebtables 来限制使用设备.

2 安装 DLNA Server

首先是安装 DLNA server, 我使用的是 minidlna 这个很间单的软件. 在 Debian 上只要用apt 就可以安装了.

sudo apt-get install minidlna

接著, 编辑 /etc/minidlna.conf 来设定分享目录:

media_dir=/srv/media

第一行会把 /srv/media 底下所有的媒体文件(照片, 影片, 音乐)分享出去. 如果想要限制媒体的种类, 可以在目录前加上 V(影片), A(声音)或 P(照片)来指定种类:

media_dir=V,/srv/video

另外也别忘了指定 port 以及 server 的名称:

port=8200
model_name=My DLNA Server

然后更新 cache

sudo 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 等选择, 它们多半本身就具备了媒体播放功能.

3 限制存取设备

3.1 ebtables设置

DLNA 是设计给家庭环境使用, 它假设能够连上家用区域网路的设备都通过了某种程度的认证 (比如说拥有无线网路密码), 因此它没有认证与权限相关的设定, 所有能连上区域网路的设备都可以播放 server 上的媒体.

尽管大部份的家庭环境是这样没错, 但有时候我们还是不希望把媒体分享给所有网路上的设备, 比如说租房子时使用的网路是与其它房客共享的, 若不想把照片影片一起分享给不认识的房客, 该怎麽做呢?

常见的解法是使用 MAC address 来作为区分. 一般来说在区域网路上的设备都有一个 MAC address, 我们可以设定只有登记在白名单上的设备才能浏览媒体. 在 Linux 上, 利用 MAC address 来过滤封包的程序叫作 ebtables.

sudo apt-get install ebtables

ebtables 用起来很像 iptables, 不同的地方在于他是作用在较低阶的链路层(link layer). 首先我们把 DLNA 相关封包抽出来, 并且设定它的预设处理方式为丢弃封包:

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

接著把设备的 MAC address 加进 dlna chain 中, 并且设定为接受封包:

sudo ebtables -A dlna -s XX:XX:XX:XX:XX:XX -j ACCEPT

这么一来就只有已登记 MAC address 的设备可以看到 server 上的媒体了. 不过这并不算是非常安全的保护措施, 因此较为敏感的资料, 建议还是不要使用 DLNA 分享.

3.2 iptables设置

上面ebtables设置为转载的方法, 我试了, 不起作用, 网上说ebtables需要是bridge模式, 而非bridge模式不起作用. 后来改为iptables, 起到了效果.

sudo iptables -A INPUT -p tcp --dport 8200 -m mac --mac-source 00:22:44:66:88:aa -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 8200 -j DROP

注意上面两句的顺序, 需要先设置允许, 后设置DROP, 否则如果DROP在前, ACCEPT在后, 则会先执行DROP, 后面的ACCEPT就没有效果了.

如果之后还想再加入允许, 则可以用-I, 即insert, 插入允许.

sudo iptables -I INPUT 1 -p tcp --dport 8200 -m mac --mac-source 00:22:44:66:88:bb -j ACCEPT

4 附录

4.1 ebtables基本命令

4.1.1 查看rules列表

ebtables -L
ebtables -L –Lc , 查看各rule的匹配次数以及字节数

4.1.2 新建/删除链

ebtables -N <chain_name>
ebtables -X <chain_name>

4.2 新建规则

ebtables -A <chain_name> [ rules ]

[rules]有几种:

5 参考

http://electronic-blue.herokuapp.com/blog/2013/01/sharing-digital-media-by-dlna-on-linux/

http://www.cnblogs.com/peteryj/archive/2011/07/24/2115602.html