利用frp做简单的内网穿透
昨天在家里突然想测试一个东西,但是家里电脑的虚拟机上没有完整的环境,装环境又太麻烦,公司的电脑又在局域网,远程软件又不流畅,我不喜欢。于是我今天在公司用frp简单配置了一下,通过我的云服务器的公网ip访问到公司局域网上的虚拟机。
配置好后,突然想到,好呀,又可以水一篇博客了。
其实frp的用法可以看官网,官方文档[https://gofrp.org/docs]讲得非常清晰了,我也是跟着官方文档学习的(但我就是要水完这一篇)。
一、说明
公网服务器作为frp服务端,局域网虚拟机作为frp客户端。
二、下载部署
frp的GitHub地址:https://github.com/fatedier/frp/releases
下载对应的包(服务端和客户端都需要下载)
wget https://github.com/fatedier/frp/releases/download/v0.36.2/frp_0.36.2_linux_amd64.tar.gz
# 解压
tar -zxf frp_0.36.2_linux_amd64.tar.gz -C /usr/local/
mv /usr/local/frp_0.36.2_linux_amd64 /usr/local/frp
cd /usr/local/frp
# 服务端执行,只保留frps和frps.ini
ls | grep -Ewv "frps|frps.ini" | xargs rm -rf
# 客户端执行,只保留frpc和frpc.ini
ls | grep -Ewv "frpc|frpc.ini" | xargs rm -rf
三、启动
服务端配置文件frps.ini
[common]
bind_port = 7000
客户端配置文件frpc.ini
[common]
server_addr = 47.99.187.15
server_port = 7000
[ssh]
type = tcp
local_ip = 192.168.1.155
local_port = 22
remote_port = 6000
server_addr
服务端的ip
server_port
frp服务端的端口
[ssh]
连接名,自定义,如果有多个客户端,连接名不能一样
type
连接类型
local_ip
客户端的ip
local_port
客户端的端口
remote_port
服务端的端口,客户端的端口映射到此端口。如果有多个客户端,该端口不能一样
启动服务端
nohup ./frps -c ./frps.ini >> ./nohup.out 2>&1 &
启动客户端
nohup ./frpc -c ./frpc.ini >> ./nohup.out 2>&1 &
看下nohup.out日志,看下服务有没有正常启动,看下服务端有没有开启remote_port配置的端口。
四、配置安全组
一般来说云服务器都有安全组,很多的端口不打开无法访问
点击配置规则:
入方向:添加端口6000和7000,允许外部主机访问公网主机的7000和6000端口
出方向:添加端口22,允许访问公网主机访问内网主机的22端口
五、访问
通过公网主机ip和6000端口即可访问局域网主机
六、原理
- 公网主机根据配置文件监听7000端口,内网主机根据配置文件与公网主机的7000进行连接
- 内网主机根据自己的配置文件告诉公网主机需要哪些转发操作、用到哪些端口
- 内网主机转发本机的22端口到公网主机的6000端口
- 外部主机访问公网主机的6000端口,公网主机将流量转发到内网主机的22端口