使用 FRP 与 Nginx Proxy Manager (NPM) 结合实现内网穿透和域名反代
本笔记详细介绍了如何结合使用 FRP (Fast Reverse Proxy) 和 Nginx Proxy Manager (NPM) 来实现内网穿透,并通过域名反向代理访问内网服务。这对于在外网安全地访问家庭网络中的设备(如NAS、个人服务器等)非常有用。
服务端配置 (FRPS)
在您的公网服务器上,部署 FRP 服务端 (frps)。
1. 创建 docker-compose.yaml
version: "3.7"
services:
frps:
restart: always # 容器总是重启
container_name: frps
image: fatedier/frps:v0.34.1 # 使用指定版本的frps镜像
volumes:
- /etc/localtime:/etc/localtime:ro # 同步宿主机时间
- /etc/timezone:/etc/timezone:ro # 同步宿主机时区
- ./frps.ini:/app/frps.ini:ro # 挂载frps配置文件
command: frps -c /app/frps.ini # 启动命令
ports:
- 9870:9870 # FRP客户端连接端口 (bind_port)
- 7890:7890 # FRP管理面板端口 (dashboard_port)
- 30000:30000 # 客户端服务映射端口范围
- 30001:30001
- 30002:30002
- 30003:30003
- 30004:30004
- 30005:30005
logging: # 日志配置
driver: "json-file"
options:
max-size: "1m"
2. 创建 frps.ini
配置文件
在与 docker-compose.yaml
同级的目录下创建 frps.ini
文件。
[common]
bind_port = 9870
token = ************
dashboard_addr = 0.0.0.0
dashboard_port = 7890
dashboard_user = mulyzhou
dashboard_pwd = ************
3. 防火墙设置
确保您的服务器防火墙已放行以下端口:
7890
(FRP管理面板)9870
(FRP客户端连接)30000-30005
(用于映射客户端服务的端口范围)
4. Nginx Proxy Manager (NPM) 配置 (用于 FRPS Dashboard)
为了通过域名访问 FRP 服务端的管理面板,您可以在 Nginx Proxy Manager (NPM) 中添加一个反向代理:
- Domain Names (域名):
frp.example.cn
(替换为您自己的域名) - Scheme (协议):
http
- Forward Hostname / IP (转发主机名/IP):
172.17.0.1
(这是Docker默认桥接网络的网关IP,通常指向宿主机) - Forward Port (转发端口):
7890
(对应frps.ini
中的dashboard_port
)
客户端配置 (FRPC)
在您需要穿透的内网设备(如NAS、树莓派、本地PC等)上,部署 FRP 客户端 (frpc)。
1. 创建 docker-compose.yaml
version: "3.7"
services:
frpc:
restart: unless-stopped # 除非手动停止,否则总是重启
image: fatedier/frpc:v0.34.1 # 使用指定版本的frpc镜像
volumes:
- /etc/localtime:/etc/localtime:ro # 同步宿主机时间
- /etc/timezone:/etc/timezone:ro # 同步宿主机时区
- ./frpc.ini:/app/frpc.ini:ro # 挂载frpc配置文件
logging: # 日志配置
driver: "json-file"
options:
max-size: "1m"
2. 创建 frpc.ini
配置文件
在与 docker-compose.yaml
同级的目录下创建 frpc.ini
文件。
[common]
server_addr = 118.11.11.118
server_port = 9870
token = ************
[synology-nas]
type = tcp
remote_port = 30003
local_ip = 192.168.50.8
local_port = 5000
server_addr
:填写您 FRP 服务端的公网 IP 地址。server_port
:填写 FRP 服务端的通信端口,需与frps.ini
中的bind_port
保持一致。token
:填写与服务端设置一致的认证令牌。[synology-nas]
:这是一个代理名称,您可以根据实际服务自定义,例如[my-web-server]
。type
:代理类型,通常为tcp
。remote_port
:服务端映射出来的端口,客户端通过此端口连接。请从服务端docker-compose.yaml
中暴露的30000-30005
端口范围中选择一个未被占用的端口。local_ip
:您要穿透的本地内网服务的局域网 IP 地址。local_port
:您要穿透的本地内网服务的端口。
3. Nginx Proxy Manager (NPM) 配置 (用于客户端服务)
为了通过域名访问您的内网服务(例如NAS),在 Nginx Proxy Manager (NPM) 中添加另一个反向代理:
- Domain Names (域名):
nas.example.cn
(替换为您自己的域名) - Scheme (协议):
http
(或https
,取决于您的NAS服务是否支持HTTPS) - Forward Hostname / IP (转发主机名/IP):
172.17.0.1
(同样是Docker默认桥接网络的网关IP) - Forward Port (转发端口):
30003
(对应frpc.ini
中为该服务设置的remote_port
)
总结
完成以上配置后,您就可以通过 nas.example.cn
域名从外网访问您的本地NAS服务了。此方法同样适用于其他需要内网穿透的 TCP 服务,只需在 frpc.ini
中添加新的代理配置,并在 NPM 中设置相应的域名反代即可。
评论
其他文章