背景
阿里云服务器越来越水,一个2核4G的虚机居然撑不住一个前端的构建任务,不知道是不是近两年阿里对虚机的资源使用做了限制,逼迫你不得不购买更高的配置。
久闻frp的大名,今日一试,果然是香。
frp原理简单:在公网和内网机器之间建立通道,然后将外网数据转发到内网。
场景一:外网访问内网www服务
目标:使内网的Jenkins服务器被外网访问。即通过http://cicd.mydomain.cn访问内网的jenkins。
当然,先要配置域名,映射到外网服务器上。
然后,配置一下nginx:
server {
listen 80;
server_name cicd.mydomain.cn;
autoindex on;
location / {
proxy_pass http://localhost:7070/;
proxy_set_header Host $host;
proxy_redirect default;
}
}
frp服务端配置
[common]
bind_port = 7788
vhost_http_port = 7070
[web]
type = http #为服务类型,可以设为http,https
custom_domains = mydomain.cn #为要映射的域名,记得域名的A记录要解析到外网主机的IP。
启动服务端:
frps -c ./frps.ini
客户端设置
[common]
server_addr = 公网IP
server_port = 7788
[www]
type = http
local_ip = 127.0.0.1
local_port = 8080
custom_domains = cicd.mydomain.cn
启动客户端:
frpc -c ./frpc.ini
这样就可以访问了。
场景二:外网ssh访问内网机器
见官方文档。https://gofrp.org/docs/examples/ssh/
场景三:将内网的sock5代理提供给外网用
故事是这样的,我有个MacOS上的vpn代理,能用于学科上网,但只能被本机使用。于是我想在公网上搭建一个sock5代理,能走我家里这台Mac本的通道。
服务端配置
[common]
bind_port = 7788
vhost_http_port = 7070
[sock5]
type=tcp
客户端配置
[common]
server_addr = <公网运行frps的IP>
server_port = 7788
[plugin_socks5]
type = tcp
remote_port = 1081
local_ip = 127.0.0.1
local_port = 12360
#plugin = socks5
注意:plugin和local_ip只能二选一, 此处12360是本地运行代理的服务器端口。
当启动客户端frpc后,远程frps会增加一个新的监听端口1081。
如果你公网使用的云服务器,记得要放开相应的端口: