基于Docker部署内网穿透服务器FRP

基于Docker部署FRP来实现内网穿透是一个非常流行且高效的方案。下面我将为您提供一份详细的、从零开始的部署操作步骤,涵盖服务端(公网服务器) 和客户端(内网机器) 的配置。
官网:https://gofrp.org/zh-cn/

一,架构原理简介

  • FRP 服务端 (frps):部署在拥有公网IP的服务器上,监听一个端口(如 7000),等待客户端连接。它负责将外部网络的请求转发到已连接的内网客户端。
  • FRP 客户端 (frpc):部署在内网的机器上,它会主动与公网服务器上的 frps 建立连接。客户端配置需要暴露的内网服务(如SSH、Web网站等)。

一,部署 FRP 服务端

笔者就拿腾讯云上的Lighthouse主机来举例

步骤 1:准备配置文件

首先在服务器上创建一个目录,用于存放FRP的配置文件和持久化数据。

mkdir -p /root/
cd /root

创建服务端配置文件 frps.ini。这里使用一个最基础的配置:

vim frps.ini

将以下内容写入 frps.ini。您可以根据需要修改 token(认证密码)和 bind_port(服务端监听端口)。

# frps.ini
[common]
# 服务端监听的端口,客户端通过这个端口连接服务端
bind_port = 7000

# 认证令牌,客户端需要提供相同的token才能连接,建议设置一个复杂的密码
token = your_secure_token_123

# 可选项:FRP仪表板端口,用于查看连接状态
dashboard_port = 7500

# 可选项:仪表板的用户名和密码
dashboard_user = admin
dashboard_pwd = admin_pwd_456

# 设置http及https协议下代理端口(非重要)
vhost_http_port = 7080
vhost_https_port = 7081

# 可选项:日志配置
# log_file = ./frps.log
# log_level = info
# log_max_days = 3

步骤 2:使用 Docker 运行 FRPS

我们使用 Docker 来运行服务端容器。这里使用官方镜像 snowdreamtech/frps

docker run -d \
  --name frps \
  --restart=always \
  -p 7000:7000 \
  -p 7500:7500 \
  -v /opt/frp/frps.ini:/etc/frp/frps.ini \
  snowdreamtech/frps
  • 实例阿里云部署:
sudo docker pull registry.cn-shenzhen.aliyuncs.com/mogublog_business/frps #拉取镜像
sudo docker pull registry.cn-shenzhen.aliyuncs.com/mogublog_business/frps

参数解释:

  • -d:后台运行容器。
  • --name frps:为容器指定一个名字。
  • --restart=always:Docker服务重启时,容器自动重启。
  • -p 7000:7000:将宿主机的7000端口映射到容器的7000端口(对应 bind_port)。
  • -p 7500:7500:将宿主机的7500端口映射到容器的7500端口(对应 dashboard_port)。
  • -v /opt/frp/frps.ini:/etc/frp/frps.ini:将宿主机的配置文件挂载到容器内。

步骤 3:验证服务端

  1. 检查容器状态:bashdocker ps你应该能看到 frps 容器正在运行。
  2. 访问仪表板(可选)
    打开浏览器,访问 http://x.x.x.x:7500,使用配置文件中设置的用户名(admin)和密码(admin_pwd_456)登录。如果能看到仪表板,说明 frps 部署成功。
  3. 检查防火墙
    确保你的云服务器安全组/防火墙已经放行了 7000 和 7500 端口。

二,部署 FRP 客户端

假设你有一台内网机器(IP为 192.168.9.100),你想通过公网访问这台机器的SSH服务(22端口)。

步骤 1:准备客户端配置文件

在内网机器上同样创建一个目录。

mkdir -p /root/
cd /root

创建客户端配置文件 frpc.ini

vim frpc.ini

将以下内容写入 frpc.ini请务必将 server_addr 和 token 修改为与服务端匹配的值。

[common]
# server_addr为FRPS服务器IP地址
server_addr = 1.13.81.214
# server_port为服务端监听端口,bind_port
server_port = 7000
# 身份验证
token = Zxb@=1234+qwer.

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 2222

# [ssh] 为服务名称,下方此处设置为,访问frp服务段的2288端口时,等同于通过中转服务器访问127.0.0.1的22端口。
# type 为连接的类型,此处为tcp
# local_ip 为中转客户端实际访问的IP 
# local_port 为目标端口
# remote_port 为远程端口

[BMC浪潮]
type = tcp
local_ip = 192.168.7.100
local_port = 443
remote_port = 18080

[BMC浪潮Esxi8.0]
type = tcp
local_ip = 192.168.7.98
local_port = 443
remote_port = 18081

[运维中心视频监控]
type = tcp
local_ip = 192.168.3.100
local_port = 80
remote_port = 18082

[RDP 张工PC1]
type = tcp
local_ip = 192.168.9.103
local_port = 3389
remote_port = 13389

[RDP 周工PC1]
type = tcp
local_ip = 192.168.6.100
local_port = 3389
remote_port = 23389

步骤 2:使用 Docker 运行 FRPC

使用官方镜像 snowdreamtech/frpc 来运行客户端容器。

docker run -d \
  --name frpc \
  --restart=always \
  -v /opt/frp/frpc.ini:/etc/frp/frpc.ini \
  snowdreamtech/frpc

实例阿里云部署:

sudo docker pull registry.cn-shenzhen.aliyuncs.com/mogublog_business/frps #拉取镜像
docker run --restart=always --network host -d -v /root/frpc.ini:/etc/frp/frpc.ini --name frpc registry.cn-shenzhen.aliyuncs.com/mogublog_business/frpc:latest

参数解释:

  • 大部分参数与服务端类似。
  • 这里不需要 -p 参数,因为客户端是主动向外建立连接,不需要在宿主机上监听端口。只有当需要穿透的服务在客户端机器的其他Docker容器中时,才可能需要使用 --network host 或自定义Docker网络。

步骤 3:验证客户端

  1. 检查容器状态和日志:bashdocker ps docker logs frpc查看日志,如果显示 "login to server success" 之类的信息,说明客户端已成功连接至服务端。
  2. 测试内网穿透
    现在,你可以在任何能访问公网服务器的机器上,通过以下命令SSH连接到内网的机器:bashssh -o Port=6000 username@x.x.x.x
    • username 是内网机器上的实际用户名。
    • x.x.x.x 是公网服务器的IP。
    • 6000 是你在客户端配置 [ssh] 中设置的 remote_port
    如果连接成功,说明内网穿透已经正常工作!

三,访问测试

  • 笔者这里通过反向代理用域名访问,可以正常的访问,提示输入口令密码
基于Docker部署内网穿透服务器FRP
基于Docker部署内网穿透服务器FRP

总结与注意事项

  1. 安全第一:务必设置强壮的 token,不要使用示例中的简单密码。
  2. 防火墙:确保服务端的安全组和系统防火墙已正确放行相关端口(70007500, 以及你在客户端配置的 remote_port,如 60008080等)。
  3. 客户端配置local_ip 如果是要暴露本机物理机的服务,通常是 127.0.0.1。如果要暴露与 frpc 在同一台机器上其他Docker容器的服务,情况会复杂一些,可能需要使用 host 网络或配置自定义Docker网络。
  4. 更多功能:FRP功能非常强大,还支持UDP、HTTP/HTTPS代理、负载均衡等。请参考其官方文档:https://gofrp.org/docs/ 以获取更高级的配置。

通过以上步骤,您应该已经成功使用Docker部署了一套可用的FRP内网穿透服务。

华三DHCP+Nat内网用户通过防火墙访问外网:https://www.hao0564.com/5342.html

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注