Plex 是个好东西,不仅界面美观、配置容易,上手还十分简单,是我个人媒体服务器首选。而且有公网的话,Plex 自带的远程访问服务(也就是中转)还可以直接让你在出门在外的时候,通过手机或是平板上的 Plex App 访问 Plex 媒体库,无需任何额外的设置。可美中不足的是,这玩意默认只映射 IPv4,不会自动映射到 IPv6。即使你已经在 Plex 的网络设置中勾选上 「启动支持 IPv6 的服务器」 ,它也视而不见,照样走它那 IPv4 的阳光大道。
没有公网 IPv4 的时候,Plex 的网络请求会像这样:
192-168-31-123.abcdefghjhfjkhasdafdsfecf.plex.direct
这都公网了,隔壁 Emby 直接域名解析上去就能用,就你 Plex 搞得这么娇气!
在现今 IPv4 资源枯竭的环境下,获取一个 IPv6 公网的难度绝对是要比 IPv4 小得多的多。因此,为了能充分利用手里的 IPv6 公网资源,我们需要简单地配置一下 Plex,好好治治它不老实走 IPv6 的坏毛病。
安装 DDNS-GO
使用 DDNS-GO 是为了解决动态公网的问题,毕竟 IPv6 一般不会是固定的。此外,使用 DDNS 还需要你拥有一个属于自己的域名。
这里使用 Docker Compose 进行安装,群晖用户不要忘了预创建 ddns-go
文件夹:
version: "3.9"
services:
ddns-go:
image: jeessy/ddns-go:latest
container_name: ddns-go
network_mode: host
volumes:
- ./ddns-go:/root
environment:
- TZ=Asia/Shanghai
restart: unless-stopped
安装完后在浏览器中打开 http://主机IP:9876
,配置 DDNS-GO。
选择你域名所在的 DNS 服务商。DDNS-GO 中不同的 DNS 服务商获取 Token 或是 API key 都会有相应的提示。这里以 Cloudflare 为例。

访问「创建令牌」页面,点击「创建令牌」;选择「编辑区域 DNS」,点击「使用模板」。在「区域资源」处选择「所有区域」,其余保持默认。

点击「继续以显示摘要」,完成创建后将秘钥粘贴至 DDNS GO 的 token
处即可。
token
在下面的 acme.sh 中也会用到,可以保存在某处备用。接着,启用 IPv6 配置,选择「通过网卡获取」IP 地址,在下方 Domains 里填入你想要使用的域名即可。

安装 ACME.SH
acme.sh 是一个用于签发证书的脚本,关于 ACME 协议 的相关知识,你可以自行查找资料。这里直接介绍 acme.sh 的使用方法。
你可以把 acme.sh 和 DDNS GO 安装在一个 compose.yaml
文件里,所以下面的配置我就省略掉一致的部分了。群晖用户不要忘了预创建 acme.sh
文件夹:
acme.sh:
image: neilpang/acme.sh
container_name: acme.sh
command: daemon
volumes:
- ./acme.sh:/acme.sh
- /var/run/docker.sock:/var/run/docker.sock
environment:
- TZ=Asia/Shanghai
restart: unless-stopped
如果网络不行,连接不到 ZeroSSL 的话(具体表现为签发证书的时候卡在 API 连接上),在拥有代理的前提下可以为容器配置 HTTP_PROXY
。
在 environment
项中增加两行:
environment:
- TZ=Asia/Shanghai
- HTTP_PROXY=http://代理的IP:端口
- HTTPS_PROXY=http://代理的IP:端口
启动容器后,进入容器的终端 sh
:
docker exec -it acme.sh sh

在 acme.sh 容器内部的终端执行后续的操作。
创建账户,记得改成自己的邮箱:
acme.sh --register-account -m i@example.com
使用上面 DDNS-GO 获取到的 Cloudflare 的 token
,导入该 CF_Token
:
export CF_Token="Y_jpxxxxxxxxxx_qxxxxxxxxxxxxxxxxxxxxxxxxx"
申请证书,可以在 这里 查看更详细的 api 使用方法:
acme.sh --issue -d 'yourdomain.xx' -d '*.yourdomain.xx' --dns dns_cf
这是一个泛域名
-d
的域名使用根域名方便后续操作。具体到某个域名的命令,比如本站 himiku.com
便是:
acme.sh --issue -d 'himiku.com' -d '*.himiku.com' --dns dns_cf
就可以申请到包含 himiku.com
和 *.himiku.com
的有效期为 90 天的 SSL 证书了。
-----END CERTIFICATE-----
[Sat Nov 17 20:50:29CST 2023] Your cert is in: /acme.sh/himiku.com_ecc/himiku.com.cer
[Sat Nov 17 20:50:29CST 2023] Your cert key is in: /acme.sh/himiku.com_ecc/himiku.com.key
[Sat Nov 17 20:50:29CST 2023] The intermediate CA cert is in: /acme.sh/himiku.com_ecc/ca.cer
[Sat Nov 17 20:50:29CST 2023] And the full chain certs is there: /acme.sh/himiku.com_ecc/fullchain.cer
更具体的使用方法,还请详细参考 acme.sh 官方使用文档。
如果你有在使用 oh-my-zsh 之类的命令行工具,那么可以添加一条别名:
alias acme.sh="docker exec acme.sh acme.sh"
后续就可以直接使用 acme.sh
,无需再 docker exec -it acme.sh sh
了。
如果没有,不进入容器内部终端的时候,后面的例子还请自行加上 docker exec acme.sh
,例如签发证书的时候:
docker exec acme.sh acme.sh --issue -d 'yourdomain.xx' -d '*.yourdomain.xx' --dns dns_cf
安装 Plex(可选)
如果你还没有安装 Plex,可以参考下方的 Compose 配置。唯一要注意的是要使用 host
的网络模式,bridge
模式在群晖中无法使用 IPv6 网络。
plex:
image: linuxserver/plex:latest
container_name: plex
network_mode: host #网络模式必须是host
environment:
- PUID=1026
- PGID=100
- VERSION=docker
# - PLEX_CLAIM=your-claim #在 https://www.plex.tv/claim/ 获取该验证码
volumes:
- ./plex:/config
- /volume1/media:/media
devices:
- /dev/dri:/dev/dri
restart: unless-stopped
生成 PKCS #12 证书
还是要用到 acme.sh,执行以下命令:
acme.sh --to-pkcs12 -d your.domain --password your-password
按上述申请证书的例子,应当是:
acme.sh --to-pkcs12 -d himiku.com --password my-plex-p12-password
应当有如下提示:
[Sat Nov 17 20:50:29CST 2023] The domain 'himiku.com' seems to have a ECC cert already, lets use ecc cert.
[Sat Nov 17 20:50:29CST 2023] Success, Pfx is exported to: /acme.sh/himiku.com_ecc/himiku.com.pfx
生成的 PKCS #12 证书就在 /acme.sh/himiku.com_ecc/himiku.com.pfx
文件夹内。
为 Plex 配置 PKCS #12 证书
将上一步中生成的 .pfx
格式的证书放在 Plex 能读取到的地方。我嫌麻烦,直接把 acme.sh
整个文件夹挂载到了 Plex 容器内,像这样:
volumes:
- ./plex:/config
- /volume1/media:/media
- /volume1/docker/acme.sh/himiku.com_ecc:/acme.sh/himiku.com_ecc
或者你也可以使用其他更方便的方法。
接着,在 Plex 的网络设置中,点击右侧「显示高级选项」,勾选「启动支持 IPv6 的服务器」,正确无误地填入「自定义证书位置」、「自定义证书加密密钥」以及「自定义证书域」。

往下滚动,关闭「启用中转」,填写「自定义服务器访问 URL」,链接需要完整到具体端口。

然后保存修改,再重启 Plex 容器,证书应该就生效了。Plex 的中转网络也应该变成了 IPv6 的地址,就像这样:
240e-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxx.abcdefghjhfjkhasdafdsfecf.plex.direct
自动更新 PKCS #12 证书
手动更新肯定是不现实且麻烦的,所以我们可以在群晖的控制面板中,新增一个定时脚本。
在自定义脚本中填入以下内容:
#生成证书
acme.sh --to-pkcs12 -d your.domain --password your-password
#重启plex
docker restart plex
时间可以设置为每月或每 3 个月运行一次,不必太频繁。你可以在创建完脚本后立刻运行一次测试,看看 Plex 是否用成功上了这个证书。
如此一系列操作下来,就可以享受 Plex 上由 IPv6 带来的乐趣了,快来试试吧!!
参考
本文作者:mikusa
本文链接:https://www.himiku.com/archives/plex-with-ipv6.html
版权声明:所有文章除特别声明外均系本人自主创作,转载及引用请联系作者,并注明出处(作者、原文链接等)。
请问怎么看 Plex 的中转网络呢
我是在群晖上安装的套件 Plex,无公网 ipv4,有公网 ipv6,无论是否启用证书,通过 ipv6 都能正常访问。在 Plex 设置中的【远程网络】选项那里一直都有个红色感叹号❗️,页面里面显示:“在您的网络外部不可用”,内部 192.168.9.4 : 32400 <—— 公开 182.136.186.170 : 32400 后面显示一个红色 X,这里不知道要怎么才会变成 IPV6 网络
这里不会变成 v6 网络,至少我这里是这样。你只要能正常使用就不用去管他 |´・ω・) ノ
那没看明白这样添加证书的操作和 ipv6 访问有什么关联,我不用证书也能直接用 ipv6 访问呀
那就当我又水了一文吧
Plex 已经提供了 plex.direct 的域名,除非很需要使用 Web 端的话不需要自己绑定域名和签发证书吧
近期 plex 似乎被墙了,想问一下目前有没有什么解决方案
上个代理,docker 跑的话配个 http_proxy、https_proxy 的环境变量就行了
看来得迁移到 docker 了。。。我现在用套件版跑 给 nas 挂代理的话 pt 的做种很受影响。。。只能刮削的时候出去 弄完就停掉
请问一下安卓客户端打开后卡 Logo 有没有好的解决方法?目前用的是 v2raya 旁路,服务端刮削是没问题的,就是手机和电视安卓端似乎无效
卡 logo?重装 app 或者重新添加服务器试试
想问一下,可以设置成同一个域名和端口有 ipv6 的时候走直连,没 ipv6 的情况下走 plex 的中转吗
这…… 不行吧?plex 的中转约等于没有,不要用 ε=ε=ε=(#>д<)ノ
之前用 ddns-go,部署完就忘了,导致域名解析天天被改,还以为是阿里云的锅 (´இ皿இ`)
感谢博主的教程,照着教程群晖虽然部署成功了,就是最后的自动更新的自定义脚本运行出错了。
下面两个脚本都试了
错误 Log 显示 WARNING: Error loading config file: .dockercfg: $HOME is not defined
求博主指教 谢谢啦
p12 证书有生成吗?群晖里只安了一个 acme 吧?
再次确认了一下 p12 证书有生成的 就是会报这个错
WARNING: Error loading config file: .dockercfg: $HOME is not defined
群晖有 2 个 acme
一个是自己照着下面项目的自动更新脚本运行的 acme.sh
项目地址是 https://github.com/andyzhshg/syno-acme?tab=readme-ov-file
第二个是按着教程安装了您介绍的 docker 版的 acme
不知道有没有影响
对了 顺便再咨询下博主大大 ddns-go 里面的域名是填写主域名还是填写子域名还是泛域名
比如主域名是 xxx.com 我想把 plex 的子域名设置成 plex.xxx.com 泛域名就是 *.xxx.com
还有一个问题就是 最后填写「自定义服务器访问 URL」,链接需要完整到具体端口。
比如 plex 子域名已经用群晖反代到了 32400 端口了 还需要完整到具体端口吗
小白的问题有点多 请博主大大指教
当然有影响…… 所以你具体是用哪个命令成功生成 p12 证书的?
主域名就只会自动解析主域名,比如你填 himiku.com 那就只会解析到 himiku.com ,泛域名直接就包含了子域名。
不对啊,我文中好像写了吧? 「泛域名即域名泛解析,指利用通配符 * (星号)作为子域名解析时,可以实现匹配所有的子域名。」
给 plex 上证书后,就不需要反代了。反代配置可以删掉,然后填到具体端口。
如果没记错的话用的是下面这个命令生成的 P12 证书的
docker exec acme.sh acme.sh --to-pkcs12 -d your.domain --password your-password
那你就把这个命令填进定时任务里
谢谢博主大大的指教 主要是小白水平有限 下面这句话没能吃透里面的意思 请博主大大见谅
「泛域名即域名泛解析,指利用通配符 * (星号)作为子域名解析时,可以实现匹配所有的子域名。」
小白的理解就是如果 ddns-go 里面填写了 nas 的主域名或者泛域名的话
就不需要反代了 直接填到具体端口就可以了哈
不知道理解的对不对 麻烦博主大大了!
意思是 ddns 里泛域名解析就等同于你手动挨个填 abc.xxx.com asd.xxx.com,直接一个 *.xxx.com 就匹配所有子域名了
但这跟你反代没关系啊,ddns 只是域名解析,反代是反代啊
你反代不是用的群晖内置的反向代理吗,把 plex.xxx.com 反代到内网的 192.168.1.1:32400 上吗?然后要给 plex 配 https 的话就会用到你发的那个 acme 脚本申请下来的证书
我这个是直接在 plex 里配置证书,所以省掉了反代那一步,改成直接在 plex 里填 plex.xxx.com:32400
谢谢博主大大的各种教导,我尝试了反代关掉输入 plex.xxx.com:32400, 纯 Ipv4 环境下无法访问公网 Ipv6 的 plex,然后又试了试反代输入 plex.xxx.com,没加端口号是可以访问的。不知道是不是因为之前泛域名的证书的原因。再次谢谢大大的殷勤教导。感谢!
顺便再跟大大汇报一下 用的 cloudfare 的 ddns 好像是 ipv4 跟 ipv6 免费双线的 cdn
纯 Ipv4 环境下也可以访问纯 Ipv6 的内容
纯 Ipv4 环境下当然无法访问公网 Ipv6 的 plex 啊…… 但你又套个 CF 是干啥,国内速度很慢的 (⌐■_■)
就是因为纯 Ipv4 环境下无法访问公网 Ipv6 的 plex 所以套了个 cf
代理状态打开小黄云 就可以纯 Ipv4 环境下访问公网 Ipv6 下的设备了
不管 plex 还是路由啥的 都是可以的 博主大大可是测试一下的
其实也不一定需要 host 网络,更建议给 docker 单独分一个子网,让他跟你的 host 网络隔离,这样会更安全点。修改一下
/etc/docker/daemon.json
,增加下面的内容:这样就可以让容器获取 v6 地址了,就是这个前缀你需要根据 ISP 分配的 v6 前缀自己算一个子网。
比如我运营商给的是 62 长度的前缀:
2408:xxxx:xxxx:168::/62
,v6 地址一共 128 位,前 64 位可以用来做网络段,62-64 之间你有两个 bit 位可以用来划分子网.前面的部分不用管,保持一致就可以了,重点关注 168 那里可以划分几个子网。注意 v6 每段有 16 位,由于前导 0 可以省略,所以 168 其实是 0168。
每个数字是一个 16 进制数,也就是 4bit 位一个数,两个数合起来就是一个 8bit,一段 16bit。
我们我们要划分的是 62-64 之间的数,也就是最后两 bit,那前面 3 个数(016)其实也不用关注,保持相同就可以,只需要关注 8 这个数字,把它转化成二进制
0100
运营商将最后 2 个 bit 位给我们自由分配,那么我们可以有以下几种组合:
0100
,0101
,0110
,0111
, 也就是 168,169,170,171。所以你可以划分 4 个子网:
***:169::/64
~***:171::/64
然鹅,群晖 Docker 的 IPv6 很不好开。我 qb 是走的 macvlan,不然 host 卡死,不晓得为啥。
dsm7.2 docker 桥接,网络显示 ipv6 禁用,实际能用 ipv6,bug 吗这是...
dsm 要用 host 才能有 v6,或者用 macvlan
感谢博主的教程,我手机的 plex 连接播放很流畅,但是我发现 Plexamp 连接不上了,我不知道是我设置有错还是 Plexamp 软件有缺陷。
Plexamp 退出登录试试看?
我重新安装了 Plexmp 并重新登录也是不行,不知道是不是 Plexamp 不支持 ipv6 还是我的网络问题
是支持 IPv6 的,我这边使用一切正常。那你内网环境下能用吗?我还真没遇到过这种情况。
怪事了,我用手机连接只开启 V6 的热点,plex 正常,就 Plexamp 连接不上。博主有时间麻烦发个您使用的 Plexamp app 给我,我看看是不是 APP 的问题,邮箱 1297284054@qq.com。非常感谢!
打扰博主了,现在不需要 app 了。我现在在 “自定义服务器访问 URL” 里填入反代好的域名也能流畅的使用了。感谢!
传送门
原来你没填啊…… 我文中不是有写嘛
我填了的,我之前按您的教程填的是直连解析的域名加证书,外网 plex 正常很流畅,plexamp 死活都连接不上,不知道那里出现问题了。
我现在连接的方式和您的教程有点不一样,填的是反向代理的域名,就是把 ipv6 反代成内网 ipv4,域名端口也不是 32400 了,plex 没按教程填入证书和域名,就只关闭「启用中转」,和填写「自定义服务器访问 URL」这两项,手机外网下 plexamp 正常可以连接上了,plex 也没出现问题。
诶,那你这样还有用上 IPv6 吗?使用流量看视频听音乐都一切正常?
正常,我今天测试了几次都没出现问题,很流畅