【技术创作101训练营】腾讯云主机上部署 FRP+Teamviewer 穿透内网进行远程运维
【技术创作101训练营】腾讯云主机上部署工具 FRP+Teamviewer 穿透内网进行远程运维
一、frp 介绍
frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议 可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。 通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括:
1、客户端服务端通信支持 TCP、KCP 以及 Websocket 等多种协议。
2、采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间。
3、代理组间的负载均衡。
4、端口复用,多个服务通过同一个服务端端口暴露。
5、多个原生支持的客户端插件(静态文件查看,HTTP、SOCK5 代理等),便于独立使用 frp 客户端完成某些工作。
6、高度扩展性的服务端插件系统,方便结合自身需求进行功能扩展。
7、服务端和客户端 UI 页面。
二、TeamViewer 介绍
TeamViewer 是一个能在任何防火墙和 NAT 代理的后台用于远程控制的应用程序,桌面共享和文件传输的简单且快速的解决方案。 为了连接到另一台计算机,只需要在两台计算机上同时运行 TeamViewer 即可,而不需要进行安装(也可以选择安装,安装后可以设置开机运行)。 该软件第一次启动在两台计算机上自动生成伙伴 ID。只需要输入你的伙伴的 ID 到 TeamViewer,然后就会立即建立起连接
三、需求描述
但由于 Teamviewer 个人版本如果频繁使用的话,会被经常检测到用于商业用途 下面介绍在腾讯云主机上部署工具 FRP+Teamviewer 穿透内网进行远程运维,使用 Teamviewer LAN 呼入方式规避这个问题
四、具体操作步骤
1、下载 frp Linux64 位版本
下载地址:https://github.com/fatedier/frp/releases
2、云主机上安装部署 frps 服务端
为了演示方便,我这边开通按量付费的腾讯云主机一台 公网 IP 119.45.176.177
1)云主机配置 yum 源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo
yum clean all
yum makecache
2)上传 frp Linux64 位版本安装包,解压,重命名
yum install lrzsz -y
cd /opt
rz 上传
tar -zxf frp_0.34.0_linux_amd64.tar.gz
mv frp_0.34.0_linux_amd64 frp
3)vi 编辑 frps.ini
cd /opt/frp/
vi frps.ini
[common]
bind_addr = 0.0.0.0
bind_port = 7111
log_file = /opt/frp/logs/frps.log
log_level = info
log_max_days = 3
authentication_method = token
authenticate_heartbeats = false
authenticate_new_work_conns = false
token = QCloud@FRP2020
4)修改 systemd/frps.service 文件中 ExecStart 脚本段为 frps 以及 frps.ini 实际路径
/opt/frp/frps -c /opt/frp/frps.ini
frps.service 文件拷贝/usr/lib/systemd/system/目录下到并注册为系统服务
cp /opt/frp/systemd/frps.service /usr/lib/systemd/system/frps.service
systemctl enable frps.service
systemctl start frps.service
若有防火墙,需要防火墙放通如下端口
firewall-cmd --zone=public --add-port=7111/tcp --permanent
firewall-cmd --zone=public --add-port=5398/tcp --permanent
firewall-cmd --zone=public --add-port=7122/tcp --permanent
firewall-cmd --reload
5)云主机安全组规则需要放通相关端口
开放5938,7111,7122三个端口
6)排错
问题:/opt/frp/logs/frps.log 不产生日志
原因:由于 frps 服务是 nobody 用户运行的
解决办法:chown -R nobody /opt/frp/logs/ 然后重启 service frps restart 这里日志才会写入到/opt/frp/logs/frps.log 中
3、内网机器安装并配置 frpc 客户端
1)内网机器安装并配置 FRP
tar -zxf frp_0.34.0_linux_amd64.tar.gz
mv frp_0.34.0_linux_amd64 frp
2)修改 frpc.ini
[common]
server_addr = 119.45.176.177
server_port = 7111
log_file = /opt/frp/logs/frpc.log
log_level = info
log_max_days = 3
authentication_method = token
authenticate_heartbeats = false
authenticate_new_work_conns = false
token = QCloud@FRP2020
[192.168.31.80_ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 7122
[192.168.31.51_teamviewer]
type = tcp
local_ip = 192.168.31.51
local_port = 5938
remote_port = 5938
3)、修改 systemd/frpc.service 文件中 ExecStart 脚本段为 frpc 以及 frpc.ini 实际路径
4)、注册开机自启动服务,并启动 frpc 服务
cp /opt/frp/systemd/frpc.service /usr/lib/systemd/system/frpc.service
systemctl enable frpc.service
mkdir /opt/frp/logs
touch /opt/frp/logs/frpc.log
chown -R nobody /opt/frp/logs
systemctl start frpc.service
tail -f /opt/frp/logs/frpc.log
4、内网机器配置 Teamviewer
1)开启 LAN 呼入
2)设置无人值守密码
5、外网 Teamviewer 测试连接
输入公网 IP 地址进行呼入连接
6、外网 SSH 连接测试
使用 119.45.176.177 7122 连接到内网 192.168.31.80 的 SSH
五、总结
1、因为 teamview 只能监听 5938 端口,不能自定义端口,所以 Teamviewer 受控端的 5938 frpc 配置文件 frpc.ini 中 local_port = 5938 与 remote_port = 5938 要一致
2、云主机安全组规则以及 CentOS7 内置 firewalld 要放开相关端口
- ASP.NET MVC路由扩展:链接和URL的生成
- .NET Core采用的全新配置系统[10]: 配置的同步机制是如何实现的?
- C+实现神经网络之贰—前向传播和反向传播
- 通过重建Hosting系统理解HTTP请求在ASP.NET Core管道中的处理流程[上]:采用管道处理请求
- 2017奇葩机器人大盘点:一言不合让你变瞎
- 【机器学习实战】第14章 利用SVD简化数据
- 异步数据存储声明
- 区块链学堂——公有链、私有链、联盟链、侧链、互联链
- 人工智能将让我们更擅长辩论
- ASP.NET路由系统实现原理:HttpHandler的动态映射
- 腾讯、卓健科技、恩泽医疗合力打造“互联网+智慧医院”
- 区块链,不是比特币(1)
- 小程序缓存 删不删你都该知道的事儿
- 32位 or 64位:Apache CloudStack系统VM架构选择
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 基于DelayQueue实现的带失效时间的缓存
- 基于AQS实现的简单的Semaphore
- 图解:基于B+树索引结构,MySQL可以这么优化
- Android开发笔记:Retrofit + OkHttp3 + coroutines + LiveData打造一款网络请求框架
- Nginx安装与使用
- 基于Redis实现分布式锁
- 通过简单代码示例了解七大软件设计原则
- Flink在新浪微博的在线机器学习和实时数据分析
- Nginx + Keepalived使用文档
- 22+ 高频实用的 JavaScript 片段 (2020年)
- 文件上传C:fakepath解决方案
- Asp.net web api部署在某些服务器上老是404
- Spring解决循环依赖的思路
- Spring中Bean的创建流程
- 详解RocketMQ事务消息