内网穿透(docker部署frp)

文章目录

  • 内网穿透
    • 实现内网穿透的常见方法
  • frp
    • frp的实现原理
    • frps服务端应用部署
      • 配置文件部署
      • 参数配置
    • frpc客户端部署

内网穿透

内网穿透是指在内部网络(内网)中实现穿透外网(公网)的通信。内网通常是指公司、组织或家庭等内部网络,而外网则是指互联网,也就是公共网络。内网穿透的目的是让位于内网中的设备或应用程序能够访问外部网络中的资源,实现内外网的通信。

实现内网穿透的常见方法

实现内网穿透的方法有很多,以下是一些常见的内网穿透技术:

  1. 虚拟专用网络(VPN):通过建立VPN连接,可以让位于内网的设备访问外网的资源,但这种方法相对复杂,需要配置和管理VPN服务器。
  2. 代理服务器:通过在内外网之间设置代理服务器,可以让位于内网的设备通过代理服务器访问外网资源。这种方法简单易用,但可能会导致网络延迟和数据传输速度变慢。
  3. 端口映射:通过在内外网之间映射特定的端口,可以让位于内网的设备访问外网的资源。这种方法简单易用,但需要关心端口映射的安全问题。
  4. 负载均衡:通过在内外网之间设置负载均衡器,可以将内外网的流量分发到多个服务器上,从而实现内外网的通信。这种方法适用于大型企业和高性能场景,但需要部署和维护负载均衡器。
  5. 隧道技术:通过在内外网之间建立隧道,可以让位于内网的设备访问外网的资源。这种方法类似于VPN,但更加简洁易用。

frp

  • fatedier/frp GitHub 官方仓库

frp是一款免费开源的专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS、Websocket、P2P 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

frp的实现原理

frp是基于C/S模式实现的内网穿透服务代理应用,通过在公网IP上部署服务器端应用,客户端部署在内网上。当访问服务端暴露的应用时,反向代理到内网的服务实现内网穿透的代理。

frps服务端应用部署

在frp中,分为客户端frpc和服务端fprs,frp应用支持以toml配置文件的方式和参数的方式进行服务部署。frp应用通过-c参数指定配置文件进行读取

frps -c frps.toml
frpc -c frpc.toml

配置文件部署

在部署frps时,需要指定绑定端口用于接收客户端连接,默认情况下绑定端口为7000,当需要修改用于客户端连接的端口时,可以修改此配置。在配置文件中通过bindPort参数进行配置

# frps.toml
bindPort = 7000

通过docker compose部署

version: '3.9'
services:frps:image: fatedier/frps:v0.53.2hostname: frpscontainer_name: frpsvolumes:- "./frps.toml:/frps.toml"command:- "-c"- "/frps.toml"ports:- "7000:7000"

参数配置

同样的,frp也支持在启动时直接以参数的方式进行服务部署,通过--bind_port可以设置frps的绑定端口

frps --bind_port 7000

通过docker compose部署

version: '3.9'
services:frps:image: fatedier/frps:v0.53.2hostname: frpscontainer_name: frpscommand:- "--bind_port"- "7000"ports:- "7000:7000"

frpc客户端部署

frpc客户端中,主要配置为

  • 配置frps连接信息
  • 配置内网应用

frpc中需要配置的内容相对较多,推荐以文件的方式进行配置,以下是frpc.toml的简单示例

# 服务端地址
serverAddr = "x.x.x.x"
# 服务端配置的bindPort
serverPort = 7000[[proxies]]
# 代理应用名称,根据自己需要进行配置
name = "ssh"
# 代理类型
type = "tcp"
# 客户端代理应用IP
localIP = "127.0.0.1"
# 客户端代理应用端口
localPort = 8080
# 服务端反向代理端口
remotePort = 7001

如上述示例所示,为客户端frpc代理配置,通过tcp协议的方式将本地8080端口服务代理到serverAddr:7001上,代理后,可以通过serverAddr:7001直接在公网上访问到本地服务。

通过docker compose部署frpc应用:

version: '3.9'
services:frpc:image: fatedier/frpc:v0.53.2hostname: frpccontainer_name: frpcvolumes:- "./frpc.toml:/frpc.toml"command:- "-c"- "/frpc.toml"network_mode: "host"
  • fatedier/frpc镜像在启动时,直接运行frpc命令,frpc命令到默认配置文件默认参数为./frpc.ini文件,所以必须要挂载配置文件到容器内,否则无法直接启动frpc服务
  • 通过frpc进行内网穿透,frpc需要可以直接访问到需要内网穿透代理到应用,所以采用network_mode: host参数将frpc服务到网络设置为宿主机网络,否则容器内无法直接访问宿主机上的应用,网络根据代理应用进行配置
    • 由于docker是基于Linux内核开发的,在Mac、Windows系统上对Docker应用本质是通过虚拟机运行对,所以network_mode: host对应的网络为虚拟机网络,而不是宿主机网络,所以该参数在Mac、Windows系统上不受支持,可以考虑直接以应用的方式在以上系统部署
  • 部署后,内网服务的公网访问方式为serverAddr:remotePortbindPort仅用于frp交互使用,所以在上面的frps通过docker方式中,需要将内网对应的remotePort和宿主机关联配置好
    • 在部署frps指定ports时可以考虑给定范围的方式进行部署

更多frp部署应用方式请参考frp 官方文档

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国家建筑装配式内装产业基地在沪成立,副主任单位优积科技协同助推绿色低碳循环发展

上海市室内装饰行业协会装配式内装产业专业委员会成立大会暨“国家建筑装配式内装产业基地”项目启动会于3月21日下午1点在上海光大酒店隆重举行。出席此次活动的包括市装协会长徐国俭,市装协党支部书记兼秘书长丛国梁,市装协装配式内装委主任顾泰昌&…

flink-cdc使用小结

原理: 同步原理:其实就是伪装成一个mysql 的从库会拉取主库的binlog日志读取数据,相当于mysql 的主从复制。然而flink的数据处理方式是流处理,实时收集清洗数据。相关联的checkpoint,其实就是一个容错恢复快照&#x…

内容安全补充

第十一天 密码学 近现代加密算法 古典加密技术 --- 算法保密原则 近现代加密技术 --- 算法公开,密钥保密 对称加密算法,非对称加密算法 对称加密 --- 加密和解密的过程中使用的是同一把密钥。 所以,对称加密所使用的算法一定是一种双向…

Node.js+vue校内二手物品交易系统tdv06-vscode前后端分离

二手物品交易系统采用B/S架构,数据库是MySQL。网站的搭建与开发采用了先进的nodejs进行编写,使用了vue框架。该系统从三个对象:由管理员和用户、店铺来对系统进行设计构建。主要功能包括:个人信息修改,对用户、店铺、二…

【RN】为项目使用React Navigation中的navigator

简言 移动应用基本不会只由一个页面组成。管理多个页面的呈现、跳转的组件就是我们通常所说的导航器(navigator)。 React Navigation 提供了简单易用的跨平台导航方案,在 iOS 和 Android 上都可以进行翻页式、tab 选项卡式和抽屉式的导航布局…

Vue2:路由命名

一、情景说明 我们使用router-link&#xff0c;配置path属性时&#xff0c;如果是多级路由&#xff0c;会写一个很长的path 如下代码&#xff1a; <!-- 跳转路由并携带query参数&#xff0c;to的对象写法 --> <router-link :to"{path:/home/message/detail,que…

c++ primer plus 编程答案 上

c primer plus 编程答案上 第二章第三章第四章第五章第六章 第二章 编写一个c程序&#xff0c;它显示您的姓名和地址 #include<iostream> int main() {using namespace std;cout << "my name is xxx,\nmy address is xxx" << endl;return 0; }编…

高防服务器和高防CDN有哪些区别?

高防服务器是独立单个防御50G以上的服务器类型&#xff0c;高防服务器能够为客户提供网络安全维护的服务器类型&#xff0c;是专门用来低于DDOS攻击的服务器&#xff0c;在硬件、软件和网络等方面能够提供可靠稳定的服务。 高防CDN则是一种基于分布式架构的网络加速和安全保护技…

如何在 Tomcat 中为 Web 应用程序启用和配置缓存?

在Tomcat中为Web应用程序启用和配置缓存通常涉及到对Tomcat的连接器&#xff08;Connector&#xff09;进行配置&#xff0c;以及可能的话&#xff0c;配置Web应用程序本身以支持缓存。 1. 配置Tomcat连接器以启用缓存 Tomcat的连接器可以通过其配置来启用各种…

解决错误:nested exception is org.apache.ibatis.binding.BindingException

mybatis报错信息&#xff1a; Error: nested exception is org.apache.ibatis.binding.BindingException: Parameter ‘categoryList’ not found. Available parameters are [arg0, collection, list] 网上搜到的解决办法&#xff1a; 一、多个参数使用Param注解标识 对于多个…

【Qt】Qt QML添加软件图标(Windows)

1. 准备图标文件 将图片转换成.ico文件&#xff0c;注意&#xff1a;需要用专门的工具转换&#xff08;https://convertio.co/zh/image-converter/&#xff09; 2. 工程配置 2.1 方法1 pro文件中添加&#xff1a; RC_ICONS AutoTitration.ico2.2 方法2 添加qrc文件&…

已解决org.springframework.beans.BeanInstantiationException异常的正确解决方法,亲测有效!!!

已解决org.springframework.beans.BeanInstantiationException异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 文章目录 问题分析 报错原因 解决思路 解决方法 步骤一&#xff1a;检查Bean定义 步骤二&#xff1a;检查Bean的依赖 步骤三…

C++中的构造函数

目录 前言 1.构造函数的作用 2.构造函数的定义 1.内联函数 2.类体外构造函数 前言 记录下C中的构造函数。 1.构造函数的作用 构造函数的作用主要是对对象的成员变量进行初始化赋值操作。 当我们没有定义构造函数的时候&#xff0c;系统会默认添加一个没有参数的构造函数…

软考-中级-系统集成2023年综合知识(三)

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 软考中级专栏回顾 专栏…

C#学习总结

1、访问权限 方法默认访问修饰符&#xff1a;private 类默认访问修饰符&#xff1a;internal 类的成员默认访问修饰符&#xff1a;private 2、UserControl的使用 首先添加用户控件 使用时一种是通过代码添加&#xff0c;一种是通过拖动组件到xaml中

Stable Diffusion 绘画入门教程(webui)-ControlNet(IP2P)

上篇文章介绍了深度Depth&#xff0c;这篇文章介绍下IP2P&#xff08;InstructP2P&#xff09;, 通俗理解就是图生图&#xff0c;给原有图加一些效果,比如下图&#xff0c;左边为原图&#xff0c;右边为增加了效果的图&#xff1a; 文章目录 一、选大模型二、写提示词三、基础参…

LeetCode146: LRU缓存

题目描述 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中&#xff0c;则返回关键字的值&#xff0c;否则…

RabbitMQ的死信队列和延迟队列

文章目录 死信队列如何配置死信队列死信队列的应用场景Spring Boot实现RabbitMQ的死信队列 延迟队列方案优劣&#xff1a;延迟队列的实现有两种方式&#xff1a; 死信队列 1&#xff09;“死信”是RabbitMQ中的一种消息机制。 2&#xff09;消息变成死信&#xff0c;可能是由于…

绿盾限制终端网络访问权限会恢复后,别的网站访问正常就是无法访问钉钉网站和下载东西

环境&#xff1a; Win10 专业版 钉钉7.5.5 绿盾7.0 问题描述&#xff1a; 绿盾限制终端网络访问权限会恢复后&#xff0c;别的网站访问正常就是无法访问钉钉网站和下载东西 解决方案&#xff1a; 排查方法 1.重置浏览器或者更换浏览器测试&#xff08;未解决&#xff09…

【Java】输入输出流(实验八)

目录 一、实验目的 二、实验内容 三、实验小结 一、实验目的 1、掌握java I/O的基本原理。 2、掌握标准输入输出流和Scanner类的基本使用方法。 3、掌握FileInputStream、FileOutStream、FileReader、FileWriter、BufferedReader 、BufferedWriter类的常用方法。 二、实验…