内网穿透原理
内网穿透(Net 穿透)也即端口映射,笔者粗暴理解是一种能够将外网机器与内网机器(外网无法直接访问的设备)建立通信的一种技术解决方案。
百度百科
尽管有许多穿越 NAT 的技术,但没有一项是完美的,这是因为 NAT 的行为是非标准化的。这些技术中的大多数都要求有一个公共服务器,而且这个服务器使用的是一个众所周知的、从全球任何地方都能访问得到的 IP 地址。一些方法仅在建立连接时需要使用这个服务器,而其它的方法则通过这个服务器中继所有的数据 —— 这就引入了带宽开销的问题。
具体原理详见百度百科=> https://baike.baidu.com/item/NAT%E7%A9%BF%E8%B6%8A
需要资源
一台公网服务器(可以通过 IP 直接访问)
树莓派(也可以是电脑,以树莓派为例)
安装
本文以 frp v 0.13.0 为例(具体版本可以自己定,但不保证其他版本能够成功)。
笔者在 go 1.7.4 版本下编译 frp v 0.13.0 时会出现如下编译错误,根据 frp 作者留言,改用 go 1.8.3 版本编译。
*ht.Server has no field or method Close()
安装 golang 环境
由于 frp 工具是基于 golang 编写,所以需要安装 golang 环境。
以 go1.8.3 版本为例(亲测有效)
- Linux aliserver 2.6.32-431.23.3.el6.i686 #1 SMP Thu Jul 31 14:37:53 UTC 2014 i686 i686 i386 GNU/Linux
- https://www.golangtc.com/static/go/1.8.4/go1.8.4.linux-armv6l.tar.gz
- Linux raspberrypi 4.9.41-v7+ #1023 SMP Tue Aug 8 16:00:15 BST 2017 armv7l GNU/Linux
- https://www.golangtc.com/static/go/1.8.4/go1.8.4.linux-386.tar.gz
由于下载的是编译好的包,所以安装很简单。下载后,进行解压,并设置一些环节变量即可。
具体安装步骤详见:https://golang.org/doc/install
安装 frp 工具
- Linux aliserver 2.6.32-431.23.3.el6.i686 #1 SMP Thu Jul 31 14:37:53 UTC 2014 i686 i686 i386 GNU/Linux
- https://github.com/fatedier/frp/releases/download/v0.13.0/frp_0.13.0_linux_386.tar.gz
- Linux raspberrypi 4.9.41-v7+ #1023 SMP Tue Aug 8 16:00:15 BST 2017 armv7l GNU/Linu
- https://github.com/fatedier/frp/releases/download/v0.13.0/frp_0.13.0_linux_arm.tar.gz
启动 & 使用 frp工具
使用起来很简单,只需要简单修改配置文件后,执行启动命令即可。
具体步骤详见:https://github.com/fatedier/frp/blob/master/README_zh.md