当前位置: 首页 > news >正文

内网穿透原理和部署教程

前言:本文介绍了内网穿透技术原理及frp工具的部署方法。由于NAT映射表是临时且单向的,外网无法直接访问内网服务。通过部署公网服务器作为中转,frp实现了内网服务的穿透访问。具体步骤包括:下载frp软件包,详细说明了配置文件修改要点和端口开放注意事项,并提供了SSH和Nginx两个实际应用案例,希望能帮助您快速掌握内网穿透的实现方法。

文章目录

  • 内网穿透原理
  • frp软件下载
  • 内网穿透部署
    • 远程连接xshell
    • 远程访问nginx

内网穿透原理

  我们都知道公网无法直接访问内网主机,因为缺乏预先建立的 NAT 映射关系,导致外网请求无法路由到指定内网设备。

1.NAT的工作原理

  • 内网 → 外网(可通)
    当内网主机访问公网服务器时:路由器会记录一条 NAT 映射表,回来时路由器再通过映射表将响应转发给内网主机。
  • 外网 → 内网(默认不通)
    如果公网设备直接尝试访问内网,路由器没有对应的 NAT 映射表(因为内网未主动发起过连接)。路由器不知道应将数据包转发给哪个内网主机,直接丢弃请求(防火墙策略)。

2.关键限制

  • NAT 映射是临时且单向的。
  • 映射表通常在连接关闭后过期(如 TCP 超时后删除)。
  • 外网无法主动创建映射表条目。

  那么如果一个服务部署在内网中,我们想要访问呢?比如公司做的私有服务,只有内部员工才能访问,部署在公司内网中。而作为一个公司的员工在家里要完成工作任务需要访问公司内网服务该怎么办?

例如主机A要访问主机C部署的服务:
在这里插入图片描述
  为了解决这个问题我们需要用到内网穿透技术,原理很简单在中间加一个公网服务器。
在这里插入图片描述
  让主机C访问公网服务器,这样就有了NAT映射表,只需要在公网服务器上部署一个服务,将公网IP:端口映射到内网主机IP:端口 。主机A访问 公网IP:外部端口 时,路由器自动转发到内网主机。
  所以接下来我们要解决的是在公网上部署一个什么样的服务完成该工作呢?这里给大家介绍的是frp。

frp软件下载

frp下载链接
本文讲解的是在linux系统下部署,下载以下版本:
在这里插入图片描述

  接下来准备xshell连接远程服务器和虚拟机两个终端,并把本地下载的frp_0.58.1_linux_amd64.tar.gz压缩包上传到两个终端,可以直接拖拽、使用指令rz或指令scp
scp指令的使用:

scp 压缩包地址 虚拟机登录用户名@虚拟机IP: 要拷贝到的目录

对压缩包解压:

tar zxf frp_0.58.1_linux_amd64.tar.gz

打开文件:
在这里插入图片描述

  • frps*是服务器,frps.toml是服务器的配置文件。
  • frpc*是客户端,frpc.toml是客户端的配置文件。
  • LICENSE是一个权限许可相关的文件,这里不做关心。

内网穿透部署

  以xshell远程连接作为客户去访问内网虚拟机为例。那么我们需要在xshell中启动frps服务器,在虚拟机中启动frpc客户端。

服务器启动:
  在此之前需要了解并修改一下配置文件,xshell用vim打开frps.toml配置文件,如下:

vim frps.toml

内容如下:

bindPort = 7000

这个表示frps服务的端口号,假设这里我们更改为7777

  • 注意1:客户端配置文件里要填充相同的端口才能访问到该服务。
  • 注意2:要保证云服务器的7777端口对外开放。

启动服务:

./frps -c frps.toml
  • 注意这里加了-c frps.toml选项,表示按配置文件的配置启动

客户端启动:
  同样的在此之前先了解并修改一下配置文件,使用虚拟机打开frpc.toml配置文件,如下:

vim frpc.toml

内容如下:

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

  serverAddr服务器的IP这个修改成我们的公网服务器,比如我的120.46.0.237servereAddr服务器端口,这里修改成上文我们填写的服务器端口7777

  name字段随意填,type是传输层协议类型,localIP是本地服务器IP,如果是在自己主机上部署的服务就不用修改,localport是本地访问的端口号,这里就使用默认的服务端口22,即ssh服务,remotePort是需要映射到公网的端口号,这里我们改为8022

启动客户端:

./frpc -c frpc.toml
  • 注意公网服务器需要开放serverPort和remotePort对应的端口。

远程连接xshell

  接下来我们打开一个xshell,访问公网120.46.0.237:8022,就能访问到内网虚拟机的ssh服务了。
在这里插入图片描述

远程访问nginx

  接下来再测试一个服务,在虚拟机上安装一个nginx服务并启动。
下载安装nginx:

sudo apt install -y nginx

启动nginx:

sudo nginx

查看它所对应的端口:

netstat -nltp

结果如下:
在这里插入图片描述
此时我们只需要在虚拟机客户端的配置文件再添加一条映射关系:
如下:

serverAddr = "120.46.0.237"
serverPort = 7777[[proxies]]
name = "ssh-service"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 8022[[proxies]]
name = "http-nginx"
type = "tcp"
localIP = "127.0.0.1"
localPort = 80
remotePort = 8080          

测试:物理机打开浏览器访问120.46.0.237:8080,效果如下:
在这里插入图片描述

非常感谢您能耐心读完这篇文章。倘若您从中有所收获,还望多多支持呀!
在这里插入图片描述

http://www.dtcms.com/a/318797.html

相关文章:

  • 京东关键字搜索商品列表接口开发实战:从参数优化到分布式调用
  • localforage的数据仓库、实例、storeName和name的概念和区别
  • VBA之Word应用第四章第一节:段落集合Paragraphs对象(一)
  • mysql全屏终端全量、部分备份、恢复脚本
  • 累加和校验原理与FPGA实现
  • 躺平发育小游戏微信抖音流量主小程序开源
  • 自建纯竞拍系统小程序需准备的事项
  • uniapp/uniappx实现图片或视频文件选择时同步告知权限申请目的解决华为等应用市场上架审核问题
  • TSMaster-C小程序使用
  • uni-app X能成为下一个Flutter吗?
  • Dify 从入门到精通(第 20/100 篇):Dify 的自动化测试与 CI/CD
  • MyBatis-Plus Service 接口:如何在 MyBatis-Plus 中实现业务逻辑层??
  • 阿里云部署若依后,浏览器能正常访问,但是apifox和小程序访问后报错链接被重置
  • [失败记录] 使用HBuilderX创建的uniapp vue3项目添加tailwindcss3的完整过程
  • [无需 Mac] 使用 GitHub Actions 构建 iOS 应用
  • vue3 el-select 加载内容后 触发事件
  • 「耘•学社」耘少年第五期学能突破导师制领袖特训营,圆满落幕
  • C++与SparkAI实战:高效应用案例
  • Android-Kotlin基础(Jetpack②-Data Binding)
  • 国产化Excel处理组件Spire.XLS教程:使用 C# 将 DataTable 导出为 Excel 文件
  • 嵌入式C语言编程:策略模式、状态模式和状态机的应用
  • 东莞立晟精密硅胶科技有限公司将携重磅产品亮相 AUTO TECH China 2025 广州国际汽车技术展
  • 计算机网络1-4:计算机网络的定义和分类
  • 汽车娱乐信息系统域控制器的网络安全开发方案
  • FPGA实战:用PL端串口发送Hello world
  • 【C/C++】C++引用和指针的对比
  • 29-数据仓库与Apache Hive-创建库、创建表
  • 树莓派安装OpenCV环境
  • 【CDA案例】数据分析案例拆解:解锁数据分析全流程!
  • 微服务、服务网格、Nacos架构与原理