frp做远程连接+ssh+http+https
1. 什么是frp
FRP (Fast Reverse Proxy) 是一个可用于内网穿透的高性能的反向代理应用,支持 TCP , UDP , HTTP , HTTPS 协议。
下载:https://github.com/fatedier/frp/releases
配置文档:https://github.com/fatedier/frp#example-usage
一般来说frps指代frp server,即服务端,frpc指代frp client,即客户端,但是在搜索的时候感觉一般都直接使用frps代指frp的整个软件了。
2. frp的使用
2.1 准备
如果要使用frps的tcp,需要一台具备公网ip的服务器;
如果要使用frps的http和https,需要一台具备域名的服务器。
2.2 电脑远程连接
本来远程连接都是用的是向日葵和teamviewer,但是前者的免费版画面质量没有那么好,后者一不小心就被判定商用或者是试用到期,之前的那些刷新id的办法也没得用,加上课题组租了一个20M带宽的服务器,索性就使用frp做代理。
众所周知,windows远程连接的端口是3389,所以只需要用服务器转发信息到本地机器的3389端口即可,需要做的配置很简单,用记事本打开服务端的frps.ini,简单配置如下:
[common]
bind_port = 7000
token = ABCabc123!
接下来要在云服务器的安全组中打开一个端口,我打开的是23333端口,之后打开本地端的frpc.ini,简单配置如下:
[common]
server_addr = 8.8.8.8 # 服务端机器的公网ip,这里需要自己配置
server_port = 7000 # 服务端机器监听frp的端口,默认是7000
token = ABCabc123! # 服务器端与本地端机器的验证信息,要保持一致[libcomputer]
type = tcp # 转发方式为tcp
local_ip = 127.0.0.1 # 本地端机器的ip,这里可以直接使用127.0.0.1
local_port = 3389 # 本地端机器需要被代理的端口,也就是远程连接的端口
remote_port = 23333 # 服务端机器的转发端口,也就是在服务器安全组中开放的端口23333
之后打开服务端的start.bat,再打开本地端的start.bat,这样代理就做好了,需要用其他机器远程访问本地机器的话,只需要在远程连接端口中输入:8.8.8.8:23333,那么访问的端口实际上就被转发为本地端的3389了。
2.3 ssh代理
ssh代理也就是映射到linux机器的22端口,这里首先需要下载适配linux的软件,版本需要和服务端的一致,比如我这里使用的都是0.30版本的。
服务端的frps.ini配置不需要做什么改动,还是如下:
[common]
bind_port = 7000
token = ABCabc123!
同样的,客户端的改动基本和windows的差不多,展示windows的是3389的远程连接,linux的是22的ssh连接:
[common]
server_addr = 8.8.8.8
server_port = 7000
token = ABCabc123![ssh]
type = tcp # 配置协议还是tcp
local_ip = 127.0.0.1 # 本地端机器的ip,直接使用127.0.0.1即可
local_port = 22 # ssh连接端口
remote_port = 6000 # 服务端机器的转发端口,需要在安全组中开启该端口
之后服务端打开start.bat,本地端就在frp软件的根目录,使用命令:
nohup ./frpc -c ./frpc.ini >/dev/null 2>&1 &
在后台打开frp服务即可。如果想要杀死进程的话只要找到进程端口kill掉就好了,如下:
ps -aux|grep frp| grep -v grep # 找到frp的端口号
kill -9 [端口号] # 杀死进程
这里参考了:
https://blog.csdn.net/weixin_34244102/article/details/88677915
但是在这里出现了一个问题,就是整个连接有时候会断开连接,之前使用windows对windows的远程连接的时候就没有这个问题,根据我的观察应该是远程的机器的frp窗口休眠导致的,所以我们需要把frp做成一个后台的服务,让他常驻在服务端windows的进程之中。这里参考了这篇文章:
http://vulsee.com/archives/vulsee_2019/0424_7453.html
也就是使用nssm软件,将frp做成服务。
下载地址:http://nssm.cc/download
需要使用命令行配置nssm,一直cd到安装目录,使用命令:
nssm.exe install frp
我这里直接借了图来了:
我的start.bat是这样写的:
@echo off
set retime=60
:start
frps.exe -c frps.ini
echo Error
echo --------------------------------------------
echo 连节点或登入失败-即将在%retime%秒后重新连
echo --------------------------------------------
timeout /t %retime%
goto start
其实核心就是这一行:
frps.exe -c frps.ini
同时为了防止万一,我还把在linux本地端的frpc服务加入到了系统进程中,参考了这篇文章:
https://www.icode9.com/content-4-858536.html
具体做法是使用命令:
vim /lib/systemd/system/frpc.service
配置如下:
[Unit]Description=frpc serviceAfter=network.target syslog.targetWants=network.target[Service]Type=simple#启动服务的命令(此处写你的frp的实际安装目录)ExecStart=/usr/share/frp/frpc -c /usr/share/frp/frpc.ini[Install]WantedBy=multi-user.target
启动命令为:
systemctl daemon-reload # 重新load一遍service
systemctl start frpc # 启动frpc服务
这样就不会有休眠导致的连接不稳定了。如果修改了配置文件需要重启的话,只需要使用命令:
systemctl restart frpc # 重新启动frpc服务
2.4 http代理
由于网页服务器放在了一台centos的机器上,所以这里的http代理的本地端就是使用linux命令操作了,服务端仍然是windows机器。
首先还是服务端配置,打开frps.ini,配置如下:
[common]
bind_port = 7000
vhost_http_port = 6001 # 需要配置的代理端口,也就是之后要在其他机器访问的端口
token = ABCabc123![web01]
type=http # 代理方式为http
custom_domains = example.com # 已经映射到该机器上的公网域名
我看有些教程没有把[web01]下面的配置加载服务端里面,结果我这样做了之后却打不开了,所以推荐还是加上吧。
之后是本地端linux机器的配置,这里先要下载适配linux的frp客户端,保证和服务端的版本一致,打开frpc.ini,配置如下:
[common]
server_addr = 8.8.8.8
server_port = 7000
token = ABCabc123![ssh] # 这是之前的ssh配置,可以与http并列存在,如果不需要可以删除
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000[git]
type= http # 使用http协议
local_ip = 127.0.0.1 # 本地端的ip
local_port = 800 # 本地端需要代理的端口
custom_domains = frp.example.com # 之后要访问的域名,需要是服务端配置域名的子域名
配置完成只有开启服务端和本地端的软件即可。如果之前配置了ssh的连接,那么这里就可以直接使用systemctl start frpc即可。
2.5 nginx做https代理
之前搜了一些frp做https的配置,看了这三篇:
https://cloud.tencent.com/developer/article/1581948
https://www.cnblogs.com/shook/p/12790532.html
https://segmentfault.com/q/1010000020421674
本来配置也不麻烦,但是我照着做搞了一下午,最后不知道哪里出错,总是搞不成功,所以索性直接使用nginx了,毕竟是打交道的老熟人了。
首先需要给域名申请ssl证书,我这里是阿里云的域名,所以也在阿里云上申请了免费的证书,审核的下发都很快,基本上是申请,申请完成,配置域名,创建证书,之后就直接签发了,这里感谢digicert。在下载证书的时候会给出对应服务器类型的证书,有Tomcat、Apache、Nginx以及IIS等,我这里直接下载了nginx的证书,下载之后会有两个文件,分别是:
xxxxxx_frp.example.com.key
xxxxxx_frp.example.com.pem
将他们放在nginx的conf文件夹中,打开nginx.conf,配置如下:
server {listen 443 ssl;server_name frp.example.com; #填写绑定证书的域名#ssl on;ssl_certificate xxxxx_frp.example.com.pem; #证书在conf文件同级;ssl_certificate_key xxxxx_frp.example.com.key;ssl_session_timeout 5m;ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置ssl_prefer_server_ciphers on;location / {proxy_redirect off;proxy_set_header Host $host;proxy_set_header X-Real-Ip $remote_addr;proxy_set_header X-Forwarded-For $remote_addr;proxy_pass http://127.0.0.1:6001;}}
这里参考了:
https://blog.csdn.net/qq247300948/article/details/82113958
之后打开nginx即可,在nginx的根目录,命令如下:
start nginx # 启动
nginx.exe -s stop # 中断
nginx.exe -s quit # 有序停止,推荐使用
nginx.exe -s reload # 重新加载配置,比如当你更改了nginx.conf文件之后
nginx -v # 查看版本
3. 总结
我这里是做完之后才写的,保证了每一项都是可以正常运行的。
但是毕竟不是边做边写的,可能会出现一些纰漏,当做一种记录,供大家参考了。
frp做远程连接+ssh+http+https相关推荐
- 使用内网穿透frp做远程桌面连接
索引 安装服务端 以windows为服务端安装 以CentOS为服务端安装 安装客户端 开始连接远程 登录控制台 CentOS服务端设置开机自启动 Windows客户端/服务端设置开机自启 参考文章: ...
- 第五十四篇 Linux相关——远程连接SSH
No.1. SSH(Secure Shell)安全外壳协议 建立在应用层基础上的安全协议 可靠,专为远程登录会话和其他网络服务提供安全性的协议 有效防止远程管理过程中的信息泄漏问题 SSH客户端适用于 ...
- mac 无法打开22端口 无法远程连接ssh 的解决办法
mac 无法远程连接 原因是22端口没有打开 尝试通过命令行打开22端口 依然失败!! 解决办法:手动设置 ①打开系统偏好设置-共享 ②勾选远程登录并添加用户 现在再试一下远程ssh ,已经可以成功连 ...
- JAVA远程连接ssh异步,SSH-2实现java连接远程服务器并执行脚本命令
参考文档: maven jar包:https://mvnrepository.com/artifact/ch.ethz.ganymed/ganymed-ssh2 Ganymed SSH2 API文档 ...
- linux远程连接ssh服务和http的深入介绍
1.实现免密登录 要实现免密登录,我们首先需要创建一对密钥,然后将公共密钥上传到目标服务器的指定文件 1>首先我们需要创建密钥 使用 ssh-keygen 命令可以创建于身份验证的私钥与公钥,默 ...
- java远程连接ssh的实现
在开发或者测试的过程中,经常会登录到远程服务器上进行一系列操作(如目录跳转.脚本执行等):这些动作固定,但是每次重复操作会显得较为繁琐.基于此,开发出一个自动化脚本用以代替手工执行很有必要. 这里给大 ...
- Linux命令之远程连接ssh
概述 ssh命令是openssh套件中的客户端连接工具,可以给予ssh加密协议实现安全的远程登录服务器,实现对服务器的远程管理. 在脚本中该命令有着重要重要,可用于在远程服务器中执行命令. 语法 ss ...
- ssh 连接_怎样解决Linux环境下远程连接ssh速度慢的问题
哈喽各位爱学习的小伙伴们,我最近遇到了一个ssh远程慢的问题,输入ssh后,需要等10+s才会出现密码验证的页面,通过 ssh ip -vv 查看,连接慢速的节点是DNS解析的过程,/etc/reso ...
- Ganymed远程连接SSH
一.依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http:/ ...
最新文章
- android相机截取矩形框,Android自定义照相机实现只拍摄矩形区域(重传)
- python学习第四课
- MySQL:数据库优化,看这篇就够了
- mysql修改时间精度_Mysql时间精度丢失问题
- 设置自增递增零开始_MySQL中如何设置自动递增id主键重新计数从1开始?
- linux图形模式切换用户,Linux的图形模式和文本模式以及单用户模式切换
- 干货 | 126 篇 AI 原创文章精选(ML、DL、资源、教程)
- django 实现电子支付功能
- spring boot 对象拷贝工具(Orika)
- 安卓桌面壁纸_安卓视频桌面哪个好用 让手机桌面更炫酷
- 转换成CSV文件、Word、Excel、PDF等的方法--读取CSV文件的方法
- 病毒conime.exe、mmlucj.exe、severe.exe 查杀办法
- js如何删除数组第一个和最后一个元素
- 电脑蓝屏代码解释与解决方案
- Vim文本编辑器及文本处理常用操作
- iSCSI initiator
- java 23种设计模式详解
- perl各个符号代表的意思
- bzoj5148:[BeiJing2018]Kakuro
- Apache Drill初探