frp实现内网穿透(一篇解决所有问题!)

一、前言

大家好,你的月亮我的心,我是博主小阿金,欢迎各位工友。 最近博主自己搞了个前后端分离的项目,本来进行的很顺利,但是由于前端小伙伴的离职,给这个联调造成了很大的困扰,由于后端采用的是微服务架构,杂七杂八的东西很占配置,购买服务器的想法就胎死腹中了,于是想了一个曲线救国的办法,使用内网穿透来实现联调和部署的问题。

二、基本介绍

内网穿透是一种通过公共网络(例如互联网)连接两个私有网络的技术,使得外部用户可以访问内部网络中的服务。FRP(Fast Reverse Proxy)是一种流行的内网穿透工具,其技术思想和优势如下:

2.1、需求资源:

1、一台外网可访问的有固定ip的云服务器

2、一台外网无法访问的无固定ip的本地家用电脑

需求:将云服务器搭建为一台内网穿透服务器,实现通过外网访问家用电脑(网页)的功能。且即使没有域名也可通过公网访问

2.2、技术思想:

  1. 反向代理(Reverse Proxy) :FRP利用反向代理的思想,在公共服务器上部署一个中转服务器(即FRP服务器),外部用户通过该中转服务器与内部网络建立连接。
  2. 端口映射和流量转发:FRP将外部请求映射到内网机器上的指定端口,然后将流量从公网传输到内网,实现数据传输。
  3. 心跳检测和保持连接:FRP通过心跳检测机制保持与客户端和服务端之间的稳定连接,确保数据传输的可靠性和稳定性。

2.3优势:

  1. 穿透防火墙和NAT:FRP可以穿透防火墙和NAT设备,使得位于不同网络环境中的主机能够互相通信,解决了企业内外网络隔离的问题。
  2. 灵活性和易用性:FRP配置简单灵活,支持多种协议(TCP、UDP等),可根据需求灵活配置端口映射和访问控制等参数。
  3. 安全性:通过加密传输数据、访问控制列表等安全机制,保障数据传输的安全性,防止未经授权的访问。
  4. 跨平台支持:FRP支持多种操作系统(Windows、Linux、Mac等),可以在不同平台上运行,并且提供了丰富的功能和插件扩展。
  5. 开源社区支持:FRP是开源项目,拥有活跃的社区支持和更新,用户可以获取最新版本、bug修复以及安全更新。

总而言之,FRP作为一种内网穿透工具,在网络通信方面具有良好的稳定性、灵活性和安全性,为用户提供了便捷的远程访问解决方案。

中文官网:gofrp.org/zh-cn/

中文文档:gofrp.org/zh-cn/docs/

演示使用安装包

Windows:github.com/fatedier/fr...

Linux:github.com/fatedier/fr...

或使用命令下载,二选一

js 复制代码
wget https://github.com/fatedier/frp/releases/download/v0.59.0/frp_0.59.0_linux_amd64.tar.gz

mwget https://github.com/fatedier/frp/releases/download/v0.59.0/frp_0.59.0_linux_amd64.tar.gz

解压后文件如下:

2.4、配置介绍:

js 复制代码
1.服务端配置
bindPort = 7000                 # frp服务的特定端口,防火墙也需放开该端口
 
# 服务面板可查看frp服务状态信息
webServer.addr = "0.0.0.0"		# 后台管理地址,默认是127.0.0.1,如果是公网访问则改成0.0.0.0
webServer.port = 7500			# 后台管理端口
webServer.user = "admin"		# (可选)后台登录用户名
webServer.password = "admin"	# (可选)后台登录密码
 
 
#transport.tls.force = true  # 服务端将只接受 TLS链接
#auth.method = 'token'       # 客户端访问验证方式
#auth.token = "54321" 		 # 客户端访问验证密码,frpc要与frps一致
 
 
# 自定义的监听的端口,所有对服务器该端口访问将被转发到本地内网,做了反向代理可不处理防火墙放行
#vhostHTTPPort = 8000
#vhostHTTPSPort = 45443
2、客户端配置
# frpc.toml
transport.tls.enable = true		# 从 v0.50.0版本开始,transport.tls.enable的默认值为 true
serverAddr = "47.76.92.71" # 服务端ip
serverPort = 7000 # 服务端端口
auth.method = 'token' # 客户端访问验证方式
auth.token = '54321' # 客户端访问验证密码
 
[[proxies]]
name = "dy_mysql" # 客户端服务名
type = "tcp" # 通讯方式
localIP = "127.0.0.1" # 客户端的ip(固定)
localPort = 3306 # 客户端服务端口
remotePort = 13306 # 映射到服务端端口(服务器需放行)
 
[[proxies]]
name = "dy_video" # 客户端服务名_一个监控摄像头
type = "tcp" # 通讯方式
localIP = "192.168.6.8" # 客户端的ip(固定)
localPort = 5522 # 客户端服务端口
remotePort = 15522 # 映射到服务端端口(服务器需放行)
 
[[proxies]]
name = "test-tcp"
type = "tcp"
localIP = "127.0.0.1"			# 需要暴露的服务的IP
localPort = 9000				# 将本地9000端口的服务暴露在公网的6060端口
remotePort = 6060 				# 暴露服务的公网入口
 
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000
#customDomains = ["xxx.xxx.xxx.xxx"]
 
 
[[proxies]]
name = "web"
type = "http"
localIP = "127.0.0.1"
localPort = 80
customDomains = ["域名或ip"]

3、白嫖服务器方法

  1. 可以选择各大服务商的体验产品,限时使用,
  2. 使用亚马逊提供的免费服务器,只需注册一个账号就可以使用一年的云服务器跳转链接

二、服务端部署

  1. 将上述下载的安装包解压 tar -zxf frp_0.59.0_linux_amd64.tar.gz
  2. 使用mv frp_0.59.0_linux_amd64 frp对文件进行重命名
  3. 执行命令sudo vim frps.toml打开配置文件,然后保存退出。
js 复制代码
bindPort = 7000
auth.token = "123456"
# 服务端仪表盘的端口, 可以用浏览器访问查看
webServer.addr = "0.0.0.0"
webServer.port = 7500
# 服务端仪表盘的用户密码
webServer.user = "admin"
webServer.password = "admin"
# 虚拟主机端口
vhostHTTPPort = 8080
  1. 使用命令 ./frps -c ./frps.toml启动frp。并且在云服务的安全组以及防火墙上放行对应端口。 输入地址(公网ip:端口号)可以查看服务端管理页面。

三、客户端部署

  1. 解压文件后,用文本编辑软件打开frpc.toml
  2. 修改配置,添加映射关系
ini 复制代码
serverAddr = "公网ip"
serverPort = 7000
auth.token = "123456"

[[proxies]]
name = "test-tcp"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000


[[proxies]]
name = "web"
type = "http"	
localIP = "127.0.0.1"
localPort = 80						
customDomains = ["公网ip或映射域名"]
  1. 地址栏中输入cmd回车打开终端。

4. 终端输入命令frpc -c frpc.toml启动。 出现如下效果就启动成功了

服务端显示注册了两个连接,一个tcp,一个http。

tcp: http: 本地服务: 代理服务:

四、设置服务自启动

在 Linux 系统下,使用 systemd 可以方便地控制 frps 服务端的启动、停止、配置后台运行以及开机自启动。

以下是具体的操作步骤:

  1. 安装 systemd

    如果您的 Linux 服务器上尚未安装 systemd,可以使用包管理器如 yum(适用于 CentOS/RHEL)或 apt(适用于 Debian/Ubuntu)来安装它:

    bash 复制代码
    # 使用 yum 安装 systemd(CentOS/RHEL)
    yum install systemd
    
    # 使用 apt 安装 systemd(Debian/Ubuntu)
    apt install systemd
  2. 创建 frps.service 文件

    使用文本编辑器 (如 vim) 在 /etc/systemd/system 目录下创建一个 frps.service 文件,用于配置 frps 服务。

    shell 复制代码
    $ sudo vim /etc/systemd/system/frps.service

    写入内容

    ini 复制代码
    [Unit]
    # 服务名称,可自定义
    Description = frp server
    After = network.target syslog.target
    Wants = network.target
    
    [Service]
    Type = simple
    # 启动frps的命令,需修改为您的frps的安装路径
    ExecStart = /path/to/frps -c /path/to/frps.toml
    
    [Install]
    WantedBy = multi-user.target
  3. 使用 systemd 命令管理 frps 服务

    bash 复制代码
    # 启动frp
    sudo systemctl start frps
    # 停止frp
    sudo systemctl stop frps
    # 重启frp
    sudo systemctl restart frps
    # 查看frp状态
    sudo systemctl status frps
  4. 设置 frps 开机自启动

    bash 复制代码
    sudo systemctl enable frps

五、总结

技术可以引领业务,业务也同样可以驱动技术,由于小伙伴的跑路,和高额的服务器费用,驱使着我寻找方便且廉价的解决方案。下面贴出一下本项目中可能会用到的linux命令。

  1. 查看所有监听的端口以及相应的进程sudo lsof -i -P -n | grep LISTEN
  2. 切换admin账号 sudo su
  3. 关闭某个进程 pkill example
相关推荐
lsjweiyi11 小时前
极简AI工具箱网站开源啦!
opencv·开源·微信支付·支付宝支付·百度ai·极简ai工具箱·ai图像处理
开源社12 小时前
一场开源视角的AI会议即将在南京举办
人工智能·开源
FreeIPCC12 小时前
谈一下开源生态对 AI人工智能大模型的促进作用
大数据·人工智能·机器人·开源
海害嗨12 小时前
阿里巴巴官方「SpringCloudAlibaba全彩学习手册」限时开源!
学习·开源
生命是有光的13 小时前
【开源风云】从若依系列脚手架汲取编程之道(八)
开源
HuggingFace14 小时前
Halo 正式开源: 使用可穿戴设备进行开源健康追踪
开源·健康追踪
时光追逐者18 小时前
.NET 9 中 LINQ 新增功能实操
开发语言·开源·c#·.net·.netcore·linq·微软技术
檀越剑指大厂21 小时前
Linux本地部署开源项目OpenHands基于AI的软件开发代理平台及公网访问
linux·人工智能·开源
胜天半子_王二_王半仙1 天前
c++源码阅读__ThreadPool__正文阅读
开发语言·c++·开源
FIT2CLOUD飞致云1 天前
案例研究|阿特斯的JumpServer分布式部署和多组织管理实践
运维·开源·堡垒机·jumpserver