frp内网穿透的搭建与使用
什么是内网穿透
内网穿透,又称为NAT穿透。
NAT穿透技术是让NAT背后的设备,先访问指定的外网服务器,由指定的外网服务器搭建桥梁,打通内、外网设备的访问通道,实现外网设备访问到内网设备。
总之就是内网可以连公网,公网可以连公网和内网,但内网和内网无法连,但在中间加一个公网的中转服就能实现穿透!

目前内网穿透技术有很多,比如收费的花生壳、向日葵、神卓互联、ngrok等等。
当然如果你不想数据掌握在别人手中,且有自己的服务器,那么可以通过开源技术自己搭建一个,比如frp

frp服务器
下载软件包
下载服务器端程序,选择合适的版本即可,

frp_0.57.0_darwin_amd64.tar.gz —— 适用于Mac OS 64位系统
frp_0.57.0_darwin_arm64.tar.gz —— 适用于Mac OS 64位嵌入式系统
frp_0.57.0_freebsd_386.tar.gz —— 适用于FreeBSD 32位系统
frp_0.57.0_freebsd_amd64.tar.gz —— 适用于FreeBSD 64位系统
frp_0.57.0_linux_386.tar.gz —— 适用于Linux 32位系统
frp_0.57.0_linux_amd64.tar.gz —— 适用于Linux 64位系统
frp_0.57.0_linux_arm.tar.gz —— 适用于Linux 32位嵌入式系统
frp_0.57.0_linux_arm64.tar.gz —— 适用于Linux 64位嵌入式系统
frp_0.57.0_linux_mips.tar.gz
frp_0.57.0_linux_mips64.tar.gz
下载到服务器之后,解压。
tar -xzvf frp_0.57.0_linux_amd64.tar.gz

可以看到有很多文件,因为frp根据平台来区分不同版本,但是把客户端和服务端都压缩到一个文件包中了。
其中frps就是frp server端的部分;frpc 是frp client端的部分。这里我们只需要关心Server端。
可以直接删掉frpc、frpc.toml两个文件,节省硬盘空间。
find . -name 'frpc*' -exec rm {} \;
移动至 /usr/local(非必须 但是个好习惯)
在/usr/local/下创建一个frp文件夹。 /usr/local目录类似于windows系统的C:/Progrem Files/。用户自己编译的软件默认会安装到这个目录下。
mkdir /usr/local/frp
将frp_0.57.0_linux_amd64移动到 /usr/local/frp 里面
mv ./frp_0.57.0_linux_amd64/* /usr/local/frp/
配置软件
服务端配置文件:frps.toml
[common]
bindPort = 7000
vhostHTTPPort = 7003
【bindPort 】:frp server 启动时候绑定的端口
【vhostHTTPPort 】:可选,当我们访问公网服务器 7003 端口时, 转发到 frpc(即frp客户端) 的 type = "http" 的配置对应的服务。
启动
./frps -c frps.toml

测试访问:ip+vhostHTTPPort值

frp客户端
我是在windows上使用(将我window本机上的服务上传到frp服务端上,以便于其他人能访问)所以我下载对应的就行,
当然有的人服务端可能在安卓上、ios上或者linux上都有可能
下载软件包
下载window客户端 frp_0.57.0_windows_amd64.zip

配置软件
客户端配置文件:frpc.toml
serverAddr = "xx.xx.xx.xx" #frp服务端所在的ip
serverPort = 7000 #frp服务端所在的端口
[[proxies]]
name = "web页面" #自定义代理名称
type = "http" #自定义代理类型
localIP = "127.0.0.1" #被代理的(本机)目标地址
localPort = 8888 #被代理的(本机)目标端口
customDomains = ["xx.xx.xx.xx"] # 代理到域名或服务器的公网ip (一般和serverAddr 字段一样)
启动
进入软件包中,使用命令行工具打开(比如cmd或powershell)
.\frpc.exe -c .\frpc.toml

成果
启动一个端口为8888的http服务

然后使用公网访问试试

仪表盘
如果想看当前frp服务的使用情况,请在服务端配置文件开启此功能 frps.toml
bindPort = 7000
# 后台管理服务配置
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "admin"


其它
过时配置
早期的frp配置文件都是init,不过现在已经被抛弃了
WARNING: ini format is deprecated and the support will be removed in the future, please use yaml/json/toml format instead!
多个http服务
如果要起多个web服务,比如我有两个本地web服务,一个是端口8888,一个是端口9999
方式1
因为frp服务端的虚拟http服务vhostHTTPPort只能有一个。
所以需要配置nginx对frp服务端的http服务做代理,并配合frp二级域名来配置多个,比如
serverAddr = "xxx.xxx.xxx.xxx"
serverPort = 7000
[[proxies]]
name = "web页面1"
type = "http"
localIP = "127.0.0.1"
localPort = 8888
customDomains = ["a.dingshaohua.com"]
[[proxies]]
name = "web页面2"
type = "http"
localIP = "127.0.0.1"
localPort = 9999
customDomains = ["b.dingshaohua.com"]
最终 访问a.dingshaohua.com、b.dingshaohua.com即可
方式2
web服务本身就是http协议,http又是tcp的“子集”关系。

所以多起几个tcp代理即可(其实代理单个的web 也可以这么用,官方就是这么做的)
如果用这个的话 服务端的vhostHTTPPort 配置字段就可以不用了
serverAddr = "xx.xx.xx.xx"
serverPort = 7000
[[proxies]]
name = "web页面1"
type = "tcp"
localIP = "127.0.0.1"
localPort = 8888
remotePort = 7005 #代理到服务端所在服务器的哪个端口上(随意,别人访问的时候记得就行)
[[proxies]]
name = "web页面2"
type = "tcp"
localIP = "127.0.0.1"
localPort = 9999
remotePort = 7006
最终 访问xx.xx.xx.xx:7005、xx.xx.xx.xx:7006即可
以服务管理
传统的启动方式是直接敲命令:./frps -c ./frps.toml &
这么写,比较麻烦,而且如果要停止进程也比较麻烦,建议采用构建成服务的方式。
安装systemd:yum install systemd,通常情况下系统都带得有。
创建frps.service服务 vim /etc/systemd/system/frps.service,写入内容
[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 启动命令,改为实际存放frps的路径
ExecStart = /path/to/frps -c /path/to/frps.toml
[Install]
WantedBy = multi-user.target
之后,就以服务的方式管理frps
# 启动frp
sudo systemctl start frps
# 停止frp
sudo systemctl stop frps
# 重启frp
sudo systemctl restart frps
# 查看frp状态
sudo systemctl status frps
# 设置为开机自启
sudo systemctl enable frps
nginx代理
# frp.dingshaohua.com
server {
listen 80;
server_name frp.dingshaohua.com;
rewrite ^(.*) https://$server_name$1 permanent;
}
server {
listen 443 ssl;
server_name frp.dingshaohua.com;
ssl_certificate /etc/letsencrypt/live/dingshaohua.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/dingshaohua.com/privkey.pem;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Range $http_range;
proxy_set_header If-Range $http_if_range;
proxy_redirect off;
proxy_pass http://0.0.0.0:7500;
client_max_body_size 20000m;
}
}
参考
https://zhuanlan.zhihu.com/p/632560790
https://blog.csdn.net/weixin_43906500/article/details/116403724
https://zhuanlan.zhihu.com/p/612377399?utm_id=0
https://www.jianshu.com/p/65f19e1c20d9
https://blog.csdn.net/xuzhongyi103/article/details/134363523
frp内网穿透的搭建与使用的更多相关文章
- Frp内网穿透搭建,家庭主机对外提供接口,支持ssh访问
Frp内网穿透搭建,家庭主机对外提供接口,支持ssh访问 1.使用场景: 需求1.家中服务器 ubuntu 主机,跑接口服务,需要对外暴漏, 需求2.同时需要在外网ssh远程 关键词: frp内网 ...
- frp内网 穿透映射使内网svn可外网访问
起因 公司svn目前部署在内网服务器上,现在想在家中也可以使用,因此需要外网访问内网的工具 经过 使用过几个产品: utools,一个小巧的windows下的工具,内网映射只是它的一个小功能,支持tc ...
- 树莓派FRP内网穿透及自启动
内网穿透的步骤和文件存档 实验室在远方部署了电脑主机来采集数据和图片,每次去调试会很麻烦,因而使用FRP内网穿透使得我们可以在实验室访问主机. 主要功能 实现远程可访问和开机自启FRP程序服务 安装和 ...
- frp内网穿透(已验证)
# 云服务器frp内网穿透教程 软件源码在https://github.com/fatedier/frp/releases上,根据系统类型,按需下载 教程术语描述 > A 是有固定IP的云服务器 ...
- frp 内网穿透访问内网Web服务
ps:最近想要通过域名(公网)访问或者测试在本地搭建的 web 服务(不想在公网IP服务器上再部署个服务,也不想通过teamview等工具远程卡到爆!), 由于本地机器没有公网 IP,无法将域名解析到 ...
- frp内网穿透学习
前言 因为自己在内网,但是目标站在外网,这时候可以通过内网穿透工具,将接收到的请求转发到内网,实现在内网的msf可以控制外网的靶机. 也看了一些Ngrok,花生壳的,发现Ngrok.cc这个看文章说有 ...
- 【网络】内网穿透方案&FRP内网穿透实战(基础版)
目录 前言 方案 方案1:公网 方案2:第三方内网穿透软件 花生壳 cpolar 方案3:云服务器做反向代理 FRP简介 FRP资源 FRP原理 FRP配置教程之SSH 前期准备 服务器配置 下载FR ...
- 网络安全之frp内网穿透
前言 内网穿透,也即 NAT 穿透,进行 NAT 穿透是为了使具有某一个特定源 IP 地址和源端口号的数据包不被 NAT 设备屏蔽而正确路由到内网主机 环境需求 一台公网服务器(linux操作系统) ...
- [svc]frp内网穿透
什么是穿透 可以任意暴漏内网任何服务,加入你在你的办公网络有台pc,可以上网就可以了, 你可以在你电脑上安装各类服务器, 暴漏如80 22等端口, 注意 这可以暴漏到公网哦, 在出口不做任何nat情况 ...
- frp内网穿透
原理 frp(fast reverse proxy)分为Server端和Client端,Server端安装在带有公网IP的服务器上,Client安装在内网环境但能上网的普通PC中. 流程: Serve ...
随机推荐
- BotSharp + MCP 三步实现智能体开发
1. 简介 1.1 什么是MCP Model Context Protocol(MCP)模型上下文协议是一种标准化协议,它让大模型能够更容易地和外部的数据.工具连接起来.你可以把MCP想象成一个通用的 ...
- Redis底层数据结构-quicklist、listpack
quicklist 在 Redis 3.0 之前,List 对象的底层数据结构是双向链表或者压缩列表.然后在 Redis 3.2 的时候,List 对象的底层改由 quicklist 数据结构实现. ...
- 康谋分享 | 从CAN到CAN FD:ADTF在汽车网络中的应用
随着汽车电子技术的发展,车辆上配备了越来越多的电子装置,这些设备多采用点对点的方式通信,这也导致了车内存在庞大的线束.造成汽车制造和安装的困难并进一步降低汽车的配置空间,汽车总线逐步开始向网络化方向发 ...
- wpf,前端动画demo,鱼眼效果
如题,鱼眼.特此备注下 1 <Window x:Class="WpfApp2.Window3" 2 xmlns="http://schemas.microsoft. ...
- 74.8K star!这个开源图标库让界面设计效率提升10倍!
嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 Font Awesome 是全球最受欢迎的图标库和工具包,提供超过2000个免费图标和700 ...
- 【记录】JS和C++的Base64编码解码(支持中文)
JS 解决方法来源于知乎新码笔记的文章 function b64Encode(str) { return btoa(unescape(encodeURIComponent(str))); } func ...
- 集合流之“anyMatch”的应用【返回boolean类型】
判断集合中是否存在"字符串",返回boolean类型 boolean isExit = allSku.stream().map(Product::getFeatureList) . ...
- 剖析 Vue:最适合小白入手的前端框架
@charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...
- PB EB ZB YB
1B字节=8bit位 1KB=2^10B 1MB=2^20B 1GB=2^30B 1TB=2^40B 1PB=2^50B(五个屁) 1EB=2^60B(六姨) 1ZB=2^70B(七个乌贼) 1YB= ...
- 自用----降重ai率方法
目录 自用----降重ai率方法 1.查重 2.降重 2.1 ai工具降重 2.2 ai降ai(参考他人blogs,没试过) 2.3 人工降重 处理步骤 具体内容 自用----降重ai率方法 1.查重 ...