基于阿里云服务器搭建unraid内网穿透服务
本文档记录如何使用阿里云轻量应用服务器,结合
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 | [common] |
systemd 服务 /etc/systemd/system/frps.service
这一步是为了让frp服务开机自启
1 | [Unit] |
启用自启服务
1 | sudo systemctl daemon-reexec |
🏠 Step 2: Unraid 上部署 frpc
首先需要在Unraid上安装frpc服务
在docker面板新增一个自定义容器,容器主要配置如下:
1 | name: frpc #可自定义 |
配置文件 /mnt/user/appdata/frpc/frpc.toml
配置文件需要放在上一步中从docke容器中映射出来的路径中
1 | # frpc 客户端配置 |
启动 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 | version: '3' |
启动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 即可。