使用FRP进行内网穿透
因为项目上的需要,内网增加了一台服务器,在配置Jenkins的时候,发现需要一个外网地址才能触发WebHook,进而走构建流程。所以就需要采用内网穿透的方式把内网的服务开放到外网当中。例如,家里的NAS,想要在家里之外的地方访问,就需要用到内网穿透的技术。目前市面上比较成熟的几个方案,DDNS,ngrok,frp,各有各的优势和缺点。我选择frp的原因很简单,方便配置,开源免费。
准备工作
- 一台有独立IP的VPS
- 一个可以自由解析的域名
背景知识
简介
正如frp主页写的** frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。**frp是一个反向代理的工具。
架构
用户访问VPS的IP,通过VSP里面安装的服务端的frp,转发到各个装了frp的客户端中。
正向代理VS反向代理
以客户端的角度来看,倘若代理服务器帮助客户端去获取远程服务端的数据,那这就是一个正向代理,客户端是不知道真实的服务器,正向代理代理的是客户端。反过来,就是反向代理。
简单的理解一句话理解:** 正向代理隐藏真实客户端,反向代理隐藏真实服务端**。
开始
首先在这里下载对应的版本,解压后能看到两个配置。正如上面所说,frp需要客户端和服务端都安装上。
- frps及frps.ini是服务端的执行程序和配置
- frpc及frpc.ini是客户端的执行和配置
通过SSH访问内网机器
推荐使用Screen的方式来后台运行,具体如何使用screen,可以参考我写的Screen常用的命令。
- 服务端不用做任何操作,直接运行程序。
./frps -c ./frps.ini
- 客户端需要先修改frpc.ini,将下面的xxxx替换成VPS的ip地址
# 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 -c ./frpc.ini
- 测试ssh连接
ssh -oPort=6000 yourVPSLoginUsername@yourVPSIP
Done. 是不是特别方便。
注意事项
- 如果是国外服务器,需要在frps.ini关闭时间戳校验
- 端口确保在vps的提供商的白名单中
REF: - frp 中文文档