【FRP】内网穿透|外网访问内网的方法|公网访问私网|内网

目录

背景:

frp  原理:

准备

部署

1、在公网服务器上(阿里云)部署FRP 服务程序。

2、在内网电脑/服务器/设备 上部署FRP 客户端程序。

配置

服务器配置

服务器网络配置

服务器FRP程序设置

客户端配置


背景:

把自己本地的网站,服务分享到外网。可控性强。(想外网访问自己家里的电脑/主机)

实现方法:FRP

frp  原理:

需要有公网的服务器(例如阿里云)运行FRP 服务程序进行中间转发。

我们的内网 电脑/设备 上运行 FRP 客户端,连接公网服务器上的FRP服务程序,

我们外网访问时,访问公网服务器上的FRP服务程序,FRP服务程序转发给我们的内网FRP 客户端,到达我们内网,消息就完成了从外网到内网的穿透。

准备

1、一个公网服务器 (阿里云等)

FRP 程序

部署

1、在公网服务器上(阿里云)部署FRP 服务程序。

https://blog.csdn.net/u012577474/article/details/90106578

2、在内网电脑/服务器/设备 上部署FRP 客户端程序。

linux:

https://www.cnblogs.com/vince-zww/p/12786383.html

winddows:

配置

服务器配置

服务器网络配置

开发端口
服务器主机的端口开放:

firewall-cmd --zone=public --add-port=7000/tcp --permanent
firewall-cmd --zone=public --add-port=7500/tcp --permanent
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --zone=public --add-port=8081/tcp --permanent
查看所有打开的端口:
firewall-cmd --zone=public --list-ports

也可以直接关闭防火墙服务,因为阿里云有实例安全组规则配置相当于防火墙,关闭后就不用两头配置了,节约时间。

安全组端口开放:

在这里插入图片描述

2、开放7000、7500端口等其他frp需要用到的端口

在这里插入图片描述

批量开放端口:

在这里插入图片描述

服务器FRP程序设置

因为是服务端,使用到的是:frps(启动程序),frps.ini(配置文件)

vi frps.ini
 [common]
bind_port = 7000 
#frps服务端口
vhost_http_port = 8080  
#http转发端口
vhost_https_port = 8081 
#https转发端口
token=12345  
#frp认证密钥
dashboard_addr = 0.0.0.0
dashboard_port = 7500  
#frpweb视图端口
dashboard_user = admin  
dashboard_pwd = admin

开机启动设置:https://blog.csdn.net/u012577474/article/details/90106578

  • “bind_port”表示用于客户端和服务端连接的端口,这个端口号我们之后在配置客户端的时候要用到。
  • “dashboard_port”是服务端仪表板的端口,若使用7500端口,在配置完成服务启动后可以通过浏览器访问 x.x.x.x:7500 (其中x.x.x.x为VPS的IP)查看frp服务运行信息。
  • “token”是用于客户端和服务端连接的口令,请自行设置并记录,稍后会用到。
  • “dashboard_user”和“dashboard_pwd”表示打开仪表板页面登录的用户名和密码,自行设置即可。
  • “vhost_http_port”和“vhost_https_port”用于反向代理HTTP主机时使用。

配置后,启动,linux:

/usr/local/frp/frps -c frps.ini

启动后:监控服务端状态地址:http://xx.xx.xx.xx:7500/

客户端配置

注意:FRP服务端和客户端版本要一致。

 客户端:frpc(启动程序),frpc.ini(配置文件)

 标记配置文件:

[common]
server_addr = *.*.*.*       #frps服务端地址
server_port = 7000					#frps服务端端口
token=12345          				#frps连接密钥

#ssh端口转发
[kormeessh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 40000

#80端口转发
[kormeeweb]
type = http
local_port = 80
custom_domains = *.*.*.*   #frps服务端地址
  • “server_addr”为服务端IP地址,填入即可。
  • “server_port”为服务器端口,填入你设置的端口号即可,如果未改变就是7000
  • “token”是你在服务器上设置的连接口令,原样填入即可。
  • https://www.cnblogs.com/vince-zww/p/12786383.html

更多配置说明:

下面说比较关键的点,以及一些额外配置:

1、添加端口监听,比如 ssh 的端口监听(客户端配置:frpc.ini)

1

2

3

4

5

[ssh]

type = tcp

local_ip = 127.0.0.1

local_port = 22

remote_port = 6000

  

上面的 [ssh] 括号里面的 ssh 只是一个命名,命名的意思是,你可以随便写什么(不要写什么特殊字符就好,因为不一定支持)。

type:类型,有 tcp、udp 等,最常用的是 tcp

local_ip:客户端(内网服务器)监听的 ip

local_port:客户端(内网服务器)监听的端口

remote_port:公网服务器的端口

配置了上面几个的效果是:

我们访问公网服务器的 remote_port 端口的时候,对应的网络包会被转发到 内网服务器的 local_port 端口。

比如,上面的配置:我们想要 ssh 连接内网的时候,需要在使用 ssh 命令的时候指定连接公网服务器的 6000 端口,

ssh -oPort=6000 test@xxx.xxx.xxx.xxx

我们想要新增端口监听也很简单,一般来说,按上面的格式复制粘贴到 frpc.ini 后面就可以了,好比如,内网有个 mysql 服务(默认端口 3306),我们想要通过公网的 3307 端口访问内网的 mysql,我们可以添加如下配置:

1

2

3

4

5

[mysql]

type = tcp

local_ip = 127.0.0.1

local_port = 3306

remote_port = 3307

  

2、github 上面的文档没有给出常驻进程的方法,我们可以使用 supervisor 来实现

supervisor 的安装就不说了,对应的配置文件如下:

1

2

3

4

5

6

7

8

9

10

[program:frp]

process_name=(program_name)s_%(process_num)02d

command=/home/ruby/frp_0.20.0_linux_amd64/frpc -c /home/ruby/frp_0.20.0_linux_amd64/frpc.ini

directory=/home/ruby/frp_0.20.0_linux_amd64

autostart=true

autorestart=true

user=ruby

numprocs=1

redirect_stderr=true

stdout_logfile=/var/log/frp.log

当然,上面的相关路径需要根据实际情况修改

使 supervisor 配置生效:

1

2

3

sudo supervisorctl reread

sudo supervisorctl reload

sudo supervisorctl start frp:*

  

这里有个需要注意的坑是,如果 supervisor 开启了 web 管理界面,谨慎点击 restart 来重启 frp 相关进程,因为不一定有权限,没有权限的情况下,可能会导致进程 stop 了,但是并没有 start,因为 supervisorctl 需要权限来运行 frp 的进程。这样一般情况下,是没有什么问题的,但是如果某一天,你改了一下 frp 配置,想在 supervisor web 管理界面重启 frp 进程,突然就发现再也连不上了,而内网服务器又不在旁边,那就只能等到可以真机操作的时候再重启了。

参考:《frp搭建与使用详细教程》https://www.jianshu.com/p/6be158cc3685

WINDOWS 搭建脚本:http://freefrp.wlphp.com/ ?

posted on 2022-10-04 01:23  bdy  阅读(358)  评论(0编辑  收藏  举报

导航