没有公网 IP 怎么在外面看家里的 Emby?一个项目帮你安全穿透内网:Pangolin

奥黛丽·逐爱者
2026-11-03 / 0 评论 / 0 阅读 / 正在检测是否收录...

“

在公司午休想刷两集剧,打开手机才想起来:家里宽带没有公网 IP,NAS 上的 Emby、Jellyfin 只能在家里看。frp 要自己写配置、自己管证书;Cloudflare Tunnel 方便,但流量要过别人家的服务器,国内访问速度也看运气;直接把端口映射出去,又担心哪天被扫到弱口令。

有没有一个东西:家里的 NAS 主动连出去,外网用自己的域名 + HTTPS 访问,打开之前还要先登录一次?今天介绍的 Pangolin 就是干这个的。

PART 01项目介绍

📦 Pangolin · 项目速览

GitHubgithub.com/fosrl/pangolin

文档docs.pangolin.net

版本1.25.1(实测)

Star2 万+

端口80 / 443 / UDP 51820

定位自托管版 Cloudflare Tunnel

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 代替真实域名。

PART 02项目特征

✦ 不用公网 IP

NAS 主动出站建 WireGuard 隧道,路由器一个端口都不用开

✦ 自动 HTTPS

每个服务一个子域名,Traefik 自动申请 Let's Encrypt 证书

✦ 访问前先登录

自带单点登录,还能加 PIN 码、密码、邮箱白名单,Emby 不再直接暴露在公网

✦ 访问规则

按 IP、IP 段、路径放行或拦截,比如家里网段直接放行、陌生 IP 必须登录

✦ 多站点管理

老家 NAS、公司小主机都可以作为站点接进来,一个面板统一管理

✦ 全中文界面

面板自带简体中文,在线状态、流量一目了然

✦ 可视化操作

创建站点、添加服务都在网页上点,不用手写 frp 那种配置文件

PART 03安装指南

整个部署分两头:VPS 上装 Pangolin 服务端,NAS 上装站点连接器。

一、VPS:部署 Pangolin 服务端

先在域名商那里加两条解析:pangolin.example.com 和 *.example.com 都指向 VPS 的公网 IP。然后在 VPS 上建目录:

bash
mkdir -p ~/pangolin/config/{db,letsencrypt,traefik/logs}cd ~/pangolin

新建 docker-compose.yml:

yaml
name: pangolinservices:  pangolin:    image: fosrl/pangolin:1.25.1    container_name: pangolin    restart: unless-stopped    volumes:      - ./config:/app/config    healthcheck:      test: ["CMD", "curl", "-f", "http://localhost:3001/api/v1/"]      interval: 10s      timeout: 10s      retries: 15  gerbil:    image: fosrl/gerbil:latest    container_name: gerbil    restart: unless-stopped    depends_on:      pangolin:        condition: service_healthy    command:      - --reachableAt=http://gerbil:3004      - --generateAndSaveKeyTo=/var/config/key      - --remoteConfig=http://pangolin:3001/api/v1/    volumes:      - ./config/:/var/config    cap_add:      - NET_ADMIN      - SYS_MODULE    ports:      - 51820:51820/udp      - 21820:21820/udp      - 443:443      - 80:80  traefik:    image: traefik:v3.6    container_name: traefik    restart: unless-stopped    network_mode: service:gerbil    depends_on:      pangolin:        condition: service_healthy    command:      - --configFile=/etc/traefik/traefik_config.yml    volumes:      - ./config/traefik:/etc/traefik:ro      - ./config/letsencrypt:/letsencrypt      - ./config/traefik/logs:/var/log/traefik

再新建 config/config.yml,把域名换成你自己的,secret 用 openssl rand -hex 32 生成:

yaml
gerbil:  start_port: 51820  base_endpoint: "pangolin.example.com"app:  dashboard_url: "https://pangolin.example.com"  log_level: "info"domains:  domain1:    base_domain: "example.com"server:  secret: "换成一串随机字符"flags:  require_email_verification: false  disable_signup_without_invite: true  disable_user_create_org: false

💡 小贴士

Traefik 还需要 config/traefik/traefik_config.yml 和 dynamic_config.yml 两个文件,内容比较长,直接照官方文档 Manual Install → Docker Compose 一节复制,把里面的 pangolin.example.com 和邮箱换掉即可。嫌麻烦的话,官方也提供一键安装脚本,会帮你生成这些文件。

启动并查看首次登录用的令牌:

bash
docker compose up -ddocker compose logs pangolin | grep -A1 "SETUP TOKEN"

二、初始化面板

浏览器打开 https://pangolin.example.com/auth/initial-setup,填入刚才日志里的令牌,创建管理员账号:

图片

▲ 填入设置令牌,创建管理员账号

登录后会让你先建一个“组织”,名字随便起,ID 用英文:

图片

▲ 新建组织

三、NAS:添加站点并运行连接器

接下来创建站点,类型选“新节点(推荐)”,名字写 NAS-Home:

图片

▲ 创建站点,类型选新节点

往下拉会看到这个站点的身份 ID 和密钥,操作系统选 Docker、方法选 Docker Compose,面板会直接生成好配置:

图片

▲ 面板自动生成 Docker Compose 配置

⚠️ 注意

密钥只在这个页面显示一次,先复制下来再点“创建站点”。

在 NAS(飞牛、群晖都行)上新建一个 docker-compose.yml,把面板给的内容粘进去:

yaml
services:  pangolin-site:    image: fosrl/pangolin-cli    container_name: pangolin-site    restart: unless-stopped    environment:      - PANGOLIN_ENDPOINT=https://pangolin.example.com      - SITE_ID=面板里的身份ID      - SITE_SECRET=面板里的密钥

docker compose up -d 跑起来后,日志里出现 Tunnel connection to server established successfully! 就说明隧道通了,回到面板,站点状态会变成“在线”:

图片

▲ 站点在线,代理显示 Pangolin CLI

💡 小贴士

新版面板生成的连接器镜像是 fosrl/pangolin-cli,老教程里写的 fosrl/newt 也能用,两者都是站点连接器。

PART 04使用教程

把 Emby / Jellyfin 发布出去

进入“公共资源 → 添加资源”,类型 HTTP(S),子域名写 jellyfin,目标选刚才的站点 NAS-Home,地址填 Jellyfin 在内网的 IP 和端口 8096(Emby 一样是 8096):

图片

▲ 创建公共资源,目标指向 NAS 上的 8096

💡 小贴士

我这次演示时连接器和 Jellyfin 在同一台机器上,所以地址填的是 127.0.0.1。你在 NAS 上部署时填 NAS 的内网 IP,比如 192.168.1.10。

创建好后,资源列表里会显示访问地址,认证状态是“受到保护”:

图片

▲ 资源列表

访问之前先登录

资源默认开启“平台单点登录 SSO”,也就是说,别人打开 jellyfin.example.com 时,看到的不是 Emby,而是 Pangolin 的登录页。你也可以改成 PIN 码、共享密码或者邮箱白名单:

图片

▲ 认证设置:SSO、PIN 码、密码、邮箱白名单

外面的人打开链接,会先看到这个页面:

图片

▲ 访问 jellyfin.example.com 先要登录

登录后才会进入 Jellyfin,后面就是熟悉的媒体库了:

图片

▲ 通过隧道打开的 Jellyfin

家里网络直接放行

每次在家看片还要登录一次有点烦,可以在“访问规则”里加一条:IP 范围 192.168.1.0/24 旁路认证。规则从上往下匹配,家里网段直接进,外面的 IP 照样要先登录:

图片

▲ 访问规则:家里网段旁路认证

⚠️ 注意

Emby / Jellyfin 的手机 App 和电视 App 不支持网页登录这一步,开了 SSO 以后 App 会连不上。要用 App 的话,可以把这个资源的 SSO 关掉,靠 Emby 自己的账号密码把关;或者只给家人的 IP 加放行规则。

家人怎么用

把家人拉进组织之后,他们登录面板首页会看到“资源启动器”,所有你开放给他们的服务都在这里,点一下就能打开:

图片

▲ 资源启动器

PART 05总结

Pangolin 适合“家里没有公网 IP,但手上有一台 VPS”的玩家:比 frp 多了图形界面、自动证书和登录保护,比 Cloudflare Tunnel 多了一份数据自主。缺点也要说清楚:VPS 的带宽决定了你在外面看片的画质,小水管的机器看 4K 原盘会比较吃力;另外 App 和网页 SSO 的兼容需要自己按上面的方法调一下。

HuanHQ技术栈

NAS · 自部署 · 家庭影音 · 开源工具觉得有用的话,点个赞和在看,关注一下吧

博客 www.huanhq.com
0

评论 (0)

取消