通过Docker+frp实现内网穿透

文章介绍了如何利用Docker容器和frp工具实现内网穿透,包括在公网和内网服务器上创建并修改frps和frpc的配置文件,启动Docker镜像,以及设置二级域名和端口映射。此外,还提到frp的新版本配置文件格式变化,并提供了访问Dashboard监控的说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过Docker+frp实现内网穿透

这篇文章是最近又折腾了一个局域网的小网站,在这边记录一下内网穿透的方法,还是老方法frp,只不过之前用的是.start.sh,这次使用的是Docker

配置内网穿透一定要有一个公网服务器,也就是能访问到的服务器,可以是腾讯云、阿里云等

请注意:由于近日frp更新(0.52版本后),原.ini配置文件已经不再生效,取而代之的是.toml等配置文件,因此近日更新博客,对启动容器命令添加了版本号,直接复制该博客的命令仍然生效。
若想安装最新版本frp,可以参考官网。(后面我也会做出更新)

1. 创建并修改配置文件

1.1 在公网上创建frps的配置文件
## 创建目录
FRP_HOME=/etc/docker/frp/ && mkdir -p $FRP_HOME
## 创建文件
touch $FRP_HOME/frps.ini

修改文件的内容:

vim frps.ini

>>> 内容如下:<<<

[common]
bind_port = 7000
vhost_http_port = 7080
vhost_https_port = 7081
dashboard_addr = 0.0.0.0
dashboard_port = 7500
dashboard_user = username
dashboard_pwd = password
token=token_information
# 👇 用来实现二级域名,如:xxx.yyyy.com,下面这一行是不包含「xxx」的剩下的「yyyy.com」那一部分👇
subdomain_host = yyyy.cc

subdomain_host = yyyy.cc并非一定要写,首先实现二级域名的方式有很多,frp还提供了一种用『custom_domains=xxx.yyyy.cc』的方式,DNS解析也可以实现二级域名,方法很多自行尝试。




1.2 在内网上创建frpc的配置文件
## 创建目录
FRP_HOME=/etc/docker/frp/ && mkdir -p $FRP_HOME
## 创建文件
touch $FRP_HOME/frpc.ini

修改文件的内容:

vim frpc.ini

>>> 内容如下:<<<

[common]
# 公网IP
server_addr = xx.xx.xx.xx
# frps 配置文件中的 bind_port
server_port = 7000
# frps 配置文件中的 token
token=token_information

# 一个连接,名字随便取,但不可重复
[xxx]
# 连接类型,可以是tcp、http、https,后两者必须配置「subdomain」或「custom_domains」
type = tcp
# 本地IP:可以是本机,也可以是局域网的其他IP
local_ip=127.0.0.1
# 本地端口:想要网穿的端口
local_port = 80
# 二级域名:xxx.yyyy.com 中「xxx」的那一部分
subdomain = xxx

# 又一个连接,名字随便取,但不可重复
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
# 通过公网的 8022 就可以访问到内网这台电脑的22端口
remote_port = 8022

2. 启动 Frp

1. 公网启动 | frps
docker run -d --restart always --network host --name frps -v /etc/docker/frp/frps.ini:/etc/frp/frps.ini snowdreamtech/frps:0.51.3
2. 内网启动 | frpc
docker run -d --restart always --network host --name frpc -v /etc/docker/frp/frpc.ini:/etc/frp/frpc.ini snowdreamtech/frpc:0.51.3

访问IP:7500可以查看Dashboard控制面板。

注意:如果你配置了http类型的穿透,同时配置了subdomain前置域名,但是通过xxx.yyyy.cc无法访问到你的网站,请检查你的域名yyyy.cc是否解析到frps所指定的http端口。
一般解析都只能指定到80端口,最简单的方法都是将frps的http端口设置为80,或者可以尝试“隐性解析”,解析到服务器的其他非80端口,然后将http地址设置为该端口。
关于“隐性解析”,网上教程很多,自行百度。




内网穿透的方法很多,frp绝对不是唯一的选择,还有花生壳、甚至通过路由器等,但是frp的性价比很高,只要你的服务器还能多跑一个Docker就可以启动起来。

另外,使用解压压缩包然后.start.sh也是一种启动frp的方式,可以试着自己编写systemctl文件来实现给systemctl托管以方便的控制开机自启、开启关闭等,也是一个不错的选择(之前就是用的这种方法,但是写systemctl文件有点烦)。

03-09
### FRP 内网穿透与端口转发使用教程 FRP (Fast Reverse Proxy) 是一款用于内网穿透的高性能的反向代理应用,支持 TCP 和 UDP 协议,能够轻松地帮助用户实现在有防火墙或 NAT 的环境下对外提供服务的功能。 #### 下载并解压 FRP 文件 为了开始使用 FRP 进行内网穿透或者端口转发操作,首先需要下载适合目标系统的版本。对于 Linux AMD64 架构而言,命令如下所示[^3]: ```bash wget https://github.com/fatedier/frp/releases/download/v0.51.2/frp_0.51.2_linux_amd64.tar.gz mkdir /home/nat tar -xvf frp_0.51.2_linux_amd64.tar.gz -C /home/nat ``` #### 配置 FRPS(服务端) 接着,在 `/home/nat` 目录下创建 `frps.ini` 并编辑此文件以完成基本的服务端配置。这里展示了一个简单的例子,其中绑定了 5443 端口作为客户端连接的目标,并设置了 Web 控制面板的相关参数: ```ini [common] bind_port = 5443 vhost_http_port = 80 vhost_https_port = 443 dashboard_port = 6443 dashboard_user = admin dashboard_pwd = XXXXXXXX enable_prometheus = true authentication_method = token token = XXXXXXXX ``` 需要注意的是,如果是在云服务商处租用了虚拟机,则还需要确保在安全组策略中开放上述所使用的各个端口。 #### 编辑 FRPC(客户端)配置文件 同样地,在同一目录下找到名为 `frpc.ini` 或者按照个人习惯命名为其他名称的 INI 文件来进行客户端侧的设定工作。下面给出了一种常见的场景——将本机两个不同服务分别暴露给外网的方式[^2]: ```ini [maven] type = tcp local_port = 2222 remote_port = 2222 [logstash] type = tcp local_ip = 127.0.0.1 local_port = 1111 remote_port = 1111 ``` 以上配置意味着当远程机器尝试访问位于服务器上的 2222 及 1111 端口时,流量会被重定向至本地对应的服务实例上处理。 启动 FRPS 和 FRPC 后即可实现预期功能。具体来说就是先运行服务端再开启客户端程序: ```bash ./frps -c ./frps.ini & ./frpc -c ./frpc.ini & ``` 这样就完成了整个过程中的所有步骤,实现了通过 FRP 实现内网穿透以及端口转发的目的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值