目标:实现在公司用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服务自定义的端口号
注意防火墙和安全组策略要开放自己设置的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
注意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地址都可以
注意防火墙和安全组策略要开启自己设置的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机器随意一个不被占用的端口
最后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
然后注意开放对应的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 &
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
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 开机自启