前言
继上次整了Plex
上挂载阿里云之后
发现
Plex
经常连不上,以至于降级到缓慢的间接连接。一看后台发现了问题:由于我的NAS
是在科学下的,而我的Plex
用的是NAS
的ip+端口的形式进行访问,这就导致DDNS
变成科学解析了。正巧看到eSir
的这个视频,讲的非常棒!于是乎想到如果Plex
能拥有一个独立的IP地址
,那就能在OpenWrt
下对其单独配置。
2023-05-13更新:最近突然发现Plex
时不时被阻断,每次登录都要等很久,初步怀疑是我将Plex.tv
设置为不走代理。果不其然,在我将Plex.tv
拿出白名单后,登陆瞬间恢复。然而紧接着就是Plex
检测到我的代理地址了,远程访问又变成了难题。上次其实偷了个懒,直接把Plex.tv
放进白名单完事儿,没细查他检测IP
的那个域名,这次通过抓包发现Plex
真正检测IP
的域名是v4.plex.tv
,尝试让他强制走代理,瞬间成功!登录+远程终于再次达成
Macvlan的概念及作用
什么是Macvlan
引用Macvlan的官方文档
Use macvlan networks
Some applications, especially legacy applications or applications which monitor network traffic, expect to be directly connected to the physical network. In this type of situation, you can use the macvlan network driver to assign a MAC address to each container’s virtual network interface, making it appear to be a physical network interface directly connected to the physical network. In this case, you need to designate a physical interface on your Docker host to use for the macvlan, as well as the subnet and gateway of the macvlan. You can even isolate your macvlan networks using different physical network interfaces. Keep the following things in mind:It is very easy to unintentionally damage your network due to IP address exhaustion or to “VLAN spread”, which is a situation in which you have an inappropriately large number of unique MAC addresses in your network.
Your networking equipment needs to be able to handle “promiscuous mode”, where one physical interface can be assigned multiple MAC addresses.
If your application can work using a bridge (on a single Docker host) or overlay (to communicate across multiple Docker hosts), these solutions may be better in the long term.
Macvlan的好处
总的来说Macvlan
有两个好处:其一
是少了一层容器内到服务器网络层的NAT
损失,减少了服务器资源的占用并加快了网络速度;其二
就是能够让容器有个独立的IP地址
,方便对其进行单独配置。
配置Macvlan
OpenWrt下使用DockerMan
不得不说DockerMan
真的非常好用,首先驱动那栏选Macvlan
,然后配置下自己的子网和网关即可。具体参照下图配置
群晖下配置
Macvlan
在群晖下不能通过GUI
点选创建,需要通过SSH
连接后台进行创建
#新建macvlan网络
docker network create -d macvlan -o parent=【eth0】【eNet】\
--subnet=【Network IP】\
--gateway=【Gateway IP】
#一个例子
docker network create -d macvlan -o parent=ovs_eth0 ml \
--subnet=192.168.2.0/24 \
--gateway=192.168.2.233
完成配置后输入docker network ls
即可看到刚新创建的Macvlan
网络,当然也可以在GUI
中查看
使用Macvlan创建容器
在创建完Macvlan
网络后就可以让容器使用Macvlan
来获取独立于宿主机的IP地址
了。举几个例子:
Plex
docker run -d \
--name=plex \
--network=ml \ //使用刚创建的ml
--ip=192.168.2.xx \ //指定容器的ip
-e PUID=1024 \
-e PGID=100 \
-e VERSION=docker \
-v /volume2/docker/plex/config:/config \
-v /volume2/docker/plex/data/tv:/tv \
-v /volume2/docker/plex/data/movies:/movies \
--device=/dev/dri/renderD128 \ //开启硬解
--restart unless-stopped \
linuxserver/plex:latest
qBittorrent
docker run -d \
--name=qb \
-e PUID=1024 \
-e PGID=100 \
-e TZ=Asia/Shanghai \
-e WEBUI_PORT=8080 \
--network ml \ //使用刚创建的ml
--ip=192.168.2.xx \ //指定容器的ip
-v /volume2/docker/qb/config:/config \
-v /volume2/Download/qb:/downloads \
--restart unless-stopped \
linuxserver/qbittorrent:latest
Heimdall
docker run -d \
--name=heimdall \
--network ml \ //使用刚创建的ml
--ip=192.168.2.xx \ //指定容器的ip
-e PUID=1024 \
-e PGID=100 \
-e TZ=Asia/Shanghai \
-v /volume2/docker/heimdall:/config \
--restart unless-stopped \
linuxserver/heimdall:latest
解除一些限制(可选)
通过上述操作已经可以很舒服的给容器分配独立的IP地址
,但会发现一个问题,那就是虽然这些容器可以和局域网内其他的设备或者在他们之间通信,但是却无法与宿主机通信。其实这是Macvlan
的一个安全机制,按照下面方法即可绕过该限制
#创建一个新的macvlan网络
ip link add mll link ovs_eth0 type macvlan mode bridge
#给新创建的macvlan一个地址
ip addr add 192.168.2.35 dev mll
#启动网络
ip link set mll up
#让容器通过新创建的macvlan网络
ip route add 192.168.2.31 dev mll
#测试下是否能正常通信
ping x.x.x.x
#如果正常就加入开机脚本完成固化
/etc/rc.local
最后
在配置了Macvlan
后,Plex
再也没有断联过。容器们有了独立的IP地址
之后管理起来真心方便很多,再次感谢eSir
的视频!
不过在docker-compose
中如何引入Macvlan
参数我还没整明白,如果看到此文的你知道如何在的中配置Macvlan
的话,麻烦在下面留言哦
发表回复