内网穿透可以解决主机没有公网IP导致域外网络无法访问主机的问题,常见的穿透方案有frp, zerotier, ngork和nps等等,本文将采用frp来实现内网穿透。
0. 内网穿透
内网穿透的原理其实很简单,就是借助一个所有网络均可访问的服务器来做网络数据交换的中间媒介。虽然有很多穿透方案声称可以直接实现外部网络的访问,但几乎所有方案中实际上都存在一个中间服务器的角色,尽管是P2P穿透,也需要中间服务器来进行一个握手操作,不可能真正地像有公网IP一样直接被外部网络访问。下图是最经典的穿透原理图。
1. frp
frp已经有十多年的发展历史,直至现在仓库依然还在更新,也许frp存在一定的缺陷,但是一定是不错的选择!关于frp的介绍这里直接引用官方:
frp is a fast reverse proxy that allows you to expose a local server located behind a NAT or firewall to the Internet. It currently supports TCP and UDP, as well as HTTP and HTTPS protocols, enabling requests to be forwarded to internal services via domain name. frp also offers a P2P connect mode.
翻译:frp是一种快速反向代理,允许您将位于NAT或防火墙后面的本地服务器暴露给Internet。它目前支持TCP和UDP,以及HTTP和HTTPS协议,使请求能够通过域名转发到内部服务。frp还提供了一种P2P连接模式。
frp的github仓库在:https://github.com/fatedier/frp,这里简单说明一下如何部署客户端(frpc)和服务端(frps)。
打开frp的仓库地址,找到release,下载适合自己系统的编译好的版本,这里将以linux系统为例。
下载完成之后,将压缩包解压能得到frpc,frpc.toml,frps,frps.toml这四个文件,其中frpc为frp客户端程序,frps为frp服务端程序,toml文件为对应的配置文件。关于配置文件,之前版本都是用ini文件作为配置文件,而toml是近几年新使用的配置格式,目前ini配置格式依然沿用,网上关于ini的资料更全,而toml相对来说比较少,最开始为了快速上手可以使用ini格式的配置文件,toml格式的配置文件设置可以参考官方仓库的readme,也比较详细。后面的演示中将使用ini格式的配置文件,因为ini格式更容易上手。
在服务端,在frps同级目录下新建一个frps.ini文件,以下为frps配置文件实例:
[common]
bind_port = 7000
token = 123456789
dashboard_port = 10011
dashboard_user = admin
dashboard_pwd = admin
vhost_http_port = 10012
vhost_https_port = 10013
bind_port
是frps向frpc提供的服务端口,frpc连接frps的映射服务就是通过这个端口来的;token
是frpc连接frps时需要提供的密钥;dashboard
相关的配置是关于frps面板的内容,frp本身提供了web管理面板,这也是frp的特性之一。vhost_http_port
表示frps将frpc的所有http(s)类型的服务端口映射到10012(10013),这样的话外部访问的时候通过域名标识+10012(10013)即可进行访问,这样做是为了方便web服务相关映射的配置,其实也可以在frpc的配置文件中自定义映射到的端口。
frps.ini配置完成后,输入./frps -c fprs.ini
即可启动frps服务。接下来对frpc进行配置,以下为frpc配置文件实例:
[common]
bind_port = 7000
token = 123456789
dashboard_port = 10011
dashboard_user = admin
dashboard_pwd = admin
vhost_http_port = 10012
vhost_https_port = 10013
评论(0)