« 上一篇下一篇 »

很好用的内网穿透工具--FRP,通过TCP 访问内网

    假设没有公网ip的话,外网与内网的计算机节点衔接通讯时,需求可以顺畅的进入到内网,为了完结这个进程,有许多现成的技术,比如ngrok,花生壳,零遁,vps,虚拟局域网,等等。外表看起来完结的是同一个功用,但是细节上差别仍是很大的。

    首要ngrok呢,是一种软件,是做的一个反向署理,通过在公共的端点和本地工作的 Web 效力器之间建立一个安全的通道。相似ngrok的软件还有许多的,它们首要用于在本地建网站来让外网访问到,由于软件是国外的,所以现在能接触到的都是国内的署理,所以适合用来建小网站。

在这里,笔者不对各种东西的价格做对比,仅对功用的差异做说明对比,以协助有需求的人选择适合的东西。

    Vps就是租赁服务器,它可以运用户通过效力商的公网ip发布本地web效力,这一点使得它和ngrok的完结办法完全不同,在带宽、传输协议和端口转发数上有了更多选择,并且有些高防效力器还能抵御网络侵犯,这使它适合用来建较大的网站或许站群。

   前两者是将内网曝光到公网,公网上的游客都能访问到,虚拟局域网是完结特定局域网之间的访问,也就是点对点的通讯,它首要完结的是异地传输文件数据,长途工作,外网访问内网的数据库效力器、ERP效力器等,它更适合特定人群内部运用。

花生壳和零遁的适应性更强,不仅能完结广泛人群的内网访问,一同也能完结特定人群的内网访问,在功用完结上较为相似,在技术上有所不同,前者了解的人许多,选用的是三层通讯,后者能运用二层通讯,这使后者适用更多的传输协议,以及能不通过互联网,仅在纯内网中完结局域网互联。

    现在能完结内网访问的软件或东西仍是许多的,以上罗列的几种应该现已底子满足各种需求环境了,跟着ipv6的布置,异地互联应该会变得越来越简略。

关于没有公网 IP 的内网用户来说,长途管理或在外网访问内网机器上的效力是一个问题。一般解决方案就是用内网穿透东西将内网的效力穿透到公网中,便于长途管理和在外部访问。内网穿透的东西许多,之前也介绍过 、。
    今天给咱们介绍另一款好用内网穿透东西 FRP,FRP 全名:Fast Reverse Proxy。FRP 是一个运用 Go 言语开发的高性能的反向署理运用,可以协助您轻松地进行内网穿透,对外网供应效力。FRP 支撑 TCP、UDP、HTTP、HTTPS等协议类型,并且支撑 Web 效力依据域名进行路由转发。
FRP 项目地址:
https://github.com/fatedier/frp
FRP 的作用
运用处于内网或防火墙后的机器,对外网环境供应 HTTP 或 HTTPS 效力。
关于 HTTP, HTTPS 效力支撑依据域名的虚拟主机,支撑自定义域名绑定,使多个域名可以共用一个 80 端口。
运用处于内网或防火墙后的机器,对外网环境供应 TCP 和 UDP 效力,例如在家里通过 SSH 访问处于公司内网环境内的主机。
FRP 架构

 

FRP 安装
FRP 采用 Go 语言开发,支持 Windows、Linux、MacOS、ARM等多平台部署。FRP 安装非常容易,只需下载对应系统平台的软件包,并解压就可用了。
这里以 Linux 为例,为了方便管理我们把解压后的目录重命名为 frp :
$ wget https://github.com/fatedier/frp/releases/download/v0.15.1/frp_0.15.1_linux_amd64.tar.gz$ tar xzvf frp_0.15.1_linux_amd64.tar.gz$ mv frp_0.15.1_linux_amd64 frp
更多平台的软件包下载地址:https://github.com/fatedier/frp/releases
FRP 配置 FRP 服务端配置
配置 FRP 服务端的前提条件是需要一台具有公网 IP 的设备,得益于 FRP 是 Go 语言开发的,具有良好的跨平台特性。你可以在 Windows、Linux、MacOS、ARM等几乎任何可联网设备上部署。
这里以 Linux 为例,FRP 默认给出两个服务端配置文件,一个是简版的 frps.ini,另一个是完整版本 frps_full.ini。
我们先来看看简版的 frps.ini,通过这个配置可以快速的搭建起一个 FRP 服务端。
$ cat frps.ini[common]bind_port = 7000
默认配置中监听的是 7000 端口,可根据自己实际情况修改。
启动 FRP 服务端
$ ./frps -c ./frps.ini2018/01/25 10:52:45 [I] [service.go:96] frps tcp listen on 0.0.0.0:70002018/01/25 10:52:45 [I] [main.go:112] Start frps success2018/01/25 10:52:45 [I] [main.go:114] PrivilegeMode is enabled, you should pay more attention to security issues
通过上面简单的两步就可以成功启动一个监听在 7000 端口的 FRP 服务端。
FRP 客户端配置
和 FRP 服务端类似,FRP 默认也给出两个客户端配置文件,一个是简版的 frpc.ini,另一个是完整版本 frpc_full.ini。
这里同样以简版的 frpc.ini 文件为例,假设 FRP 服务端所在服务器的公网 IP 为 4.3.2.1。
$ vim frpc.ini[common]# server_addr 为 FRP 服务端的公网 IPserver_addr = 4.3.2.1# server_port 为 FRP 服务端监听的端口server_port = 7000
启动 FRP 客户端
$ ./frpc -c ./frpc.ini2018/01/25 11:15:49 [I] [proxy_manager.go:284] proxy removed: []2018/01/25 11:15:49 [I] [proxy_manager.go:294] proxy added: []2018/01/25 11:15:49 [I] [proxy_manager.go:317] visitor removed: []2018/01/25 11:15:49 [I] [proxy_manager.go:326] visitor added: []2018/01/25 11:15:49 [I] [control.go:240] [83775d7388b8e7d9] login to server success, get run id [83775d7388b8e7d9], server udp port [0]
这样就可以成功在 FRP 服务端上成功建立一个客户端连接,当然现在还并不能对外提供任何内网机器上的服务,因为我们并还没有在 FRP 服务端注册任何内网服务的端口。

 下面我们就来看几个常用的例子,通过这些例子来了解下 FRP 是如何实现内网服务穿透的。
通过 TCP 访问内网机器
这里以访问 SSH 服务为例, 修改 FRP 客户端配置文件 frpc.ini 文件并增加如下内容:
$ cat frpc.ini[ssh]type = tcplocal_ip = 127.0.0.1local_port = 22remote_port = 6000
启动 FRP 客户端
$ ./frpc -c ./frpc.ini2018/01/25 12:21:23 [I] [proxy_manager.go:284] proxy removed: []2018/01/25 12:21:23 [I] [proxy_manager.go:294] proxy added: [ssh]2018/01/25 12:21:23 [I] [proxy_manager.go:317] visitor removed: []2018/01/25 12:21:23 [I] [proxy_manager.go:326] visitor added: []2018/01/25 12:21:23 [I] [control.go:240] [3b468a55191341cb] login to server success, get run id [3b468a55191341cb], server udp port [0]2018/01/25 12:21:23 [I] [control.go:165] [3b468a55191341cb] [ssh] start proxy success
这样就在 FRP 服务端上成功注册了一个端口为 6000 的服务,接下来我们就可以通过这个端口访问内网机器上 SSH 服务,假设用户名为 mike:
$ ssh -oPort=6000 mike@4.3.2.1 通过自定义域名访问部署于内网的 Web 服务
有时需要在公有网络通过域名访问我们在本地环境搭建的 Web 服务,但是由于本地环境机器并没有公网 IP,无法将域名直接解析到本地的机器。
现在通过 FRP 就可以很容易实现这一功能,这里以 HTTP 服务为例:首先修改 FRP 服务端配置文件,通过 vhost_http_port 参数来设置 HTTP 访问端口,这里将 HTTP 访问端口设为 8080。
$ vim frps.ini[common]bind_port = 7000vhost_http_port = 8080
启动 FRP 服务端
$ ./frps -c ./frps.ini2018/01/25 13:33:26 [I] [service.go:96] frps tcp listen on 0.0.0.0:70002018/01/25 13:33:26 [I] [service.go:125] http service listen on 0.0.0.0:80802018/01/25 13:33:26 [I] [main.go:112] Start frps success2018/01/25 13:33:26 [I] [main.go:114] PrivilegeMode is enabled, you should pay more attention to security issues
其次我们在修改 FRP 客户端配置文件并增加如下内容:
$ vim frpc.ini[web]type = httplocal_port = 80custom_domains = mike.hi-linux.com
这里通过 local_port 和 custom_domains 参数来设置本地机器上 Web 服务对应的端口和自定义的域名,这里我们分别设置端口为 80,对应域名为 mike.hi-linux.com。
启动 FRP 客户端
$ ./frpc -c ./frpc.ini2018/01/25 13:56:11 [I] [proxy_manager.go:284] proxy removed: []2018/01/25 13:56:11 [I] [proxy_manager.go:294] proxy added: [web ssh]2018/01/25 13:56:11 [I] [proxy_manager.go:317] visitor removed: []2018/01/25 13:56:11 [I] [proxy_manager.go:326] visitor added: []2018/01/25 13:56:11 [I] [control.go:240] [296fe9e31a551e07] login to server success, get run id [296fe9e31a551e07], server udp port [0]2018/01/25 13:56:11 [I] [control.go:165] [296fe9e31a551e07] [web] start proxy success2018/01/25 13:56:11 [I] [control.go:165] [296fe9e31a551e07] [ssh] start proxy success
最后将 mike.hi-linux.com 的域名 A 记录解析到 FRP 服务器的公网 IP 上,现在便可以通过 http://mike.hi-linux.com:8080 这个 URL 访问到处于内网机器上对应的 Web 服务。
HTTPS 服务配置方法类似,只需将 vhost_http_port 替换为 vhost_https_port, type 设置为 https 即可。