frp实现内网穿透,自启动

一、需要用到的工具

1、一台具有公网IP的服务器(阿里云,腾讯云等均可)
2、frp,需要注意客户端版本应与服务器器端版本相同
3、目标客户机(被穿透计算机)

二、服务器配置

下载frp (选择适合版本)
frp下载地址 https://github.com/fatedier/frp/releases
在这里插入图片描述

解压命令

tar -zxvf frp_0.22.0_linux_amd64.tar.gz

把解压出来的文件夹复制到你想要的目录下,为了方便我直接放在用户目录下了,进入该目录

cd frp

查看一下文件

ls -a

我们只需要关注如下几个文件

frps
frps.ini
frpc
frpc.ini

前两个文件(s结尾代表server)分别是服务端程序和服务端配置文件,后两个文件(c结尾代表client)分别是客户端程序和客户端配置文件。
因为我们正在配置服务端,可以删除客户端的两个文件

rm frpc
rm frpc.ini

然后修改frps.ini文件

vim frps.ini

这个文件应有如下格式

[common]
bind_port = 7000
dashboard_port = 7500
token = 12345678 #客户端需要设置一样的令牌,防止他人登录
dashboard_user = admin
dashboard_pwd = admin
vhost_http_port = 10080
vhost_https_port = 10443

配置文件各参数含义

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

编辑完成后保存(按ESC建,在底部输入 :wq即可)。
之后我们就可以运行frps的服务端了

./frps -c frps.ini

我们的服务端仅运行在前台,如果Ctrl+C停止或者关闭SSH窗口后,frps均会停止运行,因而我们使用 nohup命令将其运行在后台。

设置服务后台运行

nohup ./frps -c frps.ini &

输出如下内容即表示正常运行

nohup: ignoring input and appending output to 'nohup.out'

此时可先使用Ctrl+C关闭nohup,frps依然会在后台运行,使用jobs命令查看后台运行的程序

jobs

在结果中我们可以看到frps正在后台正常运行

[1]+  Running                 nohup ./frps -c frps.ini &

此时访问 x.x.x.x:7500 依然可以打开仪表板界面,至此,服务端即设置完成,你可以关闭SSH窗口了。
(或者使用PM2守护进程,需要先安装node.js)

客户端设置

frp的客户端就是我们想要真正进行访问的那台设备,大多数情况下应该会是一台Windows主机,我们以windows为例;Linux配置方法类似。
同样地,根据客户端设备的情况选择相应的frp程序进行下载。
frp下载地址 https://github.com/fatedier/frp/releases
在这里插入图片描述
将其解压在了C盘根目录下,并且将文件夹重命名为“frp”,可以删除其中的frps和frps.ini文件。
用文本编辑器打开frpc.ini,与服务端类似,内容如下

[common]
server_addr = x.x.x.x
server_port = 7000
token = 123456 #需要与服务端令牌相同
[rdp]
type = tcp
local_ip = 127.0.0.1           
local_port = 3389
remote_port = 7001 #服务器通过该端口访问
[smb]
type = tcp
local_ip = 127.0.0.1
local_port = 445
remote_port = 7002

注:注释在配置完成后删除。

其中common字段下的三项即为服务端的设置。

  1. server_addr 为服务端IP地址,填入即可。
  2. server_port 为服务器端口,填入你设置的端口号即可,如果未改变就是7000
  3. token 是你在服务器上设置的连接口令,原样填入即可。

自定义规则

frp实际使用时,会按照端口号进行对应的转发,原理如下图所示。
在这里插入图片描述
上面frpc.ini的rdp、smb字段都是自己定义的规则,自定义端口对应时格式如下。

  1. **[xxx]**表示一个规则名称,自己定义,便于查询即可。

  2. type表示转发的协议类型,有TCP和UDP等选项可以选择,如有需要请自行查询frp手册。

  3. local_port是本地应用的端口号,按照实际应用工作在本机的端口号填写即可。

  4. remote_port是该条规则在服务端开放的端口号,自己填写并记录即可。

RDP,
即Remote Desktop 远程桌面,Windows的RDP默认端口是3389,协议为TCP,建议使用frp远程连接前,在局域网中测试好,能够成功连接后再使用frp穿透连接。
SMB,
即Windows文件共享所使用的协议, 默认端口号445,协议TCP,本条规则可实现远程文件访问。 配置完成frpc.ini后,就可以运行frpc了

frpc程序不能直接双击运行!

使用命令提示符或Powershell进入该目录下

cd C:\frp

并执行

./frpc -c frpc.ini

运行frpc程序,窗口中输出如下内容表示运行正常。

客户端后台运行及开机自启

frpc运行时始终有一个命令行窗口运行在前台,影响美观,我们可以使用一个批处理文件来将其运行在后台,而且可以双击执行,每次打开frpc不用再自己输命令了。
在任何一个目录下新建一个文本文件并将其重命名为“frpc.bat”,编辑,粘贴如下内容并保存。

@echo off
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit
:begin
REM
cd C:\frp #将cd后的路径更改为你的frpc实际存放的目录。
frpc -c frpc.ini
exit

之后直接运行这个 .bat 文件即可启动frpc并隐藏窗口(可在任务管理器中退出)。
开机启动,把这个 .bat 文件放到Windows的开机启动文件夹就好了。

如果需要守护进程可使用

minsw注册为自动的服务(此种方式是带守护进程功能的)

下载 winsw,选择 WinSW.NET4.exe,将它改名为 frpcrun.exe
https://github.com/winsw/winsw/releases

创建 xml 配置文件,名字叫 frpcrun.xml

<service>
  <!-- ID of the service. It should be unique across the Windows system-->
  <id>frpcrun</id>
  <!-- Display name of the service -->
  <name>frpcrun</name>
  <!-- Service description -->
  <description>frpc start</description>
  
  <!-- Path to the executable, which should be started -->
  <executable>frpc</executable>
  <arguments>-c frpc.ini</arguments>
  <startmode>Automatic</startmode>
  <logmode>reset</logmode>
</service>

将这2个文件放到同一目录, 然后执行 winsw install 即可 ,如果需要卸载服务执行winsw uninstall

可以根据需要在frpc.ini后追加规则即如果配置多个客户端注意frpc.ini中的连接名不能相同,不能用同样的配置文件,否者会出现冲突。

强烈建议

在使用frp直接测试内网穿透前,先在局域网内测试好相关功能的正常使用。
配置好可能会影响的Windows防火墙等内容(阿里云和腾讯云需要打开安全组端口)。
在内网调试通过后再使用frp进行内网穿透测试。

猜你喜欢

转载自blog.csdn.net/p715306030/article/details/115036469
今日推荐