frp github地址: https://github.com/fatedier/frp.git
官方介绍:frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
现在家中的MacMini作为HomeServer,已经跑了不少应用,原来在云上的一些服务,像Seafile,Leanote等等都迁移到本地了,毕竟对个人来说,本地磁盘成本低多了,云上买disk实在肉疼。这样以来就必须上内网穿透了,否则服务都进家中内网了,在外边访问不到,再便宜也没卵用。查了查还是frp比较好用,果断安排上。
Frp安装配置什么的也很简单,RemoteServer上安装frps(frp server),HomeServer上安装frpc(frp client)。frps和frpc其实都在一个目录下,用哪个就改哪个的配置文件,启动哪个就好了。
frps配置:
[common]
bind_addr = 0.0.0.0
bind_port = TPORT
bind_udp_port = UPORT
#Token
token = TOKEN
#Frp可以直接做http/https代理,这个没在用。
vhost_http_port = HPORT
vhost_https_port = HSPORT
#Dashboard,可以查看frp服务的一些状况。
dashboard_addr = 0.0.0.0
dashboard_port = DPORT
dashboard_user = USER
dashboard_pwd = PWD
#Log
log_file = ./frps.log
log_level = info
log_max_days = 10
frpc配置:
[common]
server_addr = REMOTE-IP
server_port = TPORT
token = TOKEN
#Log
log_file = ./frpc.log
log_level = info
log_max_days = 7
[SERVICE NAME]
type = tcp
local_ip = 127.0.0.1
local_port = LOCAL_PORT
remote_port = REMOTE_PORT
HomeServer上的service的服务端口暴露到RemoteServer之后,就可以用RemoteServer上的ng来代理了,这样就可以从公网上访问到内网的服务了。
安全方面,tcp type是直接把local的端口映射到remote,如果remote上没有限制安全组的话,就等于暴露到了公网,并不安全;但一般安全组都是白名单规则,问题不大。如果安全要求很高,可以使用stcp type。
Stcp的数据传输是点对点的;local启动frpc,把local-service传输到remote上的frps,client也需要启动一个frpc,这样才能建立local-remote-client数据访问的通道。Client上需要配置对应frps的token和对应local-frpc的sk,两道保险。是否采用stcp还是要看使用场景,如果只是点对点的内网穿透,还是stcp好一些,毕竟安全性更高。
具体示例配置:
#local frpc
[common]
server_addr = x.x.x.x
server_port = 7000
token = TOKEN
[secret_ssh]
type = stcp
sk = SK
local_ip = 127.0.0.1
local_port = 22
#client frpc
[common]
server_addr = x.x.x.x
server_port = 7000
token = TOKEN
[secret_ssh_visitor]
type = stcp
role = visitor
server_name = secret_ssh
sk = SK
bind_addr = 127.0.0.1
bind_port = 6000
配置完成服务启动后,可以到dashboard上看一下服务的状况。Overview里可以看到端口信息和总的流量信息,进到具体的proxies里可以看到每个服务的连接状况和流量信息。

