利用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端口即可访问局域网主机

六、原理

  1. 公网主机根据配置文件监听7000端口,内网主机根据配置文件与公网主机的7000进行连接
  2. 内网主机根据自己的配置文件告诉公网主机需要哪些转发操作、用到哪些端口
  3. 内网主机转发本机的22端口到公网主机的6000端口
  4. 外部主机访问公网主机的6000端口,公网主机将流量转发到内网主机的22端口
posted @ 2021-05-17 18:24  Charramma  阅读(278)  评论(0编辑  收藏  举报