docker部署frp穿透内网
文章目录
- (1)部署frps服务器
- (2)部署frpc客户端
- (3)重启与访问frp
- (4)配置nginx反向代理
(1)部署frps服务器
docker安装参考文档:docker基本知识
1.创建目录
创建目录,用于存放容器持久化存储卷
mkdir -p /data/frpcd /data/frp
vim frps.ini
2.编辑配置文件
#进入 /data/frp 目录
cd /data/frp#使用 Vim 编辑器打开 frps.ini 文件
vim frps.ini
配置文件如下:
[common]
bind_addr = 0.0.0.0
bind_port = 7000
dashboard_port = 7001vhost_http_port = 10080
vhost_https_port = 10443token = abcd12345
dashboard_user = admin11
dashboard_pwd = admin11#需要穿透的内网服务1
[could]
type = tcp
local_ip = 192.168.31.100
local_port = 5000
remote_port = 5000#需要穿透的内网服务2
[chat]
type = tcp
local_ip = 192.168.31.223
local_port = 3000
remote_port = 3000....
此处省略若干个服务器你可以根据自己的需求修改这个配置文件,添加或修改代理规则,然后保存退出 Vim 编辑器。
配置内容含义:
[common]:通用配置部分,用于设置 frp 服务器的基本参数。bind_addr:绑定的 IP 地址,这里设置为 0.0.0.0,表示监听所有的网络接口。
bind_port:服务绑定的端口号,这里设置为 7000。
dashboard_port:frp 仪表盘的端口号,这里设置为 7001。
vhost_http_port:虚拟主机 HTTP 端口号,这里设置为 10080。
vhost_https_port:虚拟主机 HTTPS 端口号,这里设置为 10443。
token:访问 frp 服务器的令牌,这里设置为 abcd12345
dashboard_user:frp 仪表盘的用户名,这里设置为 admin11。
dashboard_pwd:frp 仪表盘的密码,这里设置为 admin11。[could] 和 [chat]:代理规则部分,用于定义具体的代理规则。
type:代理类型,这里设置为 tcp,表示 TCP 代理。
local_ip:本地 IP 地址,这里设置为 192.168.31.100和192.168.31.223。
local_port:本地端口号,这里设置为 5000 和 3000。
remote_port:远程端口号,这里设置为 5000 和 3000。
3.拉取镜像
拉取和启动一个名为 “frps” 的 Docker 镜像。这个镜像是由 “ryaning/frps” 提供的,它是一个用于部署 frp 服务器的镜像。
通过命令 docker pull ryaning/frps 是用于从 Docker Hub 上拉取 “ryaning/frps” 镜像到本地。
docker pull ryaning/frps
4.启动容器
通过命令 docker run 启动一个容器。这个容器使用了一些参数:
docker run --restart=always --network host -d -v /data/frp/frps.ini:/etc/frp/frps.ini --name frps ryaning/frps
--restart=always表示容器将会在退出时自动重启。--network host表示容器使用宿主机的网络命名空间,与宿主机共享网络栈,使得容器中的应用可以直接使用宿主机的网络接口。-d表示容器以后台模式运行。-v /data/frp/frps.ini:/etc/frp/frps.ini表示将宿主机上的/data/frp/frps.ini文件挂载到容器中的/etc/frp/frps.ini文件,这样可以在容器中使用自定义的配置文件。--name frps表示给容器指定一个名称为 “frps”。
当容器启动后,frp 服务器就会在容器中运行,使用挂载的配置文件进行配置。
5.安全组配置
在云服务器的安全组中,如果你想要允许入方向的连接到特定的端口,需要开放相应的端口。
以下是一般的步骤:
-
登录云服务提供商的管理控制台
-
导航到安全组配置页面
-
找到服务器实例所使用的安全组,并编辑该安全组的规则。
-
添加一个新的入方向规则,指定协议(如 TCP 或 UDP)和端口号。
根据需求,可以选择指定来源 IP 地址范围或来源安全组。
保存规则并应用更改。 -
具体的步骤和界面可能因云服务提供商而有所不同。你可以参考云服务提供商的文档或向他们的支持团队寻求帮助,以获取更详细的指导。



(2)部署frpc客户端
1.创建目录
创建目录,用于存放容器持久化存储卷
mkdir -p /data/frp
cd /data/frp
2.配置文件
vim frpc.ini
配置内容
[common]
server_addr = 120.78.156.217
server_port = 7000
token = abcd12345[could]
type = tcp
local_ip = 192.168.31.100
local_port = 5000
remote_port = 5000[chat]
type = tcp
local_ip = 192.168.31.223
local_port = 3000
remote_port = 3000
配置文件内容含义:
[common]部分定义了 frpc 的常规配置,包括server_addr、server_port和token。请确保这些值是正确的,并与 frps 服务器的配置相匹配。[could]部分定义了一个名为could的隧道,其类型为tcp。该隧道将本地的192.168.31.100:5000映射到远程的5000端口。请确保本地和远程的 IP 和端口设置正确。[chat]部分定义了一个名为chat的隧道,其类型也是tcp。该隧道将本地的192.168.31.223:3000映射到远程的3000端口。同样,请确保 IP 和端口设置正确。
3.查看frpc docker镜像
docker search frpc
4.拉取snowdreamtech/frpc 镜像
docker pull snowdreamtech/frpc
5.启动snowdreamtech/frpc 容器
docker run --restart=always --network host -d -v /data/frp/frpc.ini:/etc/frp/frpc.ini --name frpc snowdreamtech/frpc
(3)重启与访问frp
服务端重启
docker restart frps
客户端重启
docker restart frpc
查看监听服务
重启完成,查看服务器监听的端口(其中5000和3000端口是我们想要的)
[root@josh-clound frp]# netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1081/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1020/master
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 550/rpcbind
tcp6 0 0 :::3000 :::* LISTEN 5268/frps
tcp6 0 0 :::7000 :::* LISTEN 5268/frps
tcp6 0 0 :::7001 :::* LISTEN 5268/frps
tcp6 0 0 ::1:25 :::* LISTEN 1020/master
tcp6 0 0 :::10080 :::* LISTEN 5268/frps
tcp6 0 0 :::5000 :::* LISTEN 5268/frps
tcp6 0 0 :::10443 :::* LISTEN 5268/frps
tcp6 0 0 :::111 :::* LISTEN 550/rpcbind
tcp6 0 0 :::80 :::* LISTEN 5786/docker-proxy
尝试访问
浏览器打开http://服务器IP:3000/进行访问

http://服务器IP:5000/ 进行访问

(4)配置nginx反向代理
通过IP+ 端口的访问方式,实现了,那么我不想记IP,那么就通过域名方式进行访问。
docker安装nginx
1.创建挂载目录
用于将宿主机上的目录 /usr/local/nginx 与容器内的目录进行挂载。
mkdir -p /usr/local/nginx/conf
mkdir -p /usr/local/nginx/log
mkdir -p /usr/local/nginx/html
/usr/local/nginx/conf:用于存放 Nginx 的配置文件。/usr/local/nginx/log:用于存放 Nginx 的日志文件。/usr/local/nginx/html:用于存放 Nginx 的静态网页文件。
2.创建临时用容器
docker run --name nginx -p 9001:80 -d nginx
3.复制临时容器的配置到宿主机
# 将容器nginx.conf文件复制到宿主机
docker cp nginx:/etc/nginx/nginx.conf /usr/local/nginx/conf/nginx.conf
# 将容器conf.d文件夹下内容复制到宿主机
docker cp nginx:/etc/nginx/conf.d /usr/local/nginx/conf/conf.d
# 将容器中的html文件夹复制到宿主机
docker cp nginx:/usr/share/nginx/html /usr/local/nginx/
4.创建Nginx容器
docker run \
-p 80:80 \
--name nginx \
-v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /usr/local/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /usr/local/nginx/log:/var/log/nginx \
-v /usr/local/nginx/html:/usr/share/nginx/html \
-d nginx:latest
docker run:用于创建并运行一个新的容器。-p 80:80:将容器的 80 端口映射到宿主机的 80 端口,这样可以通过宿主机的 IP 地址或域名访问 Nginx 服务器。--name nginx:指定容器的名称为nginx。-v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:将宿主机上的/usr/local/nginx/conf/nginx.conf文件挂载到容器内的/etc/nginx/nginx.conf文件,用于配置 Nginx。-v /usr/local/nginx/conf/conf.d:/etc/nginx/conf.d:将宿主机上的/usr/local/nginx/conf/conf.d目录挂载到容器内的/etc/nginx/conf.d目录,用于存放 Nginx 的额外配置文件。-v /usr/local/nginx/log:/var/log/nginx:将宿主机上的/usr/local/nginx/log目录挂载到容器内的/var/log/nginx目录,用于存放 Nginx 的日志文件。-v /usr/local/nginx/html:/usr/share/nginx/html:将宿主机上的/usr/local/nginx/html目录挂载到容器内的/usr/share/nginx/html目录,用于存放 Nginx 的静态网页文件。-d nginx:latest:使用nginx:latest镜像创建容器,并在后台运行。
5.编辑nginx.conf配置文件
在http模块中添加两个server,分别用于处理两个不同的域名:chat.joshzhong.top 和 could.joshzhong.top。
#第一个服务器块用于处理 chat.joshzhong.top 域名的请求,配置如下:server {listen 80;server_name chat.joshzhong.top;location / {proxy_pass http://127.0.0.1:3000;}}#第二个服务器块用于处理 could.joshzhong.top 域名的请求,配置如下:server {listen 80;server_name could.joshzhong.top;location / {proxy_pass http://127.0.0.1:5000;}}
模块解释:
listen 80;:监听 80 端口,表示该服务器块将处理来自该端口的请求。server_name chat.joshzhong.top;:指定该服务器块处理的域名为chat.joshzhong.top。(could.joshzhong.top同上)location /:匹配所有请求路径。proxy_pass http://127.0.0.1:3000;:将请求代理转发到本地的http://127.0.0.1:3000地址,这意味着所有来自chat.joshzhong.top域名的请求都将被转发到本地的 3000 端口。(5000端口也是如此)
当有请求访问 chat.joshzhong.top 域名时,Nginx 将代理转发到本地的 3000 端口;当有请求访问 could.joshzhong.top 域名时,Nginx 将代理转发到本地的 5000 端口
重载nginx
#重启即可,就不进docker容器reload了
docker restart nginx
域名访问
http://chat.joshzhong.top/

http://could.joshzhong.top/

相关文章:
docker部署frp穿透内网
文章目录 (1)部署frps服务器(2)部署frpc客户端(3)重启与访问frp(4)配置nginx反向代理 (1)部署frps服务器 docker安装参考文档:docker基本知识 1…...
使用pytorch从零开始实现迷你GPT
生成式建模知识回顾: [1] 生成式建模概述 [2] Transformer I,Transformer II [3] 变分自编码器 [4] 生成对抗网络,高级生成对抗网络 I,高级生成对抗网络 II [5] 自回归模型 [6] 归一化流模型 [7] 基于能量的模型 [8] 扩散模型 I, 扩散模型 II…...
tp6框架 万级数据入库 php函数优化
将万级数据入库并判断有无 没有则新增 上篇是用mysql的replace into实现 本篇是另一种方法 这是我的数据格式: $data [ [ KCH > value1, other_column1 > value_other1_1, other_column2 > value_other2_1, ], [ KCH > value2, other_column…...
TwinCAT3一个PLC设备里多个程序工程之间通讯
目录 1、创建TwinCAT3工程,再分别创建两个PLC程序工程 2、PLC1工程中添加如下代码,然后编译重新生成PLC1工程 3、PLC2工程中添加如下代码,然后编译重新生成PLC2工程 4、变量关联 5、一个PLC运行多个PLC工程设置 7、工程下载链接 1、创建…...
python弹球小游戏
import pygame import random# 游戏窗口大小 WIDTH 800 HEIGHT 600# 定义颜色 WHITE (255, 255, 255) BLACK (0, 0, 0) RED (255, 0, 0) GREEN (0, 255, 0) BLUE (0, 0, 255)# 球的类 class Ball:def __init__(self):self.radius 10self.speed [random.randint(2, 4),…...
mongoose学习记录
mongoose安装和连接数据库 npm i mongoose导入mongoose const mongoose require(mongoose) mongoose.set("strictQuery",true)连接数据库 mongoose.connect(mongodb:127.0.0.1:27017/test)设置回调 mongoose.connection.on(open,()>{console.log("连接成…...
边缘与云或边缘加云:前进的方向是什么?
边缘计算使数据处理更接近数据源,以及由此产生的行动或决策的对象。通过设计,它可以改变数十亿物联网和其他设备存储、处理、分析和通信数据的方式。 边缘计算使数据处理更接近数据源,以及由此产生的行动或决策的对象。这与传统的体系结构形成…...
蓝桥杯第1037题子串分值和 C++ 字符串 逆向思维 巧解
题目 思路和解题方法 方案一——遍历哈希表 仅能过60%样例,大多数同学都用的该方法,就不过多赘述 #include <iostream> #include <unordered_map> using namespace std; int main() {string s;cin >> s;int n s.size();int res n;for (int i 0…...
力扣题:字符串的反转-11.23
力扣题-11.23 [力扣刷题攻略] Re:从零开始的力扣刷题生活 力扣题1:557. 反转字符串中的单词 III 解题思想:先读取单词,然后将单词进行翻转即可 class Solution(object):def reverseWords(self, s):""":type s…...
【软件测试】盘一盘工作中遇到的 Redis 异常测试
在测试工作中,涉及到与 redis 交互的场景变的越来越多了。关于redis本身就不作赘述了,网上随便搜,本人也做过一些整理。 今天只来复盘一下,在测试过程中与 redis 的二三事儿。其中提到的案例是经过抽象化的,用作辅助说…...
14.Oracle中RegExp_Like 正则表达式基本用法
--基本用法,是否包含某字符串 like %36% select * from k_micfo where regexp_like(loginid,36);if regexp_like(str,^[0-9\.]$) --只包含数字0-9,,小数点.--oracle判断字段是否是纯数字 (四种写法结果一样) select * from k_micfo where r…...
Docker Swarm总结+Jenkins安装配置与集成(5/5)
博主介绍:Java领域优质创作者,博客之星城市赛道TOP20、专注于前端流行技术框架、Java后端技术领域、项目实战运维以及GIS地理信息领域。 🍅文末获取源码下载地址🍅 👇🏻 精彩专栏推荐订阅👇🏻…...
docker安装Sentinel zipkin
文章目录 引言I Sentinel安装1.1 运行容器1.2 DOCKERFILE 参考1.3 pom 依赖1.4 .yml配置(整合springboot)II 资源保护2.1 Feign整合Sentinel2.2 CommonExceptionAdvice:限流异常处理类III zipkin引言 消息服务和请求第三方服务可不配置Sentinel。 </...
利用python实现文件压缩打包的功能
主要是利用了zipfile实现文件压缩打包,简单实例代码如下: import zipfilewith zipfile.ZipFile("archive.zip",w) as zipf:zipf.write("config.ini")zipf.write("test.py") 其中的模式 w表示如果没有该文件则创建该文件…...
如何创建百科?建立百科词条的意义何在?九问百科营销
在营销工作实践中,小马识途营销顾问经常接到关于百科营销的咨询,现整理了最受关注的九个问题分享给热爱营销工作的小伙伴。 一、什么是百科营销? 百科营销是借助百科知识传播,可以将企业、品牌、人物所拥有的对用户有价值的信息&a…...
Django如何设置时区为北京时间?
Django默认使用的是UTC时间,北京时间比UTC早8个小时,即如果UTC是凌晨两点,那么北京时间是早上八点。 Django中把setting.py中的语句: TIME_ZONE UTC修改为: TIME_ZONE Asia/Shanghai就把时区改为了北京时间。 这…...
Basemap地图绘制_Python数据分析与可视化
Basemap地图绘制 安装和使用地图投影地图背景在地图上画数据 Basemap是Matplotlib的一个子包,负责地图绘制。在数据可视化过程中,我们常需要将数据在地图上画出来。 比如说我们在地图上画出城市人口,飞机航线,军事基地,…...
C#编程题分享(5)
判断质数问题 输⼊⼀个正整数,判断该数是否是质数。如果为质数输出 yes,如果不是输出no 样例输⼊113 输出yes int n Convert.ToInt32(Console.ReadLine()); int count 0; for (int i 1; i < n 1; i) {if (n % i 0) // 判断该数能被整除{coun…...
群晖Video Station 添加海报墙-新方法
海报墙 一般我们找到的都是mp4、mkv等格式的视频资源,而没有像上图这样的海报资源,那要怎样实现海报墙呢? 按照以前的方法,是可以通过The Movie Database的API Key来搜刮电影海报信息,但是现在这个方法不行了 现在介绍…...
【MODBUS】Modbus协议入门简介
Modbus(Modicon Communication Protocol)是一种用于工业自动化领域的通信协议,最初由Modicon(现在是施耐德电气的一部分)开发。Modbus协议被广泛应用于连接不同厂商的工业设备,实现设备之间的通信和数据交换…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...
