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相关推荐

  1. 使用内网穿透frp做远程桌面连接

    索引 安装服务端 以windows为服务端安装 以CentOS为服务端安装 安装客户端 开始连接远程 登录控制台 CentOS服务端设置开机自启动 Windows客户端/服务端设置开机自启 参考文章: ...

  2. 第五十四篇 Linux相关——远程连接SSH

    No.1. SSH(Secure Shell)安全外壳协议 建立在应用层基础上的安全协议 可靠,专为远程登录会话和其他网络服务提供安全性的协议 有效防止远程管理过程中的信息泄漏问题 SSH客户端适用于 ...

  3. mac 无法打开22端口 无法远程连接ssh 的解决办法

    mac 无法远程连接 原因是22端口没有打开 尝试通过命令行打开22端口 依然失败!! 解决办法:手动设置 ①打开系统偏好设置-共享 ②勾选远程登录并添加用户 现在再试一下远程ssh ,已经可以成功连 ...

  4. JAVA远程连接ssh异步,SSH-2实现java连接远程服务器并执行脚本命令

    参考文档: maven jar包:https://mvnrepository.com/artifact/ch.ethz.ganymed/ganymed-ssh2 Ganymed SSH2 API文档 ...

  5. linux远程连接ssh服务和http的深入介绍

    1.实现免密登录 要实现免密登录,我们首先需要创建一对密钥,然后将公共密钥上传到目标服务器的指定文件 1>首先我们需要创建密钥 使用 ssh-keygen 命令可以创建于身份验证的私钥与公钥,默 ...

  6. java远程连接ssh的实现

    在开发或者测试的过程中,经常会登录到远程服务器上进行一系列操作(如目录跳转.脚本执行等):这些动作固定,但是每次重复操作会显得较为繁琐.基于此,开发出一个自动化脚本用以代替手工执行很有必要. 这里给大 ...

  7. Linux命令之远程连接ssh

    概述 ssh命令是openssh套件中的客户端连接工具,可以给予ssh加密协议实现安全的远程登录服务器,实现对服务器的远程管理. 在脚本中该命令有着重要重要,可用于在远程服务器中执行命令. 语法 ss ...

  8. ssh 连接_怎样解决Linux环境下远程连接ssh速度慢的问题

    哈喽各位爱学习的小伙伴们,我最近遇到了一个ssh远程慢的问题,输入ssh后,需要等10+s才会出现密码验证的页面,通过 ssh ip -vv 查看,连接慢速的节点是DNS解析的过程,/etc/reso ...

  9. Ganymed远程连接SSH

    一.依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http:/ ...

最新文章

  1. android相机截取矩形框,Android自定义照相机实现只拍摄矩形区域(重传)
  2. python学习第四课
  3. MySQL:数据库优化,看这篇就够了
  4. mysql修改时间精度_Mysql时间精度丢失问题
  5. 设置自增递增零开始_MySQL中如何设置自动递增id主键重新计数从1开始?
  6. linux图形模式切换用户,Linux的图形模式和文本模式以及单用户模式切换
  7. 干货 | 126 篇 AI 原创文章精选(ML、DL、资源、教程)
  8. django 实现电子支付功能
  9. spring boot 对象拷贝工具(Orika)
  10. 安卓桌面壁纸_安卓视频桌面哪个好用 让手机桌面更炫酷
  11. 转换成CSV文件、Word、Excel、PDF等的方法--读取CSV文件的方法
  12. 病毒conime.exe、mmlucj.exe、severe.exe 查杀办法
  13. js如何删除数组第一个和最后一个元素
  14. 电脑蓝屏代码解释与解决方案
  15. Vim文本编辑器及文本处理常用操作
  16. iSCSI initiator
  17. java 23种设计模式详解
  18. perl各个符号代表的意思
  19. bzoj5148:[BeiJing2018]Kakuro
  20. Apache Drill初探

热门文章

  1. 能完全通过声音控制的,除了你家楼道里的灯泡,原来还有这么多产品
  2. 个人部署HRNet随记
  3. ps切片导出时将切片选项选择为“所有用户切片”
  4. U盘启动Openwrt写入硬盘教程
  5. 线程实现日期倒计时和计时
  6. 关于无穷小微积分的教学辅导书
  7. 【hacker101 CTF】Photo Gallery
  8. Github上的andoird开源项目
  9. php 织梦模板 防盗,dedecms织梦模板防盗方法
  10. 阿里云轻量应用服务器无法远程访问