因为项目上的需要,内网增加了一台服务器,在配置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常用的命令

  1. 服务端不用做任何操作,直接运行程序。

./frps -c ./frps.ini

  1. 客户端需要先修改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
  1. 在客户端执行

./frpc -c ./frpc.ini

  1. 测试ssh连接

ssh -oPort=6000 yourVPSLoginUsername@yourVPSIP

Done. 是不是特别方便。

注意事项

  • 如果是国外服务器,需要在frps.ini关闭时间戳校验
  • 端口确保在vps的提供商的白名单中
    REF:
  • frp 中文文档