frp实现内网穿透功能

frp实现内网穿透功能

frp原理:

frp实现内网穿透功能_第1张图片
上面frpc.ini的rdp、smb字段都是自己定义的规则,自定义端口对应时格式如下。
“[xxx]”表示一个规则名称,自己定义,便于查询即可。
“type”表示转发的协议类型,有TCP和UDP等选项可以选择,如有需要请自行查询frp手册。
“local_port”是本地应用的端口号,按照实际应用工作在本机的端口号填写即可。
“remote_port”是该条规则在服务端开放的端口号,自己填写并记录即可。
RDP,即Remote Desktop 远程桌面,Windows的RDP默认端口是3389,协议为TCP,建议使用frp远程连接前,在局域网中测试好,能够成功连接后再使用frp穿透连接。
SMB,即Windows文件共享所使用的协议,默认端口号445,协议TCP,本条规则可实现远程文件访问。

准备工作:

  1. 有公网IP的服务器一台实体机或者vps都行(linux或者windows都行)

  2. 需要做内网穿透的PC一台(linux或者windows都行)

由于我使用的是vps,所以这篇文章就围绕vps服务器linux系统来介绍一下:

VPS相关
因为frp的原理是利用服务端(所准备的VPS)进行转发,因而VPS的速度直接决定了之后连接的质量,请根据自己的需要选择相应主机配置。
我使用了DigitalOcean的新加坡机房,北京移动、中国教育网下测试速度尚可。 系统使用Ubuntu 16.04.5
x64,frp客户端和服务端本身同时均支持Linux和Windows,且配置方法一样,请根据实际环境自行测试,如果你是新建的VPS,那选择Ubuntu

服务器配置:

SSH连接到VPS之后运行如下命令查看处理器架构,根据架构下载不同版本的frp
arch
查看结果,如果是“X86_64“即可选择”amd64”,
下载 frp_0.22.0_linux_amd64.tar.gz

wget https://github.com/fatedier/frp/releases/download/v0.22.0/frp_0.22.0_linux_amd64.tar.gz

然后解压

tar -zxvf frp_0.22.0_linux_amd64.tar.gz

文件夹改个名,方便使用

cp -r frp_0.22.0_linux_amd64 frp

把解压出来的文件夹复制到你想要的目录下

cd frp

查看一下文件

ls 

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

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

如果没有必要,端口均可使用默认值,token、user和password项请自行设置

“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主机时使用,本文不涉及HTTP协议,因而照抄或者删除这两条均可。
编辑完成后保存(vim保存如果不会请自行搜索)。
之后我们就可以运行frps的服务端了

./frps -c frps.ini

如果看到屏幕输出这样一段内容,即表示运行正常,如果出现错误提示,请检查上面的步骤。

2019/01/12 15:22:39 [I] [service.go:130] frps tcp listen on 0.0.0.0:7000
2019/01/12 15:22:39 [I] [service.go:172] http service listen on 0.0.0.0:10080
2019/01/12 15:22:39 [I] [service.go:193] https service listen on 0.0.0.0:10443
2019/01/12 15:22:39 [I] [service.go:216] Dashboard listen on 0.0.0.0:7500
2019/01/12 15:22:39 [I] [root.go:210] Start frps success

此时访问 x.x.x.x:7500 并使用自己设置的用户名密码登录,即可看到仪表板界面

frp服务端仪表板界面

服务端后台运行
至此,我们的服务端仅运行在前台,如果Ctrl+C停止或者关闭SSH窗口后,frps均会停止运行,因而我们使用 nohup命令将其运行在后台。
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窗口了。

客户端设置

frp的客户端就是我们想要真正进行访问的那台设备,大多数情况下应该会是一台Windows主机,因而本文使用Windows主机做例子;Linux配置方法类似,不再赘述。
同样地,根据客户端设备的情况选择相应的frp程序进行下载,Windows下下载和解压等步骤不再描述。
假定你下载了“frp_0.22.0_windows_amd64.zip”,将其解压在了C盘根目录下,并且将文件夹重命名为“frp”,可以删除其中的frps和frps.ini文件。
用文本编辑器打开frpc.ini,与服务端类似,内容如下。

[common]
server_addr = x.x.x.x
server_port = 7000
token = won517574356
[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字段下的三项即为服务端的设置。
“server_addr”为服务端IP地址,填入即可。
“server_port”为服务器端口,填入你设置的端口号即可,如果未改变就是7000
“token”是你在服务器上设置的连接口令,原样填入即可。

配置自启动服务

服务器后端运行会出现每次重启服务器后都要手动开启服务,比较麻烦。我们可以使用配置服务的方法使frp开机自启。以下是具体操作方法,这种方法也可以在客户端使用。
设置frp开机自启

linux创建服务文件

sudo vim /etc/systemd/system/frp.service
填入如下信息,WorkingDirectory,ExecStart请自行替换

[Unit]

Description=frps daemon

After=syslog.target network.target

Wants=network.target

[Service]

Type=simple

ExecStart=/root/frp/frps -c /root/frp/frps.ini

Restart= always

RestartSec=1min

[Install]

WantedBy=multi-user.target

#刷新服务列表:
systemctl daemon-reload

#设置开机自启
systemctl enable frp
#关闭开机自启
systemctl disable frp

#启动服务
systemctl start frp
#停止服务
systemctl stop frp

windows客户端服务

使用nssm

我们去下载NSSM服务。
NSSM是一个服务封装程序,它可以将普通exe程序封装成服务,使之像windows服务一样运行。
http://www.nssm.cc/download

使用方法

1.把下载的nssm文件放入frp客户端目录
frp实现内网穿透功能_第2张图片

2.cmd定位至nssm.exe所在目录
frp实现内网穿透功能_第3张图片

3.输入 nssm install
frp实现内网穿透功能_第4张图片

  1. Application Path: 选择frpc.exe Arguments:填入-c frpc.ini Service name:服务的名称
    frp实现内网穿透功能_第5张图片

  2. 在任务管理器中启动frpc,以后电脑重新启动依然开机运行
    frp实现内网穿透功能_第6张图片
    6.NSSM技巧
    nssm install servername //创建servername服务
    nssm start servername //启动服务
    nssm stop servername //暂停服务
    nssm restart servername //重新启动服务
    nssm remove servername //删除创建的servername服务

你可能感兴趣的:(frp,内网穿透,linux)