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.ini 和 frpc_full.ini 这里就不赘述了。
Comments