frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议。其项目主页是:https://github.com/fatedier/frp 。 其原理如下图:

frp
frp

比如某用户想在家里能够连上公司内部的某台主机的环境,需要在某主机上运行frpc程序,还需要有一台具有公网IP的主机(在公司之外的服务器也没关系),在公网主机上运行frps,两者之间建立连接后,通过把内部主机的端口暴露给外网主机,就可以通过连接该外网服务器的某些端口进行连接了。

一、frps配置(公网服务器上)

建议用普通用户运行,编辑frps.ini文件,内容类似如下:

1[root@361way frp]#  cat  frps.ini
2[common]
3bind_addr = 0.0.0.0
4bind_port = 6666
5token = 111111   //连接密码串
6use_encryption = true  //下面这两行是加密和压缩传输
7use_compression = true

假设这里使用tunnel普通用户启动,某对应的命令是:

1/home/tunnel/frp/frps -c /home/tunnel/frp/frps.ini

二、frpc配置(内部主机)

 1[root@localhost frp]# more frpc.ini
 2[common]
 3server_addr = 115.28.174.118
 4server_port = 6666
 5token = 111111
 6[ssh]
 7type = tcp
 8local_ip = 127.0.0.1
 9local_port = 22
10remote_port = 6722

这里某些端口的监听需要使用root用户权限,这里可以以root用户运行。命令如下:

1./frpc -c frpc.ini

另外在frps所在的外网服务器上有开启防火墙的,还需要在防火墙上开启相应的端口的允许通行:

1firewall-cmd --add-port=6666/tcp
2firewall-cmd --add-port=6722/tcp

上面是临时通行,需要加到永久生效的,还需要使用permanent参数。

三、小结

上面只是对内部的22端口进行了映射,其实际上还支持http\https等相关协议的映射。