menu Chancel's blog
rss_feed
Chancel's blog
有善始者实繁,能克终者盖寡。

PLEX无需公网IP启用远程访问功能

作者:Chancel Yang, 创建:2022-02-17, 字数:4762, 已阅:1724, 最后更新:2024-03-10

1. 简介

本地的PLEX服务器远程访问功能显示无法访问,提示“您的服务器已登录到plex但是无法从您的网络外部进行连接”

查看官方文档可知如需在外访问PLEX服务器,需要具备以下条件

  • 宽带具备公网IP
  • 路由器设置端口转发

这很合理,不合理的是国内畸形网络环境导致家用宽带不仅网络速度上行不佳,连公网IP也是不具备的

很不幸,我本地的网络环境是小区带宽,别说公网IP了,连上行带宽都不足10Mbps

即便如此,7-8Mbps也是足够看PLEX 720P视频,在外面刷刷美剧还是美滋滋的

思索肋下,要解决这个问题就需要让本地的PLEX服务器具备公网IP就可以了

2. 解决方案

2.1. 原理

具备公网IP的VPS是符合PLEX远程访问要求的,在VPS上面部署PLEX服务,那么远程访问是不会有任何问题的

设置路由端口转发的意义是因为通常具备公网IP的是路由器,而家庭设备都是局域网IP,通过NAT转发网络请求

那么问题就比较简单了,我们需要做的就是让PLEX机器认为“自己拥有VPS的公网IP”

这里假设我的VPS IP:119.119.119.119,再借助HTTP代理与内网穿透功能就可以让PLEX机器拥有公网IP了

2.2. VPS配置

2.2.1. GOST

首先借助GOST在VPS上搭建一个简易HTTP代理服务器,GOST仓库:github.com/ginuerzh/gost

下载解压后运行

Bash
wget https://github.com/ginuerzh/gost/releases/download/v2.11.1/gost-linux-amd64-2.11.1.gz
gzip -d gost-linux-amd64-2.11.1.gz
gost-linux-amd64-2.11.1 -L=user:passwd@0.0.0.0:8080

在本地shell中进行对代理进行验证测试能否通过VPS代理访问外网

TEXT
export HTTPS_PROXY="http://userl:passwd@119.119.119.119:8080"

curl https://api.chancel.me/rest/api/v1/ip

# 输出如下
{"status":1,"msg":"查询成功","data":{"ip":"119.119.119.119"}}

确认GOST运行没有问题之后,添加到Supervisor后台进程(可选)

Bash
cat /etc/supervisor/conf.d/gost.conf

# 输出如下
[program:gost-18080]
command=/usr/local/programs/gost/gost-linux-amd64-2.11.1 -L=user:userl@0.0.0.0:8080
autostart=true
autorestart=true
startsecs=10
user = apps

2.2.2. FRPS配置

FRP是内网穿透工具,简单讲就是把VPS上某个端口转发到本地机器

这一步使用SSH转发也可以,只是我恰好有不少本地服务都是通过FRP代理到VPS上的,这里就直接使用FRP作为穿透工具

在VPS上面下载FRP并解压,官方仓库传送门:github.com/fatedier/frp

Bash
wget https://github.com/fatedier/frp/releases/download/v0.34.0/frp_0.34.0_linux_amd64.tar.gz
tar -zxvf frp_0.34.0_linux_amd64.tar.gz

编辑FRP服务端配置文件frps.ini

INI
cat frps.ini

# 输出如下
[common]
bind_port = 7000
token = passwd

运行服务端的FRP程序

Bash
/usr/local/programs/frp_0.34.0_linux_amd64/frps -c /usr/local/programs/frp_0.34.0_linux_amd64/frps.ini

确认运行没有问题之后,添加到Supervisor后台进程(可选)

Bash
cat /etc/supervisor/conf.d/frps.conf

# 输出如下
[program:frps]
command=/srv/frp/frp_0.33.0_linux_amd64/frps -c /srv/frp/frp_0.33.0_linux_amd64/frps.ini
autostart=true
autorestart=true
startsecs=10
user=apps

2.3. PLEX机器配置

2.3.1. PLEX设置HTTP代理

VPS的HTTP代理有了,接下来给PLEX挂HTTP代理即可

检查PLEX的systemd配置文件,发现可以直接引入HTTP代理,太好了

在/lib/systemd/system/plexmediaserver.service 引入以下网络代理信息

INI
Environment="HTTP_PROXY=http://userl:passwd@119.119.119.119:8080"
Environment="HTTPS_PROXY=http://userl:passwd@119.119.119.119:8080"

整体文件如下

INI
cat /lib/systemd/system/plexmediaserver.service 

# 输出如下
...
[Service]
Environment="PLEX_MEDIA_SERVER_APPLICATION_SUPPORT_DIR=/var/lib/plexmediaserver/Library/Application Support"
Environment=PLEX_MEDIA_SERVER_HOME=/usr/lib/plexmediaserver
Environment=PLEX_MEDIA_SERVER_MAX_PLUGIN_PROCS=6
Environment="HTTP_PROXY=http://userl:passwd@119.119.119.119:8080"
Environment="HTTPS_PROXY=http://userl:passwd@119.119.119.119:8080"
ExecStartPre=/bin/sh -c '/usr/bin/test -d "${PLEX_MEDIA_SERVER_APPLICATION_SUPPORT_DIR}" || /bin/mkdir -p "${PLEX_MEDIA_SERVER_APPLICATION_SUPPORT_DIR}"'
ExecStart=/bin/sh -c '\
export PLEX_MEDIA_SERVER_INFO_VENDOR="$(grep ^NAME= /etc/os-release | awk -F= "{print \\$2}" | tr -d \\" )"; \
export PLEX_MEDIA_SERVER_INFO_DEVICE="PC"; \
export PLEX_MEDIA_SERVER_INFO_MODEL="$(uname -m)"; \
export PLEX_MEDIA_SERVER_INFO_PLATFORM_VERSION="$(grep ^VERSION= /etc/os-release | awk -F= "{print \\$2}" | tr -d \\" )"; \
exec "/usr/lib/plexmediaserver/Plex Media Server"'
Type=simple
....

重新读取PLEX的配置文件并重启服务

Bash
sudo systemctl daemon-reload
sudo systemctl restart plexmediaserver.service

登录PLEX后台查看远程访问信息,可以看到外网IP变成了VPS的IP地址了

但是仍然显示无法访问,这是因为端口并没有从VPS转发回来给我们的PLEX服务器

我们还得在本地用FRP客户端连接FRP服务端,接收VPS的端口转发,将指定端口转发到我们的PLEX服务器上

2.3.2. FRPC配置

与VPS配置相似的,我们在本地PLEX机器上下载FRP并解压

Bash
wget https://github.com/fatedier/frp/releases/download/v0.34.0/frp_0.34.0_linux_amd64.tar.gz
tar -zxvf frp_0.34.0_linux_amd64.tar.gz

编辑FRP客户端配置文件frpc.ini

INI
cat frpc.ini

# 输出如下
[common]
token = passwd
server_addr = 119.119.119.119
server_port = 7000

[HOME_PLEX_SERVICE]
local_ip = 127.0.0.1
type = tcp
local_port = 32400
remote_port = 32400

确认运行没有问题之后,添加到Supervisor后台进程(可选)

Bash
cat /etc/supervisor/conf.d/frpc.conf

# 输出如下
[program:frpc]
command=/usr/local/programs/frp/frp_0.33.0_linux_arm64/frpc -c /usr/local/programs/frp/frp_0.33.0_linux_arm64/frpc.ini
autostart=true
autorestart=true
startsecs=10
user=apps

2.4. 验证

打开PLEX后台-远程访问,选择手动指定端口,输入32400,点确认后可以看到远程访问提示可用,如下图

完美!

3. 资料参考

Support Articles - plex.tv


[[replyMessage== null?"发表评论":"发表评论 @ " + replyMessage.m_author]]

account_circle
email
web_asset
textsms

评论列表([[messageResponse.total]])

还没有可以显示的留言...
[[messageItem.m_author]] [[messageItem.m_author]]
[[messageItem.create_time]]
[[getEnviron(messageItem.m_environ)]]
[[subMessage.m_author]] [[subMessage.m_author]] @ [[subMessage.parent_message.m_author]] [[subMessage.parent_message.m_author]]
[[subMessage.create_time]]
[[getEnviron(messageItem.m_environ)]]