本文档记录如何使用阿里云轻量应用服务器,结合 frp 实现从公网访问 Unraid 内网中的 Emby 服务的完整过程,包含部署、配置、安全设置与常见问题排查。


🎟 前提准备

  • ✅ 一台运行 Emby(或其他内网可访问服务) 的 Unraid (其他系统也可以参考)服务器(内网 IP 如 192.168.xx.xxx
  • ✅ 一台阿里云轻量应用服务器(大陆地区)
  • ✅ 一个公网域名
  • ✅ 域名 DNS 已指向阿里云轻量的公网 IPv4

🌐 Step 1: 阿里云服务器安装 frps

创建配置文件 /home/frp/frps.ini

这一步是frp server端的配置,这个配置直接影响server(阿里云)与Client(本地Unraid)之间的通信。
👉 bind_port是frp服务的端口,frp服务借由这个端口来互相通信,需要在阿里云服务器的防火墙(或安全组)设置中将端口开放。
👉 dashboard_port是frp服务的控制面板,为安全性考虑可以选择性开放。

1
2
3
4
5
6
7
8
9
10
11
[common]
bind_port = 7000
token = mySuperSecureToken

# (可选)Dashboard 管理页面
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = adminadmin

# TLS 加密(可启用增强安全性)
tls_enable = true

systemd 服务 /etc/systemd/system/frps.service

这一步是为了让frp服务开机自启

1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=frps - FRP Server Service
After=network.target

[Service]
Type=simple
ExecStart=/home/frp/frp_0.58.0_linux_amd64/frps -c /home/frp/frp_0.58.0_linux_amd64/frps.ini
Restart=on-failure
RestartSec=5s
User=root

[Install]
WantedBy=multi-user.target

启用自启服务

1
2
3
4
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl enable frps
sudo systemctl start frps

🏠 Step 2: Unraid 上部署 frpc

首先需要在Unraid上安装frpc服务
在docker面板新增一个自定义容器,容器主要配置如下:

1
2
3
4
5
6
name: frpc  #可自定义
Repository: snowdreamtech/frpc
Extra Parameters: --restart=always #可选,开机自启,unraid自带的也有容器自启的控制

# 以下参数需要额外添加:
frpc.ini:/mnt/user/appdata/frpc #Path参数,容器路径为/etc/frp

配置文件 /mnt/user/appdata/frpc/frpc.toml

配置文件需要放在上一步中从docke容器中映射出来的路径中

1
2
3
4
5
6
7
8
9
10
11
12
13
# frpc 客户端配置
[common]
server_addr = "x.x.x.x"
server_port = 7000
token = "mySuperSecureToken"
tls_enable = true

# 代理 Emby 服务(HTTP)
[emby]
type = tcp
local_ip = "192.168.xx.xxx"
local_port = 8096
remote_port = 18080

启动 frpc

配置完后重启Docker即可,如果你不是unraid,或者不是按照docker的形式安装的frpc服务,请按照frpc官方启动的方式来启动服务。


🔄 Step 3: 测试公网访问

在这之前,你需要确保你的服务器防火墙正确放行了,我们有这几个端口需要放行

协议 端口范围 来源地址 备注
TCP 80 0.0.0.0/0 域名访问 HTTP(默认开)
TCP 443 0.0.0.0/0 HTTPS 访问(默认开)
TCP 7000 0.0.0.0/0 frps 通信端口(必需
TCP 18080 0.0.0.0/0 Emby 映射端口(可选)
TCP 7500 0.0.0.0/0 frps dashboard(可选,frp服务配置结束后为了安全可以关闭)
TCP 81 0.0.0.0/0 NPM dashboard(必需

确保防火墙设置你无误后,可以访问地址试试连接性:

1
http://<阿里云公网IP>:18080

如果能够访问emby服务,就说明frp已经成功了,如果想进一步申请一个域名,或者ssl证书,那么可以继续看下去,如果IP+域名的访问方式已经足够,那么到这里教程就可以说结束了。


🛠 Step 4: 部署 Nginx Proxy Manager (NPM)

在上一步中我们已经可以通过IP+域名的方式访问我内网设备上的emby服务了,如何将IP解析到DNS服务器的教程在这里不展开,网上有很多,当你成功把域名解析到自己阿里云服务器的公网IPV4后(你会发现自己域名被封了,因为国内ipv4公网解析域名需要备案,哈哈(*^▽^*)),你应该可以通过http://<域名>:18080的形式访问到自己的emby服务,而部署NPM的目的有两个:

  • 配置免费自签的ssl证书,这样网站可以通过https访问,且有小绿锁,不会提示域名不安全
  • 将18080端口映射到服务器的443或者80端口上(因为我们要申请ssl走https,所以映射到443即可),这样在访问域名的时候就不用带一个端口号才能访问到emby服务了。

下面是简要的安装过程:

创建docker compose文件(docker-compose.yml):

1
2
3
4
5
6
7
8
9
10
11
12
13
version: '3'
services:
npm:
image: jc21/nginx-proxy-manager:latest
container_name: npm
restart: always
ports:
- "80:80"
- "81:81"
- "443:443"
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt

启动docker compose,拉取NPM镜像

1
docker compose up -d

访问 http://<阿里云IP>:81 登录 NPM 管理界面


🌐 Step 5: 添加 Emby 的反向代理 (Proxy Host)

这一步之前需要确保你的域名能够正常映射到阿里云服务器的公网IP,不然NPM没法申请ssl证书,域名没备案(访问的时候提示IPC问题)也无法成功的。

NPM点击Add Proxy Host,,添加一条反向代理配置,主要配置如下

字段
Domain Names your.domain.com
Scheme http
Forward Hostname/IP 127.0.0.1
Forward Port 18080

然后再SSL选项中申请ssl证书(Lets Encrypt!)

暂不启用 SSL,等待备案通过后再进行证书申请

如果一切正常,可以尝试访问直接访问域名看看


⚠ Step 6: 备案问题

  • 域名未备案的情况下,使用大陆公网IP会被阿里云“云盾”拦截
  • Let’s Encrypt 无法通过域名验证
  • 访问域名时会显示“未备案禁止访问”页面

🛠 常见问题

问题 可能原因 解决方案
frpc 无法连接 frps 未启动 / IP 错误 / 网络未打通 确认 frps 正常运行,打通 7000 端口
证书无法申请 域名未备案被阿里云拦截 等备案通过后重试
自己访问 81 失败 安全组未打开 打开 TCP 81 端口

如需部署多个服务,仅需在 frpc.toml 中添加新的服务配置段,并在 NPM 中添加对应的 Proxy Host 即可。