公司内的 FRP 应用

1. 内网访问

具体场景

在公司内有两台 Jenkins 机器,只有一台有固定 IP、另一台没有固定 IP(公司内申请固定 IP 需要层层审核),为了规避审核的麻烦,这里选择曲线救国的方案:FRP

实施方案

首先假设已有的固定 IP 为 Static_IP,Jenkins 均采用默认端口号 8080,那么有固定 IP 的 Jenkins 访问地址即为:http://Static_IP:8080,而另一台机器的 IP 不固定,需要我们最终以 http://Static_IP:8081(另一非 8080 端口,比如这里用的 8081)的方式进行访问。就这个需求来说,需要有固定 IP 的机器作为 FRP Server,没有固定 IP 的机器作为 FRP Client。另外还有个需求就是可以通过 ssh user@Static_IP -p 6000 登录到没有固定 IP 的机器上(ssh 端口这里定为 6000),可采用 tcp 端口转发来实现。具体配置如下:

Server - frps.ini:

[common]
bind_port = 7000
vhost_http_port = 8081

Client - frpc.ini:

[common]
server_addr = Static_IP
server_port = 7000

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

[web]
type = http
local_ip = 127.0.0.1
local_port = 8080
custom_domains = Static_IP

至此在公司内网通过 Static_IP 来访问两台打包机的需求就已经满足了。

2. 外网访问

具体场景

在非公司内网的环境下,想使用公司的 Jenkins 机器,但公司并没有对我们有固定 IP 的 Jenkins 机器的 IP 做 VPN 授权(授权的话同样需要申报),这个时候就可以利用 FRP 做内网穿透了,前提是你得有一台有公网 IP 的机器(其实上面的案例里有固定 IP 的机器就是扮演着这样的角色),这里假设公网 IP 为 Public_IP。另外,最好手上有能用的域名,没有的话通过手动改 hosts 也是可以解决的。

实施方案

第一步,公司内有固定 IP 的机器和有公网 IP 的机器的 FRP 配置。

有公网 IP 的机器作为 FRP Server,公司内有固定 IP 的机器作为 FRP Client,最终以 http://jks0.your.domain:8080 来访问公司内有固定 IP 的机器、以 http://jks1.your.domain:8080 来访问公司内没有固定 IP 的机器(需要配置域名或者 hosts,将 jks0.your.domain 和 jks1.your.domain 指向 Public_IP)。另外需要以 ssh user@Public_IP -p 6000 登录公司内有固定 IP 的机器、以 ssh user@Public_IP -p 6001 登录公司内没有固定 IP 的机器,具体配置如下:

Server - frps.ini:

[common]
bind_port = 7000
vhost_http_port = 8080

Client - frpc.ini:

[common]
server_addr = Public_IP
server_port = 7000

[ssh0]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

[ssh1]
type = tcp
local_ip = 127.0.0.1
local_port = 6000
remote_port = 6001

[web0]
type = http
local_ip = 127.0.0.1
local_port = 8080
custom_domains = jks0.your.domain

[web1]
type = http
local_ip = Static_IP
local_port = 8081
custom_domains = jks1.your.domain

到这里这两台机器就算是配置完了,但是通过 http://jks1.your.domain:8080 却打不开公司内没有固定 IP 的机器的 Jenkins 服务,其实是 1. 内网访问frpc.ini 配置里少了一项。

第二步,修改公司内没有固定 IP 机器的 frpc.ini,将 jks1.your.domain 添加到 custom_domains

custom_domains = Static_IP
改为
custom_domains = Static_IP,jks1.your.domain

至此,所有的服务都已部署完毕。

至于 https 可以参考官方的 frps_full.inifrpc_full.ini 这里就不赘述了。

End~!

Comments