比Download Station好用100倍!NAS神器——Docker设置教程

比Download Station好用100倍!NAS神器——Docker设置教程,第1张

很多NAS玩家都很重视下载这个功能,一些小白刚上手NAS的时候,觉得自带的 Download Station 真的太好用了。但是时间一长后就发现,怎么这个链接下载不了,那个链接没有速度,这对于NAS的体验可谓是大打折扣。

目前来看,无论是群晖、威联通、华芸铁以及威马等一些出名的NAS厂商在自家的下载应用这一块都做的不如人意。但是NAS应用商店里面除了官方出的一些APP外,还有其他创作者上传的BT软件啊,比如Transmission、aira2等等,而如今这些很多也是逐渐下架,所以玩家们是时候尝试一下Docker了。

Docker是一个开源的应用容器引擎,,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。

我们以威联通NAS为例,来看一下如何 *** 作。

首先你要有一台装好系统的NAS,作者使用的威联通TS-453Bmini,就以此为例为大家演示。首先进入APP Center进行寻找Container Station。

威联通Container Station是一个软件容器工作站,它整合了LXC和Docker两项轻量级虚拟技术。它提供目前最热门、且已设置完成的应用程序,只要在其中点击即可部署。

我们下载完成之后直接打开。

可以看到主页面十分简洁,接着我们点击创建。

可以看到一个搜索框,可以直接在里面输入我们要搜索的Docker,我们首先搜索Transmission。

通过搜索结果可以看到,在Docker Hub里面是有这个Docker的,接下来我们点击安装,然后创建。

会让你选择使用哪个版本,我们选择最新的版本,点击下一步。

接下来开始创建Container,我们选择高级设置。

现有设置不变,新增三个选项,第一个名称为PGID,值为1000;第二个名称为PUID,值为1000;第三个名称为TZ,值为Asia/Chita。

接下来点击网络,进行网络设置。

主机、Container、通讯协议设置参数如上,设置完成点击共享文件夹。

进入页面后我们看到有一栏是挂载本机共享文件夹,我们要新增3个选项。

其中选择文件夹可以选择自己已经建好的,直接扔到里面,而挂载路径需要填写一下。

/config :配置文件目录的存放区域。

/downloads :下载资料的存放区域。

/watch :存放新种子文件目录的存放区域。

完成后点击创建。

最后确认,返回主页面查看状态。

好了,大功告成。

接下来点击链接进入Transmission。

咱们随便找几个链接扔到里面,看看速度。

家里是百兆的带宽,夜晚高峰时间段下载速度为5.26MB/s,一般情况下可以跑满带宽,较为满意。

本文用到的环境如下:

host: centos7

docker: 通过 yum install -y docker 安装,版本号为1.10.3

docker镜像:

# Version: 0.0.1 FROM ubuntu:latest MAINTAINER paul liu "pollux.liu@msn.com" RUN apt-get update RUN apt-get install -y net-tools RUN apt-get install -y iputils-ping CMD /bin/bash

场景图:

我的host主机接有无线路由器,通过ADSL拨号上网,网卡eth0固定IP为192.168.0.200,网关为路由器的IP 192.168.0.1。

在host上安装docker,并运行容器。

通过以下命令安装docker,

yum install -y docker

启用docker,

systemctl start docker

然后在host主机运行 ifconfig 或 ip a 命令,可以看到除去host原有的网卡eth0和回环lo外,多了个docker0。

docker0 IP为172.17.0.1,所在的网段默认为B类私网地址172.17.0.0/16。可以将docker0看做是host主机的一块虚拟网卡。这样host主机就等同于配置了双网卡,两块网卡之间可以通信,但前提是启用ip_forward。

这是docker0的第一个身份。

运行两个容器docker1,docker2,然后在host主机上运行 brctl show 查看,

这里可以看出docker0的第二个身份,一个虚拟交换机。每运行一个容器,就会产生一对veth,其中一端连接到docker0上,另一端连接到容器的eth0上。这样,所有连接到docker0的容器组成了一个局域网。如下图:

在host主机上运行 ifconfig ,也会发现多了两个veth这样的网络接口。

在host主机上运行 ip addr show veth6d9a691 ,可以查看到该veth具有mac地址,这也正说明了docker0的虚拟交换机的身份,交换机是通过mac地址通信的,连接到交换机的设备必须具有mac地址。

由于docker0自身也具有mac地址,这个与纯二层交换机是不同的,并且绑定了IP 172.17.0.1,容器默认把docker0作为了网关。也就是docker0还兼具路由的功能,因此可以把docker0看做是一个三层交换机,可以做二层数据包转发,也可以做三层路由转发。

在容器中运行 route -n 查看路由如下:

在host主机上运行 route -n 查看路由如下:

在host中,访问本网段192.168.0.0是通过eth0转发数据包的,访问172.17.0.0网段是通过docker0转发数据包的,而对于其他如公网是通过eth0将数据包转发给网关192.168.0.1,再由该网关进行数据包转发的,比如上网。

在容器中运行 ping sohu.com 或 ping 192.168.0.200 都可以ping通。

默认情况下,不需要再额外做任何配置,在一台host主机上,通过docker0,各容器之间可以互通,并且可以通过host的eth0连接外网。

通俗的讲,通过docker0组成了一个网段为172.17.0.0/16的以太网,docker容器发起请求时,如果是相同网段则经由docker0转发到目标机器,如果是不同网段,则经由docker0,转发到host的另一块网卡eth0上,由eth0负责下一步的数据包转发,比如公网地址。

下面进一步分析一下报文是怎么发送到外面的。

容器内部发送一条公网请求报文,通过eth0,在veth被接收。此时报文已经来到了主机上,通过查询主机的路由表( route -n ),如果发现报文应该通过主机的eth0,从默认网关发送出去,那么报文就被从docker0转发给主机的eth0,但前提是首先启用ip_forward功能,才能在host主机的docker0和eth0两个网卡间传递数据包。

由于目标地址并不属于host主机所在网段,那么会匹配机器上的 iptables中的nat表POSTROUTING链中的规则。

在host主机运行命令 iptables -L -n -t nat --line-numbers ,查看nat表,这里只看POSTROUTING链:

第一行中说明,对于源地址为172.17.0.0/16网段的数据包,发出去之前通过MQSQUERADE伪装。linux内核会修改数据包源地址为host主机eth0的地址(也就是192.168.0.200),然后把报文转发出去。对于外部来说,报文是从主机eth0发送出去的。

局域网内的机器由于都是私有IP,是无法直接访问互联网的(数据包可以发出去,但回不来。)如果要上网,除了可以通过硬件路由器,也可以通过软件路由,在iptables的nat表中的POSTROUTING链中添加SNAT规则。

测试一下,在host主机运行命令 iptables -t nat -D POSTROUTING 1 将第一条规则删掉,那么在容器中就运行命令 ping sohu.com 就ping不通了。但仍然可以ping通host主机。

在host主机运行命令以下命令恢复:

iptables -t nat -I POSTROUTING -s 172.17.0.0/16 -o eth0 -j SNAT --to-source 192.168.0.200

或者

iptables -t nat -I POSTROUTING -s 172.17.0.0/16 -j MASQUERADE

关于SNAT和MASQUERADE,这篇文章已经有过描述,可以参考: Docker前传之linux iptables

新建一Dockerfile,用以运行nginx容器:

# Version: 0.0.1 FROM paulliu/ubuntu_ip RUN apt-get install -y nginx EXPOSE 80

在host主机运行构建命令构建镜像 docker build -t paulliu/nginx .

在host主机运行容器启动命令 docker run -d -p 80 --name nginx1 paulliu/nginx nginx -g "daemon off"

在host主机查看容器的端口映射 docker port nginx1 80

在host主机运行命令 iptables -nat -L -n 可以看到在PREROUTING链中多了以下DNAT规则:

也就是在容器启动时通过 -p 80 将host主机192.168.0.200:32773映射为容器172.17.0.4:80。

注意:docker容器每次启动时获取的IP地址未必是一样的,而且 -p 80 是在host主机上随机选择一个端口号进行映射,每次启动的端口号也未必是一样的。但iptables中相关的规则是自动变更的。

在host主机运行 curl localhost:32773 或者在其他主机运行 curl 192.168.0.200:32773 结果如下:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11062009.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存