前言

什么是内网穿透?

内网穿透,又叫 NET 穿透,是计算机用语。用通俗的说法就是你家里的个人电脑,可以直接被外网的人访问。例如你在公司,不通过远程工具,直接也可以访问到家里的电脑(本文章特指 web 应用程序)。

正常来说我们的个人电脑时无法被别人访问到的(有固定 ip 除外!),而且现在固定 ip 资源稀缺,运营商也不会随便给你分配了,个人申请也挺难。

为什么需要内网穿透?

就我个人而已,需要用到内网穿透的原因:

一是方便访问公司的内网环境,不喜欢使用远程工具,挺麻烦的。
二是方便把个人电脑上的应用开放到外网进行访问。

资源准备

  • 能上网的个人电脑一台;
  • 有公网 ip 的,个人云服务器一台(阿里云 or 腾讯云);
  • 下载 frp 程序

考虑到 github 有些时候访问不到,我这里分别下载了 Linux 系统 和 windows 系统的 frp 程序供大家下载使用:

版本:frp_0.38.0_linux_amd64.tar.gz frp_0.38.0_windows_amd64.zip

https://fenxiangdayuan.lanzouo.com/b00v3dsri 密码: i0fp

环境搭建

frp 工作原理

frp 的应用程序是分服务器端和客户端的,服务器端的运行在有公网 ip 的服务器上,客户端就运行在需要穿透的内网机器上就行。

两端的程序运行起来之后,就会建立好通信的隧道,当我们访问公网 ip+端口 时,就会映射到我们内网的机器上了。

服务端搭建

  • 把下载好的 frp 程序,上传到我们云服务器上解压出来即可:
tar -xvzf frp_0.38.0_linux_amd64 #解压
mv frp_0.38.0_linux_amd64 frp #重命名一下
  • 进入到 frp 目录下

我们看到 frp 目录下的一些文件,很明显分为两部分:

frpc 开头的代表着客户端使用;

frps 开头的代表服务端使用;

.ini 结尾的文件时 frp 的配置文件,也是需要我们进行修改的文件。

  • 我们打开 frps.ini 配置文件查看

里面就只有一个配置项,表示监听服务器的 7000 端口,作为客户端通信的入口;

在这里就有一个注意的点,如果我们云服务器没开放这个端口的话,我们客户端是无法和服务器进行通信的,这个时候我们需要在控制台的安全组规则中开放 7000 端口;

  • 一切准备就绪,我们启动一下服务端的 frp 程序
frps -c frps.ini
frps -c frps.ini & #后台运行

看到服务端就正常启动起来了,正在监听 7000 端口;

这个时候我们继续往下配置客户端即可;

客户端搭建

有了服务端的配置说明,配置客户端也就是照猫画虎,我们只需要关注 frpc 开头的文件即可;

windows 和 Linux 的文件都一样,只是运行的平台不同而已。

下面演示在我个人电脑虚拟机中的 Linux 系统,作为客户端,frp 怎么配置;

  • 同样的步骤,解压下 Linux 版本的 frp ,然后打开 frpc.ini 文件:

server_addr : 需要填写上你个人云服务器的公网 ip 地址,这个一定要填写正确,不然无法和服务器进行通信;

server_port :就是服务器监听的端口,默认可以不用修改;

这两部分就是用来和我们服务器进行通信的配置。

[ssh] 这部分就是创建隧道,也就映射对应的应用,这里映射的是 ssh;

我们只需要关注 remote_port 这个配置就行,这里需要填写你服务器上开放的端口,未开发的话,通过云服务器控制台,安全组策略进行配置。

这里的意思就是把服务器的 6000 端口映射到内网机器的 22 端口上。

当我们访问公网 ip + 6000 端口时,就会访问到我们内网电脑 22 端口的应用,这里就是 ssh;

  • 配置好之后,接下来我们运行 frp 的客户端程序
frpc -c frpc.ini

图中我们可以看到,客户端启动成功,也和我们的服务器建立了通信;

TCP 穿透

TCP 穿透的意思,就是通信协议类型为 TCP, 常见的 ssh、mysql等等

通过上面服务端和客户端的配置,frp 就搭建成功了,对应 TCP 穿透的配置如下:

  • 服务端
[common]
bind_port = 7000
  • 客户端
[common]
server_addr = 云服务器ip
server_port = 7000 [ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

接下来我们就来测试下,是否能穿透成功,在我们服务器上进行连接我们内网的 Linux 系统:

ssh 127.0.0.1 -l root -p 6000

从图中我们可以看到,ssh 的穿透已经成功了,我们查看 ip 也是内网中的ip;

通过 TCP 的穿透,我们就可以利用它来穿我们公司内网的服务器了,从而在家里我们也能正常操作公司的内网环境。

HTTP 穿透

HTTP 穿透,也就是我们应用层面的通信协议,http协议;穿透它是为了方便我们访问内网的 web 应用,例如我在内网机器,起了一个 tomcat 部署了一个网站,我想让其他人外网的人来访问我,那就需要进行 HTTP 的穿透;

对应的 frp 配置这时和 TCP 是有一点区别的,如下:

  • 服务端
[common]
bind_port = 7000
vhost_http_port = 80 #将服务器的 80 端口用作 http 协议的通信
vhost_https_port = 443 #进服务器的 443 端口用作 https 协议通信
privilege_token = token123456789 #frp的认证,对应的客户也需要配置一样,才可以进行通信
  • 客户端
[common]
server_addr = 云服务器ip
server_port = 7000
privilege_token = token123456789 #frp的认证 [web_http]
type=http #通信类型为http
local_ip = 127.0.0.1
local_port = 8080
custom_domains = 二级域名/公网ip [ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

http 的穿透,我们看到服务端和客户端的配置文件都进行了改动,我们重点来看下客户单中的配置;

type = http : 这个是因为我们想要创建的隧道是进行 http 通信的,也就是用来访问本地 web 应用;

custom_domains = 二级域名/公网ip :这个配置一般使用一个二级域名来配置,用于通过域名来访问你的穿透服务器,如果没有域名,那么我们写上一个服务器的公网 ip 也是可以的,用 ip 的话,在外网访问的时候,就只能通过 ip 进行访问了,效果都一样;

下面我们看下效果:

  • 先在我内网电脑启动一个 tomcat,监听端口为:8080

可以看到,在我的内网物理机中访问,是正常启动了的;

  • 接着我们把 frp 客户端和服务端进行连接上

  • 成功连接之后,我们直接通过外网 ip 进行访问

可以看到,我直接用公网 ip 访问,同样能打开我们内网中的 tomcat 应用;

也证明了我们的 HTTP 穿透也是成功的。

注意事项

  • 客户端的配置项,不同的隧道需要区分开,写上不同的名字,如[ssh]、[mysql]、[web_http];

  • 客户端中 remote_port 的端口号不能一样,一样会冲突;

  • 服务器映射的端口需要放开范围,没有放开会造成无法通信;

  • 服务端和客户端都需要注意端口的冲突;

参考文章

frp 配置详解:

https://www.cnblogs.com/sanduzxcvbnm/p/8508988.html

内网穿透不同工具(Ngrok、钉钉、花生壳、frp):

https://www.it235.com/实用工具/内网穿透/pierce.html

内网穿透—使用 frp 实现内外网互通的更多相关文章

  1. 内网穿透工具--frp

    对于没有公网 IP 的内网用户来说,远程管理或在外网访问内网机器上的服务是一个问题. 今天给大家介绍一款好用内网穿透工具 FRP,FRP 全名:Fast Reverse Proxy.FRP 是一个使用 ...

  2. 【代理】内网穿透工具 frp&frps

    frp 是一个高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务,支持 tcp, http, https 等协议类型,并且 web 服务支持根据域名进行路由转发. ### frp 的作 ...

  3. 分享一个内网穿透工具frp

    首先简单介绍一下内网穿透: 内网穿透:通过公网,访问局域网里的IP地址与端口,这需要将局域网里的电脑端口映射到公网的端口上:这就需要用到反向代理,即在公网服务器上必须运行一个服务程序,然后在局域网中需 ...

  4. 【网络】内网穿透方案&FRP内网穿透实战(基础版)

    目录 前言 方案 方案1:公网 方案2:第三方内网穿透软件 花生壳 cpolar 方案3:云服务器做反向代理 FRP简介 FRP资源 FRP原理 FRP配置教程之SSH 前期准备 服务器配置 下载FR ...

  5. Bat:IP切换,内外网切换,路由设置内外网同时连接

    1.IP切换: @echo off ::双冒号表示注释,注释只能单独一行写,@表示不让执行的命令又显示在屏幕上 cls ::清屏 color c ::设置显示字体颜色 set IP=10.10.17. ...

  6. 内网穿透工具FRP的使用

    目录 FRP 使用FRP建立隧道 服务端 客户端

  7. frp 用于内网穿透的基本配置和使用

    frp 用于内网穿透的基本配置和使用 今天是端午节,先祝端午安康! frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP.UDP.HTTP.HTTPS 等多种协议.可以将内网服务以安全.便 ...

  8. 一款带Web面板的轻量级、高性能内网穿透工具:nps使用教程

    说明:内网穿透工具之前已经介绍了不少了,比如Frp.lanproxy.Holer等,现在再介绍个带Web面板的穿透工具nps,之前叫easyProxy,只是改名了而已,该工具是一款使用go语言编写的轻 ...

  9. 内网穿透工具--NPS

    一.简介 NPS是一款轻量级,高性能,强大功能的内网穿透代理服务器.目前支持TCP,UDP流量转发,可支持任何TCP,UDP上层协议(访问内网网站,本地支付接口调试,SSH访问,远程桌面,内网dns解 ...

随机推荐

  1. 2021.9.21考试总结[NOIP模拟58]

    T1 lesson5! 开始以为是个无向图,直接不懂,跳去T2了. 之后有看了一眼发现可暴力,于是有了\(80pts\). 发现这个图是有拓扑序的,于是可以用拓扑排序找最长路径.先找原图内在最长路径上 ...

  2. 关于QGIS的插件开发(C++)

    关于C++插件的开发材料较少,根据网上的指导,我采用了早期版本的插件模板生成的方法来创建QGIS的插件,其方法是从以前版本(2.18.25)里面拷贝插件模板的方法进行,具体的执行步骤为 1.拷贝文件 ...

  3. 矩阵n次幂的计算

    1.归纳法 两大数学归纳法 题目一 2.递推关系 题目一 题目二 3.方阵 题目一 4.矩阵对角化(重点) 题目一 题目二 题目三 题目四 5.矩阵性质(综合) 题目一 题目二 对于副对角线: 题目三

  4. 攻防世界 杂项15.János-the-Ripper

    下载附件并解压,我用的是WinHex打开,发现是PK开头,并且文件中包含一个flag.txt文件,应该就是我们所需要的flag. 把下载的附件改后缀为.zip,确实有我们需要的flag,打开后需要密码 ...

  5. 访问单个结点的删除 牛客网 程序员面试金典 C++ Python

    访问单个结点的删除 牛客网 程序员面试金典 C++ Python 题目描述 实现一个算法,删除单向链表中间的某个结点,假定你只能访问该结点. 给定待删除的节点,请执行删除操作,若该节点为尾节点,返回f ...

  6. 记一次 .NET 某风控管理系统 内存泄漏分析

    一:背景 1. 讲故事 上个月中旬,星球里的一位朋友在微信找我,说他的程序跑着跑着内存会不断的缓慢增长并无法释放,寻求如何解决 ? 得,看样子星球还得好好弄!!! 不管怎么说,先上 windbg 说话 ...

  7. 议题解析与复现--《Java内存攻击技术漫谈》(二)无文件落地Agent型内存马

    无文件落地Agent型内存马植入 可行性分析 使用jsp写入或者代码执行漏洞,如反序列化等,不需要上传agent Java 动态调试技术原理及实践 - 美团技术团队 (meituan.com) 首先, ...

  8. python3+Robotframework+ride+Selenium2Library+Autoitlibrary环境搭建

    1.安装python3.8 第一步是安装Python:https://www.python.org/,RF框架是基于python 的,所以一定要有python环境.将python-3.8.2-amd6 ...

  9. dart系列之:dart语言中的函数

    目录 简介 函数的参数 main函数 匿名函数 闭包 函数的返回值 总结 简介 函数是所有编程语言都有的内容,不管是面向对象还是面向过程,函数都是非常重要的一部分.dart中的函数和java中的函数有 ...

  10. 通过t-sql定期自动备份SQL Server 上的所有数据库

    项目背景 解决方案 方案一,是采用SQL的定时备份,建立作业来操作,这里有完整的使用手册: 方案二:基于t-sql方法进行查询备份 方案思路: 1.1 在 Master 数据库上创建一个备份所有数据库 ...