部署frp进行内网穿透实现远程连接

发布于:2022-12-15 ⋅ 阅读:(284) ⋅ 点赞:(0)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

家里有一台电脑,使用的移动运营商宽带,PPPOE拨号上网,无静态IP,因有时需要远程连接进行文件的打印,最早使用过teamviewer,现在使用向日葵或toDesk进行远程连接,因是个人版,只可进行远程连接,不能传输文件;最近有时间部署了frp,实现了mstsc到家里的电脑,跟在局域网远程桌面连接一样,非常方便,在此记录一下安装、部署、调试的过程。

一、frp是什么

frp 是一个高性能的反向代理应用,支持 tcp、udp、 http、https 协议。支持 Windows、macOS 与 Linux的系统环境,只需要一台拥有固定公网 IP 的电脑,部署好frp,然后就能实现内网穿透了。

二、frp的作用

1、利用处于防火墙后的机器,对外网环境提供 http 或 https 服务。
2、对于 http, https 服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名共用一个80端口。
3、利用处于防火墙后的机器,对外网环境提供 tcp 和 udp 服务,例如在家里通过 ssh 访问处于公司局部环境的主机。

三、部署前准备

1、一台服务端电脑:vps、物理电脑、服务器均可;此处我使用的是一台基于vmware esxi搭建的虚拟机,系统环境:CentOS Linux release 7.3.1611 (Core);
2、一台客户端电脑,系统环境:windows10专业版;
3、一个公网ip地址,此处的公网ip地址在防火墙设备里面做了内网地址映射,将来如有需要还可以用此ip给其他内网ip映射端口使用,省的直接接入服务端电脑,有些浪费网络资源。

四、frps服务端部署过程

1.下载frp

#此处可以根据服务端电脑系统环境下载相应的版本:
点此下载

[root@node124 ~]# wget https://github.com/fatedier/frp/releases/download/v0.44.0/frp_0.44.0_linux_amd64.tar.gz
--2022-09-15 18:02:22--  https://github.com/fatedier/frp/releases/download/v0.44.0/frp_0.44.0_linux_amd64.tar.gz
Resolving github.com (github.com)... 20.205.243.166
Connecting to github.com (github.com)|20.205.243.166|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/48378947/28cb7012-5ea7-4347-971b-3e49bd5da68d?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20220915%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20220915T100223Z&X-Amz-Expires=300&X-Amz-Signature=84ab8bbdeea51d6a35a7f4c84c9ca61ce35f3fbd4737ae691961fdbf5bef1a8d&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=48378947&response-content-disposition=attachment%3B%20filename%3Dfrp_0.44.0_linux_amd64.tar.gz&response-content-type=application%2Foctet-stream [following]
--2022-09-15 18:02:23--  https://objects.githubusercontent.com/github-production-release-asset-2e65be/48378947/28cb7012-5ea7-4347-971b-3e49bd5da68d?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20220915%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20220915T100223Z&X-Amz-Expires=300&X-Amz-Signature=84ab8bbdeea51d6a35a7f4c84c9ca61ce35f3fbd4737ae691961fdbf5bef1a8d&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=48378947&response-content-disposition=attachment%3B%20filename%3Dfrp_0.44.0_linux_amd64.tar.gz&response-content-type=application%2Foctet-stream
Resolving objects.githubusercontent.com (objects.githubusercontent.com)... 185.199.111.133, 185.199.110.133, 185.199.108.133, ...
Connecting to objects.githubusercontent.com (objects.githubusercontent.com)|185.199.111.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 9620309 (9.2M) [application/octet-stream]
Saving to: ‘frp_0.44.0_linux_amd64.tar.gz.2’

100%[==============================================================================================================================================================================>] 9,620,309    599KB/s   in 35s    

2022-09-15 18:03:00 (268 KB/s) - ‘frp_0.44.0_linux_amd64.tar.gz.2’ saved [9620309/9620309]

2.解压文件

tar -zxvf frp_0.44.0_linux_amd64.tar.gz.2

[root@node124 ~]# tar -zxvf frp_0.44.0_linux_amd64.tar.gz.2 
frp_0.44.0_linux_amd64/
frp_0.44.0_linux_amd64/frpc.ini
frp_0.44.0_linux_amd64/LICENSE
frp_0.44.0_linux_amd64/frpc
frp_0.44.0_linux_amd64/frpc_full.ini
frp_0.44.0_linux_amd64/frps.ini
frp_0.44.0_linux_amd64/frps
frp_0.44.0_linux_amd64/frps_full.ini

3.文件夹改名

mv frp_0.44.0_linux_amd64 /opt/frp

[root@node124 ~]# mv frp_0.44.0_linux_amd64 /opt/frp
[root@node124 ~]# cd /opt/frp
[root@node124 frp]# ll
total 24488
-rwxr-xr-x 1 1001 121 10997760 Jul 11 00:15 frpc
-rw-r--r-- 1 1001 121    10934 Jul 11 00:19 frpc_full.ini
-rw-r--r-- 1 1001 121      126 Jul 11 00:19 frpc.ini
-rwxr-xr-x 1 1001 121 14036992 Jul 11 00:15 frps
-rw-r--r-- 1 1001 121     5686 Jul 11 00:19 frps_full.ini
-rw-r--r-- 1 1001 121       26 Jul 11 00:19 frps.ini
-rw-r--r-- 1 1001 121    11358 Jul 11 00:19 LICENSE

#服务端使用frps、frps.ini这两个文件,其余文件可删除或者不做处理均可

4.编辑frps.ini文件

vi frps.ini

[root@node124 frp]# vi frps.ini 

[common]
bind_port = 7000
dashboard_port = 7500
dashboard_user = root
dashboard_pwd = root
token = qwertyuiopasdfgghjjjjjj111234445

#说明:
1>、“bind_port”表示用于客户端和服务端连接的端口,客户端配置文件内服务端口需要和此一致;
2>、“dashboard_port”是服务端仪表板端口,部署完成后,可用服务端ip+此端口打开浏览器登录查看frp连接状态;
3>、“dashboard_user”和“dashboard_pwd”表示打开仪表板页面登录用户名和密码,可根据喜好设置。
4>、“token”是用于客户端和服务端连接的口令,客户端需要和服务端配置一致。

5.启动frps服务端

./frps -c frps.ini

[root@node124 frp]# ./frps -c frps.ini 
2022/09/15 18:41:12 [I] [root.go:209] frps uses config file: frps.ini
2022/09/15 18:41:12 [I] [service.go:194] frps tcp listen on 0.0.0.0:7000
2022/09/15 18:41:12 [I] [service.go:293] Dashboard listen on 0.0.0.0:7500
2022/09/15 18:41:12 [I] [root.go:218] frps started successfully

#出现以上信息,即表明frps服务端启动成功;此时frps启动命令处于前台,一旦当前终端断开连接,此服务即停止;可将此命令在后台运行,或者设置为启动服务,随开机自动启动,下面进行具体操作。

6.开启服务端口

1>、查看firewalld状态

[root@node124 ~]# systemctl status firewalld.service 
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: active (running) since Wed 2022-09-14 14:01:08 CST; 1 day 4h ago
     Docs: man:firewalld(1)
 Main PID: 11236 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─11236 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid

Sep 14 14:01:07 node124 systemd[1]: Starting firewalld - dynamic firewall daemon...
Sep 14 14:01:08 node124 systemd[1]: Started firewalld - dynamic firewall daemon.
Sep 14 14:01:08 node124 firewalld[11236]: WARNING: AllowZoneDrifting is enabled. This is considered an insecure configuration option. It will be removed in a future release. Please consider disabling it now.
Sep 14 14:37:04 node124 firewalld[11236]: WARNING: AllowZoneDrifting is enabled. This is considered an insecure configuration option. It will be removed in a future release. Please consider disabling it now.

2>、用firewalld开启7000、7500端口

[root@node124 ~]# firewall-cmd --zone=public --add-port=7000/tcp --add-port=7500/tcp --permanent
success

3>、重启firewalld.service,查看开启端口

[root@node124 ~]# systemctl restart firewalld.service 
[root@node124 ~]# firewall-cmd --zone=public --list-ports
80/tcp 21/tcp 7000/tcp 7500/tcp

7.登录仪表板,查看frps状态

在这里插入图片描述

8.设置frps开机启动

#在frps低版本的下载文件夹下面有一个systemd的文件夹,将里面的frps.service文件拷贝到“/etc/systemd/system/”目录下,对frps.service进行修改,然后启动frps.service服务。
1>、编辑frps.service
vi frps.service

[root@node124 system]# vi frps.service 

[Unit]
Description=Frp Server Service
After=network.target

[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/opt/frp/frps -c /opt/frp/frps.ini

[Install]
WantedBy=multi-user.target

#ExecStart=/opt/frp/frps -c /opt/frp/frps.ini,这个目录“/opt/frp/”根据个人的安装路径进行设置。
2>、使用systemctl命令来启动frps.service
systemctl start frps.service

[root@node124 system]# systemctl start frps.service

3>、使用systemctl命令来查看frps.service状态
systemctl status frps.service

[root@node124 system]# systemctl status frps.service 
● frps.service - Frp Server Service
   Loaded: loaded (/etc/systemd/system/frps.service; disabled; vendor preset: disabled)
   Active: active (running) since Fri 2022-09-16 11:00:17 CST; 58s ago
 Main PID: 31459 (frps)
   CGroup: /system.slice/frps.service
           └─31459 /opt/frp/frps -c /opt/frp/frps.ini

Sep 16 11:00:17 node124 systemd[1]: Started Frp Server Service.
Sep 16 11:00:17 node124 frps[31459]: 2022/09/16 11:00:17 [I] [root.go:209] frps uses config file: /opt/frp/frps.ini
Sep 16 11:00:17 node124 frps[31459]: 2022/09/16 11:00:17 [I] [service.go:194] frps tcp listen on 0.0.0.0:7000
Sep 16 11:00:17 node124 frps[31459]: 2022/09/16 11:00:17 [I] [service.go:293] Dashboard listen on 0.0.0.0:7500
Sep 16 11:00:17 node124 frps[31459]: 2022/09/16 11:00:17 [I] [root.go:218] frps started successfully

4>、使用systemctl命令设置frps.service开机自启动
systemctl enable frps.service

[root@node124 system]# systemctl enable frps.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/frps.service to /etc/systemd/system/frps.service.

#此处systemctl enable frps.service可不用设置,frps.service服务也会开机自启动;如果frps.service在/lib/systemd/system/这个目录下,需要使用systemctl enable frps.service进行设置开机自启动;因/etc/systemctl/system/目录配置文件优先级比/lib/systemd/system/目录下的更高,Systemd 默认从目录/etc/systemd/system/读取配置文件。
5>、使用systemctl设置frps.service的常用命令

systemctl daemon-reload # 刷新服务列表
systemctl status frps.service # 查看frps状态
systemctl enable frps.service # 开启开机自启
systemctl disable frps.service # 关闭开机自启
systemctl start frps.service # 启动服务
systemctl stop frps.service # 停止服务
systemctl restart frps.service # 重启服务

#至此frp服务端配置完毕,后续客户用到的服务端口,还需要在服务端电脑进行开启#

五、frpc客户端部署过程

1.下载frp

#此处可以根据客户端电脑系统环境下载相应的版本:
https://github.com/fatedier/frp/releases/tag/v0.44.0
在这里插入图片描述

2.解压改名并放到c盘根目录下

在这里插入图片描述

3.编辑frpc.ini文件

[common]
server_addr = "服务器端公网IP地址"
server_port = 7000
token = qwertyuiopasdfgghjjjjjj111234445

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

[remote desktop]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 6001

#客户端使用frpc、frpc.ini这两个文件,其余文件可删除或者不做处理均可

4.生成bat文件

#在windows启动文件夹内建立bat文件,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
frpc.exe -c frpc.ini
exit

#使用bat文件开机自动执行“frpc.exe -c frpc.ini”

5.查看服务端仪表板状态

在这里插入图片描述
#可以看到连接统计为1,说明frp客户端与服务器端连接成功

6.用firewalld开启6001端口

[root@node124 system]# firewall-cmd --zone=public --add-port=6001/tcp --permanent
success

7.用mstsc进行连接测试

在这里插入图片描述

#出现输入用户名和密码的选项,输入客户端的用户和密码即可建立远程连接;为了方便管理,此处的公网ip做了域名解析,所以连接时输入的是:域名:端口


总结

1>、本文的客户端只做了远程桌面连接的配置,如果有http的需求,可以在客户端配置文件内进行修改,同时在服务端开启相应的端口即可。
2>、windows客户端的frpc进程,会因系统自带的Windows Defender Firewall误认为危险进程被误杀掉,可以在Windows Defender Firewall配置排除文件夹frp和进程frpc。