
没有公网 IP 怎么在外面看家里的 Emby?一个项目帮你安全穿透内网:Pangolin
没有公网 IP,也能用 Pangolin 安全地从外网访问家里的 Emby 等自部署服务。
在公司午休想刷两集剧,打开手机才想起来:家里宽带没有公网 IP,NAS 上的 Emby、Jellyfin 只能在家里看。frp 要自己写配置、自己管证书;Cloudflare Tunnel 方便,但流量要过别人家的服务器,国内访问速度也看运气;直接把端口映射出去,又担心哪天被扫到弱口令。
有没有一个东西:家里的 NAS 主动连出去,外网用自己的域名 + HTTPS 访问,打开之前还要先登录一次?今天介绍的 Pangolin 就是干这个的。
项目介绍
Pangolin 是一个开源、可自托管的“隧道式反向代理”,可以理解为能装在自己 VPS 上的 Cloudflare Tunnel。它由三部分组成:VPS 上跑的 Pangolin 面板 + Gerbil(WireGuard 隧道)+ Traefik(反代和证书),家里 NAS 上跑一个站点连接器(Newt / Pangolin CLI)。NAS 主动把隧道连到 VPS,所以家里不需要公网 IP,也不用在路由器上开任何端口。
注意:Pangolin 需要一台有公网 IP 的 VPS 和一个自己的域名(把 *.你的域名 解析到 VPS),VPS 要放行 TCP 80/443 和 UDP 51820/21820。这篇演示统一用 example.com 代替真实域名。
项目特征
- 不用公网 IP:NAS 主动出站建 WireGuard 隧道,路由器一个端口都不用开
- 自动 HTTPS:每个服务一个子域名,Traefik 自动申请 Let's Encrypt 证书
- 访问前先登录:自带单点登录,还能加 PIN 码、密码、邮箱白名单,Emby 不再直接暴露在公网
- 访问规则:按 IP、IP 段、路径放行或拦截,比如家里网段直接放行、陌生 IP 必须登录
- 多站点管理:老家 NAS、公司小主机都可以作为站点接进来,一个面板统一管理
- 全中文界面:面板自带简体中文,在线状态、流量一目了然
- 可视化操作:创建站点、添加服务都在网页上点,不用手写 frp 那种配置文件
安装指南
整个部署分两头:VPS 上装 Pangolin 服务端,NAS 上装站点连接器。
一、VPS:部署 Pangolin 服务端
先在域名商那里加两条解析:pangolin.example.com 和 *.example.com 都指向 VPS 的公网 IP。然后在 VPS 上建目录:
新建 docker-compose.yml:
再新建 config/config.yml,把域名换成你自己的,secret 用 openssl rand -hex 32 生成:
Traefik 还需要
config/traefik/traefik_config.yml和dynamic_config.yml两个文件,内容比较长,直接照官方文档 Manual Install → Docker Compose 一节复制,把里面的pangolin.example.com和邮箱换掉即可。嫌麻烦的话,官方也提供一键安装脚本,会帮你生成这些文件。
启动并查看首次登录用的令牌:
二、初始化面板
浏览器打开 https://pangolin.example.com/auth/initial-setup,填入刚才日志里的令牌,创建管理员账号:
![]()
登录后会让你先建一个“组织”,名字随便起,ID 用英文:
![]()
三、NAS:添加站点并运行连接器
接下来创建站点,类型选“新节点(推荐)”,名字写 NAS-Home:
![]()
往下拉会看到这个站点的身份 ID 和密钥,操作系统选 Docker、方法选 Docker Compose,面板会直接生成好配置:
![]()
注意:密钥只在这个页面显示一次,先复制下来再点“创建站点”。
在 NAS(飞牛、群晖都行)上新建一个 docker-compose.yml,把面板给的内容粘进去:
docker compose up -d 跑起来后,日志里出现 Tunnel connection to server established successfully! 就说明隧道通了,回到面板,站点状态会变成“在线”:
![]()
新版面板生成的连接器镜像是
fosrl/pangolin-cli,老教程里写的fosrl/newt也能用,两者都是站点连接器。
使用教程
把 Emby / Jellyfin 发布出去
进入“公共资源 → 添加资源”,类型 HTTP(S),子域名写 jellyfin,目标选刚才的站点 NAS-Home,地址填 Jellyfin 在内网的 IP 和端口 8096(Emby 一样是 8096):
![]()
我这次演示时连接器和 Jellyfin 在同一台机器上,所以地址填的是
127.0.0.1。你在 NAS 上部署时填 NAS 的内网 IP,比如192.168.1.10。
创建好后,资源列表里会显示访问地址,认证状态是“受到保护”:
![]()
访问之前先登录
资源默认开启“平台单点登录 SSO”,也就是说,别人打开 jellyfin.example.com 时,看到的不是 Emby,而是 Pangolin 的登录页。你也可以改成 PIN 码、共享密码或者邮箱白名单:
![]()
外面的人打开链接,会先看到这个页面:
![]()
登录后才会进入 Jellyfin,后面就是熟悉的媒体库了:
![]()
家里网络直接放行
每次在家看片还要登录一次有点烦,可以在“访问规则”里加一条:IP 范围 192.168.1.0/24 旁路认证。规则从上往下匹配,家里网段直接进,外面的 IP 照样要先登录:
![]()
注意:Emby / Jellyfin 的手机 App 和电视 App 不支持网页登录这一步,开了 SSO 以后 App 会连不上。要用 App 的话,可以把这个资源的 SSO 关掉,靠 Emby 自己的账号密码把关;或者只给家人的 IP 加放行规则。
家人怎么用
把家人拉进组织之后,他们登录面板首页会看到“资源启动器”,所有你开放给他们的服务都在这里,点一下就能打开:
![]()
总结
Pangolin 适合“家里没有公网 IP,但手上有一台 VPS”的玩家:比 frp 多了图形界面、自动证书和登录保护,比 Cloudflare Tunnel 多了一份数据自主。缺点也要说清楚:VPS 的带宽决定了你在外面看片的画质,小水管的机器看 4K 原盘会比较吃力;另外 App 和网页 SSO 的兼容需要自己按上面的方法调一下。
如果这篇对你有帮助,欢迎点赞、在看、关注「HuanHQ技术栈」,更多 NAS 和自部署玩法也会同步在博客 www.huanhq.com。


