目标:实现在公司用mstsc访问控制家里的电脑
附:基本配置参考:FRP服务端和客户端的基本配置_JohnGene的博客
准备资料
1、带有公网ip的Linux主机,下面假设1.2.3.4是固定外网ip
2、家用电脑联网,以下FRP客户端就是在家用电脑中操作的
FRP下载地址:Releases · fatedier/frp · GitHub
中文文档:frp/README_zh.md at master · fatedier/frp · GitHub
注意:frps是服务端程序,frpc是客户端程序
服务端配置
服务端程序 frp_0.30.0_linux_amd64.ter.gz 解压出来是这个样子:
编辑frps.ini为以下内容:
[common] bind_port = 7000 #与客户端绑定的进行通信的端口 vhost_http_port = 80 #访问客户端web服务自定义的端口号[common] bind_port = 7000 #与客户端绑定的进行通信的端口 vhost_http_port = 80 #访问客户端web服务自定义的端口号[common] bind_port = 7000 #与客户端绑定的进行通信的端口 vhost_http_port = 80 #访问客户端web服务自定义的端口号
注意防火墙和安全组策略要开放自己设置的7000和80端口
进行到解压后的frp目录,然后通过./frps -c frps.ini命令即可启动服务端。
看到start frps success则说明成功
只用这种方式开启frps的话frps会占据了整个命令窗口,退出即停,所以接下来要考虑如何让它在后台运行并且开机自启。
新建 frps.service 文件:
vi /etc/systemd/system/frps.service
[Unit] Description=frps daemon After=syslog.target network.target Wants=network.target [Service] Type=simple ExecStart=/frp/frps -c /frp/frps.ini Restart= always RestartSec=1min [Install] WantedBy=multi-user.target[Unit] Description=frps daemon After=syslog.target network.target Wants=network.target [Service] Type=simple ExecStart=/frp/frps -c /frp/frps.ini Restart= always RestartSec=1min [Install] WantedBy=multi-user.target[Unit] Description=frps daemon After=syslog.target network.target Wants=network.target [Service] Type=simple ExecStart=/frp/frps -c /frp/frps.ini Restart= always RestartSec=1min [Install] WantedBy=multi-user.target
注意ExecStart中要配置成自己的路径.
授权:
chmod 777 /frp/frps
chmod 777 /frp/frps.ini
然后使用systemctl start frps即可启动frps, 用systemctl enable frps即可将frps设置为开机启动。
客户端的配置
frp_0.30.0_windows_amd64.zip解压出来后:
配置frpc.ini:
[common] server_addr = 1.2.3.4 server_port = 7000 [mstsc] type = tcp local_ip = blogs.johngene.cn local_port = 3389 remote_port = 6999 [web] type = http #访问协议 local_port = 8080 #内网web服务的端口号 custom_domains = 1.2.3.4 #所绑定的公网服务器域名,一级、二级域名、ip地址都可以[common] server_addr = 1.2.3.4 server_port = 7000 [mstsc] type = tcp local_ip = blogs.johngene.cn local_port = 3389 remote_port = 6999 [web] type = http #访问协议 local_port = 8080 #内网web服务的端口号 custom_domains = 1.2.3.4 #所绑定的公网服务器域名,一级、二级域名、ip地址都可以[common] server_addr = 1.2.3.4 server_port = 7000 [mstsc] type = tcp local_ip = blogs.johngene.cn local_port = 3389 remote_port = 6999 [web] type = http #访问协议 local_port = 8080 #内网web服务的端口号 custom_domains = 1.2.3.4 #所绑定的公网服务器域名,一级、二级域名、ip地址都可以
注意防火墙和安全组策略要开启自己设置的6999、7000、80端口,remote_port 就是我们接下来要使用的端口
启动客户端:
start proxy success成功
这时就可以是用mstsc访问了
注意开启允许远程访问,防火墙要配置允许对应的数据或者直接关闭:
windows客户端需要将frpc设置为开机自启[可选]
1.编写frpc的执行脚本
新建文本文档输入:
E:\FRPC\frpc.exe -c E:\FRPC\frpc.ini
这里的 frpc.exe 和 frpc.ini 的地址不要搞错了
保存后修改后缀名为.bat文件
2.右击我的电脑>管理>系统工具>任务计划程序>任务计划程序库>创建任务
3.常规选项:名称、不管用户是否登录都要运行、使用最高权限运行
4.触发器:新建、开始任务选启动时其他默认,点确定
5.操作:新建操作、选启动程序、浏览选择bat脚本、确定
6.条件:全不选或者选择一个只有在以下网络时才启动,选任何网络
7.设置:选允许按需运行任务、如果过了计划开始时间,立即启动任务、如果任务失败,按以下频率重新启动(1分钟300次或者酌情填写)、如果此任务
已经运行选择请勿启动新实例
至此可以重启电脑测试了,注意重启后不要进入登录,直接用另一台机器用mstsc连接试试!
注意事项
如上安装FRP是不安全的,网络任何一台电脑都可以连接,下面分享个安全的配置方法:
客户端的协议采用stcp方式:
#服务端:[common] bind_port = 7000 bind_udp_port = 7001 token = abcdefg # bind_port:需要服务器开放端口 # bind_udp_port:提供udp协议的客户端使用,也需要服务器开放端口 # token:客户端连接服务端时需要的像密码一样的东西 #客户端A[被连接的机器]: [client_A] type=stcp sk=12345678 local_ip=blogs.johngene.cn local_port=3389 # type选择stcp # sk:连接A需要的秘钥 # local_ip:A机器的本地地址 # local_port:A机器的连接端口 #客户端B[连接A的机器]: [client_A_visitor] type=stcp role=visitor server_name=client_A sk=12345678 bind_ip=blogs.johngene.cn bind_port=789 # type选择stcp # role:角色visitor # server_name:A机器配置的名称client_A # sk:和A机器配置的sk保持一致 # bind_ip:B机器的本地地址 # bind_port:B机器随意一个不被占用的端口#服务端:[common] bind_port = 7000 bind_udp_port = 7001 token = abcdefg # bind_port:需要服务器开放端口 # bind_udp_port:提供udp协议的客户端使用,也需要服务器开放端口 # token:客户端连接服务端时需要的像密码一样的东西 #客户端A[被连接的机器]: [client_A] type=stcp sk=12345678 local_ip=blogs.johngene.cn local_port=3389 # type选择stcp # sk:连接A需要的秘钥 # local_ip:A机器的本地地址 # local_port:A机器的连接端口 #客户端B[连接A的机器]: [client_A_visitor] type=stcp role=visitor server_name=client_A sk=12345678 bind_ip=blogs.johngene.cn bind_port=789 # type选择stcp # role:角色visitor # server_name:A机器配置的名称client_A # sk:和A机器配置的sk保持一致 # bind_ip:B机器的本地地址 # bind_port:B机器随意一个不被占用的端口#服务端:[common] bind_port = 7000 bind_udp_port = 7001 token = abcdefg # bind_port:需要服务器开放端口 # bind_udp_port:提供udp协议的客户端使用,也需要服务器开放端口 # token:客户端连接服务端时需要的像密码一样的东西 #客户端A[被连接的机器]: [client_A] type=stcp sk=12345678 local_ip=blogs.johngene.cn local_port=3389 # type选择stcp # sk:连接A需要的秘钥 # local_ip:A机器的本地地址 # local_port:A机器的连接端口 #客户端B[连接A的机器]: [client_A_visitor] type=stcp role=visitor server_name=client_A sk=12345678 bind_ip=blogs.johngene.cn bind_port=789 # type选择stcp # role:角色visitor # server_name:A机器配置的名称client_A # sk:和A机器配置的sk保持一致 # bind_ip:B机器的本地地址 # bind_port:B机器随意一个不被占用的端口
最后B机器连接A机器需要在mstsc里面输入:localhost:789,或者127.0.0.1:789
如果要A和B相互连接,就得举一反三了,A里面配置client_B_visitor,B里面提供被A连接的接口client_B。
同样的,如果希望B机器对外公开,可以同时使用stcp协议和tcp协议,即:谁提供stcp接口谁就可以被stcp的visitor访问(注意秘钥相同),谁提供tcp接口谁就会被公开,任何电脑的远程输入ip地址和端口号就都可以访问。
Linux配置FRPC客户端
不安全的配置:
1、将下载的frp_0.31.1_linux_amd64.tar.gz解压出来,把里面的frpc和frpc.ini复制出来上传到Centos。
2、修改配置文件
[common] server_addr = 1.2.3.4 server_port = 1234 #tcp客户端可以和stcp客户端同时使用 [ssh] type = tcp local_ip = blogs.johngene.cn local_port = 22 remote_port = 8080[common] server_addr = 1.2.3.4 server_port = 1234 #tcp客户端可以和stcp客户端同时使用 [ssh] type = tcp local_ip = blogs.johngene.cn local_port = 22 remote_port = 8080[common] server_addr = 1.2.3.4 server_port = 1234 #tcp客户端可以和stcp客户端同时使用 [ssh] type = tcp local_ip = blogs.johngene.cn local_port = 22 remote_port = 8080
然后注意开放对应的1234和8080端口
3、利用ssh工具直接连接1.2.3.4:8080即可
安全的配置:
参考上面stcp握手方式!
自定义开启脚本与开机自启
1.编写脚本:
vi start-frpc.sh
#!/bin/bash nohup /opt/frpc/frpc -c /opt/frpc/frpc.ini &#!/bin/bash nohup /opt/frpc/frpc -c /opt/frpc/frpc.ini &#!/bin/bash nohup /opt/frpc/frpc -c /opt/frpc/frpc.ini &
2.编写service文件
cd /lib/systemd/system
vi frpc.service
[Unit] Description=xmr-staK After=network.target [Service] Type=forking ExecStart=/opt/frpc/start-frpc.sh PrivateTmp=true [Install] WantedBy=multi-user.target[Unit] Description=xmr-staK After=network.target [Service] Type=forking ExecStart=/opt/frpc/start-frpc.sh PrivateTmp=true [Install] WantedBy=multi-user.target[Unit] Description=xmr-staK After=network.target [Service] Type=forking ExecStart=/opt/frpc/start-frpc.sh PrivateTmp=true [Install] WantedBy=multi-user.target
Description:描述服务
After:描述服务类别
[Service]服务运行参数的设置
Type=forking是后台运行的形式
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:[Service]的启动、重启、停止命令全部要求使用绝对路径
[Install]运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3
3.手工启动&开机自动启动服务
systemctl start frpc 启动 systemctl restart frpc 重启 systemctl stop frpc 停止 systemctl enable frpc 开机自启systemctl start frpc 启动 systemctl restart frpc 重启 systemctl stop frpc 停止 systemctl enable frpc 开机自启systemctl start frpc 启动 systemctl restart frpc 重启 systemctl stop frpc 停止 systemctl enable frpc 开机自启
原文链接:https://blog.csdn.net/JohnGene/article/details/122410584