1 什么是内网穿透
简单来说,内网穿透是一种实现不同局域网内的主机之间通过互联网进行通信的技术。
内网穿透,即NAT穿透,NAT英文全拼是Network Address Translator(网络地址转换器),说白了就是凡是经过NAT发出去的数据包,都会通过一定的端口转换(而非使用原端口)再发出去,也就是说内网和外网之间的通信不是直接由内网机器与外网NAT进行,而是利用内网对外网的NAT建立起SESSION与外网NAT的SESSION进行。
目前可用于内网穿透的开源工具主要有:ngrok和frp。
- ngrok。ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。支持TCP协议,不支持UDP协议。ngrok有两个大版本,1.开源在github,用golang编写。2.闭源。速度方面,不如frp。
- frp。frp同样开源,同样用golang编写。frp支持UDP协议。frp的配置十分简单省心,功能也令人满意。
2 为什么选择frp
Frp是在github上的完全开源项目,作者是中国人而且项目还在维护中。文档比较详细,可自行搭建,速度不错且理论上可以开放任何想要的端口。
3 什么是frp
根据官网定义:
frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。
4 怎么配置frp
先看看frp的架构
从图中可以看出,我们需要:
- 一个有公网ip的主机,部署frps
- n个需要被访问的内网服务器,分别部署frpc
用户通过公网ip访问frps,再映射到对应的内网服务器。
下面一起来看看frp是怎么配置的,本文仅介绍tcp的配置。
4.1 安装frp
不论对于服务端还是客户端,安装过程都是一样的。以下是官方说明:
根据对应的操作系统及架构,从 Release 页面下载最新版本的程序。
将 frps 及 frps.ini 放到具有公网 IP 的机器上。
将 frpc 及 frpc.ini 放到处于内网环境的机器上。
4.2 通过 ssh 访问内网机器
修改 frps.ini 文件,这里使用了最简化的配置:
- frps.ini
[common]
bind_port = 7000
- 启动 frps:
./frps -c ./frps.ini
修改 frpc.ini 文件,假设 frps 所在服务器的公网 IP 为 x.x.x.x;
- frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
启动 frpc:
./frpc -c ./frpc.ini通过 ssh 访问内网机器,假设内网用户名为 test:
ssh -oPort=6000 test@x.x.x.x
或
ssh -p 6000 test@x.x.x.x
ssh的配置是tcp转发的最简配置,也可以用于没有域名的web服务转发,只需要frpc配置好需要映射的端口号即可。
比如在内网搭建了一个web服务,访问端口号是9000,可以在frpc.ini中这样配置。
[web]
type = tcp
local_ip = 127.0.0.1
local_port = 9000
remote_port = 10000
然后开放公网ip主机的10000端口,这样就可以通过http://公网ip:10000来访问内网的web服务。
本文链接:https://deewooo.github.io/post/%E5%BB%BA%E7%AB%99%E7%AC%AC%E4%BA%94%E7%AF%87-%E4%BD%BF%E7%94%A8frp%E5%AE%9E%E7%8E%B0%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F/
本作品由 IvyWooo 采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可,转载请注明出处。
参考文章