用10年前的x61t做了个dlna服务器

用10年前的x61t做了个dlna服务器

硬件:
2010年产x61t笔记本
小米路由器1代 1T硬盘版

最小安装 Debian 10

Debian是一个自由的操作系统(Linux)。
下载 debian-10.1.0-amd64-netinst.iso

https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-10.1.0-amd64-netinst.iso

用科大mirrors.ustc.edu.cn源代替deb.debian.org

sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list

安装宝塔
www.bt.cn

实现apache mysql php Pure-ftp组件具体根据自己应用选择开启。

使用dlna协议让小米电视自动发现服务器上的资源

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

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

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

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

这篇文章会间单介绍如何在 Linux 上架设 DLNA server 来分享媒体, 同时使用 ebtables 来限制使用设备.
首先是安装 DLNA server, 我使用的是 minidlna 这个很间单的软件. 在 Debian 上只要用apt 就可以安装了.

apt-get install minidlna
vi /etc/minidlna.conf

/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

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

挂载小米路由器

使用小米路由器手机app建立被mount的目录,并设置为分享权限。
然后mount

mount -t cifs //xxx.xxx.xxx.xxx/youpath /you/loaclpath -o guest,rw,uid=1001,gid=1001

结合/etc/passwd选择用户使用uid和gid,这样就可放心的利用http ftp等方式进行读写权限了。

将mount放入
/etc/rc.local

#Add by liang
#mount -t cifs //xxx.xxx.xxx.xxx/youpath1 /you/localpath1 -o guest
mount -t cifs //xxx.xxx.xxx.xxx/youpath2 /you/localpath2 -o guest,rw,uid=1001,gid=1001
#让debian开机后可以自动息屏
setterm -blank 1
exit 0

利用docker虚拟化运行下载容器

什么是 Docker
Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在 GitHub 上进行维护。Docker 项目后来还加入了 Linux 基金会,并成立推动 开放容器联盟(OCI)。

Docker 自开源后受到广泛的关注和讨论,至今其 GitHub 项目 已经超过 5 万 4 千个星标和一万多个 fork。甚至由于 Docker 项目的火爆,在 2013 年底,dotCloud 公司决定改名为 Docker。Docker 最初是在 Ubuntu 12.04 上开发实现的;Red Hat 则从 RHEL 6.5 开始对 Docker 进行支持;Google 也在其 PaaS 产品中广泛应用 Docker。

Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于 LXC,从 0.7 版本以后开始去除 LXC,转而使用自行开发的 libcontainer,从 1.11 开始,则进一步演进为使用 runC 和 containerd。

卸载旧版本
旧版本的 Docker 称为 docker 或者 docker-engine,使用以下命令卸载旧版本:

$ sudo apt-get remove docker \
               docker-engine \
               docker.io

使用 APT 安装
由于 apt 源使用 HTTPS 以确保软件下载过程中不被篡改。因此,我们首先需要添加使用 HTTPS 传输的软件包以及 CA 证书。

$ sudo apt-get update

$ sudo apt-get install \
     apt-transport-https \
     ca-certificates \
     curl \
     gnupg2 \
     lsb-release \
     software-properties-common

鉴于国内网络问题,强烈建议使用国内源,官方源请在注释中查看。

为了确认所下载软件包的合法性,需要添加软件源的 GPG 密钥。

$ curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/debian/gpg | sudo apt-key add -
# 官方源
# $ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

然后,我们需要向 source.list 中添加 Docker CE 软件源:

$ sudo add-apt-repository \
   "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/debian \
   $(lsb_release -cs) \
   stable"
# 官方源
# $ sudo add-apt-repository \
#    "deb [arch=amd64] https://download.docker.com/linux/debian \
#    $(lsb_release -cs) \
#    stable"

以上命令会添加稳定版本的 Docker CE APT 源,如果需要测试或每日构建版本的 Docker CE 请将 stable 改为 test 或者 nightly。

安装 Docker CE
更新 apt 软件包缓存,并安装 docker-ce。

$ sudo apt-get update

$ sudo apt-get install docker-ce

使用脚本自动安装
在测试或开发环境中 Docker 官方为了简化安装流程,提供了一套便捷的安装脚本,Debian 系统上可以使用这套脚本安装,另外可以通过 --mirror 选项使用国内源进行安装:

$ curl -fsSL get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh --mirror Aliyun
# $ sudo sh get-docker.sh --mirror AzureChinaCloud

执行这个命令后,脚本就会自动的将一切准备工作做好,并且把 Docker CE 的稳定(stable)版本安装在系统中。

启动 Docker CE

$ sudo systemctl enable docker
$ sudo systemctl start docker

建立 docker 用户组
默认情况下,docker 命令会使用 Unix socket 与 Docker 引擎通讯。而只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统上不会直接使用 root 用户。因此,更好地做法是将需要使用 docker 的用户加入 docker 用户组。

建立 docker 组:

$ sudo groupadd docker

将当前用户加入 docker 组:

$ sudo usermod -aG docker $USER

退出当前终端并重新登录,进行如下测试。

测试 Docker 是否安装正确

$ docker run hello-world

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
d1725b59e92d: Pull complete
Digest: sha256:0add3ace90ecb4adbf7777e9aacf18357296e799f81cabc9fde470971e499788
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

若能正常输出以上信息,则说明安装成功。

镜像加速器
国内从 Docker Hub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。国内很多云服务商都提供了国内加速器服务,例如:

Azure 中国镜像 https://dockerhub.azk8s.cn
阿里云加速器(需登录账号获取)
七牛云加速器 https://reg-mirror.qiniu.com
由于镜像服务可能出现宕机,建议同时配置多个镜像。

国内各大云服务商均提供了 Docker 镜像加速服务,建议根据运行 Docker 的云平台选择对应的镜像加速服务,具体请参考官方文档。

本节我们以 Azure 中国镜像 https://dockerhub.azk8s.cn 为例进行介绍。

Ubuntu 16.04+、Debian 8+、CentOS 7
对于使用 systemd 的系统,请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)

{
  "registry-mirrors": [
    "https://dockerhub.azk8s.cn",
    "https://reg-mirror.qiniu.com"
  ]
}
注意,一定要保证该文件符合 json 规范,否则 Docker 将不能启动。

之后重新启动服务。

$ sudo systemctl daemon-reload
$ sudo systemctl restart docker

注意:如果您之前查看旧教程,修改了 docker.service 文件内容,请去掉您添加的内容

(--registry-mirror=https://dockerhub.azk8s.cn)

安装rrshare64

https://hub.docker.com/r/oldiy/rrshare64

docker run -d --name rrshare -p xxxx:xxxx -v /your/downloads:/opt/work/store oldiy/rrshare64:latest

xxxx你的映射端口可以采用 3333:3333之类的

由于docker rrshare对cpu占用率比较高写了两个脚本方便气启动和停止。

runrr.sh
docker run --name rrshare64 -d -p xxxx:xxxx -v /your/downloads:/opt/work/store oldiy/rrshare64:latest

stoprr.sh
docker stop rrshare64
docker container rm rrshare64

这里可以设置路径应统一为:
dlna
小米路由硬盘mount路径

http://ip:xxxx
默认密码:123456
请及时修改

设置UFW防火墙

UFW 全称为Uncomplicated Firewall,是Ubuntu 系统上默认的防火墙组件, 为了轻量化配置iptables 而开发的一款工具。 UFW 提供一个非常友好的界面用于创建基于IPV4,IPV6的防火墙规则。

安装bt后,会影响ufw的配置,所以先清空宝塔配置,在手动配置ufw和宝塔的管理可以同步。

ufw reset#重置防火墙

使用如下命令进行端口管理,将你开放的dlna端口rrshare64的端口以及定义的ssh vpn web ftp 等端口进行开放。为了dlna的安全性,请使用ufw allow from xx.xx.xx.xx to any port xxxx仅可电视dlna使用,切记。

ufw enable
ufw disable
ufw allow xx/tcp
ufw delete allow xx/tcp
ufw allow from xx.xx.xx.xx to any port xxxx
ufw deny from xxx.xxx.xxx.xxx

(可以结合lastd进行设置,lastd为访问/var/log/ 日志)

ufw verlose#查看ufw设置

Status: active
To                         Action      From
--                         ------      ----
xxxx/tcp                   ALLOW       Anywhere                  
xx/tcp                     ALLOW       Anywhere                  
xxxxx:xxxxx/tcp            ALLOW       Anywhere                  
xx/tcp                     ALLOW       Anywhere                  
xx/tcp                     ALLOW       Anywhere                  
88/tcp                     ALLOW       Anywhere                  
xxxx/tcp                   ALLOW       Anywhere                  
xxxx                       ALLOW       xxx.xxx.xxx.xxx             
xxxx/tcp                   ALLOW       Anywhere                  
xxxx/tcp (v6)              ALLOW       Anywhere (v6)             
xx/tcp (v6)                ALLOW       Anywhere (v6)             
xxxxx:xxxxx/tcp (v6)       ALLOW       Anywhere (v6)             
xx/tcp (v6)                ALLOW       Anywhere (v6)             
xx/tcp (v6)                ALLOW       Anywhere (v6)             
xx/tcp (v6)                ALLOW       Anywhere (v6)             
xxxx/tcp (v6)              ALLOW       Anywhere (v6)             
xxxx/tcp (v6)              ALLOW       Anywhere (v6)            

ufw可以快速简便的配置iptables,ufw配置后生成的配置文件风格与iptables一致。配置文件见:

liang@thinkpad:~$ cat /etc/ufw/
after6.rules                   
before6.rules                  
ufw.conf
after6.rules.20191106_230830 
before6.rules.20191106_230830
user6.rules
after.init
before.init
user6.rules.20191106_230830
after.rules
before.rules                   
user.rules
after.rules.20191106_230830
before.rules.20191106_230830
user.rules.20191106_230830
applications.d/
sysctl.conf   

另外一些ufw一并记录在此:
1 启用

 sudo ufw enable
 sudo ufw default deny 

作用:开启了防火墙并随系统启动同时关闭所有外部对本机的访问(本机访问外部正常)。
2 关闭

 sudo ufw disable 

2 查看防火墙状态

 sudo ufw status 

3 开启/禁用相应端口或服务举例

 sudo ufw allow 80 允许外部访问80端口
 sudo ufw delete allow 80 禁止外部访问80 端口
 sudo ufw allow from 192.168.1.1 允许此IP访问所有的本机端 
 sudo ufw deny smtp 禁止外部访问smtp服务
 sudo ufw delete allow smtp 删除上面建立的某条规则
 sudo ufw deny proto tcp from 10.0.0.0/8 to 192.168.0.1 port 22 要拒绝所有的TCP流量从10.0.0.0/8 到192.168.0.1地址的22端口
可以允许所有RFC1918网络(局域网/无线局域网的)访问这个主机(/8,/16,/12是一种网络分级):
sudo ufw allow from 10.0.0.0/8
sudo ufw allow from 172.16.0.0/12
sudo ufw allow from 192.168.0.0/16

 sudo apt-get install ufw
 sudo ufw enable
 sudo ufw default deny 

参见:[https://wiki.ubuntu.org.cn/ufw使用指南]

VPN穿透涉及fq暂时滤过

结合isp询问和进行vpn设置,国情原因不方便透露了。谅解。



www.liangliang.org.cn

发表 2019年11月9日 自 亮 类别 "Debian