docker部署frp穿透内网

文章目录

    • (1)部署frps服务器
    • (2)部署frpc客户端
    • (3)重启与访问frp
    • (4)配置nginx反向代理

(1)部署frps服务器

docker安装参考文档:docker基本知识

1.创建目录

创建目录,用于存放容器持久化存储卷

mkdir -p /data/frp

cd /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 = 7001

vhost_http_port = 10080
vhost_https_port = 10443
 
token = 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

配置文件内容含义:

  1. [common] 部分定义了 frpc 的常规配置,包括 server_addrserver_porttoken。请确保这些值是正确的,并与 frps 服务器的配置相匹配。
  2. [could] 部分定义了一个名为 could 的隧道,其类型为 tcp。该隧道将本地的 192.168.31.100:5000 映射到远程的 5000 端口。请确保本地和远程的 IP 和端口设置正确。
  3. [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.topcould.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/

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/210763.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络之网络传输,三次握手和四次挥手

网络传输通过高低电压 流 基本类型数组 低电压转高电压,通过网卡 传输模式: 全双工:互相传输且能同时传输 半双工:互相传输但是不能同时传输 单工:单向传输,(键盘,显示器&#…

基于Cocos2D-X框架闯关游戏的设计

摘 要 随着智能设备平台的普及、用户数量的增多,智能平台的应用,尤其是游戏异常火爆,从植物大战僵尸到愤怒的小鸟,移动平台游戏的开发进入了新的阶段。但是另一方面,平台的多样性也给开发者带来诸多不便,怎…

九、FreeRTOS之FreeRTOS列表和列表项

本节需要掌握以下内容: 1,列表和列表项的简介(熟悉) 2,列表相关API函数介绍(掌握) 3,列表项的插入和删除实验(掌握) 4,课堂总结(掌…

自定义类型-结构体,联合体和枚举-C语言

引言 能看到结构体,说明C语言想必学习的时间也不少了,在之前肯定也学习过基本数据类型,包括整型int,浮点型float等等。可是在日常生活中,想要描述一个事物并没有那么简单。比如,你要描述一本书&#xff0c…

Linux基础命令(超全面,建议收藏!)

一、Linux的目录结构 /,根目录是最顶级的目录了 Linux只有一个顶级目录:/ 路径描述的层次关系同样使用/来表示 /home/itheima/a.txt,表示根目录下的home文件夹内有itheima文件夹,内有a.txt 二、Linux命令基础格式 无论是什么…

基于springboot + vue框架的网上商城系统

qq(2829419543)获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:springboot 前端:采用vue技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件&#xf…

要致富 先撸树——判断循环语句(六)

引子 什么?万年丕更的作者更新了? 没错!而且我们不当标题党,我决定把《我的世界》串进文章里。 什么?你不玩《我的世界》? 木有关系 本专栏文章主要在讲c语言的语法点和知识,保证让不玩《我…

C#之扩展方法详解

前言: 我们想要向一个类型中添加方法,可以通过以下两种方式: 1.修改源代码。 2.在派生类中定义新的方法。 但是这两种方式都有缺点,1如果是别人的代码,你对其直接进行修改,可能破坏代码的完整性&#x…

Windows核心编程 注册表

目录 注册表概述 打开关闭注册表 创建删除子健 查询写入删除键值 子健和键值的枚举 常用注册表操作 注册表概述 注册表是Windows操作系统、硬件设备以及客户应用程序得以正常运行和保存设置的核心"数据库",也可以说是一个非常巨大的树状分层结构的…

ssm的“魅力”西安宣传网站(有报告)。Javaee项目。

演示视频: ssm的“魅力”西安宣传网站(有报告)。Javaee项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构,通过Spring SpringMvc MybatisVueLayuiElemen…

电大搜题:开启你的学习新篇章

广西开放大学,作为一所具有悠久历史和丰富经验的广播电视大学,在教育领域享有盛誉。如今,随着科技的迅猛发展,广西开放大学推出了电大搜题微信公众号,为广大学子提供了一个便捷、高效的学习工具。 电大搜题微信公众号…

漏刻有时百度地图API实战开发(7)个性化地图加载瓦片空白和Echarts加载bmap元素跟踪重影

一、地图瓦片加载缓慢或者空白 在使用百度个性化地图时&#xff0c;出现地图瓦片加载缓慢或者空白 解决方案 1.替换百度地图API引入方式 <script type"text/javascript" src"https://api.map.baidu.com/api?v3.0&akI2428Rc4FDz00LSGUYfISLcbPsxOfjx…

Linux 命令stat

命令作用 stat命令用于显示文件的状态信息。stat命令的输出信息比ls命令的输出信息要更详细。 查看的信息内容: File 显示文件名 Size 显示文件大小 Blocks 文件使用的数据块总数 IO Block IO块大小 regular file 文件类型&#xff08;常规文件&#xff09; Device …

嵌入式WIFI芯片通过lwip获取心知天气实时天气信息(包含完整代码)

一、天气API 1. 心知天气的产品简介 HyperData 是心知天气的高精度气象数据产品&#xff0c;通过标准的 Restful API 接口&#xff0c;提供标准化的数据访问。无论是 APP、智能硬件还是企业级系统都可以轻松接入心知的精细化天气数据。 HyperData API V4版是当前的最新…

SQL Server 2016(创建数据表)

1、需求描述。 在名为“class”的数据库中创建表&#xff0c;表名称为“course”&#xff0c;其中要包含序号、课程、课程编号、学分、任课教师、上课地点、开始时间、结束时间、备注等列。 设置各个字段的数据类型。其中&#xff0c;"序号"列为标识列&#xff0c;从…

domain参数错误导致讯飞星火大模型:发生错误,错误码为:10404

问题 开通讯飞星火大模型api调用后&#xff0c;使用官方demo调用报错10404&#xff0c;最终发现是domain参数需要跟调用的版本保持一致&#xff0c;1.5&#xff0c;2&#xff0c;3版本分别传general,generalv2,generalv3&#xff0c;传错了还报错10404&#xff0c;感觉真没这必…

【IC前端虚拟项目】数据搬运指令处理模块前端实现虚拟项目说明

上一个虚拟项目ICer萌新入职虚拟项目完成之后更了一段时间的脚本教程IC萌新的脚本培训教程又重新把那个700行RTL代码的risc处理器重新写了一遍&#xff0c;可以说是非常的忙碌啊&#xff08;主要是还得上班呢嗷&#xff0c;工作才是第一生产力&#xff01;&#xff09; 然后闲着…

sqlMap

url&#xff1a;https://sqlmap.org/ git&#xff1a;https://github.com/sqlmapproject/sqlmap.git git中文&#xff1a;https://github.com/sqlmapproject/sqlmap/blob/master/doc/translations/README-zh-CN.md use url&#xff1a;https://github.com/sqlmapproject/sqlmap…

【NeurIPS 2023】PromptIR: Prompting for All-in-One Blind Image Restoration

PromptIR: Prompting for All-in-One Blind Image Restoration&#xff0c; NeurIPS 2023 论文&#xff1a;https://arxiv.org/abs/2306.13090 代码&#xff1a;https://github.com/va1shn9v/promptir 解读&#xff1a;即插即用系列 | PromptIR&#xff1a;MBZUAI提出一种基…

排序算法总结(Python、Java)

Title of Content 1 冒泡排序 Bubble sort概念排序可视化代码实现Python - 基础实现Python - 优化实现Java - 优化实现C - 优化实现C - 优化实现 2 选择排序 Selection sort概念排序可视化代码实现PythonJava 3 插入排序 Insertion sort概念 1 冒泡排序 Bubble sort 概念 解释…