【Linux】手动部署并测试内网穿透

发布于:2025-03-07 ⋅ 阅读:(12) ⋅ 点赞:(0)

🌈 个人主页:Zfox_
🔥 系列专栏:Linux

一:🔥 原理

🔬 原理就是让你需要访问的内网可以被其他内网访问到, 其实就是让内网经过一个公网服务器的转发,使得能够被访问。

这里我们需要用到 frp:

FRP(Fast Reverse Proxy) 是一款开源的反向代理工具,主要用于实现内网穿透。它通过在公网服务器和内网设备之间建立一个代理通道,使得处于内网中的设备能够被外部网络访问,同时也允许内网设备主动与外部网络通信。

实现步骤

  1. 部署公网服务器端

    • 在公网服务器上下载并安装 FRP 文件。
    • 配置 FRP 的服务器端配置文件(frps.toml),设置监听端口、认证信息等参数。
    • 启动 FRP 服务器端程序,使其开始监听来自内网设备的连接请求。
  2. 配置内网客户端

    • 在需要被访问的内网设备上下载并安装 FRP 文件。
    • 配置 FRP 的客户端配置文件(frpc.toml),指定内网服务的 IP 地址和端口,并将其映射到公网服务器的对应端口。
    • 启动 FRP 客户端程序,使其连接到公网服务器,并建立隧道。
  3. 数据转发与通信

    • 当外部用户访问公网服务器的指定端口时,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】手动部署并测试内网穿透 的理解, 觉得这篇博客对你有帮助的,可以点赞收藏关注支持一波~ 😉
在这里插入图片描述