Frp内网穿透

目的:通过内网穿透,暴漏远程桌面端口,可以远程连接家里的电脑,或者访问其他部署在家里电脑里的服务。

必要条件:有公网ip服务器

github地址:https://github.com/fatedier/frp

frpc 客户端

frps 服务端

服务端配置

frps.ini

[common]
bind_port = 5000  #服务端监听端口,后边配置客户端要用到,服务器防火墙需要放行该端口
dashboard_port = 6001 #web面板端口,服务器防火墙需要放行该端口
token = ********* #密码,配置客户端时用到
dashboard_user = username #面板登录用户
dashboard_pwd = password #面板登录密码
vhost_http_port = 6003 #http协议端口,服务器防火墙需要放行该端口
vhost_https_port = 6004 #https协议端口,服务器防火墙需要放行该端口

启动服务

nohup ./frps -c frps.ini  > frp.log 2>&1 &

客户端配置

[common]
server_addr = xx.xx.xx.xx #服务端公网IP
server_port = 5000  #服务端bind_port地址
token = ******** #服务端token
#下面配置为开启客户端WEBUI
admin_addr = 127.0.0.1
admin_port = 7400
admin_user = admin
admin_pwd = admin

[remote-1] #随便起个名字
type = tcp #连接类型
local_ip = 127.0.0.1 
local_port = 13389 #要访问本机的哪个端口
remotePort = 6000 #指定服务端访问的端口,不填默认随机。服务端防火墙要放行改端口,最好固定值。

linux启动服务

nohup ./frpc -c frpc.ini  > frp.log 2>&1 &

查看web看板

windows启动frpc客户端

进入到frp的目录后输入cmd

前台启动

.\frpc.exe -c frpc.toml

另一种方式:XTCP 打洞穿透

官方文档解释

了解 frp XTCP 类型的代理。
XTCP 的配置方式和 STCP 很类似。但是会采用 P2P 的方式进行打洞穿透,如果成功,后续的流量将不会经过 frps,而是直接通信,不再受到 frps 所在服务器的带宽限制。
由于打洞成功率取决于所处网络的 NAT 类型,所以 XTCP 的可用性和稳定性无法保证。在需要可靠连接的情况下,建议使用 STCP 替代。
当 visitor 配置了 keepTunnelOpen = true 时,frpc 会定期检测隧道是否打开,如果没有,则会尝试打洞建立隧道,这样可以始终保持隧道打开,在需要连接对端服务时,可以避免延迟。
默认情况下,visitor 会在接收到用户连接后尝试打洞,如果打洞失败,可以尝试多次建立连接,程序会尝试其他的打洞策略,有可能在多次重试后成功打洞。一旦打洞成功,后续新增连接不必重复打洞,而是可以复用隧道。

注:这种方式的好处是,一旦打洞成功,所有请求和流量不再经过中间服务器,而是两台电脑之间直接连接,连接速度不受中间服务器带宽限制。

坏处就是不一定可以打洞成功

配置示例:

服务端配置参考上边不变

被访问客户端(结合上边的配置,可以同时配置两种方式)

log.to="C:\frp_0.52.3\frpc.log"
log.maxDays=10
log.level="debug"
[common]
server_addr = xx.xx.xx.xx #服务端公网IP
server_port = 5000  #服务端bind_port地址
token = ******** #服务端token
#下面配置为开启客户端WEBUI
admin_addr = 127.0.0.1
admin_port = 7400
admin_user = admin
admin_pwd = admin

[remote-1] #随便起个名字
type = tcp #连接类型
local_ip = 127.0.0.1 
local_port = 13389 #要访问本机的哪个端口
remotePort = 6000 #指定服务端访问的端口,不填默认随机。服务端防火墙要放行改端口,最好固定值。

[remote-2]
type = xtcp
sk = *********
local_ip = 127.0.0.1
local_port = 13389

访问者客户端配置

# 连接服务器配置
[common]
server_addr = xx.xx.xx.xx #服务端公网IP
server_port = 5000
token = ******** #服务端token
# 开启控制面板
admin_addr = 127.0.0.1
admin_port = 7400
# 设置控制面板账号密码
admin_user = admin
admin_pwd = admin
# 设置需要访问穿透的命名,可随意命名
[Mstsc_visitor]
# 设置协议xtcp
type = xtcp
# 设置角色为visitor
role = visitor
# 设置被穿透主机的frpc穿透名称
server_name = remote-2
# 设置密钥
sk = *********
# 将穿透的IP地址绑定为本地地址
bind_addr = 127.0.0.1
# 将穿透的端口绑定为本地端口
bind_port = 3390
keepTunnelOpen=true

配置好后启动服务,访问127.0.0.1:3390即可

注册为系统服务并开机自启

方法一

创建文本文件改名为ftpcstart.vnb,填写下面代码

注:程序目录不能有空格,且必须放在C盘,要不然会报错

set ws=WScript.CreateObject("WScript.Shell")
ws.Run "C:\frp_0.52.3\frpc.exe -c C:\frp_0.52.3\frpc.toml",0

保存后把脚本放到下面目录下(用户名根据自己的修改一下)

C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\

放好后再开始菜单查找「启动应用」

在这里可以控制刚刚添加的启动项

方法二(推荐)

使用nssm工具注册为系统服务

官网地址:https://nssm.cc/

下载地址:https://nssm.cc/release/nssm-2.24.zip

解压后进入目录,按住Shift+右键 再此处打开Powershell窗口(或者使用cmd窗口)

执行命令

 .\nssm.exe install frpc

根据自己的路径填写后点击install service

完成后

右键 此电脑

管理-服务和应用程序-服务

找到frpc,双击后点击启动,启动类型:自动。


Frp内网穿透
https://www.hechunyu.com/archives/1701239465108
作者
chunyu
发布于
2023年11月29日
许可协议