搭建内网穿透服务(frp)

搭建内网穿透服务(frp)

一、为什么

  1. 在平时工作当中,我们经常会遇到需要将自己本地的服务暴露在公网上,方便与他人进行接口对接、或者进行演示等等,虽然有一些免费的内网穿透服务,但是大都很不稳定或者带宽太低,导致使用起来很不方便,如果使用收费的产品的话,会发现价格相当贵,但是在映射条数和带宽方面还是有很大的限制,就拿我们公司购买的某壳企业级专业版的内网穿透来说,只有2个映射数,带宽一个1M,一个2M,一年的费用大概是600多,最重要的是还不稳定,隔几天需要重启,导致客户隔几天就会反馈,系统链接失效,很郁闷,给客服反馈,说是公司网络的问题,但是检查后发现本地网络很稳定,后来又给出解决方案是在本地客户端配置超时时间,但是这时我已经萌生了自己搭建一个自己的内网穿透服务的年头了;
  2. 公司建设初期,只是在本地购买了两台服务器,没有购买云服务,所以公司的所有基础服务,比如gitlab、mantis、nexus、mysql等等都在本地服务器,但是疫情当前,随时有可能就居家隔离了,这样公司同事基本就没有办法进行协同工作了,21年11月底西安封城,幸好在封城前,我提前已经搭建好了内穿穿透服务,封城前对公司所有需要用的服务都进行了穿透,所以基本没有对公司的工作造成影响。
  3. 作为一个软件工程师,秉承着开源、节省成本的想法,就想着既然收费的这么贵,何不自己找一个开源的项目自己搭建一个呢。

  基于这样的想法,利用业余时间通过咨询朋友,网上查阅资料搭建成功了自己的内网穿透服务

二、需要什么

  1. 一个域名(价格>=9元),本文以 www.yourdomain.com 为例
  2. 一个有共有ip的服务器(云服务器),本文以123.123.123.123为例

当时在选择服务器的时候因为阿里云的新用户已经购买过一个,所以没有新用户的优惠价格比较贵,所以当时经过筛选,选择了腾讯云的轻量级云服务器(2c4g8M3y)2核4G内存8Mb带宽3年,200多块钱,确实很便宜,但是使用了两个多月发现腾讯云经常提示被黑客攻击,挖矿啥的,让购买安全服务,一直拖着不买,也根据给出的方案进行了系统修复等,但是后来还是直接挂了,然后还不能恢复,退钱还得走客服,搞的很郁闷,之前阿里云也买过几个服务器,从来没有遇到这样的情况,后台果断换百度云(专门找便宜的),百度云有一个基本相同配置的服务器,两年100多,目前已经使用了3个月,没有任何问题。

三、项目地址

frp项目地址
安装包下载地址
frp文档地址

四、云服务器安全组策略

需要在云服务器安全组策略上开通7000/7001/7002三个端口,用于客户端连接,
如果客户端中配置tcp类型的穿透,则每个穿透出来的端口也都需要开通安全组策略

五、域名解析

需要在域名解析服务中配置一条txt记录,需要将主机记录:*.frp.yourdomain.com 全部解析到公网ip 123.123.123.123上

六、nginx配置

nginx作用是将通配符域名 *.frp.yourdomain.com的请求全部转发到frp的服务端的7001端口上,具体nginx相关配置片段如下:

server {# 内网穿透(frp);server_name ~^(?<subdomain>.+).frp.yourdomain.com;listen 80;location / {proxy_pass http://localhost:7001;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Host $http_host;proxy_set_header X-Forwarded-Port $server_port;proxy_set_header X-Forwarded-Proto $scheme;add_header 'Access-Control-Allow-Origin' *;add_header 'Access-Control-Allow-Credentials' 'true';add_header 'Access-Control-Allow-Methods' 'GET,POST,DELETE,OPTIONS';add_header 'Access-Control-Allow-Headers' 'access_token,token,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';proxy_connect_timeout 60000;proxy_read_timeout 60000;proxy_send_timeout 60000;}
}

七、frp服务端安装

  1. 解压压缩包
tar zxvf frp_0.51.2_linux_amd64.tar.gz
  1. 配置文件配置
    参加第三章节 frp文档地址
[common]
bind_port = 7000# 启用TLS协议加密连接
tls_enable = true#http https
vhost_http_port = 7001
#vhost_https_port = 443
vhost_http_timeout = 6000#log
log_file = /root/software/frp/log/frps.log
log_level = infoheartbeat_timeout = 300
user_conn_timeout = 60#subdomain
subdomain_host = frp.yourdomain.com#dashboard
dashboard_port = 7002dashboard_user = root
dashboard_pwd = dashboardpasswordmax_pool_count = 20000#token 类似于令牌
token = yourtoken
  1. 配置frp服务器为系统服务
    在/etc/systemd/system/目录下创建.frps.service 内容如下:
[Unit]
Description=frps
After=network.target[Service]
LimitNOFILE=20480000
TimeoutStartSec=30
ExecStart=/root/software/frp/frps -c /root/software/frp/frps.ini
ExecStop=/bin/kill $MAINPID[Install]
WantedBy=multi-user.target
  1. 相关命令
# 开机自启动
systemctl enable frps
# 启动
systemctl start frps
# 重启
systemctl restart frps
# 停止
systemctl stop frps
# 查看状态
systemctl status frps

八、frp客户端安装

在任务连接互联网上的机器都可以,支持各种操作系统,本文以linux为例

  1. 解压压缩包
tar zxvf frp_0.51.2_linux_amd64.tar.gz
  1. 配置文件配置
    参加第三章节 frp文档地址
[common]
server_addr = 123.123.123.123
server_port = 7000#token
token = yourtoken# console or real logFile path like ./frpc.log
log_file = /usr/local/soft/frp0512/log/frpc.log# trace, debug, info, warn, error
log_level = tracelog_max_days = 10tls_enable = trueheartbeat_interval = 180
heartbeat_timeout = 300 # tcp穿透方式 访问链接:  123.123.123.123:12299
[ssh_tcp]
type = tcp
local_ip = 192.168.1.99
local_port = 22
remote_port = 12299# http穿透方式 访问连接: http://minio.frp.yourdomain.com
[minio_http]
type = http
local_ip = 192.168.1.99
local_port = 10001
subdomain = minio
  1. 配置frp服务器为系统服务
    在/etc/systemd/system/目录下创建frpc.service 内容如下:
[Unit]
Description=frpc
After=network.target[Service]
TimeoutStartSec=30
ExecStart=/usr/local/soft/frp/frpc -c /usr/local/soft/frp/frpc.ini
ExecStop=/bin/kill $MAINPID[Install]
WantedBy=multi-user.target
  1. 相关命令
# 开机自启动
systemctl enable frpc
# 启动
systemctl start frpc
# 重启
systemctl restart frpc
# 停止
systemctl stop frpc
# 查看状态
systemctl status frpc

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

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

相关文章

让调用者自己干活的特殊线程池

让调用者自己干活的特殊线程池 1. 相关背景 单元测试时, 我们的某些业务代码可能是在线程池中运行的&#xff0c;可能会出现各种不一致的情况。 这时候可以hack一下, 创建一个调用者直接执行的线程池&#xff0c;避免干扰; 2. 实现代码 import java.util.concurrent.*;// 让…

【永洪BI】资源导出

路径&#xff1a;管理系统>资源部署>资源导出 1.页面介绍 选择左侧面板中的管理系统&#xff0c;点击资源部署&#xff0c;选择资源导出&#xff0c;进入资源导出页面。 【名称】导出的 jar 文件的名称&#xff0c;必填项。 【描述】导出的 jar 文件中包含的描述信息…

Gateway基本配置的参数以及yml示例

Spring Cloud Gateway作为API网关&#xff0c;可以通过配置文件来定义路由规则、过滤器和相关参数。 参入如下&#xff1a; routes: 定义了一组路由规则&#xff0c;每个路由规则包含了路由的ID、目标URI、断言集合和过滤器集合。 id: 路由的唯一标识符&#xff0c;用于区分不同…

华为昇腾310B1平台视频解码失败[ERROR] Send frame to vdec failed, errorno:507018

目录 1 [ERROR] Send frame to vdec failed, errorno:507018 2 bug解决尝试1 3 bug解决尝试2 4 最终解决方法 参考文献&#xff1a; 1 [ERROR] Send frame to vdec failed, errorno:507018 某项目中的代码运行报错 [ERROR] Send frame to vdec failed, errorno:507018 Ac…

Linux系统 -目录结构与配网

目录的特点 Windows中有C盘、D盘等&#xff0c;每个都是一个根系统是个多根系统 Linux中只有一个根是个单根系统 Linux-目录存储的内容 1、/root&#xff1a;管理员的家目录 2、/home&#xff1a;存储普通用户家目录的目录/3、/tmp&#xff1a;临时目录&#xff0c;这个目录存储…

linux系统管理面试题

用户管理&#xff1a; 1. 如何在Linux中创建一个新用户并设置密码&#xff1f; 在Linux中创建一个新用户并设置密码&#xff0c;可以使用以下步骤&#xff1a; 打开终端或命令行界面。使用root权限登录或使用sudo命令获取管理员权限。运行以下命令来创建新用户&#xff08;将…

了解 Robot Framework :接口自动化测试教程!

开源自动化测试利器&#xff1a;Robot Framework Robot Framework 是一个用于实现自动化测试和机器人流程自动化&#xff08;RPA&#xff09;的开放源代码框架。它由一个名为 Robot Framework Foundation 的组织得到推广&#xff0c;得到了多家领军企业在软件开发中的广泛应用。…

运营商三要素核验接口如何对接

运营商三要素核验接口又叫运营商手机号三要素验证接口、运营商手机号实名认证接口、运营商手机号三要素核验接口&#xff0c;指的是输入姓名、身份证号码及手机号&#xff0c;通过运营商数据库实时校验此三项是否匹配。那么运营商三要素核验接口如何对接呢&#xff1f; 首先我…

Java SE入门及基础(51) Queue 接口 比较器接口

目录 Queue 接口 1. 特性描述 Queue 接口常用方法 2. LinkedBlockingQueue 用法示例 3. PriorityQueue 用法示例 思考&#xff1a;如果 PriorityQueue 队列中存储的是对象&#xff0c;会怎么排序&#xff1f; 比较器接口 1. 比较器接口的作用 2. Comparable 接口 示…

【设计模式】JAVA Design Patterns——Abstract Factory(抽象工厂模式)

&#x1f50d;目的 提供一个用于创建相关对象家族的接口&#xff0c;而无需指定其具体类 &#x1f50d;解释 真实世界例子 要创建一个王国&#xff0c;我们需要具有共同主题的对象。精灵王国需要精灵国王、精灵城堡和精灵军队&#xff0c;而兽人王国需要兽人国王、兽人城堡和兽…

项目路由分模块A模块B模块C......模块N使用

路由分模块原因&#xff1a; vue框架中会有router文件&#xff0c;但是路由文件下只有一个路由文件&#xff0c;在实际项目开发中会有多人负责多模块的情况&#xff0c;若都在一个文件内编辑路由名称&#xff0c;就相当于是机房里的数据线&#xff0c;会很乱七八糟&#xff0c;…

1. go语言初识(一)

本篇博客涉及到的内容&#xff1a;变量和常量、iota常量生成器、类型转换 变量&#xff08;Variables&#xff09;和常量&#xff08;Constants&#xff09; 变量&#xff08;Variables&#xff09; 1. 定义变量 在Go中&#xff0c;可以使用’var‘关键字来声明一个变量&…

【十大排序算法】----选择排序(详细图解分析+实现,小白一看就会)

目录 一&#xff1a;选择排序——原理 二&#xff1a;选择排序——分析 三&#xff1a;选择排序——实现 四&#xff1a;选择排序——优化 五&#xff1a;选择排序——效率 一&#xff1a;选择排序——原理 选择排序的原理&#xff1a;通过遍历数组&#xff0c;选出该数组…

使用Docker配置深度学习环境——以diffusers为例

Docker的其他信息可以在我的网站上找到&#xff0c;这里假设安装完成了&#xff0c;直接上手。 git clone 仓库地址打开docker目录&#xff0c;找到目标版本&#xff1a; sudo docker build diffusers-pytorch-cuda如果失败&#xff0c;尝试使用换源&#xff1a; sudo nano …

GPT-4o 炸裂发布!你竟然还没用上?(附详细教程)

今天AI界的爆炸新闻非chatgpt-4o莫属&#xff0c;从早上到现在随处可见的文章推送&#xff0c;视频推送。 大家或多或少都有耳闻了&#xff0c;今天主要讲一讲我们普通人到底怎么用&#xff1f;如果不氪金行不行&#xff1f;我就想体验一下可不可以&#xff1f;带着问题往下看 …

提升写作效率的秘密武器:一个资深编辑的AI写作体验

有句话说:“写作是一项你坐在打字机前流血的工作。”而如今,各类生成式软件的涌现似乎打破了写作这一古老的艺术形式壁垒。过去,作家们独自在书桌前冥思苦想,如今,一款名为“玲珑AI工具”的ai写作助手正悄然改变着文案写作行业的创作生态,成为提升写作效率的秘密武器。 在传统…

【数据结构】图和基本算法

文章目录 1. 图的基本概念1.1 图本身的定义1.2 相关概念 2. 图的存储结构2.1 邻接矩阵2.2 邻接表 3. 图的遍历3.1 广度优先遍历&#xff08;BFS&#xff09;3.2 深度优先遍历&#xff08;DFS&#xff09; 4. 最小生成树4.1 Kruskal算法4.2 Prim算法 5. 最短路径5.1 单源最短路径…

【Linux】基础命令:进程、网络

systemctl命令 控制内置服务 systemctl start | stop | status | enable | disable 服务名 start | stop开启关闭&#xff0c;status状态&#xff0c;enable | disable开启关闭开机自启 date命令 查看系统时间 date [-d] [格式化字符串] date -d “1 day” %Y-%m-%d 修改时区…

表达式运算符位运算

表达式 概念&#xff1a; 由常量、变量、运算符、&#xff08;&#xff09;组成一句代码。代码最终有一个结果。 // 定义&#xff1a; 由常量、变量、运算符、&#xff08;&#xff09;组成。由一个结果// 规律1&#xff1a; 当表达式中所有的变量类型小于等于int( int shor…

Linux0.11 中全局描述符表(GDT)

在Linux内核中&#xff0c;全局描述符表&#xff08;Global Descriptor Table&#xff0c;简称GDT&#xff09;是一个关键的数据结构&#xff0c;主要用于管理处理器的内存段和相关的权限与属性。它属于x86架构中的保护模式特性&#xff0c;允许操作系统对内存访问进行更精细的…