

一:🔥 原理
🔬 原理就是让你需要访问的内网可以被其他内网访问到, 其实就是让内网经过一个公网服务器的转发,使得能够被访问。
这里我们需要用到 frp:
FRP(Fast Reverse Proxy)
是一款开源的反向代理工具,主要用于实现内网穿透。它通过在公网服务器和内网设备之间建立一个代理通道,使得处于内网中的设备能够被外部网络访问,同时也允许内网设备主动与外部网络通信。
实现步骤
部署公网服务器端
- 在公网服务器上下载并安装
FRP
文件。 - 配置
FRP
的服务器端配置文件(frps.toml
),设置监听端口、认证信息等参数。 - 启动
FRP
服务器端程序,使其开始监听来自内网设备的连接请求。
- 在公网服务器上下载并安装
配置内网客户端
- 在需要被访问的内网设备上下载并安装
FRP
文件。 - 配置
FRP
的客户端配置文件(frpc.toml
),指定内网服务的 IP 地址和端口,并将其映射到公网服务器的对应端口。 - 启动
FRP
客户端程序,使其连接到公网服务器,并建立隧道。
- 在需要被访问的内网设备上下载并安装
数据转发与通信
- 当外部用户访问公网服务器的指定端口时,
FRP
服务器会将请求转发到内网设备的对应 IP 和端口。 - 同样,内网设备发送的数据也会通过
FRP
服务器转发到外部网络,从而实现双向通信。
- 当外部用户访问公网服务器的指定端口时,
二:🔥 准备工作
frp
下载: https://github.com/fatedier/frp/releases/tag/v0.58.1
💻 安装自己机器对应的版本即可
下载好之后已经是编译好的可执行程序了
我的话使用的是 一台ubuntu虚拟机
和 ubuntu云服务器
+ 一台windows虚拟机
做的实验
此时配置服务端的 frps.toml
vim frps.toml
# 设置如下
bindPort = 8888
我们需要使用 -c 指定配置文件
./frps -c ./frps.toml
⚙️ 配置 ubuntu客户端的 frpc.toml
🔬 这里我们配置了 ssh服务
和 http服务
,也是我们本篇博客要做的穿透实验
serverAddr = "你的服务器地址"
serverPort = 8888
[[proxies]]
name = "ssh-service"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 8081
[[proxies]]
name = "http-service"
type = "tcp"
localIP = "127.0.0.1"
localPort = 80
remotePort = 8082
除了云服务器会做一次转发到例如绑定的 8081端口 实际上在你的本机上还会有一次转发,转发给22端口(ssh),由他来提供服务
三:🔥 测试内网穿透
我们做两个测试
- ssh 远程登录
启动服务器和客户端
此时在我们的windows上面 xshell 新建一个会话 端口对应的就是服务器绑定的8081端口
此时我们就从windows上顺利的远程访问到我们的虚拟机ubuntu上了
内网穿透成功!!!
- nginx 远程访问
sudo yum install nginx # centos 安装
sudo apt install nginx # ubuntu 安装
#启动
$ nginx
#暂停
# nginx -s stop
nginx
首页默认 apt 安装之后, 首页是: /var/www/html/XXX
此时我们将编写好的html文件写入
此时使用浏览器访问我们云服务器对应的 8082端口 就能够直接访问到我ubuntu虚拟机上部署的 nginx
服务了!!!
内网穿透再次成功!!!
服务器和客户端都可以这样在后台启动
nohup ./frpc -c ./frpc.toml &> /dev/null &
nohup ./frps -c ./frps.toml &> /dev/null &
&> /dev/null
: 这是重定向操作, 用于将命令的标准输出(stdout) 和标准错误(stderr) 都重定向到/dev/null
。/dev/null
是一个特殊的设备文件, 向它写入的内容都会被丢弃, 读取它则会立即返回文件结束。 因此, 这个操作的作用是忽略命令的所有输出信息。
四:🔥 共勉
😋 以上就是我对 【Linux】手动部署并测试内网穿透
的理解, 觉得这篇博客对你有帮助的,可以点赞收藏关注支持一波~ 😉