前言

什么是内网穿透?

内网穿透,又叫 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. 计算机网络之流量控制(停止-等待协议、滑动窗口、后退N帧协议GBN、选择重传协议SR)、滑动窗口、可靠传输机制

    文章转自:https://blog.csdn.net/weixin_43914604/article/details/104908762 学习课程:<2019王道考研计算机网络> 学习目的 ...

  2. golang常用库:cli命令行/应用程序生成工具-cobra使用

    golang常用库:cli命令行/应用程序生成工具-cobra使用 一.Cobra 介绍 我前面有一篇文章介绍了配置文件解析库 Viper 的使用,这篇介绍 Cobra 的使用,你猜的没错,这 2 个 ...

  3. docker创建本地主机实例Virtualbox 驱动出错

    宿主机系统:Centos7 64位 创建主机实例Virtualbox 命令:docker-machine create -d virtualbox test 连接centos工具:Finalshell ...

  4. JavaScript复习 1

    概括及使用方法: JavaScript编写规范 一般放在<head>-</head>中间 逐行被执行,越短越好 大小写敏感 语句是基本单位 通常以分号表示语句结束 多行语句可以 ...

  5. Go语言核心36讲(Go语言进阶技术十四)--学习笔记

    20 | 错误处理 (下) 在上一篇文章中,我们主要讨论的是从使用者的角度看"怎样处理好错误值".那么,接下来我们需要关注的,就是站在建造者的角度,去关心"怎样才能给予使 ...

  6. 修改记事本PE结构弹计算器Shellcode

    目录 修改记事本PE结构弹计算器Shellcode 0x00 前言 0x01 添加新节 修改节数量 节表位置 添加新节表信息 0x02 添加弹计算器Shellcode 修改代码 0x03 修改入口点 ...

  7. 攻防世界 Misc 新手练习区 ext3 bugku Writeup

    攻防世界 Misc 新手练习区 ext3 bugku Writeup 题目介绍 题目考点 WinHex工具的使用 linux磁盘挂载mount命令 Writeup 下载附件拖进winhex分析一下,查 ...

  8. 暑假算法练习Day4

    已经坚持第四天啦,Fighting!!! 1008 数组元素循环右移问题 (20 分) 一个数组\(A\)中存有\(N\)\((>0)\)个整数,在不允许使用另外数组的前提下,将每个整数循环向右 ...

  9. Java 中的关键字

    Java 中有多少个关键字,有大小写之分吗? Java 中有 48 个关键字在使用 + 两个保留关键字未使用,共 50 个关键字. Java 关键字全部都由是小写组成. Java 中保留关键字分别是哪 ...

  10. 记一次 .NET 某电商无货源后端服务 死锁分析

    一:背景 1. 讲故事 这个月初,星球里的一位朋友找到我,说他的程序出现了死锁,怀疑是自己的某些写法导致mongodb出现了如此尴尬的情况,截图如下: 说实话,看过这么多dump,还是第一次遇到真实的 ...