内网穿透原理和部署教程

前言:本文介绍了内网穿透技术原理及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.pswp.cn/diannao/94742.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/94742.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ping32:为企业数据安全筑起铜墙铁壁​

Ping32:为企业数据安全筑起铜墙铁壁在数字经济飞速发展的今天,企业数据已成为核心竞争力的重要组成部分。然而,数据泄露事件频发,给企业带来的损失难以估量。从商业机密外泄到客户信息曝光,每一次数据安全事故都可能让…

2025年国内iPaaS平台精选

在过去几年里,许多企业在业务系统中面临了诸多有关集成的难题:系统建好了,数据流不动;接口打通了,流程仍卡顿;工具堆叠越来越多,但协同效率反而走低。 这并不是架构设计的问题,也不是…

AD绘制PCB之-板外形设计

1、通过机械层1 【Mechanical 1】绘制出板子轮廓2、选中上面绘制得轮廓先选中一条边,然后按tab键,可以自动选择这条边闭合得线条3、按照选择对象定义设计--->板子形状------>按照选择对象定义执行后得效果:4、根据需要设置板子四角为半…

《汇编语言:基于X86处理器》第12章 浮点数处理与指令编码(2)

Intel X86架构数据的运算主要由通用寄存器处理,但浮点数例外,浮点数的运算由专门的FPU寄存器处理。二进制浮点数由三部分组成:符号,有效数字和阶码。这些格式都出自由IEEE组织制定的标准754-1985:以下是三种浮点数的格…

vue3通过按钮实现横向滚动、鼠标滚动横坐标滚动

效果图&#xff1a;可点击左右文字进行滚动、或通过滚动鼠标 内容左右滚动<template><div class"Home"><div style"display: flex;height: 100%;align-items: center;"><div click"scrollLeft()" style"width: 80px;t…

【Agent】AutoGen:LLM驱动的多Agent对话框架

文章目录一、AutoGen简介1.1 AutoGen的特点1.2 AutoGen的实现1.2.1 可对话Agent1.2.2 对话编程二、基于AutoGen构建多智能体系统2.1 构建步骤2.1 协作模式2.2 通信模型2.3 人机协同2.4 具体示例参考资料一、AutoGen简介 AutoGen是微软推出的一个Multi-Agent框架&#xff0c;允…

乙巳年闰六月十六凌晨感怀

乙巳年闰六月十六凌晨感怀 一段历程一段情&#xff0c;儿郎峥嵘儿郎行。 岁月流金建功业&#xff0c;春秋风尚能潮赢。 路途苦乐人生度&#xff0c;评说成败当下名。 百年孤寂留水墨&#xff0c;千载独步守安宁。

Redis 分布式Session

一、引入依赖引入spring-session-data-redis依赖&#xff0c;不需要指定version&#xff0c;默认和springboot的version保持一致<!-- Spring Session Redis --> <dependency><groupId>org.springframework.session</groupId><artifactId>spring…

JAVA实现附件分片上传

项目需求由于文件服务器的限制&#xff0c;单次调用文件上传接口上传的附件的大小不能超过500MB&#xff0c;对于超过500MB的附件需要分片上传程序示例private Boolean uploadFile(File uploadFile, String uploadUrl, List<Object> fileList) {final long CHUNK_SIZE 5…

PyTorch环境安装

pytorch安装 建议&#xff08;非常强烈的那种&#xff09;用Anaconda创建一个虚拟环境&#xff0c;用于运行安装你的PyTorch conda create -n universal python3.9 1. 基础认知 cuDNN&#xff08;CUDA Deep Neural Network library&#xff09;是 NVIDIA 开发的用于深度学习…

机场风云:AI 云厂商的暗战,广告大战一触即发

文 | 大力财经机场广告牌背后&#xff0c;一场决定云计算未来格局的隐形战争已悄然打响。当你匆匆走过首都机场T3航站楼的通道&#xff0c;巨幅屏幕上“阿里云&#xff1a;开源的力量”与不远处“百度智能云&#xff1a;AI落地领导者”的广告交相辉映。它们精准锁定着日均10万的…

MLE-STAR:谷歌AI推出的机器学习工程新范式,一种搜索驱动、精准优化的智能代理

最近看到 Google AI 发布了一个叫 MLE-STAR&#xff08;Machine Learning Engineering via Search and Targeted Refinement&#xff09;的新系统&#xff0c;说实话&#xff0c;第一眼看完论文和相关介绍后&#xff0c;我是有点震撼的。这不只是一次简单的“LLM 自动化”拼凑…

3-防火墙

防火墙 一 防火墙概述防火墙概述防火墙是一个位于内部网络与外部网络之间的安全系统&#xff08;网络中不同区域之间&#xff09;&#xff0c;是按照一定的安全策略建立起来的硬件或软件系统&#xff0c;用于流量控制的系统&#xff08;隔离&#xff09;&#xff0c;保护内部网…

python opencv 调用 海康威视工业相机(又全又细又简洁)

1.准备工作 准备一个海康相机 下载MVS 和SDK 海康机器人-机器视觉-下载中心 2.python MVS示例 &#xff08;说明&#xff1a;MVS里有很多python示例&#xff0c;可以直接运行&#xff0c;但没有用opencv&#xff09; 下载完MVS后&#xff0c;我们打开路径安装路径 我的&#…

计算机基础·linux系统

Finalshell 用于远程操控vmware中的linux系统 获取虚拟机的IP地址 ifconfig命令&#xff0c;重启系统后IP地址可能会变化&#xff01;问题&#xff1a;vmware子系统没有网络连接 winRservices.msc启动这些服务问题&#xff1a;配置正确但是finalshell连接失败 更新子系统中的ss…

8.结构健康监测选自动化:实时数据 + 智能分析,远超人工

第一次接触结构健康自动化监测系统&#xff0c;感觉成本很高&#xff0c;比人工好在哪里&#xff1f; 人工检测是依靠目测检查或借助于便携式仪器测量得到的信息&#xff0c;但是随着整个行业的发展&#xff0c;传统的人工检测方法已经不能满足检测需求&#xff0c;从人工检测到…

【慕伏白】Android Studio 配置国内镜像源

文章目录配置HTTP代理修改 gradle 镜像地址修改 maven 镜像源重新同步配置HTTP代理 进入File --> Settings --> Appearance & Behavior --> System Settings --> HTTP Proxy 勾选 Auto-detect proxy settings --> Automatic proxy configuration URL &…

Spring Cloud系列—LoadBalance负载均衡

上篇文章&#xff1a; Spring Cloud系列—Eureka服务注册/发现https://blog.csdn.net/sniper_fandc/article/details/149937589?fromshareblogdetail&sharetypeblogdetail&sharerId149937589&sharereferPC&sharesourcesniper_fandc&sharefromfrom_link …

如何使用 pnpm创建Vue 3 项目

✅ 一、什么是 pnpm&#xff1f; pnpm 是一种更快、更高效的 Node 包管理工具&#xff0c;替代 npm 或 yarn&#xff0c;具有&#xff1a; 更快的安装速度更节省磁盘空间&#xff08;包复用&#xff09;严格的依赖管理二、使用 pnpm 创建 Vue 项目的完整流程 ✅ 第一步&#xf…

Vite vs. vue-cli 创建 Vue 3 项目的区别与使用场景

Vite vs. vue-cli 创建 Vue 3 项目的区别与使用场景 Vite 和 vue-cli 都是 Vue 官方推荐的脚手架工具&#xff0c;但它们的架构、构建方式和适用场景有所不同。以下是它们的对比&#xff1a;1. 核心区别对比项Vite (推荐&#x1f525;)vue-cli (传统)构建工具基于 ESM Rollup基…