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 服务。
参考文章
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于