frp的内网穿透方法,终于弄明白了

frp的内网穿透方法,终于弄明白了,第1张

第一步:客户端和服务端的配置我就不说了,网上多的是,说的是最要的2点

服务器配置:

[common]

bind_port = 7005

auto_token= frp

dashboard_port = 7003

dashboard_user = root

dashboard_pwd = 123456

privilege_token = frp
客户端配置:

[common]

server_addr =1234567890

server_port = 7005

privilege_token = frp

log_file = /frpclog

auto_token = frp

[ssh1]

type = tcp

local_ip = 127001

local_port = 22

remote_port = 7004

这些个配置。。。。

第二步:终端都开启了ssh才能互相通信,要不然搞毛线啊!!!!

第三步:ssh -p 7004 (客户端用户名)大头大头@1234567890   

ssh是访问方式,上面指定了type=tcp,所以可以用ssh方式访问。

注意,客户端“大头大头”是你客户端的登录电脑的用户名,懂吗?因为你得通过公网访问这个电脑,那终点还是这个电脑,所以需要这个电脑的用户名,这个用户名不是公网电脑的用户名

注:sudo /frpc -c /frpcini &     最后的&是长驻的意思,就是关掉终端,后台运行

不知道我说的明白了吗?

内网穿透从字面上来说就是将本地的服务器映射到外网可访问

设想下

    如果有已知的公网服务器,那内网的本地服务就可以映射到外网了。

    如果没有已知的公网服务器,那只能代理到外网的服务器访问即可。

    ps: 公网服务器与可访问外网的服务器是有区别的。区别在于用户访问某宝服务,先是到公网服务器然后再转发的淘宝服务。所以可访问外网的服务器不等于公网服务器。

换句话说直接将服务器部署在与公网服务器相通的机器上不就可以了,我也是这样想的。所以就有生产环境与测试环境,其实内网穿透还是存在安全隐患的,内网穿透大部分应用于测试环境,比如常用的微信相关开发。

最后我们来聊聊FRP与NGROK

        两者的原理都一样,通过解析过的域名做本地服务端口映射。

        Ngrok相对比较简单,只需要能访问外网的机器即可。可参考 >

frp[1] 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、>Frp的TCP模式问题,这里主要存在2个问题。

试想一下,frp的tcp模式相当于你的设备直接向公网暴露了一个tcp端口。任何设备都可以尝试连接这个端口。这里就会有很大的安全风险。

我的所有请求都需要进行frp的服务器进行中转,这里势必会造成比较大的网络延时。以及耗掉服务器流量,这对我们的服务响应速度和经济价值会造成较大影响。

对于安全问题,frp的思路是,既然这些服务有可能被坏人攻击,那我们只要限制特定设备能够使用这个端口就好了。

那么问题来了,我怎么知道哪些设备是允许使用的呢?

服务端配置?那就又陷入了内网穿透的问题。

最简单的方法是使用密钥验证。这就是frp的Secret TCP(stcp)模式的思路。

如下图所示,frp客户端1需要暴露一个tcp端口。于是他在向服务端注册时,额外传了一个密钥。

所有其他设备期望访问这个端口,必须要先验证这个密钥。

这样一来,我们就需要在发起请求的设备上也配置一个frp客户端,通过这个客户端带着密钥发起请求。
# frpcini 配置:

[common]

# 你的frp服务器的公网ip

server_addr = xxxx

# 你的frp服务器的默认端口

server_port = 7000

[rdp]

type = stcp

# 只有 sk 一致的用户才能访问到此服务

sk = abcdefg

local_ip = 127001

# 远程桌面的本地端口号

local_port = 3389

# frpcini

[common]

# 你的frp服务器的公网ip

server_addr = xxxx

# 你的frp服务器的默认端口

server_port = 7000

[rdp_visitor]

type = stcp

# stcp 的访问者

role = visitor

# 要访问的 stcp 代理的名字

server_name = rdp

# 只有 sk 一致的用户才能访问到此服务

sk = abcdefg

# 绑定本地端口用于访问 远程桌面 服务

bind_addr = 127001

bind_port = 6000

此时,你在客户端2,使用127001:6000即可访问客户端1的远程服务。
思考一下,我们的frp服务器主要目的是为了解决两台设备相互识别的情况。在正式运行时,其实并不需要服务端做什么事情。

frp客户端就好比两个相亲的对象,frp服务端是媒婆。媒婆介绍完之后,就应该有相亲对象自己聊天了。

这个就是点对点模式(p2p)。在frp中,这个可以通过设置xtcp实现。

服务端:配置需要增加一个udp端口 7001,增加完之后就是如下

# frpsini

[common]

bind_port = 7000

bind_udp_port = 7001

# frpcini

[common]

# 你的frp服务器的公网ip

server_addr = xxxx

# 你的frp服务器的默认端口

server_port = 7000

[rdp]

type = xtcp

# 只有 sk 一致的用户才能访问到此服务

sk = abcdefg

local_ip = 127001

# 远程桌面的本地端口号

local_port = 3389

# frpcini

[common]

# 你的frp服务器的公网ip

server_addr = xxxx

# 你的frp服务器的默认端口

server_port = 7000

[rdp_visitor]

type = xtcp

# stcp 的访问者

role = visitor

# 要访问的 stcp 代理的名字

server_name = rdp

# 只有 sk 一致的用户才能访问到此服务

sk = abcdefg

# 绑定本地端口用于访问 远程桌面 服务

bind_addr = 127001

bind_port = 6000
此时,你在客户端2,使用同样的方式,以127001:6000即可访问客户端1的远程服务。

不过需要注意的是,目前frp的p2p服务还不完善,很多nat设备还是不能够穿透的。

此时大家还是需要切换回stcp来使用。

运行以下指令找到你设备的Nginx安装目录及nginxconf配置文件所在位置

一般会在这个位置,我当时默认安装的位置 /文件里面>

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10906598.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-12
下一篇2023-05-12

发表评论

登录后才能评论

评论列表(0条)

    保存