当前位置: 首页 > 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.lryc.cn/news/612642.html

相关文章:

  • [激光原理与应用-171]:测量仪器 - 能量型 - 激光能量计(单脉冲能量测量)
  • YOLOv8面试知识
  • Spring事务失效场景?
  • 【基础知识】springboot+vue 基础框架搭建(更新中)
  • 下载 | Windows Server 2016最新原版ISO映像!(集成7月更新、标准版、数据中心版、14393.8246)
  • MacOS Docker 安装指南
  • 进程、网络通信方法
  • 在Linux下访问MS SQL Server数据库
  • 机器学习工程化 3.0:从“实验科学”到“持续交付”的 7 个关卡
  • 【2025最新】在 macOS 上构建 Flutter iOS 应用
  • 函数、方法和计算属性
  • 「iOS」————持久化
  • HashMap寻址算法
  • 如何显示一个 Elasticsearch 索引的字段
  • Opencv-管理图片
  • 冷库温湿度物联网监控系统解决方案:冷链智能化
  • [无需 Mac] 使用 GitHub Actions 构建 iOS 应用
  • 嵌入式硬件学习(十一)—— platform驱动框架
  • 嵌入式硬件中MOSFET基本原理与实现
  • 区块链技术原理(2) -数据结构
  • 嵌入式硬件中MOSFET基本控制详解
  • 「iOS」————自动释放池底层原理
  • 基于Python+Vue+Mysql实现(物联网)智能大棚
  • C 语言主控开发与显控开发能力体系及技术栈详解,STM32、QT、嵌入式、边缘系统显示
  • Spring、Spring MVC、MyBatis 和 Spring Boot的关系
  • STM32U5 周期性异常复位问题分析
  • 物联网架构全解析:华为“1+2+1”与格行随身WiFi,技术如何定义未来生活?
  • JVM学习日记(十七)Day17——性能监控与调优(四)
  • .NET9 AOT完全自举了吗?
  • .NET 10 新增功能系列文章5——C# 14 中的新增功能